00001 PROGRAM CBLAT3
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 INTEGER NIN
00055 PARAMETER ( NIN = 5 )
00056 INTEGER NSUBS
00057 PARAMETER ( NSUBS = 9 )
00058 COMPLEX ZERO, ONE
00059 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
00060 REAL RZERO, RHALF, RONE
00061 PARAMETER ( RZERO = 0.0, RHALF = 0.5, RONE = 1.0 )
00062 INTEGER NMAX
00063 PARAMETER ( NMAX = 65 )
00064 INTEGER NIDMAX, NALMAX, NBEMAX
00065 PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 )
00066
00067 REAL EPS, ERR, THRESH
00068 INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NOUT, NTRA
00069 LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
00070 $ TSTERR
00071 CHARACTER*1 TRANSA, TRANSB
00072 CHARACTER*6 SNAMET
00073 CHARACTER*32 SNAPS, SUMMRY
00074
00075 COMPLEX AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ),
00076 $ ALF( NALMAX ), AS( NMAX*NMAX ),
00077 $ BB( NMAX*NMAX ), BET( NBEMAX ),
00078 $ BS( NMAX*NMAX ), C( NMAX, NMAX ),
00079 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
00080 $ W( 2*NMAX )
00081 REAL G( NMAX )
00082 INTEGER IDIM( NIDMAX )
00083 LOGICAL LTEST( NSUBS )
00084 CHARACTER*6 SNAMES( NSUBS )
00085
00086 REAL SDIFF
00087 LOGICAL LCE
00088 EXTERNAL SDIFF, LCE
00089
00090 EXTERNAL CCHK1, CCHK2, CCHK3, CCHK4, CCHK5, CCHKE, CMMCH
00091
00092 INTRINSIC MAX, MIN
00093
00094 INTEGER INFOT, NOUTC
00095 LOGICAL LERR, OK
00096 CHARACTER*6 SRNAMT
00097
00098 COMMON /INFOC/INFOT, NOUTC, OK, LERR
00099 COMMON /SRNAMC/SRNAMT
00100
00101 DATA SNAMES/'CGEMM ', 'CHEMM ', 'CSYMM ', 'CTRMM ',
00102 $ 'CTRSM ', 'CHERK ', 'CSYRK ', 'CHER2K',
00103 $ 'CSYR2K'/
00104
00105
00106
00107
00108 READ( NIN, FMT = * )SUMMRY
00109 READ( NIN, FMT = * )NOUT
00110 OPEN( NOUT, FILE = SUMMRY )
00111 NOUTC = NOUT
00112
00113
00114
00115 READ( NIN, FMT = * )SNAPS
00116 READ( NIN, FMT = * )NTRA
00117 TRACE = NTRA.GE.0
00118 IF( TRACE )THEN
00119 OPEN( NTRA, FILE = SNAPS )
00120 END IF
00121
00122 READ( NIN, FMT = * )REWI
00123 REWI = REWI.AND.TRACE
00124
00125 READ( NIN, FMT = * )SFATAL
00126
00127 READ( NIN, FMT = * )TSTERR
00128
00129 READ( NIN, FMT = * )THRESH
00130
00131
00132
00133
00134 READ( NIN, FMT = * )NIDIM
00135 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
00136 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
00137 GO TO 220
00138 END IF
00139 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
00140 DO 10 I = 1, NIDIM
00141 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
00142 WRITE( NOUT, FMT = 9996 )NMAX
00143 GO TO 220
00144 END IF
00145 10 CONTINUE
00146
00147 READ( NIN, FMT = * )NALF
00148 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
00149 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
00150 GO TO 220
00151 END IF
00152 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
00153
00154 READ( NIN, FMT = * )NBET
00155 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
00156 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
00157 GO TO 220
00158 END IF
00159 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
00160
00161
00162
00163 WRITE( NOUT, FMT = 9995 )
00164 WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM )
00165 WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF )
00166 WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET )
00167 IF( .NOT.TSTERR )THEN
00168 WRITE( NOUT, FMT = * )
00169 WRITE( NOUT, FMT = 9984 )
00170 END IF
00171 WRITE( NOUT, FMT = * )
00172 WRITE( NOUT, FMT = 9999 )THRESH
00173 WRITE( NOUT, FMT = * )
00174
00175
00176
00177
00178 DO 20 I = 1, NSUBS
00179 LTEST( I ) = .FALSE.
00180 20 CONTINUE
00181 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT
00182 DO 40 I = 1, NSUBS
00183 IF( SNAMET.EQ.SNAMES( I ) )
00184 $ GO TO 50
00185 40 CONTINUE
00186 WRITE( NOUT, FMT = 9990 )SNAMET
00187 STOP
00188 50 LTEST( I ) = LTESTT
00189 GO TO 30
00190
00191 60 CONTINUE
00192 CLOSE ( NIN )
00193
00194
00195
00196 EPS = RONE
00197 70 CONTINUE
00198 IF( SDIFF( RONE + EPS, RONE ).EQ.RZERO )
00199 $ GO TO 80
00200 EPS = RHALF*EPS
00201 GO TO 70
00202 80 CONTINUE
00203 EPS = EPS + EPS
00204 WRITE( NOUT, FMT = 9998 )EPS
00205
00206
00207
00208 N = MIN( 32, NMAX )
00209 DO 100 J = 1, N
00210 DO 90 I = 1, N
00211 AB( I, J ) = MAX( I - J + 1, 0 )
00212 90 CONTINUE
00213 AB( J, NMAX + 1 ) = J
00214 AB( 1, NMAX + J ) = J
00215 C( J, 1 ) = ZERO
00216 100 CONTINUE
00217 DO 110 J = 1, N
00218 CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
00219 110 CONTINUE
00220
00221
00222 TRANSA = 'N'
00223 TRANSB = 'N'
00224 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
00225 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
00226 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
00227 SAME = LCE( CC, CT, N )
00228 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
00229 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
00230 STOP
00231 END IF
00232 TRANSB = 'C'
00233 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
00234 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
00235 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
00236 SAME = LCE( CC, CT, N )
00237 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
00238 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
00239 STOP
00240 END IF
00241 DO 120 J = 1, N
00242 AB( J, NMAX + 1 ) = N - J + 1
00243 AB( 1, NMAX + J ) = N - J + 1
00244 120 CONTINUE
00245 DO 130 J = 1, N
00246 CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 -
00247 $ ( ( J + 1 )*J*( J - 1 ) )/3
00248 130 CONTINUE
00249 TRANSA = 'C'
00250 TRANSB = 'N'
00251 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
00252 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
00253 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
00254 SAME = LCE( CC, CT, N )
00255 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
00256 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
00257 STOP
00258 END IF
00259 TRANSB = 'C'
00260 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
00261 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
00262 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
00263 SAME = LCE( CC, CT, N )
00264 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
00265 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
00266 STOP
00267 END IF
00268
00269
00270
00271 DO 200 ISNUM = 1, NSUBS
00272 WRITE( NOUT, FMT = * )
00273 IF( .NOT.LTEST( ISNUM ) )THEN
00274
00275 WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM )
00276 ELSE
00277 SRNAMT = SNAMES( ISNUM )
00278
00279 IF( TSTERR )THEN
00280 CALL CCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
00281 WRITE( NOUT, FMT = * )
00282 END IF
00283
00284 INFOT = 0
00285 OK = .TRUE.
00286 FATAL = .FALSE.
00287 GO TO ( 140, 150, 150, 160, 160, 170, 170,
00288 $ 180, 180 )ISNUM
00289
00290 140 CALL CCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
00291 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
00292 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
00293 $ CC, CS, CT, G )
00294 GO TO 190
00295
00296 150 CALL CCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
00297 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
00298 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
00299 $ CC, CS, CT, G )
00300 GO TO 190
00301
00302 160 CALL CCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
00303 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB,
00304 $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C )
00305 GO TO 190
00306
00307 170 CALL CCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
00308 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
00309 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
00310 $ CC, CS, CT, G )
00311 GO TO 190
00312
00313 180 CALL CCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
00314 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
00315 $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
00316 GO TO 190
00317
00318 190 IF( FATAL.AND.SFATAL )
00319 $ GO TO 210
00320 END IF
00321 200 CONTINUE
00322 WRITE( NOUT, FMT = 9986 )
00323 GO TO 230
00324
00325 210 CONTINUE
00326 WRITE( NOUT, FMT = 9985 )
00327 GO TO 230
00328
00329 220 CONTINUE
00330 WRITE( NOUT, FMT = 9991 )
00331
00332 230 CONTINUE
00333 IF( TRACE )
00334 $ CLOSE ( NTRA )
00335 CLOSE ( NOUT )
00336 STOP
00337
00338 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
00339 $ 'S THAN', F8.2 )
00340 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 )
00341 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
00342 $ 'THAN ', I2 )
00343 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
00344 9995 FORMAT( ' TESTS OF THE COMPLEX LEVEL 3 BLAS', //' THE F',
00345 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
00346 9994 FORMAT( ' FOR N ', 9I6 )
00347 9993 FORMAT( ' FOR ALPHA ',
00348 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
00349 9992 FORMAT( ' FOR BETA ',
00350 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
00351 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
00352 $ /' ******* TESTS ABANDONED *******' )
00353 9990 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T',
00354 $ 'ESTS ABANDONED *******' )
00355 9989 FORMAT( ' ERROR IN CMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
00356 $ 'ATED WRONGLY.', /' CMMCH WAS CALLED WITH TRANSA = ', A1,
00357 $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ',
00358 $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ',
00359 $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ',
00360 $ '*******' )
00361 9988 FORMAT( A6, L2 )
00362 9987 FORMAT( 1X, A6, ' WAS NOT TESTED' )
00363 9986 FORMAT( /' END OF TESTS' )
00364 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
00365 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
00366
00367
00368
00369 END
00370 SUBROUTINE CCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
00371 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
00372 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385 COMPLEX ZERO
00386 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
00387 REAL RZERO
00388 PARAMETER ( RZERO = 0.0 )
00389
00390 REAL EPS, THRESH
00391 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
00392 LOGICAL FATAL, REWI, TRACE
00393 CHARACTER*6 SNAME
00394
00395 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
00396 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
00397 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
00398 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
00399 $ CS( NMAX*NMAX ), CT( NMAX )
00400 REAL G( NMAX )
00401 INTEGER IDIM( NIDIM )
00402
00403 COMPLEX ALPHA, ALS, BETA, BLS
00404 REAL ERR, ERRMAX
00405 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
00406 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
00407 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
00408 LOGICAL NULL, RESET, SAME, TRANA, TRANB
00409 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
00410 CHARACTER*3 ICH
00411
00412 LOGICAL ISAME( 13 )
00413
00414 LOGICAL LCE, LCERES
00415 EXTERNAL LCE, LCERES
00416
00417 EXTERNAL CGEMM, CMAKE, CMMCH
00418
00419 INTRINSIC MAX
00420
00421 INTEGER INFOT, NOUTC
00422 LOGICAL LERR, OK
00423
00424 COMMON /INFOC/INFOT, NOUTC, OK, LERR
00425
00426 DATA ICH/'NTC'/
00427
00428
00429 NARGS = 13
00430 NC = 0
00431 RESET = .TRUE.
00432 ERRMAX = RZERO
00433
00434 DO 110 IM = 1, NIDIM
00435 M = IDIM( IM )
00436
00437 DO 100 IN = 1, NIDIM
00438 N = IDIM( IN )
00439
00440 LDC = M
00441 IF( LDC.LT.NMAX )
00442 $ LDC = LDC + 1
00443
00444 IF( LDC.GT.NMAX )
00445 $ GO TO 100
00446 LCC = LDC*N
00447 NULL = N.LE.0.OR.M.LE.0
00448
00449 DO 90 IK = 1, NIDIM
00450 K = IDIM( IK )
00451
00452 DO 80 ICA = 1, 3
00453 TRANSA = ICH( ICA: ICA )
00454 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
00455
00456 IF( TRANA )THEN
00457 MA = K
00458 NA = M
00459 ELSE
00460 MA = M
00461 NA = K
00462 END IF
00463
00464 LDA = MA
00465 IF( LDA.LT.NMAX )
00466 $ LDA = LDA + 1
00467
00468 IF( LDA.GT.NMAX )
00469 $ GO TO 80
00470 LAA = LDA*NA
00471
00472
00473
00474 CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
00475 $ RESET, ZERO )
00476
00477 DO 70 ICB = 1, 3
00478 TRANSB = ICH( ICB: ICB )
00479 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
00480
00481 IF( TRANB )THEN
00482 MB = N
00483 NB = K
00484 ELSE
00485 MB = K
00486 NB = N
00487 END IF
00488
00489 LDB = MB
00490 IF( LDB.LT.NMAX )
00491 $ LDB = LDB + 1
00492
00493 IF( LDB.GT.NMAX )
00494 $ GO TO 70
00495 LBB = LDB*NB
00496
00497
00498
00499 CALL CMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB,
00500 $ LDB, RESET, ZERO )
00501
00502 DO 60 IA = 1, NALF
00503 ALPHA = ALF( IA )
00504
00505 DO 50 IB = 1, NBET
00506 BETA = BET( IB )
00507
00508
00509
00510 CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX,
00511 $ CC, LDC, RESET, ZERO )
00512
00513 NC = NC + 1
00514
00515
00516
00517
00518 TRANAS = TRANSA
00519 TRANBS = TRANSB
00520 MS = M
00521 NS = N
00522 KS = K
00523 ALS = ALPHA
00524 DO 10 I = 1, LAA
00525 AS( I ) = AA( I )
00526 10 CONTINUE
00527 LDAS = LDA
00528 DO 20 I = 1, LBB
00529 BS( I ) = BB( I )
00530 20 CONTINUE
00531 LDBS = LDB
00532 BLS = BETA
00533 DO 30 I = 1, LCC
00534 CS( I ) = CC( I )
00535 30 CONTINUE
00536 LDCS = LDC
00537
00538
00539
00540 IF( TRACE )
00541 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
00542 $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB,
00543 $ BETA, LDC
00544 IF( REWI )
00545 $ REWIND NTRA
00546 CALL CGEMM( TRANSA, TRANSB, M, N, K, ALPHA,
00547 $ AA, LDA, BB, LDB, BETA, CC, LDC )
00548
00549
00550
00551 IF( .NOT.OK )THEN
00552 WRITE( NOUT, FMT = 9994 )
00553 FATAL = .TRUE.
00554 GO TO 120
00555 END IF
00556
00557
00558
00559 ISAME( 1 ) = TRANSA.EQ.TRANAS
00560 ISAME( 2 ) = TRANSB.EQ.TRANBS
00561 ISAME( 3 ) = MS.EQ.M
00562 ISAME( 4 ) = NS.EQ.N
00563 ISAME( 5 ) = KS.EQ.K
00564 ISAME( 6 ) = ALS.EQ.ALPHA
00565 ISAME( 7 ) = LCE( AS, AA, LAA )
00566 ISAME( 8 ) = LDAS.EQ.LDA
00567 ISAME( 9 ) = LCE( BS, BB, LBB )
00568 ISAME( 10 ) = LDBS.EQ.LDB
00569 ISAME( 11 ) = BLS.EQ.BETA
00570 IF( NULL )THEN
00571 ISAME( 12 ) = LCE( CS, CC, LCC )
00572 ELSE
00573 ISAME( 12 ) = LCERES( 'GE', ' ', M, N, CS,
00574 $ CC, LDC )
00575 END IF
00576 ISAME( 13 ) = LDCS.EQ.LDC
00577
00578
00579
00580
00581 SAME = .TRUE.
00582 DO 40 I = 1, NARGS
00583 SAME = SAME.AND.ISAME( I )
00584 IF( .NOT.ISAME( I ) )
00585 $ WRITE( NOUT, FMT = 9998 )I
00586 40 CONTINUE
00587 IF( .NOT.SAME )THEN
00588 FATAL = .TRUE.
00589 GO TO 120
00590 END IF
00591
00592 IF( .NOT.NULL )THEN
00593
00594
00595
00596 CALL CMMCH( TRANSA, TRANSB, M, N, K,
00597 $ ALPHA, A, NMAX, B, NMAX, BETA,
00598 $ C, NMAX, CT, G, CC, LDC, EPS,
00599 $ ERR, FATAL, NOUT, .TRUE. )
00600 ERRMAX = MAX( ERRMAX, ERR )
00601
00602
00603 IF( FATAL )
00604 $ GO TO 120
00605 END IF
00606
00607 50 CONTINUE
00608
00609 60 CONTINUE
00610
00611 70 CONTINUE
00612
00613 80 CONTINUE
00614
00615 90 CONTINUE
00616
00617 100 CONTINUE
00618
00619 110 CONTINUE
00620
00621
00622
00623 IF( ERRMAX.LT.THRESH )THEN
00624 WRITE( NOUT, FMT = 9999 )SNAME, NC
00625 ELSE
00626 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
00627 END IF
00628 GO TO 130
00629
00630 120 CONTINUE
00631 WRITE( NOUT, FMT = 9996 )SNAME
00632 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K,
00633 $ ALPHA, LDA, LDB, BETA, LDC
00634
00635 130 CONTINUE
00636 RETURN
00637
00638 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
00639 $ 'S)' )
00640 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
00641 $ 'ANGED INCORRECTLY *******' )
00642 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
00643 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
00644 $ ' - SUSPECT *******' )
00645 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
00646 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',''', A1, ''',',
00647 $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3,
00648 $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' )
00649 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
00650 $ '******' )
00651
00652
00653
00654 END
00655 SUBROUTINE CCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
00656 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
00657 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670 COMPLEX ZERO
00671 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
00672 REAL RZERO
00673 PARAMETER ( RZERO = 0.0 )
00674
00675 REAL EPS, THRESH
00676 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
00677 LOGICAL FATAL, REWI, TRACE
00678 CHARACTER*6 SNAME
00679
00680 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
00681 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
00682 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
00683 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
00684 $ CS( NMAX*NMAX ), CT( NMAX )
00685 REAL G( NMAX )
00686 INTEGER IDIM( NIDIM )
00687
00688 COMPLEX ALPHA, ALS, BETA, BLS
00689 REAL ERR, ERRMAX
00690 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
00691 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
00692 $ NARGS, NC, NS
00693 LOGICAL CONJ, LEFT, NULL, RESET, SAME
00694 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
00695 CHARACTER*2 ICHS, ICHU
00696
00697 LOGICAL ISAME( 13 )
00698
00699 LOGICAL LCE, LCERES
00700 EXTERNAL LCE, LCERES
00701
00702 EXTERNAL CHEMM, CMAKE, CMMCH, CSYMM
00703
00704 INTRINSIC MAX
00705
00706 INTEGER INFOT, NOUTC
00707 LOGICAL LERR, OK
00708
00709 COMMON /INFOC/INFOT, NOUTC, OK, LERR
00710
00711 DATA ICHS/'LR'/, ICHU/'UL'/
00712
00713 CONJ = SNAME( 2: 3 ).EQ.'HE'
00714
00715 NARGS = 12
00716 NC = 0
00717 RESET = .TRUE.
00718 ERRMAX = RZERO
00719
00720 DO 100 IM = 1, NIDIM
00721 M = IDIM( IM )
00722
00723 DO 90 IN = 1, NIDIM
00724 N = IDIM( IN )
00725
00726 LDC = M
00727 IF( LDC.LT.NMAX )
00728 $ LDC = LDC + 1
00729
00730 IF( LDC.GT.NMAX )
00731 $ GO TO 90
00732 LCC = LDC*N
00733 NULL = N.LE.0.OR.M.LE.0
00734
00735 LDB = M
00736 IF( LDB.LT.NMAX )
00737 $ LDB = LDB + 1
00738
00739 IF( LDB.GT.NMAX )
00740 $ GO TO 90
00741 LBB = LDB*N
00742
00743
00744
00745 CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
00746 $ ZERO )
00747
00748 DO 80 ICS = 1, 2
00749 SIDE = ICHS( ICS: ICS )
00750 LEFT = SIDE.EQ.'L'
00751
00752 IF( LEFT )THEN
00753 NA = M
00754 ELSE
00755 NA = N
00756 END IF
00757
00758 LDA = NA
00759 IF( LDA.LT.NMAX )
00760 $ LDA = LDA + 1
00761
00762 IF( LDA.GT.NMAX )
00763 $ GO TO 80
00764 LAA = LDA*NA
00765
00766 DO 70 ICU = 1, 2
00767 UPLO = ICHU( ICU: ICU )
00768
00769
00770
00771 CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', NA, NA, A, NMAX,
00772 $ AA, LDA, RESET, ZERO )
00773
00774 DO 60 IA = 1, NALF
00775 ALPHA = ALF( IA )
00776
00777 DO 50 IB = 1, NBET
00778 BETA = BET( IB )
00779
00780
00781
00782 CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC,
00783 $ LDC, RESET, ZERO )
00784
00785 NC = NC + 1
00786
00787
00788
00789
00790 SIDES = SIDE
00791 UPLOS = UPLO
00792 MS = M
00793 NS = N
00794 ALS = ALPHA
00795 DO 10 I = 1, LAA
00796 AS( I ) = AA( I )
00797 10 CONTINUE
00798 LDAS = LDA
00799 DO 20 I = 1, LBB
00800 BS( I ) = BB( I )
00801 20 CONTINUE
00802 LDBS = LDB
00803 BLS = BETA
00804 DO 30 I = 1, LCC
00805 CS( I ) = CC( I )
00806 30 CONTINUE
00807 LDCS = LDC
00808
00809
00810
00811 IF( TRACE )
00812 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE,
00813 $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC
00814 IF( REWI )
00815 $ REWIND NTRA
00816 IF( CONJ )THEN
00817 CALL CHEMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
00818 $ BB, LDB, BETA, CC, LDC )
00819 ELSE
00820 CALL CSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
00821 $ BB, LDB, BETA, CC, LDC )
00822 END IF
00823
00824
00825
00826 IF( .NOT.OK )THEN
00827 WRITE( NOUT, FMT = 9994 )
00828 FATAL = .TRUE.
00829 GO TO 110
00830 END IF
00831
00832
00833
00834 ISAME( 1 ) = SIDES.EQ.SIDE
00835 ISAME( 2 ) = UPLOS.EQ.UPLO
00836 ISAME( 3 ) = MS.EQ.M
00837 ISAME( 4 ) = NS.EQ.N
00838 ISAME( 5 ) = ALS.EQ.ALPHA
00839 ISAME( 6 ) = LCE( AS, AA, LAA )
00840 ISAME( 7 ) = LDAS.EQ.LDA
00841 ISAME( 8 ) = LCE( BS, BB, LBB )
00842 ISAME( 9 ) = LDBS.EQ.LDB
00843 ISAME( 10 ) = BLS.EQ.BETA
00844 IF( NULL )THEN
00845 ISAME( 11 ) = LCE( CS, CC, LCC )
00846 ELSE
00847 ISAME( 11 ) = LCERES( 'GE', ' ', M, N, CS,
00848 $ CC, LDC )
00849 END IF
00850 ISAME( 12 ) = LDCS.EQ.LDC
00851
00852
00853
00854
00855 SAME = .TRUE.
00856 DO 40 I = 1, NARGS
00857 SAME = SAME.AND.ISAME( I )
00858 IF( .NOT.ISAME( I ) )
00859 $ WRITE( NOUT, FMT = 9998 )I
00860 40 CONTINUE
00861 IF( .NOT.SAME )THEN
00862 FATAL = .TRUE.
00863 GO TO 110
00864 END IF
00865
00866 IF( .NOT.NULL )THEN
00867
00868
00869
00870 IF( LEFT )THEN
00871 CALL CMMCH( 'N', 'N', M, N, M, ALPHA, A,
00872 $ NMAX, B, NMAX, BETA, C, NMAX,
00873 $ CT, G, CC, LDC, EPS, ERR,
00874 $ FATAL, NOUT, .TRUE. )
00875 ELSE
00876 CALL CMMCH( 'N', 'N', M, N, N, ALPHA, B,
00877 $ NMAX, A, NMAX, BETA, C, NMAX,
00878 $ CT, G, CC, LDC, EPS, ERR,
00879 $ FATAL, NOUT, .TRUE. )
00880 END IF
00881 ERRMAX = MAX( ERRMAX, ERR )
00882
00883
00884 IF( FATAL )
00885 $ GO TO 110
00886 END IF
00887
00888 50 CONTINUE
00889
00890 60 CONTINUE
00891
00892 70 CONTINUE
00893
00894 80 CONTINUE
00895
00896 90 CONTINUE
00897
00898 100 CONTINUE
00899
00900
00901
00902 IF( ERRMAX.LT.THRESH )THEN
00903 WRITE( NOUT, FMT = 9999 )SNAME, NC
00904 ELSE
00905 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
00906 END IF
00907 GO TO 120
00908
00909 110 CONTINUE
00910 WRITE( NOUT, FMT = 9996 )SNAME
00911 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA,
00912 $ LDB, BETA, LDC
00913
00914 120 CONTINUE
00915 RETURN
00916
00917 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
00918 $ 'S)' )
00919 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
00920 $ 'ANGED INCORRECTLY *******' )
00921 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
00922 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
00923 $ ' - SUSPECT *******' )
00924 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
00925 9995 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
00926 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
00927 $ ',', F4.1, '), C,', I3, ') .' )
00928 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
00929 $ '******' )
00930
00931
00932
00933 END
00934 SUBROUTINE CCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
00935 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
00936 $ B, BB, BS, CT, G, C )
00937
00938
00939
00940
00941
00942
00943
00944
00945
00946
00947
00948
00949 COMPLEX ZERO, ONE
00950 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
00951 REAL RZERO
00952 PARAMETER ( RZERO = 0.0 )
00953
00954 REAL EPS, THRESH
00955 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
00956 LOGICAL FATAL, REWI, TRACE
00957 CHARACTER*6 SNAME
00958
00959 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
00960 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
00961 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
00962 $ C( NMAX, NMAX ), CT( NMAX )
00963 REAL G( NMAX )
00964 INTEGER IDIM( NIDIM )
00965
00966 COMPLEX ALPHA, ALS
00967 REAL ERR, ERRMAX
00968 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
00969 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
00970 $ NS
00971 LOGICAL LEFT, NULL, RESET, SAME
00972 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
00973 $ UPLOS
00974 CHARACTER*2 ICHD, ICHS, ICHU
00975 CHARACTER*3 ICHT
00976
00977 LOGICAL ISAME( 13 )
00978
00979 LOGICAL LCE, LCERES
00980 EXTERNAL LCE, LCERES
00981
00982 EXTERNAL CMAKE, CMMCH, CTRMM, CTRSM
00983
00984 INTRINSIC MAX
00985
00986 INTEGER INFOT, NOUTC
00987 LOGICAL LERR, OK
00988
00989 COMMON /INFOC/INFOT, NOUTC, OK, LERR
00990
00991 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/
00992
00993
00994 NARGS = 11
00995 NC = 0
00996 RESET = .TRUE.
00997 ERRMAX = RZERO
00998
00999 DO 20 J = 1, NMAX
01000 DO 10 I = 1, NMAX
01001 C( I, J ) = ZERO
01002 10 CONTINUE
01003 20 CONTINUE
01004
01005 DO 140 IM = 1, NIDIM
01006 M = IDIM( IM )
01007
01008 DO 130 IN = 1, NIDIM
01009 N = IDIM( IN )
01010
01011 LDB = M
01012 IF( LDB.LT.NMAX )
01013 $ LDB = LDB + 1
01014
01015 IF( LDB.GT.NMAX )
01016 $ GO TO 130
01017 LBB = LDB*N
01018 NULL = M.LE.0.OR.N.LE.0
01019
01020 DO 120 ICS = 1, 2
01021 SIDE = ICHS( ICS: ICS )
01022 LEFT = SIDE.EQ.'L'
01023 IF( LEFT )THEN
01024 NA = M
01025 ELSE
01026 NA = N
01027 END IF
01028
01029 LDA = NA
01030 IF( LDA.LT.NMAX )
01031 $ LDA = LDA + 1
01032
01033 IF( LDA.GT.NMAX )
01034 $ GO TO 130
01035 LAA = LDA*NA
01036
01037 DO 110 ICU = 1, 2
01038 UPLO = ICHU( ICU: ICU )
01039
01040 DO 100 ICT = 1, 3
01041 TRANSA = ICHT( ICT: ICT )
01042
01043 DO 90 ICD = 1, 2
01044 DIAG = ICHD( ICD: ICD )
01045
01046 DO 80 IA = 1, NALF
01047 ALPHA = ALF( IA )
01048
01049
01050
01051 CALL CMAKE( 'TR', UPLO, DIAG, NA, NA, A,
01052 $ NMAX, AA, LDA, RESET, ZERO )
01053
01054
01055
01056 CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX,
01057 $ BB, LDB, RESET, ZERO )
01058
01059 NC = NC + 1
01060
01061
01062
01063
01064 SIDES = SIDE
01065 UPLOS = UPLO
01066 TRANAS = TRANSA
01067 DIAGS = DIAG
01068 MS = M
01069 NS = N
01070 ALS = ALPHA
01071 DO 30 I = 1, LAA
01072 AS( I ) = AA( I )
01073 30 CONTINUE
01074 LDAS = LDA
01075 DO 40 I = 1, LBB
01076 BS( I ) = BB( I )
01077 40 CONTINUE
01078 LDBS = LDB
01079
01080
01081
01082 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
01083 IF( TRACE )
01084 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
01085 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
01086 $ LDA, LDB
01087 IF( REWI )
01088 $ REWIND NTRA
01089 CALL CTRMM( SIDE, UPLO, TRANSA, DIAG, M,
01090 $ N, ALPHA, AA, LDA, BB, LDB )
01091 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
01092 IF( TRACE )
01093 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
01094 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
01095 $ LDA, LDB
01096 IF( REWI )
01097 $ REWIND NTRA
01098 CALL CTRSM( SIDE, UPLO, TRANSA, DIAG, M,
01099 $ N, ALPHA, AA, LDA, BB, LDB )
01100 END IF
01101
01102
01103
01104 IF( .NOT.OK )THEN
01105 WRITE( NOUT, FMT = 9994 )
01106 FATAL = .TRUE.
01107 GO TO 150
01108 END IF
01109
01110
01111
01112 ISAME( 1 ) = SIDES.EQ.SIDE
01113 ISAME( 2 ) = UPLOS.EQ.UPLO
01114 ISAME( 3 ) = TRANAS.EQ.TRANSA
01115 ISAME( 4 ) = DIAGS.EQ.DIAG
01116 ISAME( 5 ) = MS.EQ.M
01117 ISAME( 6 ) = NS.EQ.N
01118 ISAME( 7 ) = ALS.EQ.ALPHA
01119 ISAME( 8 ) = LCE( AS, AA, LAA )
01120 ISAME( 9 ) = LDAS.EQ.LDA
01121 IF( NULL )THEN
01122 ISAME( 10 ) = LCE( BS, BB, LBB )
01123 ELSE
01124 ISAME( 10 ) = LCERES( 'GE', ' ', M, N, BS,
01125 $ BB, LDB )
01126 END IF
01127 ISAME( 11 ) = LDBS.EQ.LDB
01128
01129
01130
01131
01132 SAME = .TRUE.
01133 DO 50 I = 1, NARGS
01134 SAME = SAME.AND.ISAME( I )
01135 IF( .NOT.ISAME( I ) )
01136 $ WRITE( NOUT, FMT = 9998 )I
01137 50 CONTINUE
01138 IF( .NOT.SAME )THEN
01139 FATAL = .TRUE.
01140 GO TO 150
01141 END IF
01142
01143 IF( .NOT.NULL )THEN
01144 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
01145
01146
01147
01148 IF( LEFT )THEN
01149 CALL CMMCH( TRANSA, 'N', M, N, M,
01150 $ ALPHA, A, NMAX, B, NMAX,
01151 $ ZERO, C, NMAX, CT, G,
01152 $ BB, LDB, EPS, ERR,
01153 $ FATAL, NOUT, .TRUE. )
01154 ELSE
01155 CALL CMMCH( 'N', TRANSA, M, N, N,
01156 $ ALPHA, B, NMAX, A, NMAX,
01157 $ ZERO, C, NMAX, CT, G,
01158 $ BB, LDB, EPS, ERR,
01159 $ FATAL, NOUT, .TRUE. )
01160 END IF
01161 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
01162
01163
01164
01165
01166 DO 70 J = 1, N
01167 DO 60 I = 1, M
01168 C( I, J ) = BB( I + ( J - 1 )*
01169 $ LDB )
01170 BB( I + ( J - 1 )*LDB ) = ALPHA*
01171 $ B( I, J )
01172 60 CONTINUE
01173 70 CONTINUE
01174
01175 IF( LEFT )THEN
01176 CALL CMMCH( TRANSA, 'N', M, N, M,
01177 $ ONE, A, NMAX, C, NMAX,
01178 $ ZERO, B, NMAX, CT, G,
01179 $ BB, LDB, EPS, ERR,
01180 $ FATAL, NOUT, .FALSE. )
01181 ELSE
01182 CALL CMMCH( 'N', TRANSA, M, N, N,
01183 $ ONE, C, NMAX, A, NMAX,
01184 $ ZERO, B, NMAX, CT, G,
01185 $ BB, LDB, EPS, ERR,
01186 $ FATAL, NOUT, .FALSE. )
01187 END IF
01188 END IF
01189 ERRMAX = MAX( ERRMAX, ERR )
01190
01191
01192 IF( FATAL )
01193 $ GO TO 150
01194 END IF
01195
01196 80 CONTINUE
01197
01198 90 CONTINUE
01199
01200 100 CONTINUE
01201
01202 110 CONTINUE
01203
01204 120 CONTINUE
01205
01206 130 CONTINUE
01207
01208 140 CONTINUE
01209
01210
01211
01212 IF( ERRMAX.LT.THRESH )THEN
01213 WRITE( NOUT, FMT = 9999 )SNAME, NC
01214 ELSE
01215 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
01216 END IF
01217 GO TO 160
01218
01219 150 CONTINUE
01220 WRITE( NOUT, FMT = 9996 )SNAME
01221 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M,
01222 $ N, ALPHA, LDA, LDB
01223
01224 160 CONTINUE
01225 RETURN
01226
01227 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
01228 $ 'S)' )
01229 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
01230 $ 'ANGED INCORRECTLY *******' )
01231 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
01232 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
01233 $ ' - SUSPECT *******' )
01234 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
01235 9995 FORMAT( 1X, I6, ': ', A6, '(', 4( '''', A1, ''',' ), 2( I3, ',' ),
01236 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ',
01237 $ ' .' )
01238 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
01239 $ '******' )
01240
01241
01242
01243 END
01244 SUBROUTINE CCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
01245 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
01246 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
01247
01248
01249
01250
01251
01252
01253
01254
01255
01256
01257
01258
01259 COMPLEX ZERO
01260 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
01261 REAL RONE, RZERO
01262 PARAMETER ( RONE = 1.0, RZERO = 0.0 )
01263
01264 REAL EPS, THRESH
01265 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
01266 LOGICAL FATAL, REWI, TRACE
01267 CHARACTER*6 SNAME
01268
01269 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
01270 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
01271 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
01272 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
01273 $ CS( NMAX*NMAX ), CT( NMAX )
01274 REAL G( NMAX )
01275 INTEGER IDIM( NIDIM )
01276
01277 COMPLEX ALPHA, ALS, BETA, BETS
01278 REAL ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
01279 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
01280 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
01281 $ NARGS, NC, NS
01282 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
01283 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
01284 CHARACTER*2 ICHT, ICHU
01285
01286 LOGICAL ISAME( 13 )
01287
01288 LOGICAL LCE, LCERES
01289 EXTERNAL LCE, LCERES
01290
01291 EXTERNAL CHERK, CMAKE, CMMCH, CSYRK
01292
01293 INTRINSIC CMPLX, MAX, REAL
01294
01295 INTEGER INFOT, NOUTC
01296 LOGICAL LERR, OK
01297
01298 COMMON /INFOC/INFOT, NOUTC, OK, LERR
01299
01300 DATA ICHT/'NC'/, ICHU/'UL'/
01301
01302 CONJ = SNAME( 2: 3 ).EQ.'HE'
01303
01304 NARGS = 10
01305 NC = 0
01306 RESET = .TRUE.
01307 ERRMAX = RZERO
01308
01309 DO 100 IN = 1, NIDIM
01310 N = IDIM( IN )
01311
01312 LDC = N
01313 IF( LDC.LT.NMAX )
01314 $ LDC = LDC + 1
01315
01316 IF( LDC.GT.NMAX )
01317 $ GO TO 100
01318 LCC = LDC*N
01319
01320 DO 90 IK = 1, NIDIM
01321 K = IDIM( IK )
01322
01323 DO 80 ICT = 1, 2
01324 TRANS = ICHT( ICT: ICT )
01325 TRAN = TRANS.EQ.'C'
01326 IF( TRAN.AND..NOT.CONJ )
01327 $ TRANS = 'T'
01328 IF( TRAN )THEN
01329 MA = K
01330 NA = N
01331 ELSE
01332 MA = N
01333 NA = K
01334 END IF
01335
01336 LDA = MA
01337 IF( LDA.LT.NMAX )
01338 $ LDA = LDA + 1
01339
01340 IF( LDA.GT.NMAX )
01341 $ GO TO 80
01342 LAA = LDA*NA
01343
01344
01345
01346 CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
01347 $ RESET, ZERO )
01348
01349 DO 70 ICU = 1, 2
01350 UPLO = ICHU( ICU: ICU )
01351 UPPER = UPLO.EQ.'U'
01352
01353 DO 60 IA = 1, NALF
01354 ALPHA = ALF( IA )
01355 IF( CONJ )THEN
01356 RALPHA = REAL( ALPHA )
01357 ALPHA = CMPLX( RALPHA, RZERO )
01358 END IF
01359
01360 DO 50 IB = 1, NBET
01361 BETA = BET( IB )
01362 IF( CONJ )THEN
01363 RBETA = REAL( BETA )
01364 BETA = CMPLX( RBETA, RZERO )
01365 END IF
01366 NULL = N.LE.0
01367 IF( CONJ )
01368 $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ.
01369 $ RZERO ).AND.RBETA.EQ.RONE )
01370
01371
01372
01373 CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
01374 $ NMAX, CC, LDC, RESET, ZERO )
01375
01376 NC = NC + 1
01377
01378
01379
01380 UPLOS = UPLO
01381 TRANSS = TRANS
01382 NS = N
01383 KS = K
01384 IF( CONJ )THEN
01385 RALS = RALPHA
01386 ELSE
01387 ALS = ALPHA
01388 END IF
01389 DO 10 I = 1, LAA
01390 AS( I ) = AA( I )
01391 10 CONTINUE
01392 LDAS = LDA
01393 IF( CONJ )THEN
01394 RBETS = RBETA
01395 ELSE
01396 BETS = BETA
01397 END IF
01398 DO 20 I = 1, LCC
01399 CS( I ) = CC( I )
01400 20 CONTINUE
01401 LDCS = LDC
01402
01403
01404
01405 IF( CONJ )THEN
01406 IF( TRACE )
01407 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
01408 $ TRANS, N, K, RALPHA, LDA, RBETA, LDC
01409 IF( REWI )
01410 $ REWIND NTRA
01411 CALL CHERK( UPLO, TRANS, N, K, RALPHA, AA,
01412 $ LDA, RBETA, CC, LDC )
01413 ELSE
01414 IF( TRACE )
01415 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
01416 $ TRANS, N, K, ALPHA, LDA, BETA, LDC
01417 IF( REWI )
01418 $ REWIND NTRA
01419 CALL CSYRK( UPLO, TRANS, N, K, ALPHA, AA,
01420 $ LDA, BETA, CC, LDC )
01421 END IF
01422
01423
01424
01425 IF( .NOT.OK )THEN
01426 WRITE( NOUT, FMT = 9992 )
01427 FATAL = .TRUE.
01428 GO TO 120
01429 END IF
01430
01431
01432
01433 ISAME( 1 ) = UPLOS.EQ.UPLO
01434 ISAME( 2 ) = TRANSS.EQ.TRANS
01435 ISAME( 3 ) = NS.EQ.N
01436 ISAME( 4 ) = KS.EQ.K
01437 IF( CONJ )THEN
01438 ISAME( 5 ) = RALS.EQ.RALPHA
01439 ELSE
01440 ISAME( 5 ) = ALS.EQ.ALPHA
01441 END IF
01442 ISAME( 6 ) = LCE( AS, AA, LAA )
01443 ISAME( 7 ) = LDAS.EQ.LDA
01444 IF( CONJ )THEN
01445 ISAME( 8 ) = RBETS.EQ.RBETA
01446 ELSE
01447 ISAME( 8 ) = BETS.EQ.BETA
01448 END IF
01449 IF( NULL )THEN
01450 ISAME( 9 ) = LCE( CS, CC, LCC )
01451 ELSE
01452 ISAME( 9 ) = LCERES( SNAME( 2: 3 ), UPLO, N,
01453 $ N, CS, CC, LDC )
01454 END IF
01455 ISAME( 10 ) = LDCS.EQ.LDC
01456
01457
01458
01459
01460 SAME = .TRUE.
01461 DO 30 I = 1, NARGS
01462 SAME = SAME.AND.ISAME( I )
01463 IF( .NOT.ISAME( I ) )
01464 $ WRITE( NOUT, FMT = 9998 )I
01465 30 CONTINUE
01466 IF( .NOT.SAME )THEN
01467 FATAL = .TRUE.
01468 GO TO 120
01469 END IF
01470
01471 IF( .NOT.NULL )THEN
01472
01473
01474
01475 IF( CONJ )THEN
01476 TRANST = 'C'
01477 ELSE
01478 TRANST = 'T'
01479 END IF
01480 JC = 1
01481 DO 40 J = 1, N
01482 IF( UPPER )THEN
01483 JJ = 1
01484 LJ = J
01485 ELSE
01486 JJ = J
01487 LJ = N - J + 1
01488 END IF
01489 IF( TRAN )THEN
01490 CALL CMMCH( TRANST, 'N', LJ, 1, K,
01491 $ ALPHA, A( 1, JJ ), NMAX,
01492 $ A( 1, J ), NMAX, BETA,
01493 $ C( JJ, J ), NMAX, CT, G,
01494 $ CC( JC ), LDC, EPS, ERR,
01495 $ FATAL, NOUT, .TRUE. )
01496 ELSE
01497 CALL CMMCH( 'N', TRANST, LJ, 1, K,
01498 $ ALPHA, A( JJ, 1 ), NMAX,
01499 $ A( J, 1 ), NMAX, BETA,
01500 $ C( JJ, J ), NMAX, CT, G,
01501 $ CC( JC ), LDC, EPS, ERR,
01502 $ FATAL, NOUT, .TRUE. )
01503 END IF
01504 IF( UPPER )THEN
01505 JC = JC + LDC
01506 ELSE
01507 JC = JC + LDC + 1
01508 END IF
01509 ERRMAX = MAX( ERRMAX, ERR )
01510
01511
01512 IF( FATAL )
01513 $ GO TO 110
01514 40 CONTINUE
01515 END IF
01516
01517 50 CONTINUE
01518
01519 60 CONTINUE
01520
01521 70 CONTINUE
01522
01523 80 CONTINUE
01524
01525 90 CONTINUE
01526
01527 100 CONTINUE
01528
01529
01530
01531 IF( ERRMAX.LT.THRESH )THEN
01532 WRITE( NOUT, FMT = 9999 )SNAME, NC
01533 ELSE
01534 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
01535 END IF
01536 GO TO 130
01537
01538 110 CONTINUE
01539 IF( N.GT.1 )
01540 $ WRITE( NOUT, FMT = 9995 )J
01541
01542 120 CONTINUE
01543 WRITE( NOUT, FMT = 9996 )SNAME
01544 IF( CONJ )THEN
01545 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, RALPHA,
01546 $ LDA, RBETA, LDC
01547 ELSE
01548 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
01549 $ LDA, BETA, LDC
01550 END IF
01551
01552 130 CONTINUE
01553 RETURN
01554
01555 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
01556 $ 'S)' )
01557 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
01558 $ 'ANGED INCORRECTLY *******' )
01559 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
01560 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
01561 $ ' - SUSPECT *******' )
01562 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
01563 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
01564 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
01565 $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ',
01566 $ ' .' )
01567 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
01568 $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1,
01569 $ '), C,', I3, ') .' )
01570 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
01571 $ '******' )
01572
01573
01574
01575 END
01576 SUBROUTINE CCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
01577 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
01578 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
01579
01580
01581
01582
01583
01584
01585
01586
01587
01588
01589
01590
01591 COMPLEX ZERO, ONE
01592 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
01593 REAL RONE, RZERO
01594 PARAMETER ( RONE = 1.0, RZERO = 0.0 )
01595
01596 REAL EPS, THRESH
01597 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
01598 LOGICAL FATAL, REWI, TRACE
01599 CHARACTER*6 SNAME
01600
01601 COMPLEX AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
01602 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
01603 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
01604 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
01605 $ W( 2*NMAX )
01606 REAL G( NMAX )
01607 INTEGER IDIM( NIDIM )
01608
01609 COMPLEX ALPHA, ALS, BETA, BETS
01610 REAL ERR, ERRMAX, RBETA, RBETS
01611 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
01612 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
01613 $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
01614 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
01615 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
01616 CHARACTER*2 ICHT, ICHU
01617
01618 LOGICAL ISAME( 13 )
01619
01620 LOGICAL LCE, LCERES
01621 EXTERNAL LCE, LCERES
01622
01623 EXTERNAL CHER2K, CMAKE, CMMCH, CSYR2K
01624
01625 INTRINSIC CMPLX, CONJG, MAX, REAL
01626
01627 INTEGER INFOT, NOUTC
01628 LOGICAL LERR, OK
01629
01630 COMMON /INFOC/INFOT, NOUTC, OK, LERR
01631
01632 DATA ICHT/'NC'/, ICHU/'UL'/
01633
01634 CONJ = SNAME( 2: 3 ).EQ.'HE'
01635
01636 NARGS = 12
01637 NC = 0
01638 RESET = .TRUE.
01639 ERRMAX = RZERO
01640
01641 DO 130 IN = 1, NIDIM
01642 N = IDIM( IN )
01643
01644 LDC = N
01645 IF( LDC.LT.NMAX )
01646 $ LDC = LDC + 1
01647
01648 IF( LDC.GT.NMAX )
01649 $ GO TO 130
01650 LCC = LDC*N
01651
01652 DO 120 IK = 1, NIDIM
01653 K = IDIM( IK )
01654
01655 DO 110 ICT = 1, 2
01656 TRANS = ICHT( ICT: ICT )
01657 TRAN = TRANS.EQ.'C'
01658 IF( TRAN.AND..NOT.CONJ )
01659 $ TRANS = 'T'
01660 IF( TRAN )THEN
01661 MA = K
01662 NA = N
01663 ELSE
01664 MA = N
01665 NA = K
01666 END IF
01667
01668 LDA = MA
01669 IF( LDA.LT.NMAX )
01670 $ LDA = LDA + 1
01671
01672 IF( LDA.GT.NMAX )
01673 $ GO TO 110
01674 LAA = LDA*NA
01675
01676
01677
01678 IF( TRAN )THEN
01679 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA,
01680 $ LDA, RESET, ZERO )
01681 ELSE
01682 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA,
01683 $ RESET, ZERO )
01684 END IF
01685
01686
01687
01688 LDB = LDA
01689 LBB = LAA
01690 IF( TRAN )THEN
01691 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ),
01692 $ 2*NMAX, BB, LDB, RESET, ZERO )
01693 ELSE
01694 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ),
01695 $ NMAX, BB, LDB, RESET, ZERO )
01696 END IF
01697
01698 DO 100 ICU = 1, 2
01699 UPLO = ICHU( ICU: ICU )
01700 UPPER = UPLO.EQ.'U'
01701
01702 DO 90 IA = 1, NALF
01703 ALPHA = ALF( IA )
01704
01705 DO 80 IB = 1, NBET
01706 BETA = BET( IB )
01707 IF( CONJ )THEN
01708 RBETA = REAL( BETA )
01709 BETA = CMPLX( RBETA, RZERO )
01710 END IF
01711 NULL = N.LE.0
01712 IF( CONJ )
01713 $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ.
01714 $ ZERO ).AND.RBETA.EQ.RONE )
01715
01716
01717
01718 CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
01719 $ NMAX, CC, LDC, RESET, ZERO )
01720
01721 NC = NC + 1
01722
01723
01724
01725 UPLOS = UPLO
01726 TRANSS = TRANS
01727 NS = N
01728 KS = K
01729 ALS = ALPHA
01730 DO 10 I = 1, LAA
01731 AS( I ) = AA( I )
01732 10 CONTINUE
01733 LDAS = LDA
01734 DO 20 I = 1, LBB
01735 BS( I ) = BB( I )
01736 20 CONTINUE
01737 LDBS = LDB
01738 IF( CONJ )THEN
01739 RBETS = RBETA
01740 ELSE
01741 BETS = BETA
01742 END IF
01743 DO 30 I = 1, LCC
01744 CS( I ) = CC( I )
01745 30 CONTINUE
01746 LDCS = LDC
01747
01748
01749
01750 IF( CONJ )THEN
01751 IF( TRACE )
01752 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
01753 $ TRANS, N, K, ALPHA, LDA, LDB, RBETA, LDC
01754 IF( REWI )
01755 $ REWIND NTRA
01756 CALL CHER2K( UPLO, TRANS, N, K, ALPHA, AA,
01757 $ LDA, BB, LDB, RBETA, CC, LDC )
01758 ELSE
01759 IF( TRACE )
01760 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
01761 $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC
01762 IF( REWI )
01763 $ REWIND NTRA
01764 CALL CSYR2K( UPLO, TRANS, N, K, ALPHA, AA,
01765 $ LDA, BB, LDB, BETA, CC, LDC )
01766 END IF
01767
01768
01769
01770 IF( .NOT.OK )THEN
01771 WRITE( NOUT, FMT = 9992 )
01772 FATAL = .TRUE.
01773 GO TO 150
01774 END IF
01775
01776
01777
01778 ISAME( 1 ) = UPLOS.EQ.UPLO
01779 ISAME( 2 ) = TRANSS.EQ.TRANS
01780 ISAME( 3 ) = NS.EQ.N
01781 ISAME( 4 ) = KS.EQ.K
01782 ISAME( 5 ) = ALS.EQ.ALPHA
01783 ISAME( 6 ) = LCE( AS, AA, LAA )
01784 ISAME( 7 ) = LDAS.EQ.LDA
01785 ISAME( 8 ) = LCE( BS, BB, LBB )
01786 ISAME( 9 ) = LDBS.EQ.LDB
01787 IF( CONJ )THEN
01788 ISAME( 10 ) = RBETS.EQ.RBETA
01789 ELSE
01790 ISAME( 10 ) = BETS.EQ.BETA
01791 END IF
01792 IF( NULL )THEN
01793 ISAME( 11 ) = LCE( CS, CC, LCC )
01794 ELSE
01795 ISAME( 11 ) = LCERES( 'HE', UPLO, N, N, CS,
01796 $ CC, LDC )
01797 END IF
01798 ISAME( 12 ) = LDCS.EQ.LDC
01799
01800
01801
01802
01803 SAME = .TRUE.
01804 DO 40 I = 1, NARGS
01805 SAME = SAME.AND.ISAME( I )
01806 IF( .NOT.ISAME( I ) )
01807 $ WRITE( NOUT, FMT = 9998 )I
01808 40 CONTINUE
01809 IF( .NOT.SAME )THEN
01810 FATAL = .TRUE.
01811 GO TO 150
01812 END IF
01813
01814 IF( .NOT.NULL )THEN
01815
01816
01817
01818 IF( CONJ )THEN
01819 TRANST = 'C'
01820 ELSE
01821 TRANST = 'T'
01822 END IF
01823 JJAB = 1
01824 JC = 1
01825 DO 70 J = 1, N
01826 IF( UPPER )THEN
01827 JJ = 1
01828 LJ = J
01829 ELSE
01830 JJ = J
01831 LJ = N - J + 1
01832 END IF
01833 IF( TRAN )THEN
01834 DO 50 I = 1, K
01835 W( I ) = ALPHA*AB( ( J - 1 )*2*
01836 $ NMAX + K + I )
01837 IF( CONJ )THEN
01838 W( K + I ) = CONJG( ALPHA )*
01839 $ AB( ( J - 1 )*2*
01840 $ NMAX + I )
01841 ELSE
01842 W( K + I ) = ALPHA*
01843 $ AB( ( J - 1 )*2*
01844 $ NMAX + I )
01845 END IF
01846 50 CONTINUE
01847 CALL CMMCH( TRANST, 'N', LJ, 1, 2*K,
01848 $ ONE, AB( JJAB ), 2*NMAX, W,
01849 $ 2*NMAX, BETA, C( JJ, J ),
01850 $ NMAX, CT, G, CC( JC ), LDC,
01851 $ EPS, ERR, FATAL, NOUT,
01852 $ .TRUE. )
01853 ELSE
01854 DO 60 I = 1, K
01855 IF( CONJ )THEN
01856 W( I ) = ALPHA*CONJG( AB( ( K +
01857 $ I - 1 )*NMAX + J ) )
01858 W( K + I ) = CONJG( ALPHA*
01859 $ AB( ( I - 1 )*NMAX +
01860 $ J ) )
01861 ELSE
01862 W( I ) = ALPHA*AB( ( K + I - 1 )*
01863 $ NMAX + J )
01864 W( K + I ) = ALPHA*
01865 $ AB( ( I - 1 )*NMAX +
01866 $ J )
01867 END IF
01868 60 CONTINUE
01869 CALL CMMCH( 'N', 'N', LJ, 1, 2*K, ONE,
01870 $ AB( JJ ), NMAX, W, 2*NMAX,
01871 $ BETA, C( JJ, J ), NMAX, CT,
01872 $ G, CC( JC ), LDC, EPS, ERR,
01873 $ FATAL, NOUT, .TRUE. )
01874 END IF
01875 IF( UPPER )THEN
01876 JC = JC + LDC
01877 ELSE
01878 JC = JC + LDC + 1
01879 IF( TRAN )
01880 $ JJAB = JJAB + 2*NMAX
01881 END IF
01882 ERRMAX = MAX( ERRMAX, ERR )
01883
01884
01885 IF( FATAL )
01886 $ GO TO 140
01887 70 CONTINUE
01888 END IF
01889
01890 80 CONTINUE
01891
01892 90 CONTINUE
01893
01894 100 CONTINUE
01895
01896 110 CONTINUE
01897
01898 120 CONTINUE
01899
01900 130 CONTINUE
01901
01902
01903
01904 IF( ERRMAX.LT.THRESH )THEN
01905 WRITE( NOUT, FMT = 9999 )SNAME, NC
01906 ELSE
01907 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
01908 END IF
01909 GO TO 160
01910
01911 140 CONTINUE
01912 IF( N.GT.1 )
01913 $ WRITE( NOUT, FMT = 9995 )J
01914
01915 150 CONTINUE
01916 WRITE( NOUT, FMT = 9996 )SNAME
01917 IF( CONJ )THEN
01918 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
01919 $ LDA, LDB, RBETA, LDC
01920 ELSE
01921 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
01922 $ LDA, LDB, BETA, LDC
01923 END IF
01924
01925 160 CONTINUE
01926 RETURN
01927
01928 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
01929 $ 'S)' )
01930 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
01931 $ 'ANGED INCORRECTLY *******' )
01932 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
01933 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
01934 $ ' - SUSPECT *******' )
01935 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
01936 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
01937 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
01938 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1,
01939 $ ', C,', I3, ') .' )
01940 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
01941 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
01942 $ ',', F4.1, '), C,', I3, ') .' )
01943 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
01944 $ '******' )
01945
01946
01947
01948 END
01949 SUBROUTINE CCHKE( ISNUM, SRNAMT, NOUT )
01950
01951
01952
01953
01954
01955
01956
01957
01958
01959
01960
01961
01962
01963
01964
01965
01966
01967
01968 INTEGER ISNUM, NOUT
01969 CHARACTER*6 SRNAMT
01970
01971 INTEGER INFOT, NOUTC
01972 LOGICAL LERR, OK
01973
01974 REAL ONE, TWO
01975 PARAMETER ( ONE = 1.0E0, TWO = 2.0E0 )
01976
01977 COMPLEX ALPHA, BETA
01978 REAL RALPHA, RBETA
01979
01980 COMPLEX A( 2, 1 ), B( 2, 1 ), C( 2, 1 )
01981
01982 EXTERNAL CGEMM, CHEMM, CHER2K, CHERK, CHKXER, CSYMM,
01983 $ CSYR2K, CSYRK, CTRMM, CTRSM
01984
01985 COMMON /INFOC/INFOT, NOUTC, OK, LERR
01986
01987
01988
01989 OK = .TRUE.
01990
01991
01992 LERR = .FALSE.
01993
01994
01995
01996 ALPHA = CMPLX( ONE, -ONE )
01997 BETA = CMPLX( TWO, -TWO )
01998 RALPHA = ONE
01999 RBETA = TWO
02000
02001 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
02002 $ 90 )ISNUM
02003 10 INFOT = 1
02004 CALL CGEMM( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02005 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02006 INFOT = 1
02007 CALL CGEMM( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02008 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02009 INFOT = 1
02010 CALL CGEMM( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02011 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02012 INFOT = 2
02013 CALL CGEMM( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02014 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02015 INFOT = 2
02016 CALL CGEMM( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02017 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02018 INFOT = 2
02019 CALL CGEMM( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02020 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02021 INFOT = 3
02022 CALL CGEMM( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02023 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02024 INFOT = 3
02025 CALL CGEMM( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02026 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02027 INFOT = 3
02028 CALL CGEMM( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02029 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02030 INFOT = 3
02031 CALL CGEMM( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02032 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02033 INFOT = 3
02034 CALL CGEMM( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02035 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02036 INFOT = 3
02037 CALL CGEMM( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02038 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02039 INFOT = 3
02040 CALL CGEMM( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02041 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02042 INFOT = 3
02043 CALL CGEMM( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02044 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02045 INFOT = 3
02046 CALL CGEMM( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02047 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02048 INFOT = 4
02049 CALL CGEMM( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02050 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02051 INFOT = 4
02052 CALL CGEMM( 'N', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02053 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02054 INFOT = 4
02055 CALL CGEMM( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02056 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02057 INFOT = 4
02058 CALL CGEMM( 'C', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02059 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02060 INFOT = 4
02061 CALL CGEMM( 'C', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02062 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02063 INFOT = 4
02064 CALL CGEMM( 'C', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02065 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02066 INFOT = 4
02067 CALL CGEMM( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02068 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02069 INFOT = 4
02070 CALL CGEMM( 'T', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02071 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02072 INFOT = 4
02073 CALL CGEMM( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02074 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02075 INFOT = 5
02076 CALL CGEMM( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02077 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02078 INFOT = 5
02079 CALL CGEMM( 'N', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02080 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02081 INFOT = 5
02082 CALL CGEMM( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02083 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02084 INFOT = 5
02085 CALL CGEMM( 'C', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02086 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02087 INFOT = 5
02088 CALL CGEMM( 'C', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02089 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02090 INFOT = 5
02091 CALL CGEMM( 'C', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02092 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02093 INFOT = 5
02094 CALL CGEMM( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02095 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02096 INFOT = 5
02097 CALL CGEMM( 'T', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02098 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02099 INFOT = 5
02100 CALL CGEMM( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02101 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02102 INFOT = 8
02103 CALL CGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
02104 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02105 INFOT = 8
02106 CALL CGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
02107 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02108 INFOT = 8
02109 CALL CGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
02110 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02111 INFOT = 8
02112 CALL CGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
02113 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02114 INFOT = 8
02115 CALL CGEMM( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
02116 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02117 INFOT = 8
02118 CALL CGEMM( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
02119 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02120 INFOT = 8
02121 CALL CGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
02122 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02123 INFOT = 8
02124 CALL CGEMM( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
02125 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02126 INFOT = 8
02127 CALL CGEMM( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
02128 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02129 INFOT = 10
02130 CALL CGEMM( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
02131 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02132 INFOT = 10
02133 CALL CGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
02134 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02135 INFOT = 10
02136 CALL CGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
02137 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02138 INFOT = 10
02139 CALL CGEMM( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02140 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02141 INFOT = 10
02142 CALL CGEMM( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02143 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02144 INFOT = 10
02145 CALL CGEMM( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02146 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02147 INFOT = 10
02148 CALL CGEMM( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02149 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02150 INFOT = 10
02151 CALL CGEMM( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02152 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02153 INFOT = 10
02154 CALL CGEMM( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02155 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02156 INFOT = 13
02157 CALL CGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
02158 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02159 INFOT = 13
02160 CALL CGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
02161 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02162 INFOT = 13
02163 CALL CGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
02164 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02165 INFOT = 13
02166 CALL CGEMM( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02167 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02168 INFOT = 13
02169 CALL CGEMM( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02170 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02171 INFOT = 13
02172 CALL CGEMM( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02173 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02174 INFOT = 13
02175 CALL CGEMM( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02176 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02177 INFOT = 13
02178 CALL CGEMM( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02179 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02180 INFOT = 13
02181 CALL CGEMM( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02182 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02183 GO TO 100
02184 20 INFOT = 1
02185 CALL CHEMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02186 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02187 INFOT = 2
02188 CALL CHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02189 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02190 INFOT = 3
02191 CALL CHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02192 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02193 INFOT = 3
02194 CALL CHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02195 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02196 INFOT = 3
02197 CALL CHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02198 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02199 INFOT = 3
02200 CALL CHEMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02201 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02202 INFOT = 4
02203 CALL CHEMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02204 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02205 INFOT = 4
02206 CALL CHEMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02207 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02208 INFOT = 4
02209 CALL CHEMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02210 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02211 INFOT = 4
02212 CALL CHEMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02213 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02214 INFOT = 7
02215 CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
02216 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02217 INFOT = 7
02218 CALL CHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
02219 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02220 INFOT = 7
02221 CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
02222 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02223 INFOT = 7
02224 CALL CHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
02225 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02226 INFOT = 9
02227 CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
02228 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02229 INFOT = 9
02230 CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
02231 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02232 INFOT = 9
02233 CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
02234 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02235 INFOT = 9
02236 CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
02237 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02238 INFOT = 12
02239 CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
02240 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02241 INFOT = 12
02242 CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
02243 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02244 INFOT = 12
02245 CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
02246 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02247 INFOT = 12
02248 CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
02249 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02250 GO TO 100
02251 30 INFOT = 1
02252 CALL CSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02253 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02254 INFOT = 2
02255 CALL CSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02256 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02257 INFOT = 3
02258 CALL CSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02259 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02260 INFOT = 3
02261 CALL CSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02262 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02263 INFOT = 3
02264 CALL CSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02265 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02266 INFOT = 3
02267 CALL CSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02268 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02269 INFOT = 4
02270 CALL CSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02271 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02272 INFOT = 4
02273 CALL CSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02274 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02275 INFOT = 4
02276 CALL CSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02277 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02278 INFOT = 4
02279 CALL CSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02280 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02281 INFOT = 7
02282 CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
02283 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02284 INFOT = 7
02285 CALL CSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
02286 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02287 INFOT = 7
02288 CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
02289 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02290 INFOT = 7
02291 CALL CSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
02292 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02293 INFOT = 9
02294 CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
02295 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02296 INFOT = 9
02297 CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
02298 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02299 INFOT = 9
02300 CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
02301 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02302 INFOT = 9
02303 CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
02304 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02305 INFOT = 12
02306 CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
02307 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02308 INFOT = 12
02309 CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
02310 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02311 INFOT = 12
02312 CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
02313 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02314 INFOT = 12
02315 CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
02316 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02317 GO TO 100
02318 40 INFOT = 1
02319 CALL CTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
02320 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02321 INFOT = 2
02322 CALL CTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
02323 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02324 INFOT = 3
02325 CALL CTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
02326 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02327 INFOT = 4
02328 CALL CTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
02329 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02330 INFOT = 5
02331 CALL CTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02332 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02333 INFOT = 5
02334 CALL CTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02335 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02336 INFOT = 5
02337 CALL CTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02338 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02339 INFOT = 5
02340 CALL CTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02341 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02342 INFOT = 5
02343 CALL CTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02344 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02345 INFOT = 5
02346 CALL CTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02347 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02348 INFOT = 5
02349 CALL CTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02350 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02351 INFOT = 5
02352 CALL CTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02353 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02354 INFOT = 5
02355 CALL CTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02356 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02357 INFOT = 5
02358 CALL CTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02359 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02360 INFOT = 5
02361 CALL CTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02362 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02363 INFOT = 5
02364 CALL CTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02365 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02366 INFOT = 6
02367 CALL CTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02368 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02369 INFOT = 6
02370 CALL CTRMM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02371 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02372 INFOT = 6
02373 CALL CTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02374 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02375 INFOT = 6
02376 CALL CTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02377 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02378 INFOT = 6
02379 CALL CTRMM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02380 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02381 INFOT = 6
02382 CALL CTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02383 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02384 INFOT = 6
02385 CALL CTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02386 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02387 INFOT = 6
02388 CALL CTRMM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02389 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02390 INFOT = 6
02391 CALL CTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02392 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02393 INFOT = 6
02394 CALL CTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02395 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02396 INFOT = 6
02397 CALL CTRMM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02398 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02399 INFOT = 6
02400 CALL CTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02401 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02402 INFOT = 9
02403 CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
02404 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02405 INFOT = 9
02406 CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
02407 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02408 INFOT = 9
02409 CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
02410 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02411 INFOT = 9
02412 CALL CTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
02413 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02414 INFOT = 9
02415 CALL CTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
02416 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02417 INFOT = 9
02418 CALL CTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
02419 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02420 INFOT = 9
02421 CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
02422 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02423 INFOT = 9
02424 CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
02425 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02426 INFOT = 9
02427 CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
02428 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02429 INFOT = 9
02430 CALL CTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
02431 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02432 INFOT = 9
02433 CALL CTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
02434 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02435 INFOT = 9
02436 CALL CTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
02437 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02438 INFOT = 11
02439 CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
02440 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02441 INFOT = 11
02442 CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
02443 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02444 INFOT = 11
02445 CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
02446 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02447 INFOT = 11
02448 CALL CTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
02449 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02450 INFOT = 11
02451 CALL CTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
02452 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02453 INFOT = 11
02454 CALL CTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
02455 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02456 INFOT = 11
02457 CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
02458 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02459 INFOT = 11
02460 CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
02461 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02462 INFOT = 11
02463 CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
02464 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02465 INFOT = 11
02466 CALL CTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
02467 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02468 INFOT = 11
02469 CALL CTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
02470 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02471 INFOT = 11
02472 CALL CTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
02473 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02474 GO TO 100
02475 50 INFOT = 1
02476 CALL CTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
02477 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02478 INFOT = 2
02479 CALL CTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
02480 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02481 INFOT = 3
02482 CALL CTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
02483 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02484 INFOT = 4
02485 CALL CTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
02486 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02487 INFOT = 5
02488 CALL CTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02489 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02490 INFOT = 5
02491 CALL CTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02492 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02493 INFOT = 5
02494 CALL CTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02495 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02496 INFOT = 5
02497 CALL CTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02498 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02499 INFOT = 5
02500 CALL CTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02501 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02502 INFOT = 5
02503 CALL CTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02504 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02505 INFOT = 5
02506 CALL CTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02507 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02508 INFOT = 5
02509 CALL CTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02510 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02511 INFOT = 5
02512 CALL CTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02513 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02514 INFOT = 5
02515 CALL CTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02516 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02517 INFOT = 5
02518 CALL CTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02519 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02520 INFOT = 5
02521 CALL CTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
02522 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02523 INFOT = 6
02524 CALL CTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02525 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02526 INFOT = 6
02527 CALL CTRSM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02528 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02529 INFOT = 6
02530 CALL CTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02531 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02532 INFOT = 6
02533 CALL CTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02534 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02535 INFOT = 6
02536 CALL CTRSM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02537 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02538 INFOT = 6
02539 CALL CTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02540 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02541 INFOT = 6
02542 CALL CTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02543 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02544 INFOT = 6
02545 CALL CTRSM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02546 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02547 INFOT = 6
02548 CALL CTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02549 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02550 INFOT = 6
02551 CALL CTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02552 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02553 INFOT = 6
02554 CALL CTRSM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02555 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02556 INFOT = 6
02557 CALL CTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
02558 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02559 INFOT = 9
02560 CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
02561 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02562 INFOT = 9
02563 CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
02564 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02565 INFOT = 9
02566 CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
02567 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02568 INFOT = 9
02569 CALL CTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
02570 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02571 INFOT = 9
02572 CALL CTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
02573 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02574 INFOT = 9
02575 CALL CTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
02576 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02577 INFOT = 9
02578 CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
02579 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02580 INFOT = 9
02581 CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
02582 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02583 INFOT = 9
02584 CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
02585 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02586 INFOT = 9
02587 CALL CTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
02588 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02589 INFOT = 9
02590 CALL CTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
02591 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02592 INFOT = 9
02593 CALL CTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
02594 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02595 INFOT = 11
02596 CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
02597 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02598 INFOT = 11
02599 CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
02600 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02601 INFOT = 11
02602 CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
02603 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02604 INFOT = 11
02605 CALL CTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
02606 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02607 INFOT = 11
02608 CALL CTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
02609 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02610 INFOT = 11
02611 CALL CTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
02612 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02613 INFOT = 11
02614 CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
02615 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02616 INFOT = 11
02617 CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
02618 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02619 INFOT = 11
02620 CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
02621 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02622 INFOT = 11
02623 CALL CTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
02624 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02625 INFOT = 11
02626 CALL CTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
02627 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02628 INFOT = 11
02629 CALL CTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
02630 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02631 GO TO 100
02632 60 INFOT = 1
02633 CALL CHERK( '/', 'N', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
02634 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02635 INFOT = 2
02636 CALL CHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
02637 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02638 INFOT = 3
02639 CALL CHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
02640 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02641 INFOT = 3
02642 CALL CHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
02643 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02644 INFOT = 3
02645 CALL CHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
02646 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02647 INFOT = 3
02648 CALL CHERK( 'L', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
02649 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02650 INFOT = 4
02651 CALL CHERK( 'U', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
02652 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02653 INFOT = 4
02654 CALL CHERK( 'U', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
02655 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02656 INFOT = 4
02657 CALL CHERK( 'L', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
02658 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02659 INFOT = 4
02660 CALL CHERK( 'L', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
02661 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02662 INFOT = 7
02663 CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
02664 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02665 INFOT = 7
02666 CALL CHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
02667 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02668 INFOT = 7
02669 CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
02670 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02671 INFOT = 7
02672 CALL CHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
02673 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02674 INFOT = 10
02675 CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
02676 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02677 INFOT = 10
02678 CALL CHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
02679 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02680 INFOT = 10
02681 CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
02682 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02683 INFOT = 10
02684 CALL CHERK( 'L', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
02685 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02686 GO TO 100
02687 70 INFOT = 1
02688 CALL CSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 )
02689 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02690 INFOT = 2
02691 CALL CSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 )
02692 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02693 INFOT = 3
02694 CALL CSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
02695 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02696 INFOT = 3
02697 CALL CSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
02698 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02699 INFOT = 3
02700 CALL CSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
02701 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02702 INFOT = 3
02703 CALL CSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
02704 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02705 INFOT = 4
02706 CALL CSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
02707 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02708 INFOT = 4
02709 CALL CSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
02710 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02711 INFOT = 4
02712 CALL CSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
02713 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02714 INFOT = 4
02715 CALL CSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
02716 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02717 INFOT = 7
02718 CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
02719 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02720 INFOT = 7
02721 CALL CSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
02722 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02723 INFOT = 7
02724 CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
02725 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02726 INFOT = 7
02727 CALL CSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
02728 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02729 INFOT = 10
02730 CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
02731 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02732 INFOT = 10
02733 CALL CSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
02734 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02735 INFOT = 10
02736 CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
02737 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02738 INFOT = 10
02739 CALL CSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
02740 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02741 GO TO 100
02742 80 INFOT = 1
02743 CALL CHER2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02744 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02745 INFOT = 2
02746 CALL CHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02747 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02748 INFOT = 3
02749 CALL CHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02750 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02751 INFOT = 3
02752 CALL CHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02753 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02754 INFOT = 3
02755 CALL CHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02756 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02757 INFOT = 3
02758 CALL CHER2K( 'L', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02759 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02760 INFOT = 4
02761 CALL CHER2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02762 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02763 INFOT = 4
02764 CALL CHER2K( 'U', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02765 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02766 INFOT = 4
02767 CALL CHER2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02768 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02769 INFOT = 4
02770 CALL CHER2K( 'L', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02771 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02772 INFOT = 7
02773 CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
02774 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02775 INFOT = 7
02776 CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02777 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02778 INFOT = 7
02779 CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
02780 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02781 INFOT = 7
02782 CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02783 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02784 INFOT = 9
02785 CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
02786 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02787 INFOT = 9
02788 CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
02789 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02790 INFOT = 9
02791 CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
02792 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02793 INFOT = 9
02794 CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
02795 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02796 INFOT = 12
02797 CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
02798 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02799 INFOT = 12
02800 CALL CHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02801 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02802 INFOT = 12
02803 CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
02804 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02805 INFOT = 12
02806 CALL CHER2K( 'L', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
02807 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02808 GO TO 100
02809 90 INFOT = 1
02810 CALL CSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02811 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02812 INFOT = 2
02813 CALL CSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02814 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02815 INFOT = 3
02816 CALL CSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02817 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02818 INFOT = 3
02819 CALL CSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02820 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02821 INFOT = 3
02822 CALL CSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02823 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02824 INFOT = 3
02825 CALL CSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02826 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02827 INFOT = 4
02828 CALL CSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02829 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02830 INFOT = 4
02831 CALL CSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02832 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02833 INFOT = 4
02834 CALL CSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02835 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02836 INFOT = 4
02837 CALL CSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
02838 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02839 INFOT = 7
02840 CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
02841 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02842 INFOT = 7
02843 CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
02844 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02845 INFOT = 7
02846 CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
02847 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02848 INFOT = 7
02849 CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
02850 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02851 INFOT = 9
02852 CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
02853 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02854 INFOT = 9
02855 CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
02856 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02857 INFOT = 9
02858 CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
02859 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02860 INFOT = 9
02861 CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
02862 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02863 INFOT = 12
02864 CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
02865 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02866 INFOT = 12
02867 CALL CSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02868 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02869 INFOT = 12
02870 CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
02871 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02872 INFOT = 12
02873 CALL CSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
02874 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02875
02876 100 IF( OK )THEN
02877 WRITE( NOUT, FMT = 9999 )SRNAMT
02878 ELSE
02879 WRITE( NOUT, FMT = 9998 )SRNAMT
02880 END IF
02881 RETURN
02882
02883 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
02884 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
02885 $ '**' )
02886
02887
02888
02889 END
02890 SUBROUTINE CMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
02891 $ TRANSL )
02892
02893
02894
02895
02896
02897
02898
02899
02900
02901
02902
02903
02904
02905
02906
02907
02908 COMPLEX ZERO, ONE
02909 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
02910 COMPLEX ROGUE
02911 PARAMETER ( ROGUE = ( -1.0E10, 1.0E10 ) )
02912 REAL RZERO
02913 PARAMETER ( RZERO = 0.0 )
02914 REAL RROGUE
02915 PARAMETER ( RROGUE = -1.0E10 )
02916
02917 COMPLEX TRANSL
02918 INTEGER LDA, M, N, NMAX
02919 LOGICAL RESET
02920 CHARACTER*1 DIAG, UPLO
02921 CHARACTER*2 TYPE
02922
02923 COMPLEX A( NMAX, * ), AA( * )
02924
02925 INTEGER I, IBEG, IEND, J, JJ
02926 LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
02927
02928 COMPLEX CBEG
02929 EXTERNAL CBEG
02930
02931 INTRINSIC CMPLX, CONJG, REAL
02932
02933 GEN = TYPE.EQ.'GE'
02934 HER = TYPE.EQ.'HE'
02935 SYM = TYPE.EQ.'SY'
02936 TRI = TYPE.EQ.'TR'
02937 UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U'
02938 LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L'
02939 UNIT = TRI.AND.DIAG.EQ.'U'
02940
02941
02942
02943 DO 20 J = 1, N
02944 DO 10 I = 1, M
02945 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
02946 $ THEN
02947 A( I, J ) = CBEG( RESET ) + TRANSL
02948 IF( I.NE.J )THEN
02949
02950 IF( N.GT.3.AND.J.EQ.N/2 )
02951 $ A( I, J ) = ZERO
02952 IF( HER )THEN
02953 A( J, I ) = CONJG( A( I, J ) )
02954 ELSE IF( SYM )THEN
02955 A( J, I ) = A( I, J )
02956 ELSE IF( TRI )THEN
02957 A( J, I ) = ZERO
02958 END IF
02959 END IF
02960 END IF
02961 10 CONTINUE
02962 IF( HER )
02963 $ A( J, J ) = CMPLX( REAL( A( J, J ) ), RZERO )
02964 IF( TRI )
02965 $ A( J, J ) = A( J, J ) + ONE
02966 IF( UNIT )
02967 $ A( J, J ) = ONE
02968 20 CONTINUE
02969
02970
02971
02972 IF( TYPE.EQ.'GE' )THEN
02973 DO 50 J = 1, N
02974 DO 30 I = 1, M
02975 AA( I + ( J - 1 )*LDA ) = A( I, J )
02976 30 CONTINUE
02977 DO 40 I = M + 1, LDA
02978 AA( I + ( J - 1 )*LDA ) = ROGUE
02979 40 CONTINUE
02980 50 CONTINUE
02981 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
02982 DO 90 J = 1, N
02983 IF( UPPER )THEN
02984 IBEG = 1
02985 IF( UNIT )THEN
02986 IEND = J - 1
02987 ELSE
02988 IEND = J
02989 END IF
02990 ELSE
02991 IF( UNIT )THEN
02992 IBEG = J + 1
02993 ELSE
02994 IBEG = J
02995 END IF
02996 IEND = N
02997 END IF
02998 DO 60 I = 1, IBEG - 1
02999 AA( I + ( J - 1 )*LDA ) = ROGUE
03000 60 CONTINUE
03001 DO 70 I = IBEG, IEND
03002 AA( I + ( J - 1 )*LDA ) = A( I, J )
03003 70 CONTINUE
03004 DO 80 I = IEND + 1, LDA
03005 AA( I + ( J - 1 )*LDA ) = ROGUE
03006 80 CONTINUE
03007 IF( HER )THEN
03008 JJ = J + ( J - 1 )*LDA
03009 AA( JJ ) = CMPLX( REAL( AA( JJ ) ), RROGUE )
03010 END IF
03011 90 CONTINUE
03012 END IF
03013 RETURN
03014
03015
03016
03017 END
03018 SUBROUTINE CMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
03019 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
03020 $ NOUT, MV )
03021
03022
03023
03024
03025
03026
03027
03028
03029
03030
03031
03032
03033 COMPLEX ZERO
03034 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
03035 REAL RZERO, RONE
03036 PARAMETER ( RZERO = 0.0, RONE = 1.0 )
03037
03038 COMPLEX ALPHA, BETA
03039 REAL EPS, ERR
03040 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
03041 LOGICAL FATAL, MV
03042 CHARACTER*1 TRANSA, TRANSB
03043
03044 COMPLEX A( LDA, * ), B( LDB, * ), C( LDC, * ),
03045 $ CC( LDCC, * ), CT( * )
03046 REAL G( * )
03047
03048 COMPLEX CL
03049 REAL ERRI
03050 INTEGER I, J, K
03051 LOGICAL CTRANA, CTRANB, TRANA, TRANB
03052
03053 INTRINSIC ABS, AIMAG, CONJG, MAX, REAL, SQRT
03054
03055 REAL ABS1
03056
03057 ABS1( CL ) = ABS( REAL( CL ) ) + ABS( AIMAG( CL ) )
03058
03059 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
03060 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
03061 CTRANA = TRANSA.EQ.'C'
03062 CTRANB = TRANSB.EQ.'C'
03063
03064
03065
03066
03067
03068 DO 220 J = 1, N
03069
03070 DO 10 I = 1, M
03071 CT( I ) = ZERO
03072 G( I ) = RZERO
03073 10 CONTINUE
03074 IF( .NOT.TRANA.AND..NOT.TRANB )THEN
03075 DO 30 K = 1, KK
03076 DO 20 I = 1, M
03077 CT( I ) = CT( I ) + A( I, K )*B( K, J )
03078 G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) )
03079 20 CONTINUE
03080 30 CONTINUE
03081 ELSE IF( TRANA.AND..NOT.TRANB )THEN
03082 IF( CTRANA )THEN
03083 DO 50 K = 1, KK
03084 DO 40 I = 1, M
03085 CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( K, J )
03086 G( I ) = G( I ) + ABS1( A( K, I ) )*
03087 $ ABS1( B( K, J ) )
03088 40 CONTINUE
03089 50 CONTINUE
03090 ELSE
03091 DO 70 K = 1, KK
03092 DO 60 I = 1, M
03093 CT( I ) = CT( I ) + A( K, I )*B( K, J )
03094 G( I ) = G( I ) + ABS1( A( K, I ) )*
03095 $ ABS1( B( K, J ) )
03096 60 CONTINUE
03097 70 CONTINUE
03098 END IF
03099 ELSE IF( .NOT.TRANA.AND.TRANB )THEN
03100 IF( CTRANB )THEN
03101 DO 90 K = 1, KK
03102 DO 80 I = 1, M
03103 CT( I ) = CT( I ) + A( I, K )*CONJG( B( J, K ) )
03104 G( I ) = G( I ) + ABS1( A( I, K ) )*
03105 $ ABS1( B( J, K ) )
03106 80 CONTINUE
03107 90 CONTINUE
03108 ELSE
03109 DO 110 K = 1, KK
03110 DO 100 I = 1, M
03111 CT( I ) = CT( I ) + A( I, K )*B( J, K )
03112 G( I ) = G( I ) + ABS1( A( I, K ) )*
03113 $ ABS1( B( J, K ) )
03114 100 CONTINUE
03115 110 CONTINUE
03116 END IF
03117 ELSE IF( TRANA.AND.TRANB )THEN
03118 IF( CTRANA )THEN
03119 IF( CTRANB )THEN
03120 DO 130 K = 1, KK
03121 DO 120 I = 1, M
03122 CT( I ) = CT( I ) + CONJG( A( K, I ) )*
03123 $ CONJG( B( J, K ) )
03124 G( I ) = G( I ) + ABS1( A( K, I ) )*
03125 $ ABS1( B( J, K ) )
03126 120 CONTINUE
03127 130 CONTINUE
03128 ELSE
03129 DO 150 K = 1, KK
03130 DO 140 I = 1, M
03131 CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( J, K )
03132 G( I ) = G( I ) + ABS1( A( K, I ) )*
03133 $ ABS1( B( J, K ) )
03134 140 CONTINUE
03135 150 CONTINUE
03136 END IF
03137 ELSE
03138 IF( CTRANB )THEN
03139 DO 170 K = 1, KK
03140 DO 160 I = 1, M
03141 CT( I ) = CT( I ) + A( K, I )*CONJG( B( J, K ) )
03142 G( I ) = G( I ) + ABS1( A( K, I ) )*
03143 $ ABS1( B( J, K ) )
03144 160 CONTINUE
03145 170 CONTINUE
03146 ELSE
03147 DO 190 K = 1, KK
03148 DO 180 I = 1, M
03149 CT( I ) = CT( I ) + A( K, I )*B( J, K )
03150 G( I ) = G( I ) + ABS1( A( K, I ) )*
03151 $ ABS1( B( J, K ) )
03152 180 CONTINUE
03153 190 CONTINUE
03154 END IF
03155 END IF
03156 END IF
03157 DO 200 I = 1, M
03158 CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
03159 G( I ) = ABS1( ALPHA )*G( I ) +
03160 $ ABS1( BETA )*ABS1( C( I, J ) )
03161 200 CONTINUE
03162
03163
03164
03165 ERR = ZERO
03166 DO 210 I = 1, M
03167 ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS
03168 IF( G( I ).NE.RZERO )
03169 $ ERRI = ERRI/G( I )
03170 ERR = MAX( ERR, ERRI )
03171 IF( ERR*SQRT( EPS ).GE.RONE )
03172 $ GO TO 230
03173 210 CONTINUE
03174
03175 220 CONTINUE
03176
03177
03178 GO TO 250
03179
03180
03181
03182 230 FATAL = .TRUE.
03183 WRITE( NOUT, FMT = 9999 )
03184 DO 240 I = 1, M
03185 IF( MV )THEN
03186 WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
03187 ELSE
03188 WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
03189 END IF
03190 240 CONTINUE
03191 IF( N.GT.1 )
03192 $ WRITE( NOUT, FMT = 9997 )J
03193
03194 250 CONTINUE
03195 RETURN
03196
03197 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
03198 $ 'F ACCURATE *******', /' EXPECTED RE',
03199 $ 'SULT COMPUTED RESULT' )
03200 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) )
03201 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
03202
03203
03204
03205 END
03206 LOGICAL FUNCTION LCE( RI, RJ, LR )
03207
03208
03209
03210
03211
03212
03213
03214
03215
03216
03217
03218
03219 INTEGER LR
03220
03221 COMPLEX RI( * ), RJ( * )
03222
03223 INTEGER I
03224
03225 DO 10 I = 1, LR
03226 IF( RI( I ).NE.RJ( I ) )
03227 $ GO TO 20
03228 10 CONTINUE
03229 LCE = .TRUE.
03230 GO TO 30
03231 20 CONTINUE
03232 LCE = .FALSE.
03233 30 RETURN
03234
03235
03236
03237 END
03238 LOGICAL FUNCTION LCERES( TYPE, UPLO, M, N, AA, AS, LDA )
03239
03240
03241
03242
03243
03244
03245
03246
03247
03248
03249
03250
03251
03252
03253 INTEGER LDA, M, N
03254 CHARACTER*1 UPLO
03255 CHARACTER*2 TYPE
03256
03257 COMPLEX AA( LDA, * ), AS( LDA, * )
03258
03259 INTEGER I, IBEG, IEND, J
03260 LOGICAL UPPER
03261
03262 UPPER = UPLO.EQ.'U'
03263 IF( TYPE.EQ.'GE' )THEN
03264 DO 20 J = 1, N
03265 DO 10 I = M + 1, LDA
03266 IF( AA( I, J ).NE.AS( I, J ) )
03267 $ GO TO 70
03268 10 CONTINUE
03269 20 CONTINUE
03270 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY' )THEN
03271 DO 50 J = 1, N
03272 IF( UPPER )THEN
03273 IBEG = 1
03274 IEND = J
03275 ELSE
03276 IBEG = J
03277 IEND = N
03278 END IF
03279 DO 30 I = 1, IBEG - 1
03280 IF( AA( I, J ).NE.AS( I, J ) )
03281 $ GO TO 70
03282 30 CONTINUE
03283 DO 40 I = IEND + 1, LDA
03284 IF( AA( I, J ).NE.AS( I, J ) )
03285 $ GO TO 70
03286 40 CONTINUE
03287 50 CONTINUE
03288 END IF
03289
03290 60 CONTINUE
03291 LCERES = .TRUE.
03292 GO TO 80
03293 70 CONTINUE
03294 LCERES = .FALSE.
03295 80 RETURN
03296
03297
03298
03299 END
03300 COMPLEX FUNCTION CBEG( RESET )
03301
03302
03303
03304
03305
03306
03307
03308
03309
03310
03311
03312
03313
03314 LOGICAL RESET
03315
03316 INTEGER I, IC, J, MI, MJ
03317
03318 SAVE I, IC, J, MI, MJ
03319
03320 INTRINSIC CMPLX
03321
03322 IF( RESET )THEN
03323
03324 MI = 891
03325 MJ = 457
03326 I = 7
03327 J = 7
03328 IC = 0
03329 RESET = .FALSE.
03330 END IF
03331
03332
03333
03334
03335
03336
03337
03338
03339 IC = IC + 1
03340 10 I = I*MI
03341 J = J*MJ
03342 I = I - 1000*( I/1000 )
03343 J = J - 1000*( J/1000 )
03344 IF( IC.GE.5 )THEN
03345 IC = 0
03346 GO TO 10
03347 END IF
03348 CBEG = CMPLX( ( I - 500 )/1001.0, ( J - 500 )/1001.0 )
03349 RETURN
03350
03351
03352
03353 END
03354 REAL FUNCTION SDIFF( X, Y )
03355
03356
03357
03358
03359
03360
03361
03362
03363
03364
03365 REAL X, Y
03366
03367 SDIFF = X - Y
03368 RETURN
03369
03370
03371
03372 END
03373 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
03374
03375
03376
03377
03378
03379
03380
03381
03382
03383
03384
03385
03386 INTEGER INFOT, NOUT
03387 LOGICAL LERR, OK
03388 CHARACTER*6 SRNAMT
03389
03390 IF( .NOT.LERR )THEN
03391 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
03392 OK = .FALSE.
03393 END IF
03394 LERR = .FALSE.
03395 RETURN
03396
03397 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
03398 $ 'ETECTED BY ', A6, ' *****' )
03399
03400
03401
03402 END
03403 SUBROUTINE XERBLA( SRNAME, INFO )
03404
03405
03406
03407
03408
03409
03410
03411
03412
03413
03414
03415
03416
03417
03418
03419
03420
03421
03422
03423 INTEGER INFO
03424 CHARACTER*6 SRNAME
03425
03426 INTEGER INFOT, NOUT
03427 LOGICAL LERR, OK
03428 CHARACTER*6 SRNAMT
03429
03430 COMMON /INFOC/INFOT, NOUT, OK, LERR
03431 COMMON /SRNAMC/SRNAMT
03432
03433 LERR = .TRUE.
03434 IF( INFO.NE.INFOT )THEN
03435 IF( INFOT.NE.0 )THEN
03436 WRITE( NOUT, FMT = 9999 )INFO, INFOT
03437 ELSE
03438 WRITE( NOUT, FMT = 9997 )INFO
03439 END IF
03440 OK = .FALSE.
03441 END IF
03442 IF( SRNAME.NE.SRNAMT )THEN
03443 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
03444 OK = .FALSE.
03445 END IF
03446 RETURN
03447
03448 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
03449 $ ' OF ', I2, ' *******' )
03450 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE',
03451 $ 'AD OF ', A6, ' *******' )
03452 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,
03453 $ ' *******' )
03454
03455
03456
03457 END
03458