3
4
5
6
7
8
9
10
11
12 IMPLICIT NONE
13
14
15 CHARACTER*( * ) NAME, OPTS
16 INTEGER ICTXT, ISPEC, N1, N2, N3, N4
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
127
128
129
130
131
132
133
134
135 INTEGER I, IC, IZ, NB, NBMIN, NX, NPROW, NPCOL, MYROW,
136 $ MYCOL
137 LOGICAL CNAME, SNAME
138 CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*6
139
140
141 INTRINSIC char, ichar, int,
min, real
142
143
144 INTEGER IEEECK, PIPARMQ, ICEIL
146
147
148
149 IF( ispec.GT.23 ) GO TO 990
150 GO TO ( 10, 10, 10, 80, 90, 100, 110, 120,
151 $ 130, 140, 150, 160, 160, 160, 160, 160,
152 $ 170, 180, 190, 200, 210, 220, 230, 160)ispec
153
154
155
157 RETURN
158
159 10 CONTINUE
160
161
162
164 subnam = name
165 ic = ichar( subnam( 1: 1 ) )
166 iz = ichar( 'Z' )
167 IF( iz.EQ.90 .OR. iz.EQ.122 ) THEN
168
169
170
171 IF( ic.GE.97 .AND. ic.LE.122 ) THEN
172 subnam( 1: 1 ) = char( ic-32 )
173 DO 20 i = 2, 6
174 ic = ichar( subnam( i: i ) )
175 IF( ic.GE.97 .AND. ic.LE.122 )
176 $ subnam( i: i ) = char( ic-32 )
177 20 CONTINUE
178 END IF
179
180 ELSE IF( iz.EQ.233 .OR. iz.EQ.169 ) THEN
181
182
183
184 IF( ( ic.GE.129 .AND. ic.LE.137 ) .OR.
185 $ ( ic.GE.145 .AND. ic.LE.153 ) .OR.
186 $ ( ic.GE.162 .AND. ic.LE.169 ) ) THEN
187 subnam( 1: 1 ) = char( ic+64 )
188 DO 30 i = 2, 6
189 ic = ichar( subnam( i: i ) )
190 IF( ( ic.GE.129 .AND. ic.LE.137 ) .OR.
191 $ ( ic.GE.145 .AND. ic.LE.153 ) .OR.
192 $ ( ic.GE.162 .AND. ic.LE.169 ) )subnam( i:
193 $ i ) = char( ic+64 )
194 30 CONTINUE
195 END IF
196
197 ELSE IF( iz.EQ.218 .OR. iz.EQ.250 ) THEN
198
199
200
201 IF( ic.GE.225 .AND. ic.LE.250 ) THEN
202 subnam( 1: 1 ) = char( ic-32 )
203 DO 40 i = 2, 6
204 ic = ichar( subnam( i: i ) )
205 IF( ic.GE.225 .AND. ic.LE.250 )
206 $ subnam( i: i ) = char( ic-32 )
207 40 CONTINUE
208 END IF
209 END IF
210
211 c1 = subnam( 1: 1 )
212 sname = c1.EQ.'S' .OR. c1.EQ.'D'
213 cname = c1.EQ.'C' .OR. c1.EQ.'Z'
214 IF( .NOT.( cname .OR. sname ) )
215 $ RETURN
216 c2 = subnam( 2: 3 )
217 c3 = subnam( 4: 6 )
218 c4 = c3( 2: 3 )
219
220 GO TO ( 50, 60, 70 )ispec
221
222 50 CONTINUE
223
224
225
226
227
228
229
230 nb = 1
231
232 IF( c2.EQ.'GE' ) THEN
233 IF( c3.EQ.'TRF' ) THEN
234 IF( sname ) THEN
235 nb = 64
236 ELSE
237 nb = 64
238 END IF
239 ELSE IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR.
240 $ c3.EQ.'QLF' ) THEN
241 IF( sname ) THEN
242 nb = 32
243 ELSE
244 nb = 32
245 END IF
246 ELSE IF( c3.EQ.'HRD' ) THEN
247 IF( sname ) THEN
248 nb = 32
249 ELSE
250 nb = 32
251 END IF
252 ELSE IF( c3.EQ.'BRD' ) THEN
253 IF( sname ) THEN
254 nb = 32
255 ELSE
256 nb = 32
257 END IF
258 ELSE IF( c3.EQ.'TRI' ) THEN
259 IF( sname ) THEN
260 nb = 64
261 ELSE
262 nb = 64
263 END IF
264 END IF
265 ELSE IF( c2.EQ.'PO' ) THEN
266 IF( c3.EQ.'TRF' ) THEN
267 IF( sname ) THEN
268 nb = 64
269 ELSE
270 nb = 64
271 END IF
272 END IF
273 ELSE IF( c2.EQ.'SY' ) THEN
274 IF( c3.EQ.'TRF' ) THEN
275 IF( sname ) THEN
276 nb = 64
277 ELSE
278 nb = 64
279 END IF
280 ELSE IF( sname .AND. c3.EQ.'TRD' ) THEN
281 nb = 32
282 ELSE IF( sname .AND. c3.EQ.'GST' ) THEN
283 nb = 64
284 END IF
285 ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
286 IF( c3.EQ.'TRF' ) THEN
287 nb = 64
288 ELSE IF( c3.EQ.'TRD' ) THEN
289 nb = 32
290 ELSE IF( c3.EQ.'GST' ) THEN
291 nb = 64
292 END IF
293 ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
294 IF( c3( 1: 1 ).EQ.'G' ) THEN
295 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
296 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
297 $ THEN
298 nb = 32
299 END IF
300 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
301 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
302 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
303 $ THEN
304 nb = 32
305 END IF
306 END IF
307 ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
308 IF( c3( 1: 1 ).EQ.'G' ) THEN
309 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
310 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
311 $ THEN
312 nb = 32
313 END IF
314 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
315 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
316 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
317 $ THEN
318 nb = 32
319 END IF
320 END IF
321 ELSE IF( c2.EQ.'GB' ) THEN
322 IF( c3.EQ.'TRF' ) THEN
323 IF( sname ) THEN
324 IF( n4.LE.64 ) THEN
325 nb = 1
326 ELSE
327 nb = 32
328 END IF
329 ELSE
330 IF( n4.LE.64 ) THEN
331 nb = 1
332 ELSE
333 nb = 32
334 END IF
335 END IF
336 END IF
337 ELSE IF( c2.EQ.'PB' ) THEN
338 IF( c3.EQ.'TRF' ) THEN
339 IF( sname ) THEN
340 IF( n2.LE.64 ) THEN
341 nb = 1
342 ELSE
343 nb = 32
344 END IF
345 ELSE
346 IF( n2.LE.64 ) THEN
347 nb = 1
348 ELSE
349 nb = 32
350 END IF
351 END IF
352 END IF
353 ELSE IF( c2.EQ.'TR' ) THEN
354 IF( c3.EQ.'TRI' ) THEN
355 IF( sname ) THEN
356 nb = 64
357 ELSE
358 nb = 64
359 END IF
360 END IF
361 ELSE IF( c2.EQ.'LA' ) THEN
362 IF( c3.EQ.'UUM' ) THEN
363 IF( sname ) THEN
364 nb = 64
365 ELSE
366 nb = 64
367 END IF
368 END IF
369 ELSE IF( sname .AND. c2.EQ.'ST' ) THEN
370 IF( c3.EQ.'EBZ' ) THEN
371 nb = 1
372 END IF
373 END IF
375 RETURN
376
377 60 CONTINUE
378
379
380
381 nbmin = 2
382 IF( c2.EQ.'GE' ) THEN
383 IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR. c3.EQ.
384 $ 'QLF' ) THEN
385 IF( sname ) THEN
386 nbmin = 2
387 ELSE
388 nbmin = 2
389 END IF
390 ELSE IF( c3.EQ.'HRD' ) THEN
391 IF( sname ) THEN
392 nbmin = 2
393 ELSE
394 nbmin = 2
395 END IF
396 ELSE IF( c3.EQ.'BRD' ) THEN
397 IF( sname ) THEN
398 nbmin = 2
399 ELSE
400 nbmin = 2
401 END IF
402 ELSE IF( c3.EQ.'TRI' ) THEN
403 IF( sname ) THEN
404 nbmin = 2
405 ELSE
406 nbmin = 2
407 END IF
408 END IF
409 ELSE IF( c2.EQ.'SY' ) THEN
410 IF( c3.EQ.'TRF' ) THEN
411 IF( sname ) THEN
412 nbmin = 8
413 ELSE
414 nbmin = 8
415 END IF
416 ELSE IF( sname .AND. c3.EQ.'TRD' ) THEN
417 nbmin = 2
418 END IF
419 ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
420 IF( c3.EQ.'TRD' ) THEN
421 nbmin = 2
422 END IF
423 ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
424 IF( c3( 1: 1 ).EQ.'G' ) THEN
425 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
426 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
427 $ THEN
428 nbmin = 2
429 END IF
430 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
431 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
432 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
433 $ THEN
434 nbmin = 2
435 END IF
436 END IF
437 ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
438 IF( c3( 1: 1 ).EQ.'G' ) THEN
439 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
440 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
441 $ THEN
442 nbmin = 2
443 END IF
444 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
445 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
446 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
447 $ THEN
448 nbmin = 2
449 END IF
450 END IF
451 END IF
453 RETURN
454
455 70 CONTINUE
456
457
458
459 nx = 0
460 IF( c2.EQ.'GE' ) THEN
461 IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR. c3.EQ.
462 $ 'QLF' ) THEN
463 IF( sname ) THEN
464 nx = 128
465 ELSE
466 nx = 128
467 END IF
468 ELSE IF( c3.EQ.'HRD' ) THEN
469 IF( sname ) THEN
470 nx = 128
471 ELSE
472 nx = 128
473 END IF
474 ELSE IF( c3.EQ.'BRD' ) THEN
475 IF( sname ) THEN
476 nx = 128
477 ELSE
478 nx = 128
479 END IF
480 END IF
481 ELSE IF( c2.EQ.'SY' ) THEN
482 IF( sname .AND. c3.EQ.'TRD' ) THEN
483 nx = 32
484 END IF
485 ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
486 IF( c3.EQ.'TRD' ) THEN
487 nx = 32
488 END IF
489 ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
490 IF( c3( 1: 1 ).EQ.'G' ) THEN
491 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
492 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
493 $ THEN
494 nx = 128
495 END IF
496 END IF
497 ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
498 IF( c3( 1: 1 ).EQ.'G' ) THEN
499 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
500 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
501 $ THEN
502 nx = 128
503 END IF
504 END IF
505 END IF
507 RETURN
508
509 80 CONTINUE
510
511
512
514 RETURN
515
516 90 CONTINUE
517
518
519
521 RETURN
522
523 100 CONTINUE
524
525
526
528 RETURN
529
530 110 CONTINUE
531
532
533
535 RETURN
536
537 120 CONTINUE
538
539
540
542 RETURN
543
544 130 CONTINUE
545
546
547
548
549
551 RETURN
552
553 140 CONTINUE
554
555
556
557
561 END IF
562 RETURN
563
564 150 CONTINUE
565
566
567
568
572 END IF
573 RETURN
574
575 160 CONTINUE
576
577
578
580 RETURN
581
582 170 CONTINUE
583
584
585
586 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
588 RETURN
589
590 180 CONTINUE
591
592
593
595 RETURN
596
597 190 CONTINUE
598
599
600
602 RETURN
603
604 200 CONTINUE
605
606
607
608
609
610
612 RETURN
613
614 210 CONTINUE
615
616
617
618
619
620
622 RETURN
623
624 220 CONTINUE
625
626
627
628
629
631 RETURN
632 230 CONTINUE
633
634
635
636
638 RETURN
639 990 CONTINUE
640
641
642
643
645 RETURN
646
647
648
integer function iceil(inum, idenom)
integer function pilaenvx(ictxt, ispec, name, opts, n1, n2, n3, n4)
integer function piparmq(ictxt, ispec, name, opts, n, ilo, ihi, lworknb)