3 SUBROUTINE pssepreq( HETERO, NIN, MEM, MEMSIZE, NOUT, ISEED,
4 $ NTESTS, NSKIPPED, NNOCHECK, NPASSED, INFO )
13 INTEGER INFO, MEMSIZE, NIN, NNOCHECK, NOUT, NPASSED,
76 INTEGER BLOCK_CYCLIC_2D, DLEN_, DTYPE_, CTXT_, M_, N_,
77 $ mb_, nb_, rsrc_, csrc_, lld_
78 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
79 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
80 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
81 INTEGER REALSZ, INTGSZ
82 parameter( realsz = 4, intgsz = 4 )
84 parameter( maxsetsize = 50 )
88 INTEGER CONTEXT, IAM, IMIDPAD, INITCON, IPOSTPAD,
89 $ iprepad, isizesubtst, isizesyevx, isizetst,
90 $ lda, llwork, matsize, mattype, mycol, myrow, n,
91 $ nb, nmatsizes, nmattypes, nnodes, np, npcol,
92 $ npconfigs, nprow, nq, nuplos, order, pconfig,
93 $ ptra, ptrcopya, ptrgap, ptriclus, ptrifail,
94 $ ptriwrk, ptrw, ptrw2, ptrwork, ptrz, res,
95 $ sizechk, sizemqrleft, sizemqrright, sizeqrf,
96 $ sizeqtq, sizesubtst, sizesyev, sizesyevx,
97 $ sizetms, sizetst, uplo, sizesyevd, isizesyevd
102 INTEGER DESCA( DLEN_ ), MATSIZES( MAXSETSIZE ),
103 $ mattypes( maxsetsize ), nbs( maxsetsize ),
104 $ npcols( maxsetsize ), nprows( maxsetsize )
107 INTEGER ICEIL, NUMROC
108 EXTERNAL iceil, numroc
111 EXTERNAL blacs_abort, blacs_get, blacs_gridexit,
112 $ blacs_gridinfo, blacs_gridinit, blacs_pinfo,
120 IF( block_cyclic_2d*csrc_*ctxt_*dlen_*dtype_*lld_*mb_*m_*nb_*n_*
123 CALL blacs_pinfo( iam, nnodes )
124 CALL blacs_get( -1, 0, initcon )
125 CALL blacs_gridinit( initcon,
'R', 1, nnodes )
127 CALL pssepinfo( initcon, iam, nin, nout, maxsetsize, nmatsizes,
128 $ matsizes, nuplos, uplos, npconfigs, nprows,
129 $ npcols, nbs, nmattypes, mattypes, 22, subtests,
130 $ thresh, order, abstol, info )
132 CALL blacs_gridexit( initcon )
137 DO 40 matsize = 1, nmatsizes
139 DO 30 pconfig = 1, npconfigs
141 DO 20 mattype = 1, nmattypes
143 DO 10 uplo = 1, nuplos
145 n = matsizes( matsize )
148 nprow = nprows( pconfig )
149 npcol = npcols( pconfig )
152 np = numroc( n, nb, 0, 0, nprow )
153 nq = numroc( n, nb, 0, 0, npcol )
154 iprepad =
max( nb, np )
156 ipostpad =
max( nb, nq )
158 lda =
max( np, 1 ) + imidpad
160 CALL blacs_get( -1, 0, context )
161 CALL blacs_gridinit( context,
'R', nprow, npcol )
162 CALL blacs_gridinfo( context, nprow, npcol, myrow,
165 IF( myrow.GE.0 )
THEN
166 CALL descinit( desca, n, n, nb, nb, 0, 0,
167 $ context, lda, info )
169 $ sizemqrleft, sizemqrright,
170 $ sizeqrf, sizetms, sizeqtq,
171 $ sizechk, sizesyevx,
172 $ isizesyevx, sizesyev,
173 $ sizesyevd, isizesyevd,
174 $ sizesubtst, isizesubtst,
175 $ sizetst, isizetst )
178 ptrz = ptra + lda*nq + iprepad + ipostpad
179 ptrcopya = ptrz + lda*nq + iprepad + ipostpad
180 ptrw = ptrcopya + lda*nq + iprepad + ipostpad
181 ptrw2 = ptrw +
max( n, 1 ) + iprepad + ipostpad
182 ptrgap = ptrw2 +
max( n, 1 ) + iprepad +
184 ptrifail = ptrgap + nprow*npcol + iprepad +
186 ptriclus = ptrifail + iceil( n+iprepad+ipostpad,
188 ptriwrk = ptriclus + iceil( 2*nprow*npcol+
189 $ iprepad+ipostpad, realsz / intgsz )
190 ptrwork = ptriwrk + iceil( isizetst+iprepad+
191 $ ipostpad, realsz / intgsz )
192 llwork = memsize - ptrwork + 1
196 IF( llwork.LT.sizetst )
THEN
197 nskipped = nskipped + 1
199 CALL psseptst( desca, uplos( uplo ), n,
200 $ mattypes( mattype ), subtests,
201 $ thresh, n, abstol, iseed,
202 $ mem( ptra ), mem( ptrcopya ),
203 $ mem( ptrz ), lda, mem( ptrw ),
204 $ mem( ptrw2 ), mem( ptrifail ),
206 $ mem( ptrgap ), iprepad,
207 $ ipostpad, mem( ptrwork ),
208 $ llwork, mem( ptriwrk ),
209 $ isizetst, hetero, nout, res )
212 npassed = npassed + 1
213 ELSE IF( res.EQ.2 )
THEN
214 nnocheck = nnocheck + 1
215 ELSE IF( res.EQ.3 )
THEN
216 nskipped = nskipped + 1
217 WRITE( nout, fmt = * )
' PSSEPREQ failed'
218 CALL blacs_abort( context, -1 )
221 CALL blacs_gridexit( context )