3 SUBROUTINE pcgsepreq( NIN, MEM, MEMSIZE, NOUT, ISEED, NTESTS,
4 $ NSKIPPED, NNOCHECK, NPASSED, INFO )
12 INTEGER INFO, MEMSIZE, NIN, NNOCHECK, NOUT, NPASSED,
17 COMPLEX MEM( MEMSIZE )
75 INTEGER BLOCK_CYCLIC_2D, DLEN_, DTYPE_, CTXT_, M_, N_,
76 $ mb_, nb_, rsrc_, csrc_, lld_
77 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
78 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
79 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
81 parameter( five = 5.0e+0 )
82 INTEGER CPLXSZ, INTGSZ
83 parameter( cplxsz = 8, intgsz = 4 )
85 parameter( realsz = 4 )
87 parameter( maxsetsize = 50 )
91 INTEGER CONTEXT, IAM, IBTYPE, IMIDPAD, INITCON,
92 $ ipostpad, iprepad, isizeheevx, isizesubtst,
93 $ isizetst, lda, llrwork, matsize, mattype,
94 $ mycol, myrow, n, nb, nibtypes, nmatsizes,
95 $ nmattypes, nnodes, np, npcol, npconfigs, nprow,
96 $ nq, nuplos, order, pconfig, ptra, ptrb,
97 $ ptrcopya, ptrcopyb, ptrgap, ptriclus, ptrifail,
98 $ ptriwrk, ptrrwork, ptrw, ptrw2, ptrwork, ptrz,
99 $ res, rsizechk, rsizeheevx, rsizeqtq,
100 $ rsizesubtst, rsizetst, sizeheevx, sizemqrleft,
101 $ sizemqrright, sizeqrf, sizesubtst, sizetms,
107 INTEGER DESCA( DLEN_ ), MATSIZES( MAXSETSIZE ),
108 $ mattypes( maxsetsize ), nbs( maxsetsize ),
109 $ npcols( maxsetsize ), nprows( maxsetsize )
113 INTEGER ICEIL, NUMROC
114 EXTERNAL lsame, iceil, numroc
117 EXTERNAL blacs_abort, blacs_get, blacs_gridexit,
118 $ blacs_gridinfo, blacs_gridinit, blacs_pinfo,
126 IF( block_cyclic_2d*csrc_*ctxt_*dlen_*dtype_*lld_*mb_*m_*nb_*n_*
129 CALL blacs_pinfo( iam, nnodes )
130 CALL blacs_get( -1, 0, initcon )
131 CALL blacs_gridinit( initcon,
'R', 1, nnodes )
133 CALL pssepinfo( initcon, iam, nin, nout, maxsetsize, nmatsizes,
134 $ matsizes, nuplos, uplos, npconfigs, nprows,
135 $ npcols, nbs, nmattypes, mattypes, 22, subtests,
136 $ thresh, order, abstol, info )
138 CALL blacs_gridexit( initcon )
146 DO 50 matsize = 1, nmatsizes
148 DO 40 pconfig = 1, npconfigs
150 DO 30 mattype = 1, nmattypes
152 DO 20 uplo = 1, nuplos
153 IF( lsame( subtests,
'Y' ) )
THEN
158 DO 10 ibtype = 1, nibtypes
160 n = matsizes( matsize )
163 nprow = nprows( pconfig )
164 npcol = npcols( pconfig )
167 np = numroc( n, nb, 0, 0, nprow )
168 nq = numroc( n, nb, 0, 0, npcol )
169 iprepad =
max( nb, np )
171 ipostpad =
max( nb, nq )
173 lda =
max( np, 1 ) + imidpad
175 CALL blacs_get( -1, 0, context )
176 CALL blacs_gridinit( context,
'R', nprow,
178 CALL blacs_gridinfo( context, nprow, npcol,
180 IF( myrow.GE.0 )
THEN
181 CALL descinit( desca, n, n, nb, nb, 0, 0,
182 $ context, lda, info )
184 $ sizemqrleft, sizemqrright,
186 $ rsizeqtq, rsizechk,
187 $ sizeheevx, rsizeheevx,
188 $ isizeheevx, sizesubtst,
189 $ rsizesubtst, isizesubtst,
194 ptrz = ptra + lda*nq + iprepad + ipostpad
195 ptrcopyb = ptrz + lda*nq + iprepad + ipostpad
196 ptrb = ptrcopyb + lda*nq + iprepad + ipostpad
197 ptrcopya = ptrb + lda*nq + iprepad + ipostpad
198 ptrw = ptrcopya + lda*nq + iprepad + ipostpad
199 ptrw2 = ptrw + iceil(
max( n, 1 )+iprepad+
200 $ ipostpad, cplxsz / realsz )
201 ptrwork = ptrw2 + iceil(
max( n, 1 )+iprepad+
202 $ ipostpad, cplxsz / realsz )
203 ptrgap = ptrwork + sizetst + iprepad +
205 ptrifail = ptrgap + iceil( nprow*npcol+
208 ptriclus = ptrifail +
209 $ iceil( n+iprepad+ipostpad,
211 ptriwrk = ptriclus + iceil( 2*nprow*npcol+
212 $ iprepad+ipostpad, cplxsz / intgsz )
213 ptrrwork = ptriwrk + iceil( isizetst+iprepad+
214 $ ipostpad, cplxsz / intgsz )
215 llrwork = ( memsize - ptrrwork - ipostpad -
216 $ iprepad + 1 )* ( cplxsz / realsz )
218 IF( llrwork.LT.rsizetst )
THEN
219 nskipped = nskipped + 1
222 $ mattypes( mattype ),
223 $ ibtype, subtests, thresh,
230 $ mem( ptrw ), mem( ptrw2 ),
233 $ mem( ptrgap ), iprepad,
234 $ ipostpad, mem( ptrwork ),
235 $ sizetst, mem( ptrrwork ),
236 $ llrwork, mem( ptriwrk ),
237 $ isizetst, nout, res )
240 npassed = npassed + 1
241 ELSE IF( res.EQ.2 )
THEN
242 nnocheck = nnocheck + 1
243 ELSE IF( res.EQ.3 )
THEN
244 nskipped = nskipped + 1
245 WRITE( nout, fmt = * )
246 $
' pCGSEPREQ failed'
247 CALL blacs_abort( context, -1 )
249 CALL blacs_gridexit( context )