3
4
5
6
7
8
9
10 CHARACTER*( * ) NAME, OPTS
11 INTEGER ICTXT, ISPEC, N1, N2, N3, N4
12
13
14
15
16
17
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
127 $ LLD_, MB_, M_, NB_, N_, RSRC_
128 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
129 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
130 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
131
132
133 LOGICAL CNAME, GLOBAL, SNAME, TIME
134 CHARACTER C1
135 CHARACTER*2 C2, C4
136 CHARACTER*3 C3
137 CHARACTER*8 SUBNAM
138 INTEGER I, IC, IDUMM, IZ, MSZ, NB
139
140
141 INTRINSIC char, ichar
142
143
144
145
146 INTEGER ANB, BALANCED, BCKBLOCK, GSTBLOCK, INTERLEAVE,
147 $ LLTBLOCK, MINSZ, PNB, TIMING, TRSBLOCK,
148 $ TWOGEMMS
149
150
151 EXTERNAL igamx2d
152
153
154 COMMON / blocksizes / gstblock, lltblock, bckblock,
155 $ trsblock
156 COMMON / minsize / minsz
157 COMMON / pjlaenvtiming / timing
158 COMMON / tailoredopts / pnb, anb, interleave,
159 $ balanced, twogemms
160
161
162
163 time = ( timing.EQ.1 )
164
165
166 GO TO ( 10, 10, 10, 10, 10 )ispec
167
168
169
171 RETURN
172
173 10 CONTINUE
174
175
176
178 subnam = name
179 ic = ichar( subnam( 1: 1 ) )
180 iz = ichar( 'Z' )
181 IF( iz.EQ.100 .OR. iz.EQ.122 ) THEN
182
183
184
185 IF( ic.GE.97 .AND. ic.LE.122 ) THEN
186 subnam( 1: 1 ) = char( ic-32 )
187 DO 20 i = 2, 6
188 ic = ichar( subnam( i: i ) )
189 IF( ic.GE.97 .AND. ic.LE.122 )
190 $ subnam( i: i ) = char( ic-32 )
191 20 CONTINUE
192 END IF
193
194 ELSE IF( iz.EQ.233 .OR. iz.EQ.169 ) THEN
195
196
197
198 IF( ( ic.GE.129 .AND. ic.LE.137 ) .OR.
199 $ ( ic.GE.145 .AND. ic.LE.153 ) .OR.
200 $ ( ic.GE.162 .AND. ic.LE.169 ) ) THEN
201 subnam( 1: 1 ) = char( ic+64 )
202 DO 30 i = 2, 6
203 ic = ichar( subnam( i: i ) )
204 IF( ( ic.GE.129 .AND. ic.LE.137 ) .OR.
205 $ ( ic.GE.145 .AND. ic.LE.153 ) .OR.
206 $ ( ic.GE.162 .AND. ic.LE.169 ) )subnam( i:
207 $ i ) = char( ic+64 )
208 30 CONTINUE
209 END IF
210
211 ELSE IF( iz.EQ.218 .OR. iz.EQ.250 ) THEN
212
213
214
215 IF( ic.GE.225 .AND. ic.LE.250 ) THEN
216 subnam( 1: 1 ) = char( ic-32 )
217 DO 40 i = 2, 6
218 ic = ichar( subnam( i: i ) )
219 IF( ic.GE.225 .AND. ic.LE.250 )
220 $ subnam( i: i ) = char( ic-32 )
221 40 CONTINUE
222 END IF
223 END IF
224
225 c1 = subnam( 2: 2 )
226 sname = c1.EQ.'S' .OR. c1.EQ.'D'
227 cname = c1.EQ.'C' .OR. c1.EQ.'Z'
228 IF( .NOT.( cname .OR. sname ) )
229 $ RETURN
230 c2 = subnam( 3: 4 )
231 c3 = subnam( 5: 7 )
232 c4 = c3( 2: 3 )
233
234
235
236 IF( ( n2+n3+n4 )*0.NE.0 ) THEN
237 c4 = opts
238 c3 = c4
239 END IF
240
241 GO TO ( 50, 60, 70, 80, 90 )ispec
242
243 50 CONTINUE
244
245
246
247
248
249
250
251
252 nb = 1
253
254 IF( c2.EQ.'SY' .OR. c2.EQ.'HE' ) THEN
255 IF( c3.EQ.'LLT' ) THEN
256 IF( sname ) THEN
257 nb = 64
258 ELSE
259 nb = 64
260 END IF
261 IF( time ) THEN
262 lltblock = nb
263 ELSE
264 nb = lltblock
265 IF( nb.LE.0 ) THEN
266 print *, 'xpjlaenv.f ERROR common variable LLTBLOCK',
267 $ ' may be unitialized'
268
269 stop
270 END IF
271 END IF
272 ELSE IF( c3.EQ.'TTR' ) THEN
273 IF( sname ) THEN
274 nb = 1
275 ELSE
276 nb = 1
277 END IF
278 ELSE IF( c3.EQ.'GST' ) THEN
279 IF( sname ) THEN
280 nb = 32
281 ELSE
282 nb = 32
283 END IF
284 IF( time ) THEN
285 gstblock = nb
286 ELSE
287 nb = gstblock
288 IF( nb.LE.0 ) THEN
289 print *, 'xpjlaenv.f ERROR common variable GSTBLOCK',
290 $ ' may be unitialized'
291
292 stop
293 END IF
294 END IF
295 ELSE IF( c3.EQ.'BCK' ) THEN
296 IF( sname ) THEN
297 nb = 32
298 ELSE
299 nb = 32
300 END IF
301 IF( time ) THEN
302 bckblock = nb
303 ELSE
304 nb = bckblock
305 IF( nb.LE.0 ) THEN
306 print *, 'xpjlaenv.f ERROR common variable BCKBLOCK',
307 $ ' may be unitialized'
308
309 stop
310 END IF
311 END IF
312 ELSE IF( c3.EQ.'TRS' ) THEN
313 IF( sname ) THEN
314 nb = 64
315 ELSE
316 nb = 64
317 END IF
318 IF( time ) THEN
319 trsblock = nb
320 ELSE
321 nb = trsblock
322 IF( nb.LE.0 ) THEN
323 print *, 'xpjlaenv.f ERROR common variable TRSBLOCK',
324 $ ' may be unitialized'
325
326 stop
327 END IF
328 END IF
329 END IF
330 END IF
331
332
334 global = .true.
335 GO TO 100
336
337 60 CONTINUE
338
339
340
341
342 nb = 16
343 IF( c2.EQ.'SY' .OR. c2.EQ.'HE' ) THEN
344 IF( c3.EQ.'TTR' ) THEN
345 IF( sname ) THEN
346 nb = 32
347 ELSE
348 nb = 32
349 END IF
350 END IF
351 END IF
352 IF( time ) THEN
353 pnb = nb
354 ELSE
355 nb = pnb
356 IF( nb.LE.0 ) THEN
357 print *, 'xpjlaenv.f ERROR common variable PNB',
358 $ ' may be unitialized'
359
360 stop
361 END IF
362 END IF
364 global = .false.
365 GO TO 100
366
367
368 70 CONTINUE
369
370
371
372
373 nb = 16
374 nb = 1
375 IF( c2.EQ.'SY' .OR. c2.EQ.'HE' ) THEN
376 IF( c3.EQ.'TTR' ) THEN
377 IF( sname ) THEN
378 nb = 16
379 ELSE
380 nb = 16
381 END IF
382 END IF
383 END IF
384 IF( time ) THEN
385 anb = nb
386 ELSE
387 nb = anb
388 IF( nb.LE.0 ) THEN
389 print *, 'xpjlaenv.f ERROR common variable ANB',
390 $ ' may be unitialized'
391
392 stop
393 END IF
394 END IF
396 global = .true.
397 GO TO 100
398
399 80 CONTINUE
400
401
402
403
405 IF( c2.EQ.'SY' .OR. c2.EQ.'HE' ) THEN
406 IF( c3.EQ.'TTR' ) THEN
407
408 IF( n1.EQ.1 ) THEN
410 IF( time ) THEN
412 ELSE
414 END IF
415 END IF
416
417
418 IF( n1.EQ.2 ) THEN
420 IF( time ) THEN
422 ELSE
424 END IF
425 END IF
426
427 IF( n1.EQ.3 ) THEN
429 IF( time ) THEN
431 ELSE
433 END IF
434 END IF
435 END IF
436 END IF
437 global = .true.
438 GO TO 100
439
440 90 CONTINUE
441
442
443
444
445 msz = 0
446 IF( c2.EQ.'SY' .OR. c2.EQ.'HE' ) THEN
447 IF( c3.EQ.'TTR' ) THEN
448 IF( sname ) THEN
449 msz = 100
450 ELSE
451 msz = 100
452 END IF
453 END IF
454 END IF
455 IF( time ) THEN
456 minsz = msz
457 ELSE
458 msz = minsz
459 END IF
461 global = .true.
462 GO TO 100
463
464 100 CONTINUE
465
466 IF( global ) THEN
467 idumm = 0
468 CALL igamx2d( ictxt,
'All',
' ', 1, 1,
pjlaenv, 1, idumm,
469 $ idumm, -1, -1, idumm )
470 END IF
471
472
473
474 RETURN
475
476
477
integer function pjlaenv(ictxt, ispec, name, opts, n1, n2, n3, n4)