1 SUBROUTINE pcseprreq( HETERO, NIN, MEM, MEMSIZE, NOUT, ISEED,
2 $ NTESTS, NSKIPPED, NNOCHECK, NPASSED, INFO )
13 INTEGER INFO, MEMSIZE, NIN, NNOCHECK, NOUT, NPASSED,
18 COMPLEX MEM( MEMSIZE )
73 parameter( dlen_ = 9 )
74 INTEGER REALSZ, INTGSZ
75 parameter( realsz = 4, intgsz = 4 )
77 parameter( kmpxsz = 8 )
79 parameter( maxsetsize = 50 )
83 INTEGER CONTEXT, IAM, IMIDPAD, INITCON, IPOSTPAD,
84 $ iprepad, isizesubtst, isizeevr, isizetst,
85 $ lda, llwork, matsize, mattype, mycol, myrow, n,
86 $ nb, nmatsizes, nmattypes, nnodes, np, npcol,
87 $ npconfigs, nprow, nq, nuplos, order, pconfig,
88 $ ptra, ptrcopya, ptrgap, ptriclus, ptrifail,
89 $ ptriwrk, ptrw, ptrw2, ptrwork, ptrz, res,
90 $ sizechk, sizemqrleft, sizemqrright, sizeqrf,
91 $ sizeqtq, sizesubtst, sizeevr,
92 $ sizetms, sizetst, uplo
93 INTEGER PTRRWORK, RSIZEEVR, RSIZESUBTST, RSIZETST
99 INTEGER DESCA( DLEN_ ), MATSIZES( MAXSETSIZE ),
100 $ mattypes( maxsetsize ), nbs( maxsetsize ),
101 $ npcols( maxsetsize ), nprows( maxsetsize )
104 INTEGER ICEIL, NUMROC
105 EXTERNAL iceil, numroc
108 EXTERNAL blacs_abort, blacs_get, blacs_gridexit,
109 $ blacs_gridinfo, blacs_gridinit, blacs_pinfo,
117 CALL blacs_pinfo( iam, nnodes )
118 CALL blacs_get( -1, 0, initcon )
119 CALL blacs_gridinit( initcon,
'R', 1, nnodes )
121 CALL pssepinfo( initcon, iam, nin, nout, maxsetsize, nmatsizes,
122 $ matsizes, nuplos, uplos, npconfigs, nprows,
123 $ npcols, nbs, nmattypes, mattypes, 22, subtests,
124 $ thresh, order, abstol, info )
126 CALL blacs_gridexit( initcon )
130 DO 40 matsize = 1, nmatsizes
132 DO 30 pconfig = 1, npconfigs
134 DO 20 mattype = 1, nmattypes
136 DO 10 uplo = 1, nuplos
138 n = matsizes( matsize )
141 nprow = nprows( pconfig )
142 npcol = npcols( pconfig )
145 np = numroc( n, nb, 0, 0, nprow )
146 nq = numroc( n, nb, 0, 0, npcol )
147 iprepad =
max( nb, np )
149 ipostpad =
max( nb, nq )
151 lda =
max( np, 1 ) + imidpad
153 CALL blacs_get( -1, 0, context )
154 CALL blacs_gridinit( context,
'R', nprow, npcol )
155 CALL blacs_gridinfo( context, nprow, npcol, myrow,
158 IF( myrow.GE.0 )
THEN
159 CALL descinit( desca, n, n, nb, nb, 0, 0,
160 $ context, lda, info )
162 $ sizemqrleft, sizemqrright,
163 $ sizeqrf, sizetms, sizeqtq,
164 $ sizechk, sizeevr, rsizeevr,
165 $ isizeevr, sizesubtst,
166 $ rsizesubtst, isizesubtst,
167 $ sizetst, rsizetst, isizetst )
170 ptrz = ptra + lda*nq + iprepad + ipostpad
171 ptrcopya = ptrz + lda*nq + iprepad + ipostpad
172 ptrw = ptrcopya + lda*nq + iprepad + ipostpad
173 ptrw2 = ptrw + iceil(
max( n, 1 )+iprepad+
174 $ ipostpad, kmpxsz / realsz )
175 ptrwork = ptrw2 + iceil(
max( n, 1 )+iprepad+
176 $ ipostpad, kmpxsz / realsz )
177 ptrgap = ptrwork + sizetst + iprepad + ipostpad
178 ptrifail = ptrgap + iceil( nprow*npcol+iprepad+
179 $ ipostpad, kmpxsz / realsz )
180 ptriclus = ptrifail + iceil( n+iprepad+ipostpad,
182 ptriwrk = ptriclus + iceil( 2*nprow*npcol+
183 $ iprepad+ipostpad, kmpxsz / intgsz )
184 ptrrwork = ptriwrk + iceil( isizetst+iprepad+
185 $ ipostpad, kmpxsz / intgsz )
186 llwork = ( memsize-ptrrwork+1 )*kmpxsz / realsz
189 IF( llwork.LT.rsizetst )
THEN
190 nskipped = nskipped + 1
193 $ mattypes( mattype ), subtests,
194 $ thresh, n, abstol, iseed,
195 $ mem( ptra ), mem( ptrcopya ),
196 $ mem( ptrz ), lda, mem( ptrw ),
197 $ mem( ptrw2 ), mem( ptrifail ),
199 $ mem( ptrgap ), iprepad,
200 $ ipostpad, mem( ptrwork ),
201 $ sizetst, mem( ptrrwork ),
202 $ llwork, mem( ptriwrk ),
203 $ isizetst, hetero, nout, res )
206 npassed = npassed + 1
207 ELSE IF( res.EQ.2 )
THEN
208 nnocheck = nnocheck + 1
209 ELSE IF( res.EQ.3 )
THEN
210 nskipped = nskipped + 1
211 WRITE( nout, fmt = * )
' PCSEPRREQ failed'
212 CALL blacs_abort( context, -1 )
215 CALL blacs_gridexit( context )