5
6
7
8
9
10
11
12 INTEGER INFO, MEMSIZE, NIN, NNOCHECK, NOUT, ,
13 $ NSKIPPED, NTESTS
14
15
16 INTEGER ISEED( 4 )
17 DOUBLE PRECISION MEM( MEMSIZE )
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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 )
80 DOUBLE PRECISION FIVE
81 parameter( five = 5.0d+0 )
82 INTEGER DBLESZ, INTGSZ
83 parameter( dblesz = 8, intgsz = 4 )
84 INTEGER MAXSETSIZE
85 parameter( maxsetsize = 50 )
86
87
88 CHARACTER SUBTESTS
89 INTEGER CONTEXT, IAM, IBTYPE, IMIDPAD, INITCON,
90 $ IPOSTPAD, IPREPAD, , ISIZESYEVX,
91 $ ISIZETST, LDA, LLWORK, MATSIZE, MATTYPE, MYCOL,
92 $ MYROW, N, NB, NIBTYPES, NMATSIZES, NMATTYPES,
93 $ NNODES, NP, NPCOL, NPCONFIGS, NPROW, NQ,
94 $ NUPLOS, ORDER, PCONFIG, PTRA, PTRB, PTRCOPYA,
95 $ PTRCOPYB, PTRGAP, PTRICLUS, PTRIFAIL, PTRIWRK,
96 $ PTRW, PTRW2, PTRWORK, , RES, SIZECHK,
97 $ SIZEMQRLEFT, SIZEMQRRIGHT, SIZEQRF, SIZEQTQ,
98 $ SIZESUBTST, SIZESYEVX, SIZETMS, SIZETST, UPLO
99 DOUBLE PRECISION ABSTOL, THRESH
100
101
102 CHARACTER UPLOS( 2 )
103 INTEGER DESCA( DLEN_ ), MATSIZES( MAXSETSIZE ),
104 $ MATTYPES( MAXSETSIZE ), NBS( MAXSETSIZE ),
105 $ NPCOLS( MAXSETSIZE ), NPROWS( MAXSETSIZE )
106
107
108 LOGICAL LSAME
109 INTEGER ICEIL, NUMROC
111
112
116
117
119
120
121
122 IF( block_cyclic_2d*csrc_*ctxt_*dlen_*dtype_*lld_*mb_*m_*nb_*n_*
123 $ rsrc_.LT.0 )RETURN
124
125 CALL blacs_pinfo( iam, nnodes )
126 CALL blacs_get( -1, 0, initcon )
128
129 CALL PDSEPINFO( INITCON, IAM, NIN, NOUT, MAXSETSIZE, NMATSIZES,
130 $ MATSIZES, NUPLOS, UPLOS, NPCONFIGS, NPROWS,
131 $ NPCOLS, NBS, NMATTYPES, MATTYPES, 22, SUBTESTS,
132 $ THRESH, ORDER, ABSTOL, INFO )
133
134 CALL BLACS_GRIDEXIT( INITCON )
135
136.EQ. IF( INFO0 ) THEN
137
138
139
140 THRESH = THRESH*FIVE
141
142 DO 50 MATSIZE = 1, NMATSIZES
143
144 DO 40 PCONFIG = 1, NPCONFIGS
145
146 DO 30 MATTYPE = 1, NMATTYPES
147
148 DO 20 UPLO = 1, NUPLOS
149 IF( LSAME( SUBTESTS, 'y' ) ) THEN
150 NIBTYPES = 3
151 ELSE
152 NIBTYPES = 1
153 END IF
154 DO 10 IBTYPE = 1, NIBTYPES
155
156 N = MATSIZES( MATSIZE )
157 ORDER = N
158
159 NPROW = NPROWS( PCONFIG )
160 NPCOL = NPCOLS( PCONFIG )
161 NB = NBS( PCONFIG )
162
163 NP = NUMROC( N, NB, 0, 0, NPROW )
164 NQ = NUMROC( N, NB, 0, 0, NPCOL )
165 IPREPAD = MAX( NB, NP )
166 IMIDPAD = NB
167 IPOSTPAD = MAX( NB, NQ )
168
169 LDA = MAX( NP, 1 ) + IMIDPAD
170
171 CALL BLACS_GET( -1, 0, CONTEXT )
172 CALL BLACS_GRIDINIT( CONTEXT, 'r', NPROW,
173 $ NPCOL )
174 CALL BLACS_GRIDINFO( CONTEXT, NPROW, NPCOL,
175 $ MYROW, MYCOL )
176.GE. IF( MYROW0 ) THEN
177 CALL DESCINIT( DESCA, N, N, NB, NB, 0, 0,
178 $ CONTEXT, LDA, INFO )
179 CALL PDLASIZEGSEP( DESCA, IPREPAD, IPOSTPAD,
180 $ SIZEMQRLEFT, SIZEMQRRIGHT,
181 $ SIZEQRF, SIZETMS, SIZEQTQ,
182 $ SIZECHK, SIZESYEVX,
183 $ ISIZESYEVX, SIZESUBTST,
184 $ ISIZESUBTST, SIZETST,
185 $ ISIZETST )
186
187 PTRA = 1
188 PTRZ = PTRA + LDA*NQ + IPREPAD + IPOSTPAD
189 PTRCOPYB = PTRZ + LDA*NQ + IPREPAD + IPOSTPAD
190 PTRB = PTRCOPYB + LDA*NQ + IPREPAD + IPOSTPAD
191 PTRCOPYA = PTRB + LDA*NQ + IPREPAD + IPOSTPAD
192 PTRW = PTRCOPYA + LDA*NQ + IPREPAD + IPOSTPAD
193 PTRW2 = PTRW + MAX( N, 1 ) + IPREPAD +
194 $ IPOSTPAD
195 PTRGAP = PTRW2 + MAX( N, 1 ) + IPREPAD +
196 $ IPOSTPAD
197 PTRIFAIL = PTRGAP + NPROW*NPCOL + IPREPAD +
198 $ IPOSTPAD
199 PTRICLUS = PTRIFAIL +
200 $ ICEIL( N+IPREPAD+IPOSTPAD,
201 $ DBLESZ / INTGSZ )
202 PTRIWRK = PTRICLUS + ICEIL( 2*NPROW*NPCOL+
203 $ IPREPAD+IPOSTPAD, DBLESZ / INTGSZ )
204 PTRWORK = PTRIWRK + ICEIL( ISIZETST+IPREPAD+
205 $ IPOSTPAD, DBLESZ / INTGSZ )
206 LLWORK = MEMSIZE - PTRWORK - IPOSTPAD -
207 $ IPREPAD + 1
208 NTESTS = NTESTS + 1
209.LT. IF( LLWORKSIZETST ) THEN
210 NSKIPPED = NSKIPPED + 1
211 ELSE
212 CALL PDGSEPTST( DESCA, UPLOS( UPLO ), N,
213 $ MATTYPES( MATTYPE ),
214 $ IBTYPE, SUBTESTS, THRESH,
215 $ N, ABSTOL, ISEED,
216 $ MEM( PTRA ),
217 $ MEM( PTRCOPYA ),
218 $ MEM( PTRB ),
219 $ MEM( PTRCOPYB ),
220 $ MEM( PTRZ ), LDA,
221 $ MEM( PTRW ), MEM( PTRW2 ),
222 $ MEM( PTRIFAIL ),
223 $ MEM( PTRICLUS ),
224 $ MEM( PTRGAP ), IPREPAD,
225 $ IPOSTPAD, MEM( PTRWORK ),
226 $ LLWORK, MEM( PTRIWRK ),
227 $ ISIZETST, NOUT, RES )
228
229.EQ. IF( RES0 ) THEN
230 NPASSED = NPASSED + 1
231.EQ. ELSE IF( RES2 ) THEN
232 NNOCHECK = NNOCHECK + 1
233.EQ. ELSE IF( RES3 ) THEN
234 NSKIPPED = NSKIPPED + 1
235 WRITE( NOUT, FMT = * )
237 CALL BLACS_ABORT( CONTEXT, -1 )
238 END IF
239 CALL BLACS_GRIDEXIT( CONTEXT )
240 END IF
241 END IF
242 10 CONTINUE
243 20 CONTINUE
244 30 CONTINUE
245 40 CONTINUE
246 50 CONTINUE
247 END IF
248
249
250 RETURN
251
252
253
logical function lsame(ca, cb)
LSAME
integer function iceil(inum, idenom)
subroutine blacs_gridinit(cntxt, c, nprow, npcol)
subroutine descinit(desc, m, n, mb, nb, irsrc, icsrc, ictxt, lld, info)
subroutine blacs_gridexit(cntxt)
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
integer function numroc(n, nb, iproc, isrcproc, nprocs)
subroutine pdgsepreq(nin, mem, memsize, nout, iseed, ntests, nskipped, nnocheck, npassed, info)
subroutine pdgseptst(desca, uplo, n, mattype, ibtype, subtests, thresh, order, abstol, iseed, a, copya, b, copyb, z, lda, win, wnew, ifail, iclustr, gap, iprepad, ipostpad, work, lwork, iwork, liwork, nout, info)
subroutine pdlasizegsep(desca, iprepad, ipostpad, sizemqrleft, sizemqrright, sizeqrf, sizetms, sizeqtq, sizechk, sizesyevx, isizesyevx, sizesubtst, isizesubtst, sizetst, isizetst)
subroutine pdsepinfo(context, iam, nin, nout, maxsetsize, nmatsizes, matsizes, nuplos, uplos, npconfigs, nprows, npcols, nbs, nmattypes, mattypes, maxtype, subtests, thresh, order, abstol, info)