59 INTEGER totmem, zplxsz, nin
60 parameter( totmem = 2000000, zplxsz = 16, nin = 11 )
62 parameter( memsiz = totmem / zplxsz )
66 CHARACTER*80 summry, usrinfo
67 INTEGER context, iam, info, isieee, 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' //
185 $
' the matrix A is split into.'
186 WRITE( nout, fmt = 9999 )
187 $
'THRESH : If a residual value is less ' //
188 $
'than THRESH, RESULT is flagged as PASSED.'
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 over 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 to 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
' )
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 signed 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 $ ' --------- --------- -----
' )
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--)
subroutine pzsepreq(nin, mem, memsize, nout, iseed, ntests, nskipped, nnocheck, npassed, info)