60 parameter( totmem = 2000000, zplxsz = 16, nin = 11 )
62 parameter( memsiz = totmem / zplxsz )
67INTEGER context, iam, info, , maxnodes, nnocheck,
68 $ nout, npassed, nprocs, nskipped, ntests
73 COMPLEX*16 mem( memsiz )
83 $ igamn2d, pdlachkieee, pdlasnbt,
pzsepreq
89 CALL blacs_pinfo( iam, nprocs )
96 OPEN( unit = nin, file =
'SEP.dat', status =
'OLD' )
97 READ( nin, fmt = * )summry
102 READ( nin, fmt = 9999 )usrinfo
106 READ( nin, fmt = * )summry
107 READ( nin, fmt = * )nout
108 IF( nout.NE.0 .AND. nout.NE.6 )
109 $
OPEN( nout, file = summry, status =
'UNKNOWN' )
110 READ( nin, fmt = * )maxnodes
111 READ( nin, fmt = * )hetero
114 IF( nprocs.LT.1 )
THEN
115 CALL blacs_setup( iam, maxnodes )
119 CALL blacs_get( -1, 0, context )
122 CALL pdlasnbt( isieee )
124 CALL igamn2d( context,
'a',
' ', 1, 1, isieee, 1, 1, 1, -1, -1,
127 IF( ( isieee.NE.0 ) )
THEN
129 WRITE( nout, fmt = 9998 )
130 WRITE( nout, fmt = 9997 )
131 WRITE( nout, fmt = 9996 )
132 WRITE( nout, fmt = 9995 )
133 WRITE( nout, fmt = 9994 )
134 WRITE( nout, fmt = 9993 )
135 WRITE( nout, fmt = 9992 )
136 WRITE( nout, fmt = 9991 )
137 WRITE( nout, fmt = 9990 )
140 CALL pdlachkieee( isieee,
dlamch(
'O' ),
dlamch(
'U' ) )
142 CALL igamn2d( context,
'a',
' ', 1, 1, isieee, 1, 1, 1, -1, -1,
145 IF( isieee.EQ.0 )
THEN
147 WRITE( nout, fmt = 9989 )
148 WRITE( nout, fmt = 9988 )
149 WRITE( nout, fmt = 9987 )
155 WRITE( nout, fmt = 9986 )
160 WRITE( nout, fmt = 9999 )
161 $
'SCALAPACK Hermitian Eigendecomposition routines.'
162 WRITE( nout, fmt = 9999 )usrinfo
163 WRITE( nout, fmt = 9999 )'
'
164 WRITE( NOUT, FMT = 9999 )'running tests of
the parallel
' //
165 $ 'hermitian eigenvalue routine:
pzheevx.
'
166 WRITE( NOUT, FMT = 9999 )'the following scaled residual
' //
167 $ 'checks will be computed:
'
168 WRITE( NOUT, FMT = 9999 )' ||aq - ql||
' //
169 $ '/ ((abstol + ||a|| * eps) * n)
'
170 WRITE( NOUT, FMT = 9999 )' ||q^t*q - i||
' // '/ (n * eps)
'
171 WRITE( NOUT, FMT = 9999 )
172 WRITE( NOUT, FMT = 9999 )'an explanation of
the ' //
173 $ 'input/output parameters follows:
'
174 WRITE( NOUT, FMT = 9999 )'result : passed; or
' //
175 $ 'an indication of which eigen request test failed
'
176 WRITE( NOUT, FMT = 9999 )
177 $ 'n :
the number of rows and columns
' //
179 WRITE( NOUT, FMT = 9999 )
180 $ 'p :
the number of process rows.
'
181 WRITE( NOUT, FMT = 9999 )
182 $ 'q :
the number of process columns.
'
183 WRITE( NOUT, FMT = 9999 )
184 $ 'nb :
the size of
the square blocks
' //
186 WRITE( NOUT, FMT = 9999 )
187 $ 'thresh :
If a residual
value is less
' //
188 $ 'than thresh, result is flagged
'
189 WRITE( NOUT, FMT = 9999 )
190 $ ' :
the qtq
norm is allowed to exceed thresh
' //
191 $ ' for those eigenvectors
'
192 WRITE( NOUT, FMT = 9999 )' : which could not be
' //
193 $ 'reorthogonalized
for lack of workspace.
'
194 WRITE( NOUT, FMT = 9999 )
195 $ 'typ : matrix
type (see
pzseptst.f).
'
196 WRITE( NOUT, FMT = 9999 )'sub : subtests
' //
198 WRITE( NOUT, FMT = 9999 )'chk : ||aq - ql||
' //
199 $ '/ ((abstol + ||a|| * eps) * n)
'
200 WRITE( NOUT, FMT = 9999 )'qtq : ||q^t*q - i||/ (n * eps)
'
201 WRITE( NOUT, FMT = 9999 )
202 $ ' : when
the adjusted qtq exceeds thresh
',
203 $ ' the adjusted qtq
norm is printed
'
204 WRITE( NOUT, FMT = 9999 )
205 $ ' : otherwise
the true qtq
norm is printed
'
206 WRITE( NOUT, FMT = 9999 )
207 $ 'if nt>1, chk and qtq are
the max all
' //
208 $ 'eigen request tests
'
209 WRITE( NOUT, FMT = 9999 )' '
218 WRITE( NOUT, FMT = 9979 )
219 WRITE( NOUT, FMT = 9978 )
229 CALL PZSEPREQ( NIN, MEM, MEMSIZ, NOUT, ISEED, NTESTS, NSKIPPED,
230 $ NNOCHECK, NPASSED, INFO )
235 WRITE( NOUT, FMT = 9985 )NTESTS
236 WRITE( NOUT, FMT = 9984 )NPASSED
237 WRITE( NOUT, FMT = 9983 )NNOCHECK
238 WRITE( NOUT, FMT = 9982 )NSKIPPED
239 WRITE( NOUT, FMT = 9981 )NTESTS - NPASSED - NSKIPPED -
241 WRITE( NOUT, FMT = * )
242 WRITE( NOUT, FMT = * )
243 WRITE( NOUT, FMT = 9980 )
255.NE..AND..NE.
IF( NOUT6 NOUT0 )
259 CALL BLACS_GRIDEXIT( CONTEXT )
266 9998 FORMAT( ' i am about check to make sure that overflow
' )
267 9997 FORMAT( ' is handled in
the ieee default manner.
if this
' )
268 9996 FORMAT( ' is
the last output you see, you should assume
' )
269 9995 FORMAT( ' that overflow caused a floating point exception.
' )
270 9994 FORMAT( ' in that case, we recommend that you add -dno_ieee
' )
271 9993 FORMAT( ' to
the cdefs line in slmake.inc.
' )
272 9992 FORMAT( ' alternatively, you could set cdefs in slmake.inc
' )
273 9991 FORMAT( ' to enable
the default ieee behaviour, however, this
' )
274 9990 FORMAT( ' may result in good or very bad performance.
' )
275 9989 FORMAT( ' either signed zeroes or infinities
' )
276 9988 FORMAT( ' work incorrectly or your system. change your
' )
277 9987 FORMAT( ' slmake.inc as suggested above.
' )
279 9986 FORMAT( ' your system appears to handle ieee overflow.
' )
281 9985 FORMAT( 'finished
', I6, ' tests, with
the following results:
' )
282 9984 FORMAT( I5, ' tests completed and passed residual checks.
' )
283 9983 FORMAT( I5, ' tests completed without checking.
' )
284 9982 FORMAT( I5, ' tests skipped
for lack of memory.
' )
285 9981 FORMAT( I5, ' tests completed and failed.
' )
286 9980 FORMAT( 'end of tests.
' )
287 9979 FORMAT( ' n nb p q typ sub wall cpu
',
289 9978 FORMAT( ' ----- --- --- --- --- --- -------- --------
',
290 $ ' --------- --------- -----
' )
if(complex_arithmetic) id
end diagonal values have been computed in the(sparse) matrix id.SOL
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
double precision function dlamch(cmach)
DLAMCH
subroutine blacs_gridinit(cntxt, c, nprow, npcol)
subroutine blacs_gridexit(cntxt)
for(i8=*sizetab-1;i8 >=0;i8--)
void split(mapping_t *, PORD_INT, PORD_INT, PORD_INT, PORD_INT *, PORD_INT *, FLOAT *, PORD_INT)
subroutine pzheevx(jobz, range, uplo, n, a, ia, ja, desca, vl, vu, il, iu, abstol, m, nz, w, orfac, z, iz, jz, descz, work, lwork, rwork, lrwork, iwork, liwork, ifail, iclustr, gap, info)
subroutine pzsepreq(nin, mem, memsize, nout, iseed, ntests, nskipped, nnocheck, npassed, info)
subroutine pzseptst(desca, uplo, n, mattype, subtests, thresh, order, abstol, iseed, a, copya, z, lda, win, wnew, ifail, iclustr, gap, iprepad, ipostpad, work, lwork, rwork, lrwork, iwork, liwork, nout, info)