1*bf2c3715SXin Li*> \brief \b CBLAT3 2*bf2c3715SXin Li* 3*bf2c3715SXin Li* =========== DOCUMENTATION =========== 4*bf2c3715SXin Li* 5*bf2c3715SXin Li* Online html documentation available at 6*bf2c3715SXin Li* http://www.netlib.org/lapack/explore-html/ 7*bf2c3715SXin Li* 8*bf2c3715SXin Li* Definition: 9*bf2c3715SXin Li* =========== 10*bf2c3715SXin Li* 11*bf2c3715SXin Li* PROGRAM CBLAT3 12*bf2c3715SXin Li* 13*bf2c3715SXin Li* 14*bf2c3715SXin Li*> \par Purpose: 15*bf2c3715SXin Li* ============= 16*bf2c3715SXin Li*> 17*bf2c3715SXin Li*> \verbatim 18*bf2c3715SXin Li*> 19*bf2c3715SXin Li*> Test program for the COMPLEX Level 3 Blas. 20*bf2c3715SXin Li*> 21*bf2c3715SXin Li*> The program must be driven by a short data file. The first 14 records 22*bf2c3715SXin Li*> of the file are read using list-directed input, the last 9 records 23*bf2c3715SXin Li*> are read using the format ( A6, L2 ). An annotated example of a data 24*bf2c3715SXin Li*> file can be obtained by deleting the first 3 characters from the 25*bf2c3715SXin Li*> following 23 lines: 26*bf2c3715SXin Li*> 'cblat3.out' NAME OF SUMMARY OUTPUT FILE 27*bf2c3715SXin Li*> 6 UNIT NUMBER OF SUMMARY FILE 28*bf2c3715SXin Li*> 'CBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE 29*bf2c3715SXin Li*> -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) 30*bf2c3715SXin Li*> F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. 31*bf2c3715SXin Li*> F LOGICAL FLAG, T TO STOP ON FAILURES. 32*bf2c3715SXin Li*> T LOGICAL FLAG, T TO TEST ERROR EXITS. 33*bf2c3715SXin Li*> 16.0 THRESHOLD VALUE OF TEST RATIO 34*bf2c3715SXin Li*> 6 NUMBER OF VALUES OF N 35*bf2c3715SXin Li*> 0 1 2 3 5 9 VALUES OF N 36*bf2c3715SXin Li*> 3 NUMBER OF VALUES OF ALPHA 37*bf2c3715SXin Li*> (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA 38*bf2c3715SXin Li*> 3 NUMBER OF VALUES OF BETA 39*bf2c3715SXin Li*> (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA 40*bf2c3715SXin Li*> CGEMM T PUT F FOR NO TEST. SAME COLUMNS. 41*bf2c3715SXin Li*> CHEMM T PUT F FOR NO TEST. SAME COLUMNS. 42*bf2c3715SXin Li*> CSYMM T PUT F FOR NO TEST. SAME COLUMNS. 43*bf2c3715SXin Li*> CTRMM T PUT F FOR NO TEST. SAME COLUMNS. 44*bf2c3715SXin Li*> CTRSM T PUT F FOR NO TEST. SAME COLUMNS. 45*bf2c3715SXin Li*> CHERK T PUT F FOR NO TEST. SAME COLUMNS. 46*bf2c3715SXin Li*> CSYRK T PUT F FOR NO TEST. SAME COLUMNS. 47*bf2c3715SXin Li*> CHER2K T PUT F FOR NO TEST. SAME COLUMNS. 48*bf2c3715SXin Li*> CSYR2K T PUT F FOR NO TEST. SAME COLUMNS. 49*bf2c3715SXin Li*> 50*bf2c3715SXin Li*> Further Details 51*bf2c3715SXin Li*> =============== 52*bf2c3715SXin Li*> 53*bf2c3715SXin Li*> See: 54*bf2c3715SXin Li*> 55*bf2c3715SXin Li*> Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S. 56*bf2c3715SXin Li*> A Set of Level 3 Basic Linear Algebra Subprograms. 57*bf2c3715SXin Li*> 58*bf2c3715SXin Li*> Technical Memorandum No.88 (Revision 1), Mathematics and 59*bf2c3715SXin Li*> Computer Science Division, Argonne National Laboratory, 9700 60*bf2c3715SXin Li*> South Cass Avenue, Argonne, Illinois 60439, US. 61*bf2c3715SXin Li*> 62*bf2c3715SXin Li*> -- Written on 8-February-1989. 63*bf2c3715SXin Li*> Jack Dongarra, Argonne National Laboratory. 64*bf2c3715SXin Li*> Iain Duff, AERE Harwell. 65*bf2c3715SXin Li*> Jeremy Du Croz, Numerical Algorithms Group Ltd. 66*bf2c3715SXin Li*> Sven Hammarling, Numerical Algorithms Group Ltd. 67*bf2c3715SXin Li*> 68*bf2c3715SXin Li*> 10-9-00: Change STATUS='NEW' to 'UNKNOWN' so that the testers 69*bf2c3715SXin Li*> can be run multiple times without deleting generated 70*bf2c3715SXin Li*> output files (susan) 71*bf2c3715SXin Li*> \endverbatim 72*bf2c3715SXin Li* 73*bf2c3715SXin Li* Authors: 74*bf2c3715SXin Li* ======== 75*bf2c3715SXin Li* 76*bf2c3715SXin Li*> \author Univ. of Tennessee 77*bf2c3715SXin Li*> \author Univ. of California Berkeley 78*bf2c3715SXin Li*> \author Univ. of Colorado Denver 79*bf2c3715SXin Li*> \author NAG Ltd. 80*bf2c3715SXin Li* 81*bf2c3715SXin Li*> \date April 2012 82*bf2c3715SXin Li* 83*bf2c3715SXin Li*> \ingroup complex_blas_testing 84*bf2c3715SXin Li* 85*bf2c3715SXin Li* ===================================================================== 86*bf2c3715SXin Li PROGRAM CBLAT3 87*bf2c3715SXin Li* 88*bf2c3715SXin Li* -- Reference BLAS test routine (version 3.4.1) -- 89*bf2c3715SXin Li* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- 90*bf2c3715SXin Li* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 91*bf2c3715SXin Li* April 2012 92*bf2c3715SXin Li* 93*bf2c3715SXin Li* ===================================================================== 94*bf2c3715SXin Li* 95*bf2c3715SXin Li* .. Parameters .. 96*bf2c3715SXin Li INTEGER NIN 97*bf2c3715SXin Li PARAMETER ( NIN = 5 ) 98*bf2c3715SXin Li INTEGER NSUBS 99*bf2c3715SXin Li PARAMETER ( NSUBS = 9 ) 100*bf2c3715SXin Li COMPLEX ZERO, ONE 101*bf2c3715SXin Li PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) ) 102*bf2c3715SXin Li REAL RZERO 103*bf2c3715SXin Li PARAMETER ( RZERO = 0.0 ) 104*bf2c3715SXin Li INTEGER NMAX 105*bf2c3715SXin Li PARAMETER ( NMAX = 65 ) 106*bf2c3715SXin Li INTEGER NIDMAX, NALMAX, NBEMAX 107*bf2c3715SXin Li PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 ) 108*bf2c3715SXin Li* .. Local Scalars .. 109*bf2c3715SXin Li REAL EPS, ERR, THRESH 110*bf2c3715SXin Li INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NOUT, NTRA 111*bf2c3715SXin Li LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE, 112*bf2c3715SXin Li $ TSTERR 113*bf2c3715SXin Li CHARACTER*1 TRANSA, TRANSB 114*bf2c3715SXin Li CHARACTER*6 SNAMET 115*bf2c3715SXin Li CHARACTER*32 SNAPS, SUMMRY 116*bf2c3715SXin Li* .. Local Arrays .. 117*bf2c3715SXin Li COMPLEX AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ), 118*bf2c3715SXin Li $ ALF( NALMAX ), AS( NMAX*NMAX ), 119*bf2c3715SXin Li $ BB( NMAX*NMAX ), BET( NBEMAX ), 120*bf2c3715SXin Li $ BS( NMAX*NMAX ), C( NMAX, NMAX ), 121*bf2c3715SXin Li $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ), 122*bf2c3715SXin Li $ W( 2*NMAX ) 123*bf2c3715SXin Li REAL G( NMAX ) 124*bf2c3715SXin Li INTEGER IDIM( NIDMAX ) 125*bf2c3715SXin Li LOGICAL LTEST( NSUBS ) 126*bf2c3715SXin Li CHARACTER*6 SNAMES( NSUBS ) 127*bf2c3715SXin Li* .. External Functions .. 128*bf2c3715SXin Li REAL SDIFF 129*bf2c3715SXin Li LOGICAL LCE 130*bf2c3715SXin Li EXTERNAL SDIFF, LCE 131*bf2c3715SXin Li* .. External Subroutines .. 132*bf2c3715SXin Li EXTERNAL CCHK1, CCHK2, CCHK3, CCHK4, CCHK5, CCHKE, CMMCH 133*bf2c3715SXin Li* .. Intrinsic Functions .. 134*bf2c3715SXin Li INTRINSIC MAX, MIN 135*bf2c3715SXin Li* .. Scalars in Common .. 136*bf2c3715SXin Li INTEGER INFOT, NOUTC 137*bf2c3715SXin Li LOGICAL LERR, OK 138*bf2c3715SXin Li CHARACTER*6 SRNAMT 139*bf2c3715SXin Li* .. Common blocks .. 140*bf2c3715SXin Li COMMON /INFOC/INFOT, NOUTC, OK, LERR 141*bf2c3715SXin Li COMMON /SRNAMC/SRNAMT 142*bf2c3715SXin Li* .. Data statements .. 143*bf2c3715SXin Li DATA SNAMES/'CGEMM ', 'CHEMM ', 'CSYMM ', 'CTRMM ', 144*bf2c3715SXin Li $ 'CTRSM ', 'CHERK ', 'CSYRK ', 'CHER2K', 145*bf2c3715SXin Li $ 'CSYR2K'/ 146*bf2c3715SXin Li* .. Executable Statements .. 147*bf2c3715SXin Li* 148*bf2c3715SXin Li* Read name and unit number for summary output file and open file. 149*bf2c3715SXin Li* 150*bf2c3715SXin Li READ( NIN, FMT = * )SUMMRY 151*bf2c3715SXin Li READ( NIN, FMT = * )NOUT 152*bf2c3715SXin Li OPEN( NOUT, FILE = SUMMRY ) 153*bf2c3715SXin Li NOUTC = NOUT 154*bf2c3715SXin Li* 155*bf2c3715SXin Li* Read name and unit number for snapshot output file and open file. 156*bf2c3715SXin Li* 157*bf2c3715SXin Li READ( NIN, FMT = * )SNAPS 158*bf2c3715SXin Li READ( NIN, FMT = * )NTRA 159*bf2c3715SXin Li TRACE = NTRA.GE.0 160*bf2c3715SXin Li IF( TRACE )THEN 161*bf2c3715SXin Li OPEN( NTRA, FILE = SNAPS ) 162*bf2c3715SXin Li END IF 163*bf2c3715SXin Li* Read the flag that directs rewinding of the snapshot file. 164*bf2c3715SXin Li READ( NIN, FMT = * )REWI 165*bf2c3715SXin Li REWI = REWI.AND.TRACE 166*bf2c3715SXin Li* Read the flag that directs stopping on any failure. 167*bf2c3715SXin Li READ( NIN, FMT = * )SFATAL 168*bf2c3715SXin Li* Read the flag that indicates whether error exits are to be tested. 169*bf2c3715SXin Li READ( NIN, FMT = * )TSTERR 170*bf2c3715SXin Li* Read the threshold value of the test ratio 171*bf2c3715SXin Li READ( NIN, FMT = * )THRESH 172*bf2c3715SXin Li* 173*bf2c3715SXin Li* Read and check the parameter values for the tests. 174*bf2c3715SXin Li* 175*bf2c3715SXin Li* Values of N 176*bf2c3715SXin Li READ( NIN, FMT = * )NIDIM 177*bf2c3715SXin Li IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN 178*bf2c3715SXin Li WRITE( NOUT, FMT = 9997 )'N', NIDMAX 179*bf2c3715SXin Li GO TO 220 180*bf2c3715SXin Li END IF 181*bf2c3715SXin Li READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM ) 182*bf2c3715SXin Li DO 10 I = 1, NIDIM 183*bf2c3715SXin Li IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN 184*bf2c3715SXin Li WRITE( NOUT, FMT = 9996 )NMAX 185*bf2c3715SXin Li GO TO 220 186*bf2c3715SXin Li END IF 187*bf2c3715SXin Li 10 CONTINUE 188*bf2c3715SXin Li* Values of ALPHA 189*bf2c3715SXin Li READ( NIN, FMT = * )NALF 190*bf2c3715SXin Li IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN 191*bf2c3715SXin Li WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX 192*bf2c3715SXin Li GO TO 220 193*bf2c3715SXin Li END IF 194*bf2c3715SXin Li READ( NIN, FMT = * )( ALF( I ), I = 1, NALF ) 195*bf2c3715SXin Li* Values of BETA 196*bf2c3715SXin Li READ( NIN, FMT = * )NBET 197*bf2c3715SXin Li IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN 198*bf2c3715SXin Li WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX 199*bf2c3715SXin Li GO TO 220 200*bf2c3715SXin Li END IF 201*bf2c3715SXin Li READ( NIN, FMT = * )( BET( I ), I = 1, NBET ) 202*bf2c3715SXin Li* 203*bf2c3715SXin Li* Report values of parameters. 204*bf2c3715SXin Li* 205*bf2c3715SXin Li WRITE( NOUT, FMT = 9995 ) 206*bf2c3715SXin Li WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM ) 207*bf2c3715SXin Li WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF ) 208*bf2c3715SXin Li WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET ) 209*bf2c3715SXin Li IF( .NOT.TSTERR )THEN 210*bf2c3715SXin Li WRITE( NOUT, FMT = * ) 211*bf2c3715SXin Li WRITE( NOUT, FMT = 9984 ) 212*bf2c3715SXin Li END IF 213*bf2c3715SXin Li WRITE( NOUT, FMT = * ) 214*bf2c3715SXin Li WRITE( NOUT, FMT = 9999 )THRESH 215*bf2c3715SXin Li WRITE( NOUT, FMT = * ) 216*bf2c3715SXin Li* 217*bf2c3715SXin Li* Read names of subroutines and flags which indicate 218*bf2c3715SXin Li* whether they are to be tested. 219*bf2c3715SXin Li* 220*bf2c3715SXin Li DO 20 I = 1, NSUBS 221*bf2c3715SXin Li LTEST( I ) = .FALSE. 222*bf2c3715SXin Li 20 CONTINUE 223*bf2c3715SXin Li 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT 224*bf2c3715SXin Li DO 40 I = 1, NSUBS 225*bf2c3715SXin Li IF( SNAMET.EQ.SNAMES( I ) ) 226*bf2c3715SXin Li $ GO TO 50 227*bf2c3715SXin Li 40 CONTINUE 228*bf2c3715SXin Li WRITE( NOUT, FMT = 9990 )SNAMET 229*bf2c3715SXin Li STOP 230*bf2c3715SXin Li 50 LTEST( I ) = LTESTT 231*bf2c3715SXin Li GO TO 30 232*bf2c3715SXin Li* 233*bf2c3715SXin Li 60 CONTINUE 234*bf2c3715SXin Li CLOSE ( NIN ) 235*bf2c3715SXin Li* 236*bf2c3715SXin Li* Compute EPS (the machine precision). 237*bf2c3715SXin Li* 238*bf2c3715SXin Li EPS = EPSILON(RZERO) 239*bf2c3715SXin Li WRITE( NOUT, FMT = 9998 )EPS 240*bf2c3715SXin Li* 241*bf2c3715SXin Li* Check the reliability of CMMCH using exact data. 242*bf2c3715SXin Li* 243*bf2c3715SXin Li N = MIN( 32, NMAX ) 244*bf2c3715SXin Li DO 100 J = 1, N 245*bf2c3715SXin Li DO 90 I = 1, N 246*bf2c3715SXin Li AB( I, J ) = MAX( I - J + 1, 0 ) 247*bf2c3715SXin Li 90 CONTINUE 248*bf2c3715SXin Li AB( J, NMAX + 1 ) = J 249*bf2c3715SXin Li AB( 1, NMAX + J ) = J 250*bf2c3715SXin Li C( J, 1 ) = ZERO 251*bf2c3715SXin Li 100 CONTINUE 252*bf2c3715SXin Li DO 110 J = 1, N 253*bf2c3715SXin Li CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3 254*bf2c3715SXin Li 110 CONTINUE 255*bf2c3715SXin Li* CC holds the exact result. On exit from CMMCH CT holds 256*bf2c3715SXin Li* the result computed by CMMCH. 257*bf2c3715SXin Li TRANSA = 'N' 258*bf2c3715SXin Li TRANSB = 'N' 259*bf2c3715SXin Li CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, 260*bf2c3715SXin Li $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, 261*bf2c3715SXin Li $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) 262*bf2c3715SXin Li SAME = LCE( CC, CT, N ) 263*bf2c3715SXin Li IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN 264*bf2c3715SXin Li WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR 265*bf2c3715SXin Li STOP 266*bf2c3715SXin Li END IF 267*bf2c3715SXin Li TRANSB = 'C' 268*bf2c3715SXin Li CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, 269*bf2c3715SXin Li $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, 270*bf2c3715SXin Li $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) 271*bf2c3715SXin Li SAME = LCE( CC, CT, N ) 272*bf2c3715SXin Li IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN 273*bf2c3715SXin Li WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR 274*bf2c3715SXin Li STOP 275*bf2c3715SXin Li END IF 276*bf2c3715SXin Li DO 120 J = 1, N 277*bf2c3715SXin Li AB( J, NMAX + 1 ) = N - J + 1 278*bf2c3715SXin Li AB( 1, NMAX + J ) = N - J + 1 279*bf2c3715SXin Li 120 CONTINUE 280*bf2c3715SXin Li DO 130 J = 1, N 281*bf2c3715SXin Li CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 - 282*bf2c3715SXin Li $ ( ( J + 1 )*J*( J - 1 ) )/3 283*bf2c3715SXin Li 130 CONTINUE 284*bf2c3715SXin Li TRANSA = 'C' 285*bf2c3715SXin Li TRANSB = 'N' 286*bf2c3715SXin Li CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, 287*bf2c3715SXin Li $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, 288*bf2c3715SXin Li $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) 289*bf2c3715SXin Li SAME = LCE( CC, CT, N ) 290*bf2c3715SXin Li IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN 291*bf2c3715SXin Li WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR 292*bf2c3715SXin Li STOP 293*bf2c3715SXin Li END IF 294*bf2c3715SXin Li TRANSB = 'C' 295*bf2c3715SXin Li CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, 296*bf2c3715SXin Li $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, 297*bf2c3715SXin Li $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) 298*bf2c3715SXin Li SAME = LCE( CC, CT, N ) 299*bf2c3715SXin Li IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN 300*bf2c3715SXin Li WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR 301*bf2c3715SXin Li STOP 302*bf2c3715SXin Li END IF 303*bf2c3715SXin Li* 304*bf2c3715SXin Li* Test each subroutine in turn. 305*bf2c3715SXin Li* 306*bf2c3715SXin Li DO 200 ISNUM = 1, NSUBS 307*bf2c3715SXin Li WRITE( NOUT, FMT = * ) 308*bf2c3715SXin Li IF( .NOT.LTEST( ISNUM ) )THEN 309*bf2c3715SXin Li* Subprogram is not to be tested. 310*bf2c3715SXin Li WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM ) 311*bf2c3715SXin Li ELSE 312*bf2c3715SXin Li SRNAMT = SNAMES( ISNUM ) 313*bf2c3715SXin Li* Test error exits. 314*bf2c3715SXin Li IF( TSTERR )THEN 315*bf2c3715SXin Li CALL CCHKE( ISNUM, SNAMES( ISNUM ), NOUT ) 316*bf2c3715SXin Li WRITE( NOUT, FMT = * ) 317*bf2c3715SXin Li END IF 318*bf2c3715SXin Li* Test computations. 319*bf2c3715SXin Li INFOT = 0 320*bf2c3715SXin Li OK = .TRUE. 321*bf2c3715SXin Li FATAL = .FALSE. 322*bf2c3715SXin Li GO TO ( 140, 150, 150, 160, 160, 170, 170, 323*bf2c3715SXin Li $ 180, 180 )ISNUM 324*bf2c3715SXin Li* Test CGEMM, 01. 325*bf2c3715SXin Li 140 CALL CCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, 326*bf2c3715SXin Li $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, 327*bf2c3715SXin Li $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, 328*bf2c3715SXin Li $ CC, CS, CT, G ) 329*bf2c3715SXin Li GO TO 190 330*bf2c3715SXin Li* Test CHEMM, 02, CSYMM, 03. 331*bf2c3715SXin Li 150 CALL CCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, 332*bf2c3715SXin Li $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, 333*bf2c3715SXin Li $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, 334*bf2c3715SXin Li $ CC, CS, CT, G ) 335*bf2c3715SXin Li GO TO 190 336*bf2c3715SXin Li* Test CTRMM, 04, CTRSM, 05. 337*bf2c3715SXin Li 160 CALL CCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, 338*bf2c3715SXin Li $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB, 339*bf2c3715SXin Li $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C ) 340*bf2c3715SXin Li GO TO 190 341*bf2c3715SXin Li* Test CHERK, 06, CSYRK, 07. 342*bf2c3715SXin Li 170 CALL CCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, 343*bf2c3715SXin Li $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, 344*bf2c3715SXin Li $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, 345*bf2c3715SXin Li $ CC, CS, CT, G ) 346*bf2c3715SXin Li GO TO 190 347*bf2c3715SXin Li* Test CHER2K, 08, CSYR2K, 09. 348*bf2c3715SXin Li 180 CALL CCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, 349*bf2c3715SXin Li $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, 350*bf2c3715SXin Li $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W ) 351*bf2c3715SXin Li GO TO 190 352*bf2c3715SXin Li* 353*bf2c3715SXin Li 190 IF( FATAL.AND.SFATAL ) 354*bf2c3715SXin Li $ GO TO 210 355*bf2c3715SXin Li END IF 356*bf2c3715SXin Li 200 CONTINUE 357*bf2c3715SXin Li WRITE( NOUT, FMT = 9986 ) 358*bf2c3715SXin Li GO TO 230 359*bf2c3715SXin Li* 360*bf2c3715SXin Li 210 CONTINUE 361*bf2c3715SXin Li WRITE( NOUT, FMT = 9985 ) 362*bf2c3715SXin Li GO TO 230 363*bf2c3715SXin Li* 364*bf2c3715SXin Li 220 CONTINUE 365*bf2c3715SXin Li WRITE( NOUT, FMT = 9991 ) 366*bf2c3715SXin Li* 367*bf2c3715SXin Li 230 CONTINUE 368*bf2c3715SXin Li IF( TRACE ) 369*bf2c3715SXin Li $ CLOSE ( NTRA ) 370*bf2c3715SXin Li CLOSE ( NOUT ) 371*bf2c3715SXin Li STOP 372*bf2c3715SXin Li* 373*bf2c3715SXin Li 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES', 374*bf2c3715SXin Li $ 'S THAN', F8.2 ) 375*bf2c3715SXin Li 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 ) 376*bf2c3715SXin Li 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ', 377*bf2c3715SXin Li $ 'THAN ', I2 ) 378*bf2c3715SXin Li 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 ) 379*bf2c3715SXin Li 9995 FORMAT( ' TESTS OF THE COMPLEX LEVEL 3 BLAS', //' THE F', 380*bf2c3715SXin Li $ 'OLLOWING PARAMETER VALUES WILL BE USED:' ) 381*bf2c3715SXin Li 9994 FORMAT( ' FOR N ', 9I6 ) 382*bf2c3715SXin Li 9993 FORMAT( ' FOR ALPHA ', 383*bf2c3715SXin Li $ 7( '(', F4.1, ',', F4.1, ') ', : ) ) 384*bf2c3715SXin Li 9992 FORMAT( ' FOR BETA ', 385*bf2c3715SXin Li $ 7( '(', F4.1, ',', F4.1, ') ', : ) ) 386*bf2c3715SXin Li 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM', 387*bf2c3715SXin Li $ /' ******* TESTS ABANDONED *******' ) 388*bf2c3715SXin Li 9990 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T', 389*bf2c3715SXin Li $ 'ESTS ABANDONED *******' ) 390*bf2c3715SXin Li 9989 FORMAT( ' ERROR IN CMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU', 391*bf2c3715SXin Li $ 'ATED WRONGLY.', /' CMMCH WAS CALLED WITH TRANSA = ', A1, 392*bf2c3715SXin Li $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ', 393*bf2c3715SXin Li $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ', 394*bf2c3715SXin Li $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ', 395*bf2c3715SXin Li $ '*******' ) 396*bf2c3715SXin Li 9988 FORMAT( A6, L2 ) 397*bf2c3715SXin Li 9987 FORMAT( 1X, A6, ' WAS NOT TESTED' ) 398*bf2c3715SXin Li 9986 FORMAT( /' END OF TESTS' ) 399*bf2c3715SXin Li 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' ) 400*bf2c3715SXin Li 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' ) 401*bf2c3715SXin Li* 402*bf2c3715SXin Li* End of CBLAT3. 403*bf2c3715SXin Li* 404*bf2c3715SXin Li END 405*bf2c3715SXin Li SUBROUTINE CCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, 406*bf2c3715SXin Li $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, 407*bf2c3715SXin Li $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G ) 408*bf2c3715SXin Li* 409*bf2c3715SXin Li* Tests CGEMM. 410*bf2c3715SXin Li* 411*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 412*bf2c3715SXin Li* 413*bf2c3715SXin Li* -- Written on 8-February-1989. 414*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 415*bf2c3715SXin Li* Iain Duff, AERE Harwell. 416*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 417*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 418*bf2c3715SXin Li* 419*bf2c3715SXin Li* .. Parameters .. 420*bf2c3715SXin Li COMPLEX ZERO 421*bf2c3715SXin Li PARAMETER ( ZERO = ( 0.0, 0.0 ) ) 422*bf2c3715SXin Li REAL RZERO 423*bf2c3715SXin Li PARAMETER ( RZERO = 0.0 ) 424*bf2c3715SXin Li* .. Scalar Arguments .. 425*bf2c3715SXin Li REAL EPS, THRESH 426*bf2c3715SXin Li INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA 427*bf2c3715SXin Li LOGICAL FATAL, REWI, TRACE 428*bf2c3715SXin Li CHARACTER*6 SNAME 429*bf2c3715SXin Li* .. Array Arguments .. 430*bf2c3715SXin Li COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), 431*bf2c3715SXin Li $ AS( NMAX*NMAX ), B( NMAX, NMAX ), 432*bf2c3715SXin Li $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), 433*bf2c3715SXin Li $ C( NMAX, NMAX ), CC( NMAX*NMAX ), 434*bf2c3715SXin Li $ CS( NMAX*NMAX ), CT( NMAX ) 435*bf2c3715SXin Li REAL G( NMAX ) 436*bf2c3715SXin Li INTEGER IDIM( NIDIM ) 437*bf2c3715SXin Li* .. Local Scalars .. 438*bf2c3715SXin Li COMPLEX ALPHA, ALS, BETA, BLS 439*bf2c3715SXin Li REAL ERR, ERRMAX 440*bf2c3715SXin Li INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA, 441*bf2c3715SXin Li $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M, 442*bf2c3715SXin Li $ MA, MB, MS, N, NA, NARGS, NB, NC, NS 443*bf2c3715SXin Li LOGICAL NULL, RESET, SAME, TRANA, TRANB 444*bf2c3715SXin Li CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB 445*bf2c3715SXin Li CHARACTER*3 ICH 446*bf2c3715SXin Li* .. Local Arrays .. 447*bf2c3715SXin Li LOGICAL ISAME( 13 ) 448*bf2c3715SXin Li* .. External Functions .. 449*bf2c3715SXin Li LOGICAL LCE, LCERES 450*bf2c3715SXin Li EXTERNAL LCE, LCERES 451*bf2c3715SXin Li* .. External Subroutines .. 452*bf2c3715SXin Li EXTERNAL CGEMM, CMAKE, CMMCH 453*bf2c3715SXin Li* .. Intrinsic Functions .. 454*bf2c3715SXin Li INTRINSIC MAX 455*bf2c3715SXin Li* .. Scalars in Common .. 456*bf2c3715SXin Li INTEGER INFOT, NOUTC 457*bf2c3715SXin Li LOGICAL LERR, OK 458*bf2c3715SXin Li* .. Common blocks .. 459*bf2c3715SXin Li COMMON /INFOC/INFOT, NOUTC, OK, LERR 460*bf2c3715SXin Li* .. Data statements .. 461*bf2c3715SXin Li DATA ICH/'NTC'/ 462*bf2c3715SXin Li* .. Executable Statements .. 463*bf2c3715SXin Li* 464*bf2c3715SXin Li NARGS = 13 465*bf2c3715SXin Li NC = 0 466*bf2c3715SXin Li RESET = .TRUE. 467*bf2c3715SXin Li ERRMAX = RZERO 468*bf2c3715SXin Li* 469*bf2c3715SXin Li DO 110 IM = 1, NIDIM 470*bf2c3715SXin Li M = IDIM( IM ) 471*bf2c3715SXin Li* 472*bf2c3715SXin Li DO 100 IN = 1, NIDIM 473*bf2c3715SXin Li N = IDIM( IN ) 474*bf2c3715SXin Li* Set LDC to 1 more than minimum value if room. 475*bf2c3715SXin Li LDC = M 476*bf2c3715SXin Li IF( LDC.LT.NMAX ) 477*bf2c3715SXin Li $ LDC = LDC + 1 478*bf2c3715SXin Li* Skip tests if not enough room. 479*bf2c3715SXin Li IF( LDC.GT.NMAX ) 480*bf2c3715SXin Li $ GO TO 100 481*bf2c3715SXin Li LCC = LDC*N 482*bf2c3715SXin Li NULL = N.LE.0.OR.M.LE.0 483*bf2c3715SXin Li* 484*bf2c3715SXin Li DO 90 IK = 1, NIDIM 485*bf2c3715SXin Li K = IDIM( IK ) 486*bf2c3715SXin Li* 487*bf2c3715SXin Li DO 80 ICA = 1, 3 488*bf2c3715SXin Li TRANSA = ICH( ICA: ICA ) 489*bf2c3715SXin Li TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C' 490*bf2c3715SXin Li* 491*bf2c3715SXin Li IF( TRANA )THEN 492*bf2c3715SXin Li MA = K 493*bf2c3715SXin Li NA = M 494*bf2c3715SXin Li ELSE 495*bf2c3715SXin Li MA = M 496*bf2c3715SXin Li NA = K 497*bf2c3715SXin Li END IF 498*bf2c3715SXin Li* Set LDA to 1 more than minimum value if room. 499*bf2c3715SXin Li LDA = MA 500*bf2c3715SXin Li IF( LDA.LT.NMAX ) 501*bf2c3715SXin Li $ LDA = LDA + 1 502*bf2c3715SXin Li* Skip tests if not enough room. 503*bf2c3715SXin Li IF( LDA.GT.NMAX ) 504*bf2c3715SXin Li $ GO TO 80 505*bf2c3715SXin Li LAA = LDA*NA 506*bf2c3715SXin Li* 507*bf2c3715SXin Li* Generate the matrix A. 508*bf2c3715SXin Li* 509*bf2c3715SXin Li CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA, 510*bf2c3715SXin Li $ RESET, ZERO ) 511*bf2c3715SXin Li* 512*bf2c3715SXin Li DO 70 ICB = 1, 3 513*bf2c3715SXin Li TRANSB = ICH( ICB: ICB ) 514*bf2c3715SXin Li TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C' 515*bf2c3715SXin Li* 516*bf2c3715SXin Li IF( TRANB )THEN 517*bf2c3715SXin Li MB = N 518*bf2c3715SXin Li NB = K 519*bf2c3715SXin Li ELSE 520*bf2c3715SXin Li MB = K 521*bf2c3715SXin Li NB = N 522*bf2c3715SXin Li END IF 523*bf2c3715SXin Li* Set LDB to 1 more than minimum value if room. 524*bf2c3715SXin Li LDB = MB 525*bf2c3715SXin Li IF( LDB.LT.NMAX ) 526*bf2c3715SXin Li $ LDB = LDB + 1 527*bf2c3715SXin Li* Skip tests if not enough room. 528*bf2c3715SXin Li IF( LDB.GT.NMAX ) 529*bf2c3715SXin Li $ GO TO 70 530*bf2c3715SXin Li LBB = LDB*NB 531*bf2c3715SXin Li* 532*bf2c3715SXin Li* Generate the matrix B. 533*bf2c3715SXin Li* 534*bf2c3715SXin Li CALL CMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB, 535*bf2c3715SXin Li $ LDB, RESET, ZERO ) 536*bf2c3715SXin Li* 537*bf2c3715SXin Li DO 60 IA = 1, NALF 538*bf2c3715SXin Li ALPHA = ALF( IA ) 539*bf2c3715SXin Li* 540*bf2c3715SXin Li DO 50 IB = 1, NBET 541*bf2c3715SXin Li BETA = BET( IB ) 542*bf2c3715SXin Li* 543*bf2c3715SXin Li* Generate the matrix C. 544*bf2c3715SXin Li* 545*bf2c3715SXin Li CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX, 546*bf2c3715SXin Li $ CC, LDC, RESET, ZERO ) 547*bf2c3715SXin Li* 548*bf2c3715SXin Li NC = NC + 1 549*bf2c3715SXin Li* 550*bf2c3715SXin Li* Save every datum before calling the 551*bf2c3715SXin Li* subroutine. 552*bf2c3715SXin Li* 553*bf2c3715SXin Li TRANAS = TRANSA 554*bf2c3715SXin Li TRANBS = TRANSB 555*bf2c3715SXin Li MS = M 556*bf2c3715SXin Li NS = N 557*bf2c3715SXin Li KS = K 558*bf2c3715SXin Li ALS = ALPHA 559*bf2c3715SXin Li DO 10 I = 1, LAA 560*bf2c3715SXin Li AS( I ) = AA( I ) 561*bf2c3715SXin Li 10 CONTINUE 562*bf2c3715SXin Li LDAS = LDA 563*bf2c3715SXin Li DO 20 I = 1, LBB 564*bf2c3715SXin Li BS( I ) = BB( I ) 565*bf2c3715SXin Li 20 CONTINUE 566*bf2c3715SXin Li LDBS = LDB 567*bf2c3715SXin Li BLS = BETA 568*bf2c3715SXin Li DO 30 I = 1, LCC 569*bf2c3715SXin Li CS( I ) = CC( I ) 570*bf2c3715SXin Li 30 CONTINUE 571*bf2c3715SXin Li LDCS = LDC 572*bf2c3715SXin Li* 573*bf2c3715SXin Li* Call the subroutine. 574*bf2c3715SXin Li* 575*bf2c3715SXin Li IF( TRACE ) 576*bf2c3715SXin Li $ WRITE( NTRA, FMT = 9995 )NC, SNAME, 577*bf2c3715SXin Li $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB, 578*bf2c3715SXin Li $ BETA, LDC 579*bf2c3715SXin Li IF( REWI ) 580*bf2c3715SXin Li $ REWIND NTRA 581*bf2c3715SXin Li CALL CGEMM( TRANSA, TRANSB, M, N, K, ALPHA, 582*bf2c3715SXin Li $ AA, LDA, BB, LDB, BETA, CC, LDC ) 583*bf2c3715SXin Li* 584*bf2c3715SXin Li* Check if error-exit was taken incorrectly. 585*bf2c3715SXin Li* 586*bf2c3715SXin Li IF( .NOT.OK )THEN 587*bf2c3715SXin Li WRITE( NOUT, FMT = 9994 ) 588*bf2c3715SXin Li FATAL = .TRUE. 589*bf2c3715SXin Li GO TO 120 590*bf2c3715SXin Li END IF 591*bf2c3715SXin Li* 592*bf2c3715SXin Li* See what data changed inside subroutines. 593*bf2c3715SXin Li* 594*bf2c3715SXin Li ISAME( 1 ) = TRANSA.EQ.TRANAS 595*bf2c3715SXin Li ISAME( 2 ) = TRANSB.EQ.TRANBS 596*bf2c3715SXin Li ISAME( 3 ) = MS.EQ.M 597*bf2c3715SXin Li ISAME( 4 ) = NS.EQ.N 598*bf2c3715SXin Li ISAME( 5 ) = KS.EQ.K 599*bf2c3715SXin Li ISAME( 6 ) = ALS.EQ.ALPHA 600*bf2c3715SXin Li ISAME( 7 ) = LCE( AS, AA, LAA ) 601*bf2c3715SXin Li ISAME( 8 ) = LDAS.EQ.LDA 602*bf2c3715SXin Li ISAME( 9 ) = LCE( BS, BB, LBB ) 603*bf2c3715SXin Li ISAME( 10 ) = LDBS.EQ.LDB 604*bf2c3715SXin Li ISAME( 11 ) = BLS.EQ.BETA 605*bf2c3715SXin Li IF( NULL )THEN 606*bf2c3715SXin Li ISAME( 12 ) = LCE( CS, CC, LCC ) 607*bf2c3715SXin Li ELSE 608*bf2c3715SXin Li ISAME( 12 ) = LCERES( 'GE', ' ', M, N, CS, 609*bf2c3715SXin Li $ CC, LDC ) 610*bf2c3715SXin Li END IF 611*bf2c3715SXin Li ISAME( 13 ) = LDCS.EQ.LDC 612*bf2c3715SXin Li* 613*bf2c3715SXin Li* If data was incorrectly changed, report 614*bf2c3715SXin Li* and return. 615*bf2c3715SXin Li* 616*bf2c3715SXin Li SAME = .TRUE. 617*bf2c3715SXin Li DO 40 I = 1, NARGS 618*bf2c3715SXin Li SAME = SAME.AND.ISAME( I ) 619*bf2c3715SXin Li IF( .NOT.ISAME( I ) ) 620*bf2c3715SXin Li $ WRITE( NOUT, FMT = 9998 )I 621*bf2c3715SXin Li 40 CONTINUE 622*bf2c3715SXin Li IF( .NOT.SAME )THEN 623*bf2c3715SXin Li FATAL = .TRUE. 624*bf2c3715SXin Li GO TO 120 625*bf2c3715SXin Li END IF 626*bf2c3715SXin Li* 627*bf2c3715SXin Li IF( .NOT.NULL )THEN 628*bf2c3715SXin Li* 629*bf2c3715SXin Li* Check the result. 630*bf2c3715SXin Li* 631*bf2c3715SXin Li CALL CMMCH( TRANSA, TRANSB, M, N, K, 632*bf2c3715SXin Li $ ALPHA, A, NMAX, B, NMAX, BETA, 633*bf2c3715SXin Li $ C, NMAX, CT, G, CC, LDC, EPS, 634*bf2c3715SXin Li $ ERR, FATAL, NOUT, .TRUE. ) 635*bf2c3715SXin Li ERRMAX = MAX( ERRMAX, ERR ) 636*bf2c3715SXin Li* If got really bad answer, report and 637*bf2c3715SXin Li* return. 638*bf2c3715SXin Li IF( FATAL ) 639*bf2c3715SXin Li $ GO TO 120 640*bf2c3715SXin Li END IF 641*bf2c3715SXin Li* 642*bf2c3715SXin Li 50 CONTINUE 643*bf2c3715SXin Li* 644*bf2c3715SXin Li 60 CONTINUE 645*bf2c3715SXin Li* 646*bf2c3715SXin Li 70 CONTINUE 647*bf2c3715SXin Li* 648*bf2c3715SXin Li 80 CONTINUE 649*bf2c3715SXin Li* 650*bf2c3715SXin Li 90 CONTINUE 651*bf2c3715SXin Li* 652*bf2c3715SXin Li 100 CONTINUE 653*bf2c3715SXin Li* 654*bf2c3715SXin Li 110 CONTINUE 655*bf2c3715SXin Li* 656*bf2c3715SXin Li* Report result. 657*bf2c3715SXin Li* 658*bf2c3715SXin Li IF( ERRMAX.LT.THRESH )THEN 659*bf2c3715SXin Li WRITE( NOUT, FMT = 9999 )SNAME, NC 660*bf2c3715SXin Li ELSE 661*bf2c3715SXin Li WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX 662*bf2c3715SXin Li END IF 663*bf2c3715SXin Li GO TO 130 664*bf2c3715SXin Li* 665*bf2c3715SXin Li 120 CONTINUE 666*bf2c3715SXin Li WRITE( NOUT, FMT = 9996 )SNAME 667*bf2c3715SXin Li WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K, 668*bf2c3715SXin Li $ ALPHA, LDA, LDB, BETA, LDC 669*bf2c3715SXin Li* 670*bf2c3715SXin Li 130 CONTINUE 671*bf2c3715SXin Li RETURN 672*bf2c3715SXin Li* 673*bf2c3715SXin Li 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', 674*bf2c3715SXin Li $ 'S)' ) 675*bf2c3715SXin Li 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', 676*bf2c3715SXin Li $ 'ANGED INCORRECTLY *******' ) 677*bf2c3715SXin Li 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', 678*bf2c3715SXin Li $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, 679*bf2c3715SXin Li $ ' - SUSPECT *******' ) 680*bf2c3715SXin Li 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' ) 681*bf2c3715SXin Li 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',''', A1, ''',', 682*bf2c3715SXin Li $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, 683*bf2c3715SXin Li $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' ) 684*bf2c3715SXin Li 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', 685*bf2c3715SXin Li $ '******' ) 686*bf2c3715SXin Li* 687*bf2c3715SXin Li* End of CCHK1. 688*bf2c3715SXin Li* 689*bf2c3715SXin Li END 690*bf2c3715SXin Li SUBROUTINE CCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, 691*bf2c3715SXin Li $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, 692*bf2c3715SXin Li $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G ) 693*bf2c3715SXin Li* 694*bf2c3715SXin Li* Tests CHEMM and CSYMM. 695*bf2c3715SXin Li* 696*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 697*bf2c3715SXin Li* 698*bf2c3715SXin Li* -- Written on 8-February-1989. 699*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 700*bf2c3715SXin Li* Iain Duff, AERE Harwell. 701*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 702*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 703*bf2c3715SXin Li* 704*bf2c3715SXin Li* .. Parameters .. 705*bf2c3715SXin Li COMPLEX ZERO 706*bf2c3715SXin Li PARAMETER ( ZERO = ( 0.0, 0.0 ) ) 707*bf2c3715SXin Li REAL RZERO 708*bf2c3715SXin Li PARAMETER ( RZERO = 0.0 ) 709*bf2c3715SXin Li* .. Scalar Arguments .. 710*bf2c3715SXin Li REAL EPS, THRESH 711*bf2c3715SXin Li INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA 712*bf2c3715SXin Li LOGICAL FATAL, REWI, TRACE 713*bf2c3715SXin Li CHARACTER*6 SNAME 714*bf2c3715SXin Li* .. Array Arguments .. 715*bf2c3715SXin Li COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), 716*bf2c3715SXin Li $ AS( NMAX*NMAX ), B( NMAX, NMAX ), 717*bf2c3715SXin Li $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), 718*bf2c3715SXin Li $ C( NMAX, NMAX ), CC( NMAX*NMAX ), 719*bf2c3715SXin Li $ CS( NMAX*NMAX ), CT( NMAX ) 720*bf2c3715SXin Li REAL G( NMAX ) 721*bf2c3715SXin Li INTEGER IDIM( NIDIM ) 722*bf2c3715SXin Li* .. Local Scalars .. 723*bf2c3715SXin Li COMPLEX ALPHA, ALS, BETA, BLS 724*bf2c3715SXin Li REAL ERR, ERRMAX 725*bf2c3715SXin Li INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC, 726*bf2c3715SXin Li $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA, 727*bf2c3715SXin Li $ NARGS, NC, NS 728*bf2c3715SXin Li LOGICAL CONJ, LEFT, NULL, RESET, SAME 729*bf2c3715SXin Li CHARACTER*1 SIDE, SIDES, UPLO, UPLOS 730*bf2c3715SXin Li CHARACTER*2 ICHS, ICHU 731*bf2c3715SXin Li* .. Local Arrays .. 732*bf2c3715SXin Li LOGICAL ISAME( 13 ) 733*bf2c3715SXin Li* .. External Functions .. 734*bf2c3715SXin Li LOGICAL LCE, LCERES 735*bf2c3715SXin Li EXTERNAL LCE, LCERES 736*bf2c3715SXin Li* .. External Subroutines .. 737*bf2c3715SXin Li EXTERNAL CHEMM, CMAKE, CMMCH, CSYMM 738*bf2c3715SXin Li* .. Intrinsic Functions .. 739*bf2c3715SXin Li INTRINSIC MAX 740*bf2c3715SXin Li* .. Scalars in Common .. 741*bf2c3715SXin Li INTEGER INFOT, NOUTC 742*bf2c3715SXin Li LOGICAL LERR, OK 743*bf2c3715SXin Li* .. Common blocks .. 744*bf2c3715SXin Li COMMON /INFOC/INFOT, NOUTC, OK, LERR 745*bf2c3715SXin Li* .. Data statements .. 746*bf2c3715SXin Li DATA ICHS/'LR'/, ICHU/'UL'/ 747*bf2c3715SXin Li* .. Executable Statements .. 748*bf2c3715SXin Li CONJ = SNAME( 2: 3 ).EQ.'HE' 749*bf2c3715SXin Li* 750*bf2c3715SXin Li NARGS = 12 751*bf2c3715SXin Li NC = 0 752*bf2c3715SXin Li RESET = .TRUE. 753*bf2c3715SXin Li ERRMAX = RZERO 754*bf2c3715SXin Li* 755*bf2c3715SXin Li DO 100 IM = 1, NIDIM 756*bf2c3715SXin Li M = IDIM( IM ) 757*bf2c3715SXin Li* 758*bf2c3715SXin Li DO 90 IN = 1, NIDIM 759*bf2c3715SXin Li N = IDIM( IN ) 760*bf2c3715SXin Li* Set LDC to 1 more than minimum value if room. 761*bf2c3715SXin Li LDC = M 762*bf2c3715SXin Li IF( LDC.LT.NMAX ) 763*bf2c3715SXin Li $ LDC = LDC + 1 764*bf2c3715SXin Li* Skip tests if not enough room. 765*bf2c3715SXin Li IF( LDC.GT.NMAX ) 766*bf2c3715SXin Li $ GO TO 90 767*bf2c3715SXin Li LCC = LDC*N 768*bf2c3715SXin Li NULL = N.LE.0.OR.M.LE.0 769*bf2c3715SXin Li* Set LDB to 1 more than minimum value if room. 770*bf2c3715SXin Li LDB = M 771*bf2c3715SXin Li IF( LDB.LT.NMAX ) 772*bf2c3715SXin Li $ LDB = LDB + 1 773*bf2c3715SXin Li* Skip tests if not enough room. 774*bf2c3715SXin Li IF( LDB.GT.NMAX ) 775*bf2c3715SXin Li $ GO TO 90 776*bf2c3715SXin Li LBB = LDB*N 777*bf2c3715SXin Li* 778*bf2c3715SXin Li* Generate the matrix B. 779*bf2c3715SXin Li* 780*bf2c3715SXin Li CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET, 781*bf2c3715SXin Li $ ZERO ) 782*bf2c3715SXin Li* 783*bf2c3715SXin Li DO 80 ICS = 1, 2 784*bf2c3715SXin Li SIDE = ICHS( ICS: ICS ) 785*bf2c3715SXin Li LEFT = SIDE.EQ.'L' 786*bf2c3715SXin Li* 787*bf2c3715SXin Li IF( LEFT )THEN 788*bf2c3715SXin Li NA = M 789*bf2c3715SXin Li ELSE 790*bf2c3715SXin Li NA = N 791*bf2c3715SXin Li END IF 792*bf2c3715SXin Li* Set LDA to 1 more than minimum value if room. 793*bf2c3715SXin Li LDA = NA 794*bf2c3715SXin Li IF( LDA.LT.NMAX ) 795*bf2c3715SXin Li $ LDA = LDA + 1 796*bf2c3715SXin Li* Skip tests if not enough room. 797*bf2c3715SXin Li IF( LDA.GT.NMAX ) 798*bf2c3715SXin Li $ GO TO 80 799*bf2c3715SXin Li LAA = LDA*NA 800*bf2c3715SXin Li* 801*bf2c3715SXin Li DO 70 ICU = 1, 2 802*bf2c3715SXin Li UPLO = ICHU( ICU: ICU ) 803*bf2c3715SXin Li* 804*bf2c3715SXin Li* Generate the hermitian or symmetric matrix A. 805*bf2c3715SXin Li* 806*bf2c3715SXin Li CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', NA, NA, A, NMAX, 807*bf2c3715SXin Li $ AA, LDA, RESET, ZERO ) 808*bf2c3715SXin Li* 809*bf2c3715SXin Li DO 60 IA = 1, NALF 810*bf2c3715SXin Li ALPHA = ALF( IA ) 811*bf2c3715SXin Li* 812*bf2c3715SXin Li DO 50 IB = 1, NBET 813*bf2c3715SXin Li BETA = BET( IB ) 814*bf2c3715SXin Li* 815*bf2c3715SXin Li* Generate the matrix C. 816*bf2c3715SXin Li* 817*bf2c3715SXin Li CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC, 818*bf2c3715SXin Li $ LDC, RESET, ZERO ) 819*bf2c3715SXin Li* 820*bf2c3715SXin Li NC = NC + 1 821*bf2c3715SXin Li* 822*bf2c3715SXin Li* Save every datum before calling the 823*bf2c3715SXin Li* subroutine. 824*bf2c3715SXin Li* 825*bf2c3715SXin Li SIDES = SIDE 826*bf2c3715SXin Li UPLOS = UPLO 827*bf2c3715SXin Li MS = M 828*bf2c3715SXin Li NS = N 829*bf2c3715SXin Li ALS = ALPHA 830*bf2c3715SXin Li DO 10 I = 1, LAA 831*bf2c3715SXin Li AS( I ) = AA( I ) 832*bf2c3715SXin Li 10 CONTINUE 833*bf2c3715SXin Li LDAS = LDA 834*bf2c3715SXin Li DO 20 I = 1, LBB 835*bf2c3715SXin Li BS( I ) = BB( I ) 836*bf2c3715SXin Li 20 CONTINUE 837*bf2c3715SXin Li LDBS = LDB 838*bf2c3715SXin Li BLS = BETA 839*bf2c3715SXin Li DO 30 I = 1, LCC 840*bf2c3715SXin Li CS( I ) = CC( I ) 841*bf2c3715SXin Li 30 CONTINUE 842*bf2c3715SXin Li LDCS = LDC 843*bf2c3715SXin Li* 844*bf2c3715SXin Li* Call the subroutine. 845*bf2c3715SXin Li* 846*bf2c3715SXin Li IF( TRACE ) 847*bf2c3715SXin Li $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE, 848*bf2c3715SXin Li $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC 849*bf2c3715SXin Li IF( REWI ) 850*bf2c3715SXin Li $ REWIND NTRA 851*bf2c3715SXin Li IF( CONJ )THEN 852*bf2c3715SXin Li CALL CHEMM( SIDE, UPLO, M, N, ALPHA, AA, LDA, 853*bf2c3715SXin Li $ BB, LDB, BETA, CC, LDC ) 854*bf2c3715SXin Li ELSE 855*bf2c3715SXin Li CALL CSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA, 856*bf2c3715SXin Li $ BB, LDB, BETA, CC, LDC ) 857*bf2c3715SXin Li END IF 858*bf2c3715SXin Li* 859*bf2c3715SXin Li* Check if error-exit was taken incorrectly. 860*bf2c3715SXin Li* 861*bf2c3715SXin Li IF( .NOT.OK )THEN 862*bf2c3715SXin Li WRITE( NOUT, FMT = 9994 ) 863*bf2c3715SXin Li FATAL = .TRUE. 864*bf2c3715SXin Li GO TO 110 865*bf2c3715SXin Li END IF 866*bf2c3715SXin Li* 867*bf2c3715SXin Li* See what data changed inside subroutines. 868*bf2c3715SXin Li* 869*bf2c3715SXin Li ISAME( 1 ) = SIDES.EQ.SIDE 870*bf2c3715SXin Li ISAME( 2 ) = UPLOS.EQ.UPLO 871*bf2c3715SXin Li ISAME( 3 ) = MS.EQ.M 872*bf2c3715SXin Li ISAME( 4 ) = NS.EQ.N 873*bf2c3715SXin Li ISAME( 5 ) = ALS.EQ.ALPHA 874*bf2c3715SXin Li ISAME( 6 ) = LCE( AS, AA, LAA ) 875*bf2c3715SXin Li ISAME( 7 ) = LDAS.EQ.LDA 876*bf2c3715SXin Li ISAME( 8 ) = LCE( BS, BB, LBB ) 877*bf2c3715SXin Li ISAME( 9 ) = LDBS.EQ.LDB 878*bf2c3715SXin Li ISAME( 10 ) = BLS.EQ.BETA 879*bf2c3715SXin Li IF( NULL )THEN 880*bf2c3715SXin Li ISAME( 11 ) = LCE( CS, CC, LCC ) 881*bf2c3715SXin Li ELSE 882*bf2c3715SXin Li ISAME( 11 ) = LCERES( 'GE', ' ', M, N, CS, 883*bf2c3715SXin Li $ CC, LDC ) 884*bf2c3715SXin Li END IF 885*bf2c3715SXin Li ISAME( 12 ) = LDCS.EQ.LDC 886*bf2c3715SXin Li* 887*bf2c3715SXin Li* If data was incorrectly changed, report and 888*bf2c3715SXin Li* return. 889*bf2c3715SXin Li* 890*bf2c3715SXin Li SAME = .TRUE. 891*bf2c3715SXin Li DO 40 I = 1, NARGS 892*bf2c3715SXin Li SAME = SAME.AND.ISAME( I ) 893*bf2c3715SXin Li IF( .NOT.ISAME( I ) ) 894*bf2c3715SXin Li $ WRITE( NOUT, FMT = 9998 )I 895*bf2c3715SXin Li 40 CONTINUE 896*bf2c3715SXin Li IF( .NOT.SAME )THEN 897*bf2c3715SXin Li FATAL = .TRUE. 898*bf2c3715SXin Li GO TO 110 899*bf2c3715SXin Li END IF 900*bf2c3715SXin Li* 901*bf2c3715SXin Li IF( .NOT.NULL )THEN 902*bf2c3715SXin Li* 903*bf2c3715SXin Li* Check the result. 904*bf2c3715SXin Li* 905*bf2c3715SXin Li IF( LEFT )THEN 906*bf2c3715SXin Li CALL CMMCH( 'N', 'N', M, N, M, ALPHA, A, 907*bf2c3715SXin Li $ NMAX, B, NMAX, BETA, C, NMAX, 908*bf2c3715SXin Li $ CT, G, CC, LDC, EPS, ERR, 909*bf2c3715SXin Li $ FATAL, NOUT, .TRUE. ) 910*bf2c3715SXin Li ELSE 911*bf2c3715SXin Li CALL CMMCH( 'N', 'N', M, N, N, ALPHA, B, 912*bf2c3715SXin Li $ NMAX, A, NMAX, BETA, C, NMAX, 913*bf2c3715SXin Li $ CT, G, CC, LDC, EPS, ERR, 914*bf2c3715SXin Li $ FATAL, NOUT, .TRUE. ) 915*bf2c3715SXin Li END IF 916*bf2c3715SXin Li ERRMAX = MAX( ERRMAX, ERR ) 917*bf2c3715SXin Li* If got really bad answer, report and 918*bf2c3715SXin Li* return. 919*bf2c3715SXin Li IF( FATAL ) 920*bf2c3715SXin Li $ GO TO 110 921*bf2c3715SXin Li END IF 922*bf2c3715SXin Li* 923*bf2c3715SXin Li 50 CONTINUE 924*bf2c3715SXin Li* 925*bf2c3715SXin Li 60 CONTINUE 926*bf2c3715SXin Li* 927*bf2c3715SXin Li 70 CONTINUE 928*bf2c3715SXin Li* 929*bf2c3715SXin Li 80 CONTINUE 930*bf2c3715SXin Li* 931*bf2c3715SXin Li 90 CONTINUE 932*bf2c3715SXin Li* 933*bf2c3715SXin Li 100 CONTINUE 934*bf2c3715SXin Li* 935*bf2c3715SXin Li* Report result. 936*bf2c3715SXin Li* 937*bf2c3715SXin Li IF( ERRMAX.LT.THRESH )THEN 938*bf2c3715SXin Li WRITE( NOUT, FMT = 9999 )SNAME, NC 939*bf2c3715SXin Li ELSE 940*bf2c3715SXin Li WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX 941*bf2c3715SXin Li END IF 942*bf2c3715SXin Li GO TO 120 943*bf2c3715SXin Li* 944*bf2c3715SXin Li 110 CONTINUE 945*bf2c3715SXin Li WRITE( NOUT, FMT = 9996 )SNAME 946*bf2c3715SXin Li WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA, 947*bf2c3715SXin Li $ LDB, BETA, LDC 948*bf2c3715SXin Li* 949*bf2c3715SXin Li 120 CONTINUE 950*bf2c3715SXin Li RETURN 951*bf2c3715SXin Li* 952*bf2c3715SXin Li 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', 953*bf2c3715SXin Li $ 'S)' ) 954*bf2c3715SXin Li 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', 955*bf2c3715SXin Li $ 'ANGED INCORRECTLY *******' ) 956*bf2c3715SXin Li 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', 957*bf2c3715SXin Li $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, 958*bf2c3715SXin Li $ ' - SUSPECT *******' ) 959*bf2c3715SXin Li 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' ) 960*bf2c3715SXin Li 9995 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ), 961*bf2c3715SXin Li $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1, 962*bf2c3715SXin Li $ ',', F4.1, '), C,', I3, ') .' ) 963*bf2c3715SXin Li 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', 964*bf2c3715SXin Li $ '******' ) 965*bf2c3715SXin Li* 966*bf2c3715SXin Li* End of CCHK2. 967*bf2c3715SXin Li* 968*bf2c3715SXin Li END 969*bf2c3715SXin Li SUBROUTINE CCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, 970*bf2c3715SXin Li $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS, 971*bf2c3715SXin Li $ B, BB, BS, CT, G, C ) 972*bf2c3715SXin Li* 973*bf2c3715SXin Li* Tests CTRMM and CTRSM. 974*bf2c3715SXin Li* 975*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 976*bf2c3715SXin Li* 977*bf2c3715SXin Li* -- Written on 8-February-1989. 978*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 979*bf2c3715SXin Li* Iain Duff, AERE Harwell. 980*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 981*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 982*bf2c3715SXin Li* 983*bf2c3715SXin Li* .. Parameters .. 984*bf2c3715SXin Li COMPLEX ZERO, ONE 985*bf2c3715SXin Li PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) ) 986*bf2c3715SXin Li REAL RZERO 987*bf2c3715SXin Li PARAMETER ( RZERO = 0.0 ) 988*bf2c3715SXin Li* .. Scalar Arguments .. 989*bf2c3715SXin Li REAL EPS, THRESH 990*bf2c3715SXin Li INTEGER NALF, NIDIM, NMAX, NOUT, NTRA 991*bf2c3715SXin Li LOGICAL FATAL, REWI, TRACE 992*bf2c3715SXin Li CHARACTER*6 SNAME 993*bf2c3715SXin Li* .. Array Arguments .. 994*bf2c3715SXin Li COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), 995*bf2c3715SXin Li $ AS( NMAX*NMAX ), B( NMAX, NMAX ), 996*bf2c3715SXin Li $ BB( NMAX*NMAX ), BS( NMAX*NMAX ), 997*bf2c3715SXin Li $ C( NMAX, NMAX ), CT( NMAX ) 998*bf2c3715SXin Li REAL G( NMAX ) 999*bf2c3715SXin Li INTEGER IDIM( NIDIM ) 1000*bf2c3715SXin Li* .. Local Scalars .. 1001*bf2c3715SXin Li COMPLEX ALPHA, ALS 1002*bf2c3715SXin Li REAL ERR, ERRMAX 1003*bf2c3715SXin Li INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB, 1004*bf2c3715SXin Li $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC, 1005*bf2c3715SXin Li $ NS 1006*bf2c3715SXin Li LOGICAL LEFT, NULL, RESET, SAME 1007*bf2c3715SXin Li CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO, 1008*bf2c3715SXin Li $ UPLOS 1009*bf2c3715SXin Li CHARACTER*2 ICHD, ICHS, ICHU 1010*bf2c3715SXin Li CHARACTER*3 ICHT 1011*bf2c3715SXin Li* .. Local Arrays .. 1012*bf2c3715SXin Li LOGICAL ISAME( 13 ) 1013*bf2c3715SXin Li* .. External Functions .. 1014*bf2c3715SXin Li LOGICAL LCE, LCERES 1015*bf2c3715SXin Li EXTERNAL LCE, LCERES 1016*bf2c3715SXin Li* .. External Subroutines .. 1017*bf2c3715SXin Li EXTERNAL CMAKE, CMMCH, CTRMM, CTRSM 1018*bf2c3715SXin Li* .. Intrinsic Functions .. 1019*bf2c3715SXin Li INTRINSIC MAX 1020*bf2c3715SXin Li* .. Scalars in Common .. 1021*bf2c3715SXin Li INTEGER INFOT, NOUTC 1022*bf2c3715SXin Li LOGICAL LERR, OK 1023*bf2c3715SXin Li* .. Common blocks .. 1024*bf2c3715SXin Li COMMON /INFOC/INFOT, NOUTC, OK, LERR 1025*bf2c3715SXin Li* .. Data statements .. 1026*bf2c3715SXin Li DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/ 1027*bf2c3715SXin Li* .. Executable Statements .. 1028*bf2c3715SXin Li* 1029*bf2c3715SXin Li NARGS = 11 1030*bf2c3715SXin Li NC = 0 1031*bf2c3715SXin Li RESET = .TRUE. 1032*bf2c3715SXin Li ERRMAX = RZERO 1033*bf2c3715SXin Li* Set up zero matrix for CMMCH. 1034*bf2c3715SXin Li DO 20 J = 1, NMAX 1035*bf2c3715SXin Li DO 10 I = 1, NMAX 1036*bf2c3715SXin Li C( I, J ) = ZERO 1037*bf2c3715SXin Li 10 CONTINUE 1038*bf2c3715SXin Li 20 CONTINUE 1039*bf2c3715SXin Li* 1040*bf2c3715SXin Li DO 140 IM = 1, NIDIM 1041*bf2c3715SXin Li M = IDIM( IM ) 1042*bf2c3715SXin Li* 1043*bf2c3715SXin Li DO 130 IN = 1, NIDIM 1044*bf2c3715SXin Li N = IDIM( IN ) 1045*bf2c3715SXin Li* Set LDB to 1 more than minimum value if room. 1046*bf2c3715SXin Li LDB = M 1047*bf2c3715SXin Li IF( LDB.LT.NMAX ) 1048*bf2c3715SXin Li $ LDB = LDB + 1 1049*bf2c3715SXin Li* Skip tests if not enough room. 1050*bf2c3715SXin Li IF( LDB.GT.NMAX ) 1051*bf2c3715SXin Li $ GO TO 130 1052*bf2c3715SXin Li LBB = LDB*N 1053*bf2c3715SXin Li NULL = M.LE.0.OR.N.LE.0 1054*bf2c3715SXin Li* 1055*bf2c3715SXin Li DO 120 ICS = 1, 2 1056*bf2c3715SXin Li SIDE = ICHS( ICS: ICS ) 1057*bf2c3715SXin Li LEFT = SIDE.EQ.'L' 1058*bf2c3715SXin Li IF( LEFT )THEN 1059*bf2c3715SXin Li NA = M 1060*bf2c3715SXin Li ELSE 1061*bf2c3715SXin Li NA = N 1062*bf2c3715SXin Li END IF 1063*bf2c3715SXin Li* Set LDA to 1 more than minimum value if room. 1064*bf2c3715SXin Li LDA = NA 1065*bf2c3715SXin Li IF( LDA.LT.NMAX ) 1066*bf2c3715SXin Li $ LDA = LDA + 1 1067*bf2c3715SXin Li* Skip tests if not enough room. 1068*bf2c3715SXin Li IF( LDA.GT.NMAX ) 1069*bf2c3715SXin Li $ GO TO 130 1070*bf2c3715SXin Li LAA = LDA*NA 1071*bf2c3715SXin Li* 1072*bf2c3715SXin Li DO 110 ICU = 1, 2 1073*bf2c3715SXin Li UPLO = ICHU( ICU: ICU ) 1074*bf2c3715SXin Li* 1075*bf2c3715SXin Li DO 100 ICT = 1, 3 1076*bf2c3715SXin Li TRANSA = ICHT( ICT: ICT ) 1077*bf2c3715SXin Li* 1078*bf2c3715SXin Li DO 90 ICD = 1, 2 1079*bf2c3715SXin Li DIAG = ICHD( ICD: ICD ) 1080*bf2c3715SXin Li* 1081*bf2c3715SXin Li DO 80 IA = 1, NALF 1082*bf2c3715SXin Li ALPHA = ALF( IA ) 1083*bf2c3715SXin Li* 1084*bf2c3715SXin Li* Generate the matrix A. 1085*bf2c3715SXin Li* 1086*bf2c3715SXin Li CALL CMAKE( 'TR', UPLO, DIAG, NA, NA, A, 1087*bf2c3715SXin Li $ NMAX, AA, LDA, RESET, ZERO ) 1088*bf2c3715SXin Li* 1089*bf2c3715SXin Li* Generate the matrix B. 1090*bf2c3715SXin Li* 1091*bf2c3715SXin Li CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX, 1092*bf2c3715SXin Li $ BB, LDB, RESET, ZERO ) 1093*bf2c3715SXin Li* 1094*bf2c3715SXin Li NC = NC + 1 1095*bf2c3715SXin Li* 1096*bf2c3715SXin Li* Save every datum before calling the 1097*bf2c3715SXin Li* subroutine. 1098*bf2c3715SXin Li* 1099*bf2c3715SXin Li SIDES = SIDE 1100*bf2c3715SXin Li UPLOS = UPLO 1101*bf2c3715SXin Li TRANAS = TRANSA 1102*bf2c3715SXin Li DIAGS = DIAG 1103*bf2c3715SXin Li MS = M 1104*bf2c3715SXin Li NS = N 1105*bf2c3715SXin Li ALS = ALPHA 1106*bf2c3715SXin Li DO 30 I = 1, LAA 1107*bf2c3715SXin Li AS( I ) = AA( I ) 1108*bf2c3715SXin Li 30 CONTINUE 1109*bf2c3715SXin Li LDAS = LDA 1110*bf2c3715SXin Li DO 40 I = 1, LBB 1111*bf2c3715SXin Li BS( I ) = BB( I ) 1112*bf2c3715SXin Li 40 CONTINUE 1113*bf2c3715SXin Li LDBS = LDB 1114*bf2c3715SXin Li* 1115*bf2c3715SXin Li* Call the subroutine. 1116*bf2c3715SXin Li* 1117*bf2c3715SXin Li IF( SNAME( 4: 5 ).EQ.'MM' )THEN 1118*bf2c3715SXin Li IF( TRACE ) 1119*bf2c3715SXin Li $ WRITE( NTRA, FMT = 9995 )NC, SNAME, 1120*bf2c3715SXin Li $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, 1121*bf2c3715SXin Li $ LDA, LDB 1122*bf2c3715SXin Li IF( REWI ) 1123*bf2c3715SXin Li $ REWIND NTRA 1124*bf2c3715SXin Li CALL CTRMM( SIDE, UPLO, TRANSA, DIAG, M, 1125*bf2c3715SXin Li $ N, ALPHA, AA, LDA, BB, LDB ) 1126*bf2c3715SXin Li ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN 1127*bf2c3715SXin Li IF( TRACE ) 1128*bf2c3715SXin Li $ WRITE( NTRA, FMT = 9995 )NC, SNAME, 1129*bf2c3715SXin Li $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, 1130*bf2c3715SXin Li $ LDA, LDB 1131*bf2c3715SXin Li IF( REWI ) 1132*bf2c3715SXin Li $ REWIND NTRA 1133*bf2c3715SXin Li CALL CTRSM( SIDE, UPLO, TRANSA, DIAG, M, 1134*bf2c3715SXin Li $ N, ALPHA, AA, LDA, BB, LDB ) 1135*bf2c3715SXin Li END IF 1136*bf2c3715SXin Li* 1137*bf2c3715SXin Li* Check if error-exit was taken incorrectly. 1138*bf2c3715SXin Li* 1139*bf2c3715SXin Li IF( .NOT.OK )THEN 1140*bf2c3715SXin Li WRITE( NOUT, FMT = 9994 ) 1141*bf2c3715SXin Li FATAL = .TRUE. 1142*bf2c3715SXin Li GO TO 150 1143*bf2c3715SXin Li END IF 1144*bf2c3715SXin Li* 1145*bf2c3715SXin Li* See what data changed inside subroutines. 1146*bf2c3715SXin Li* 1147*bf2c3715SXin Li ISAME( 1 ) = SIDES.EQ.SIDE 1148*bf2c3715SXin Li ISAME( 2 ) = UPLOS.EQ.UPLO 1149*bf2c3715SXin Li ISAME( 3 ) = TRANAS.EQ.TRANSA 1150*bf2c3715SXin Li ISAME( 4 ) = DIAGS.EQ.DIAG 1151*bf2c3715SXin Li ISAME( 5 ) = MS.EQ.M 1152*bf2c3715SXin Li ISAME( 6 ) = NS.EQ.N 1153*bf2c3715SXin Li ISAME( 7 ) = ALS.EQ.ALPHA 1154*bf2c3715SXin Li ISAME( 8 ) = LCE( AS, AA, LAA ) 1155*bf2c3715SXin Li ISAME( 9 ) = LDAS.EQ.LDA 1156*bf2c3715SXin Li IF( NULL )THEN 1157*bf2c3715SXin Li ISAME( 10 ) = LCE( BS, BB, LBB ) 1158*bf2c3715SXin Li ELSE 1159*bf2c3715SXin Li ISAME( 10 ) = LCERES( 'GE', ' ', M, N, BS, 1160*bf2c3715SXin Li $ BB, LDB ) 1161*bf2c3715SXin Li END IF 1162*bf2c3715SXin Li ISAME( 11 ) = LDBS.EQ.LDB 1163*bf2c3715SXin Li* 1164*bf2c3715SXin Li* If data was incorrectly changed, report and 1165*bf2c3715SXin Li* return. 1166*bf2c3715SXin Li* 1167*bf2c3715SXin Li SAME = .TRUE. 1168*bf2c3715SXin Li DO 50 I = 1, NARGS 1169*bf2c3715SXin Li SAME = SAME.AND.ISAME( I ) 1170*bf2c3715SXin Li IF( .NOT.ISAME( I ) ) 1171*bf2c3715SXin Li $ WRITE( NOUT, FMT = 9998 )I 1172*bf2c3715SXin Li 50 CONTINUE 1173*bf2c3715SXin Li IF( .NOT.SAME )THEN 1174*bf2c3715SXin Li FATAL = .TRUE. 1175*bf2c3715SXin Li GO TO 150 1176*bf2c3715SXin Li END IF 1177*bf2c3715SXin Li* 1178*bf2c3715SXin Li IF( .NOT.NULL )THEN 1179*bf2c3715SXin Li IF( SNAME( 4: 5 ).EQ.'MM' )THEN 1180*bf2c3715SXin Li* 1181*bf2c3715SXin Li* Check the result. 1182*bf2c3715SXin Li* 1183*bf2c3715SXin Li IF( LEFT )THEN 1184*bf2c3715SXin Li CALL CMMCH( TRANSA, 'N', M, N, M, 1185*bf2c3715SXin Li $ ALPHA, A, NMAX, B, NMAX, 1186*bf2c3715SXin Li $ ZERO, C, NMAX, CT, G, 1187*bf2c3715SXin Li $ BB, LDB, EPS, ERR, 1188*bf2c3715SXin Li $ FATAL, NOUT, .TRUE. ) 1189*bf2c3715SXin Li ELSE 1190*bf2c3715SXin Li CALL CMMCH( 'N', TRANSA, M, N, N, 1191*bf2c3715SXin Li $ ALPHA, B, NMAX, A, NMAX, 1192*bf2c3715SXin Li $ ZERO, C, NMAX, CT, G, 1193*bf2c3715SXin Li $ BB, LDB, EPS, ERR, 1194*bf2c3715SXin Li $ FATAL, NOUT, .TRUE. ) 1195*bf2c3715SXin Li END IF 1196*bf2c3715SXin Li ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN 1197*bf2c3715SXin Li* 1198*bf2c3715SXin Li* Compute approximation to original 1199*bf2c3715SXin Li* matrix. 1200*bf2c3715SXin Li* 1201*bf2c3715SXin Li DO 70 J = 1, N 1202*bf2c3715SXin Li DO 60 I = 1, M 1203*bf2c3715SXin Li C( I, J ) = BB( I + ( J - 1 )* 1204*bf2c3715SXin Li $ LDB ) 1205*bf2c3715SXin Li BB( I + ( J - 1 )*LDB ) = ALPHA* 1206*bf2c3715SXin Li $ B( I, J ) 1207*bf2c3715SXin Li 60 CONTINUE 1208*bf2c3715SXin Li 70 CONTINUE 1209*bf2c3715SXin Li* 1210*bf2c3715SXin Li IF( LEFT )THEN 1211*bf2c3715SXin Li CALL CMMCH( TRANSA, 'N', M, N, M, 1212*bf2c3715SXin Li $ ONE, A, NMAX, C, NMAX, 1213*bf2c3715SXin Li $ ZERO, B, NMAX, CT, G, 1214*bf2c3715SXin Li $ BB, LDB, EPS, ERR, 1215*bf2c3715SXin Li $ FATAL, NOUT, .FALSE. ) 1216*bf2c3715SXin Li ELSE 1217*bf2c3715SXin Li CALL CMMCH( 'N', TRANSA, M, N, N, 1218*bf2c3715SXin Li $ ONE, C, NMAX, A, NMAX, 1219*bf2c3715SXin Li $ ZERO, B, NMAX, CT, G, 1220*bf2c3715SXin Li $ BB, LDB, EPS, ERR, 1221*bf2c3715SXin Li $ FATAL, NOUT, .FALSE. ) 1222*bf2c3715SXin Li END IF 1223*bf2c3715SXin Li END IF 1224*bf2c3715SXin Li ERRMAX = MAX( ERRMAX, ERR ) 1225*bf2c3715SXin Li* If got really bad answer, report and 1226*bf2c3715SXin Li* return. 1227*bf2c3715SXin Li IF( FATAL ) 1228*bf2c3715SXin Li $ GO TO 150 1229*bf2c3715SXin Li END IF 1230*bf2c3715SXin Li* 1231*bf2c3715SXin Li 80 CONTINUE 1232*bf2c3715SXin Li* 1233*bf2c3715SXin Li 90 CONTINUE 1234*bf2c3715SXin Li* 1235*bf2c3715SXin Li 100 CONTINUE 1236*bf2c3715SXin Li* 1237*bf2c3715SXin Li 110 CONTINUE 1238*bf2c3715SXin Li* 1239*bf2c3715SXin Li 120 CONTINUE 1240*bf2c3715SXin Li* 1241*bf2c3715SXin Li 130 CONTINUE 1242*bf2c3715SXin Li* 1243*bf2c3715SXin Li 140 CONTINUE 1244*bf2c3715SXin Li* 1245*bf2c3715SXin Li* Report result. 1246*bf2c3715SXin Li* 1247*bf2c3715SXin Li IF( ERRMAX.LT.THRESH )THEN 1248*bf2c3715SXin Li WRITE( NOUT, FMT = 9999 )SNAME, NC 1249*bf2c3715SXin Li ELSE 1250*bf2c3715SXin Li WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX 1251*bf2c3715SXin Li END IF 1252*bf2c3715SXin Li GO TO 160 1253*bf2c3715SXin Li* 1254*bf2c3715SXin Li 150 CONTINUE 1255*bf2c3715SXin Li WRITE( NOUT, FMT = 9996 )SNAME 1256*bf2c3715SXin Li WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M, 1257*bf2c3715SXin Li $ N, ALPHA, LDA, LDB 1258*bf2c3715SXin Li* 1259*bf2c3715SXin Li 160 CONTINUE 1260*bf2c3715SXin Li RETURN 1261*bf2c3715SXin Li* 1262*bf2c3715SXin Li 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', 1263*bf2c3715SXin Li $ 'S)' ) 1264*bf2c3715SXin Li 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', 1265*bf2c3715SXin Li $ 'ANGED INCORRECTLY *******' ) 1266*bf2c3715SXin Li 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', 1267*bf2c3715SXin Li $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, 1268*bf2c3715SXin Li $ ' - SUSPECT *******' ) 1269*bf2c3715SXin Li 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' ) 1270*bf2c3715SXin Li 9995 FORMAT( 1X, I6, ': ', A6, '(', 4( '''', A1, ''',' ), 2( I3, ',' ), 1271*bf2c3715SXin Li $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ', 1272*bf2c3715SXin Li $ ' .' ) 1273*bf2c3715SXin Li 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', 1274*bf2c3715SXin Li $ '******' ) 1275*bf2c3715SXin Li* 1276*bf2c3715SXin Li* End of CCHK3. 1277*bf2c3715SXin Li* 1278*bf2c3715SXin Li END 1279*bf2c3715SXin Li SUBROUTINE CCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, 1280*bf2c3715SXin Li $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, 1281*bf2c3715SXin Li $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G ) 1282*bf2c3715SXin Li* 1283*bf2c3715SXin Li* Tests CHERK and CSYRK. 1284*bf2c3715SXin Li* 1285*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 1286*bf2c3715SXin Li* 1287*bf2c3715SXin Li* -- Written on 8-February-1989. 1288*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 1289*bf2c3715SXin Li* Iain Duff, AERE Harwell. 1290*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 1291*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 1292*bf2c3715SXin Li* 1293*bf2c3715SXin Li* .. Parameters .. 1294*bf2c3715SXin Li COMPLEX ZERO 1295*bf2c3715SXin Li PARAMETER ( ZERO = ( 0.0, 0.0 ) ) 1296*bf2c3715SXin Li REAL RONE, RZERO 1297*bf2c3715SXin Li PARAMETER ( RONE = 1.0, RZERO = 0.0 ) 1298*bf2c3715SXin Li* .. Scalar Arguments .. 1299*bf2c3715SXin Li REAL EPS, THRESH 1300*bf2c3715SXin Li INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA 1301*bf2c3715SXin Li LOGICAL FATAL, REWI, TRACE 1302*bf2c3715SXin Li CHARACTER*6 SNAME 1303*bf2c3715SXin Li* .. Array Arguments .. 1304*bf2c3715SXin Li COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), 1305*bf2c3715SXin Li $ AS( NMAX*NMAX ), B( NMAX, NMAX ), 1306*bf2c3715SXin Li $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), 1307*bf2c3715SXin Li $ C( NMAX, NMAX ), CC( NMAX*NMAX ), 1308*bf2c3715SXin Li $ CS( NMAX*NMAX ), CT( NMAX ) 1309*bf2c3715SXin Li REAL G( NMAX ) 1310*bf2c3715SXin Li INTEGER IDIM( NIDIM ) 1311*bf2c3715SXin Li* .. Local Scalars .. 1312*bf2c3715SXin Li COMPLEX ALPHA, ALS, BETA, BETS 1313*bf2c3715SXin Li REAL ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS 1314*bf2c3715SXin Li INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS, 1315*bf2c3715SXin Li $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA, 1316*bf2c3715SXin Li $ NARGS, NC, NS 1317*bf2c3715SXin Li LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER 1318*bf2c3715SXin Li CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS 1319*bf2c3715SXin Li CHARACTER*2 ICHT, ICHU 1320*bf2c3715SXin Li* .. Local Arrays .. 1321*bf2c3715SXin Li LOGICAL ISAME( 13 ) 1322*bf2c3715SXin Li* .. External Functions .. 1323*bf2c3715SXin Li LOGICAL LCE, LCERES 1324*bf2c3715SXin Li EXTERNAL LCE, LCERES 1325*bf2c3715SXin Li* .. External Subroutines .. 1326*bf2c3715SXin Li EXTERNAL CHERK, CMAKE, CMMCH, CSYRK 1327*bf2c3715SXin Li* .. Intrinsic Functions .. 1328*bf2c3715SXin Li INTRINSIC CMPLX, MAX, REAL 1329*bf2c3715SXin Li* .. Scalars in Common .. 1330*bf2c3715SXin Li INTEGER INFOT, NOUTC 1331*bf2c3715SXin Li LOGICAL LERR, OK 1332*bf2c3715SXin Li* .. Common blocks .. 1333*bf2c3715SXin Li COMMON /INFOC/INFOT, NOUTC, OK, LERR 1334*bf2c3715SXin Li* .. Data statements .. 1335*bf2c3715SXin Li DATA ICHT/'NC'/, ICHU/'UL'/ 1336*bf2c3715SXin Li* .. Executable Statements .. 1337*bf2c3715SXin Li CONJ = SNAME( 2: 3 ).EQ.'HE' 1338*bf2c3715SXin Li* 1339*bf2c3715SXin Li NARGS = 10 1340*bf2c3715SXin Li NC = 0 1341*bf2c3715SXin Li RESET = .TRUE. 1342*bf2c3715SXin Li ERRMAX = RZERO 1343*bf2c3715SXin Li* 1344*bf2c3715SXin Li DO 100 IN = 1, NIDIM 1345*bf2c3715SXin Li N = IDIM( IN ) 1346*bf2c3715SXin Li* Set LDC to 1 more than minimum value if room. 1347*bf2c3715SXin Li LDC = N 1348*bf2c3715SXin Li IF( LDC.LT.NMAX ) 1349*bf2c3715SXin Li $ LDC = LDC + 1 1350*bf2c3715SXin Li* Skip tests if not enough room. 1351*bf2c3715SXin Li IF( LDC.GT.NMAX ) 1352*bf2c3715SXin Li $ GO TO 100 1353*bf2c3715SXin Li LCC = LDC*N 1354*bf2c3715SXin Li* 1355*bf2c3715SXin Li DO 90 IK = 1, NIDIM 1356*bf2c3715SXin Li K = IDIM( IK ) 1357*bf2c3715SXin Li* 1358*bf2c3715SXin Li DO 80 ICT = 1, 2 1359*bf2c3715SXin Li TRANS = ICHT( ICT: ICT ) 1360*bf2c3715SXin Li TRAN = TRANS.EQ.'C' 1361*bf2c3715SXin Li IF( TRAN.AND..NOT.CONJ ) 1362*bf2c3715SXin Li $ TRANS = 'T' 1363*bf2c3715SXin Li IF( TRAN )THEN 1364*bf2c3715SXin Li MA = K 1365*bf2c3715SXin Li NA = N 1366*bf2c3715SXin Li ELSE 1367*bf2c3715SXin Li MA = N 1368*bf2c3715SXin Li NA = K 1369*bf2c3715SXin Li END IF 1370*bf2c3715SXin Li* Set LDA to 1 more than minimum value if room. 1371*bf2c3715SXin Li LDA = MA 1372*bf2c3715SXin Li IF( LDA.LT.NMAX ) 1373*bf2c3715SXin Li $ LDA = LDA + 1 1374*bf2c3715SXin Li* Skip tests if not enough room. 1375*bf2c3715SXin Li IF( LDA.GT.NMAX ) 1376*bf2c3715SXin Li $ GO TO 80 1377*bf2c3715SXin Li LAA = LDA*NA 1378*bf2c3715SXin Li* 1379*bf2c3715SXin Li* Generate the matrix A. 1380*bf2c3715SXin Li* 1381*bf2c3715SXin Li CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA, 1382*bf2c3715SXin Li $ RESET, ZERO ) 1383*bf2c3715SXin Li* 1384*bf2c3715SXin Li DO 70 ICU = 1, 2 1385*bf2c3715SXin Li UPLO = ICHU( ICU: ICU ) 1386*bf2c3715SXin Li UPPER = UPLO.EQ.'U' 1387*bf2c3715SXin Li* 1388*bf2c3715SXin Li DO 60 IA = 1, NALF 1389*bf2c3715SXin Li ALPHA = ALF( IA ) 1390*bf2c3715SXin Li IF( CONJ )THEN 1391*bf2c3715SXin Li RALPHA = REAL( ALPHA ) 1392*bf2c3715SXin Li ALPHA = CMPLX( RALPHA, RZERO ) 1393*bf2c3715SXin Li END IF 1394*bf2c3715SXin Li* 1395*bf2c3715SXin Li DO 50 IB = 1, NBET 1396*bf2c3715SXin Li BETA = BET( IB ) 1397*bf2c3715SXin Li IF( CONJ )THEN 1398*bf2c3715SXin Li RBETA = REAL( BETA ) 1399*bf2c3715SXin Li BETA = CMPLX( RBETA, RZERO ) 1400*bf2c3715SXin Li END IF 1401*bf2c3715SXin Li NULL = N.LE.0 1402*bf2c3715SXin Li IF( CONJ ) 1403*bf2c3715SXin Li $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ. 1404*bf2c3715SXin Li $ RZERO ).AND.RBETA.EQ.RONE ) 1405*bf2c3715SXin Li* 1406*bf2c3715SXin Li* Generate the matrix C. 1407*bf2c3715SXin Li* 1408*bf2c3715SXin Li CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C, 1409*bf2c3715SXin Li $ NMAX, CC, LDC, RESET, ZERO ) 1410*bf2c3715SXin Li* 1411*bf2c3715SXin Li NC = NC + 1 1412*bf2c3715SXin Li* 1413*bf2c3715SXin Li* Save every datum before calling the subroutine. 1414*bf2c3715SXin Li* 1415*bf2c3715SXin Li UPLOS = UPLO 1416*bf2c3715SXin Li TRANSS = TRANS 1417*bf2c3715SXin Li NS = N 1418*bf2c3715SXin Li KS = K 1419*bf2c3715SXin Li IF( CONJ )THEN 1420*bf2c3715SXin Li RALS = RALPHA 1421*bf2c3715SXin Li ELSE 1422*bf2c3715SXin Li ALS = ALPHA 1423*bf2c3715SXin Li END IF 1424*bf2c3715SXin Li DO 10 I = 1, LAA 1425*bf2c3715SXin Li AS( I ) = AA( I ) 1426*bf2c3715SXin Li 10 CONTINUE 1427*bf2c3715SXin Li LDAS = LDA 1428*bf2c3715SXin Li IF( CONJ )THEN 1429*bf2c3715SXin Li RBETS = RBETA 1430*bf2c3715SXin Li ELSE 1431*bf2c3715SXin Li BETS = BETA 1432*bf2c3715SXin Li END IF 1433*bf2c3715SXin Li DO 20 I = 1, LCC 1434*bf2c3715SXin Li CS( I ) = CC( I ) 1435*bf2c3715SXin Li 20 CONTINUE 1436*bf2c3715SXin Li LDCS = LDC 1437*bf2c3715SXin Li* 1438*bf2c3715SXin Li* Call the subroutine. 1439*bf2c3715SXin Li* 1440*bf2c3715SXin Li IF( CONJ )THEN 1441*bf2c3715SXin Li IF( TRACE ) 1442*bf2c3715SXin Li $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, 1443*bf2c3715SXin Li $ TRANS, N, K, RALPHA, LDA, RBETA, LDC 1444*bf2c3715SXin Li IF( REWI ) 1445*bf2c3715SXin Li $ REWIND NTRA 1446*bf2c3715SXin Li CALL CHERK( UPLO, TRANS, N, K, RALPHA, AA, 1447*bf2c3715SXin Li $ LDA, RBETA, CC, LDC ) 1448*bf2c3715SXin Li ELSE 1449*bf2c3715SXin Li IF( TRACE ) 1450*bf2c3715SXin Li $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, 1451*bf2c3715SXin Li $ TRANS, N, K, ALPHA, LDA, BETA, LDC 1452*bf2c3715SXin Li IF( REWI ) 1453*bf2c3715SXin Li $ REWIND NTRA 1454*bf2c3715SXin Li CALL CSYRK( UPLO, TRANS, N, K, ALPHA, AA, 1455*bf2c3715SXin Li $ LDA, BETA, CC, LDC ) 1456*bf2c3715SXin Li END IF 1457*bf2c3715SXin Li* 1458*bf2c3715SXin Li* Check if error-exit was taken incorrectly. 1459*bf2c3715SXin Li* 1460*bf2c3715SXin Li IF( .NOT.OK )THEN 1461*bf2c3715SXin Li WRITE( NOUT, FMT = 9992 ) 1462*bf2c3715SXin Li FATAL = .TRUE. 1463*bf2c3715SXin Li GO TO 120 1464*bf2c3715SXin Li END IF 1465*bf2c3715SXin Li* 1466*bf2c3715SXin Li* See what data changed inside subroutines. 1467*bf2c3715SXin Li* 1468*bf2c3715SXin Li ISAME( 1 ) = UPLOS.EQ.UPLO 1469*bf2c3715SXin Li ISAME( 2 ) = TRANSS.EQ.TRANS 1470*bf2c3715SXin Li ISAME( 3 ) = NS.EQ.N 1471*bf2c3715SXin Li ISAME( 4 ) = KS.EQ.K 1472*bf2c3715SXin Li IF( CONJ )THEN 1473*bf2c3715SXin Li ISAME( 5 ) = RALS.EQ.RALPHA 1474*bf2c3715SXin Li ELSE 1475*bf2c3715SXin Li ISAME( 5 ) = ALS.EQ.ALPHA 1476*bf2c3715SXin Li END IF 1477*bf2c3715SXin Li ISAME( 6 ) = LCE( AS, AA, LAA ) 1478*bf2c3715SXin Li ISAME( 7 ) = LDAS.EQ.LDA 1479*bf2c3715SXin Li IF( CONJ )THEN 1480*bf2c3715SXin Li ISAME( 8 ) = RBETS.EQ.RBETA 1481*bf2c3715SXin Li ELSE 1482*bf2c3715SXin Li ISAME( 8 ) = BETS.EQ.BETA 1483*bf2c3715SXin Li END IF 1484*bf2c3715SXin Li IF( NULL )THEN 1485*bf2c3715SXin Li ISAME( 9 ) = LCE( CS, CC, LCC ) 1486*bf2c3715SXin Li ELSE 1487*bf2c3715SXin Li ISAME( 9 ) = LCERES( SNAME( 2: 3 ), UPLO, N, 1488*bf2c3715SXin Li $ N, CS, CC, LDC ) 1489*bf2c3715SXin Li END IF 1490*bf2c3715SXin Li ISAME( 10 ) = LDCS.EQ.LDC 1491*bf2c3715SXin Li* 1492*bf2c3715SXin Li* If data was incorrectly changed, report and 1493*bf2c3715SXin Li* return. 1494*bf2c3715SXin Li* 1495*bf2c3715SXin Li SAME = .TRUE. 1496*bf2c3715SXin Li DO 30 I = 1, NARGS 1497*bf2c3715SXin Li SAME = SAME.AND.ISAME( I ) 1498*bf2c3715SXin Li IF( .NOT.ISAME( I ) ) 1499*bf2c3715SXin Li $ WRITE( NOUT, FMT = 9998 )I 1500*bf2c3715SXin Li 30 CONTINUE 1501*bf2c3715SXin Li IF( .NOT.SAME )THEN 1502*bf2c3715SXin Li FATAL = .TRUE. 1503*bf2c3715SXin Li GO TO 120 1504*bf2c3715SXin Li END IF 1505*bf2c3715SXin Li* 1506*bf2c3715SXin Li IF( .NOT.NULL )THEN 1507*bf2c3715SXin Li* 1508*bf2c3715SXin Li* Check the result column by column. 1509*bf2c3715SXin Li* 1510*bf2c3715SXin Li IF( CONJ )THEN 1511*bf2c3715SXin Li TRANST = 'C' 1512*bf2c3715SXin Li ELSE 1513*bf2c3715SXin Li TRANST = 'T' 1514*bf2c3715SXin Li END IF 1515*bf2c3715SXin Li JC = 1 1516*bf2c3715SXin Li DO 40 J = 1, N 1517*bf2c3715SXin Li IF( UPPER )THEN 1518*bf2c3715SXin Li JJ = 1 1519*bf2c3715SXin Li LJ = J 1520*bf2c3715SXin Li ELSE 1521*bf2c3715SXin Li JJ = J 1522*bf2c3715SXin Li LJ = N - J + 1 1523*bf2c3715SXin Li END IF 1524*bf2c3715SXin Li IF( TRAN )THEN 1525*bf2c3715SXin Li CALL CMMCH( TRANST, 'N', LJ, 1, K, 1526*bf2c3715SXin Li $ ALPHA, A( 1, JJ ), NMAX, 1527*bf2c3715SXin Li $ A( 1, J ), NMAX, BETA, 1528*bf2c3715SXin Li $ C( JJ, J ), NMAX, CT, G, 1529*bf2c3715SXin Li $ CC( JC ), LDC, EPS, ERR, 1530*bf2c3715SXin Li $ FATAL, NOUT, .TRUE. ) 1531*bf2c3715SXin Li ELSE 1532*bf2c3715SXin Li CALL CMMCH( 'N', TRANST, LJ, 1, K, 1533*bf2c3715SXin Li $ ALPHA, A( JJ, 1 ), NMAX, 1534*bf2c3715SXin Li $ A( J, 1 ), NMAX, BETA, 1535*bf2c3715SXin Li $ C( JJ, J ), NMAX, CT, G, 1536*bf2c3715SXin Li $ CC( JC ), LDC, EPS, ERR, 1537*bf2c3715SXin Li $ FATAL, NOUT, .TRUE. ) 1538*bf2c3715SXin Li END IF 1539*bf2c3715SXin Li IF( UPPER )THEN 1540*bf2c3715SXin Li JC = JC + LDC 1541*bf2c3715SXin Li ELSE 1542*bf2c3715SXin Li JC = JC + LDC + 1 1543*bf2c3715SXin Li END IF 1544*bf2c3715SXin Li ERRMAX = MAX( ERRMAX, ERR ) 1545*bf2c3715SXin Li* If got really bad answer, report and 1546*bf2c3715SXin Li* return. 1547*bf2c3715SXin Li IF( FATAL ) 1548*bf2c3715SXin Li $ GO TO 110 1549*bf2c3715SXin Li 40 CONTINUE 1550*bf2c3715SXin Li END IF 1551*bf2c3715SXin Li* 1552*bf2c3715SXin Li 50 CONTINUE 1553*bf2c3715SXin Li* 1554*bf2c3715SXin Li 60 CONTINUE 1555*bf2c3715SXin Li* 1556*bf2c3715SXin Li 70 CONTINUE 1557*bf2c3715SXin Li* 1558*bf2c3715SXin Li 80 CONTINUE 1559*bf2c3715SXin Li* 1560*bf2c3715SXin Li 90 CONTINUE 1561*bf2c3715SXin Li* 1562*bf2c3715SXin Li 100 CONTINUE 1563*bf2c3715SXin Li* 1564*bf2c3715SXin Li* Report result. 1565*bf2c3715SXin Li* 1566*bf2c3715SXin Li IF( ERRMAX.LT.THRESH )THEN 1567*bf2c3715SXin Li WRITE( NOUT, FMT = 9999 )SNAME, NC 1568*bf2c3715SXin Li ELSE 1569*bf2c3715SXin Li WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX 1570*bf2c3715SXin Li END IF 1571*bf2c3715SXin Li GO TO 130 1572*bf2c3715SXin Li* 1573*bf2c3715SXin Li 110 CONTINUE 1574*bf2c3715SXin Li IF( N.GT.1 ) 1575*bf2c3715SXin Li $ WRITE( NOUT, FMT = 9995 )J 1576*bf2c3715SXin Li* 1577*bf2c3715SXin Li 120 CONTINUE 1578*bf2c3715SXin Li WRITE( NOUT, FMT = 9996 )SNAME 1579*bf2c3715SXin Li IF( CONJ )THEN 1580*bf2c3715SXin Li WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, RALPHA, 1581*bf2c3715SXin Li $ LDA, RBETA, LDC 1582*bf2c3715SXin Li ELSE 1583*bf2c3715SXin Li WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA, 1584*bf2c3715SXin Li $ LDA, BETA, LDC 1585*bf2c3715SXin Li END IF 1586*bf2c3715SXin Li* 1587*bf2c3715SXin Li 130 CONTINUE 1588*bf2c3715SXin Li RETURN 1589*bf2c3715SXin Li* 1590*bf2c3715SXin Li 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', 1591*bf2c3715SXin Li $ 'S)' ) 1592*bf2c3715SXin Li 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', 1593*bf2c3715SXin Li $ 'ANGED INCORRECTLY *******' ) 1594*bf2c3715SXin Li 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', 1595*bf2c3715SXin Li $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, 1596*bf2c3715SXin Li $ ' - SUSPECT *******' ) 1597*bf2c3715SXin Li 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' ) 1598*bf2c3715SXin Li 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) 1599*bf2c3715SXin Li 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ), 1600*bf2c3715SXin Li $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ', 1601*bf2c3715SXin Li $ ' .' ) 1602*bf2c3715SXin Li 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ), 1603*bf2c3715SXin Li $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1, 1604*bf2c3715SXin Li $ '), C,', I3, ') .' ) 1605*bf2c3715SXin Li 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', 1606*bf2c3715SXin Li $ '******' ) 1607*bf2c3715SXin Li* 1608*bf2c3715SXin Li* End of CCHK4. 1609*bf2c3715SXin Li* 1610*bf2c3715SXin Li END 1611*bf2c3715SXin Li SUBROUTINE CCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, 1612*bf2c3715SXin Li $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, 1613*bf2c3715SXin Li $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W ) 1614*bf2c3715SXin Li* 1615*bf2c3715SXin Li* Tests CHER2K and CSYR2K. 1616*bf2c3715SXin Li* 1617*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 1618*bf2c3715SXin Li* 1619*bf2c3715SXin Li* -- Written on 8-February-1989. 1620*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 1621*bf2c3715SXin Li* Iain Duff, AERE Harwell. 1622*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 1623*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 1624*bf2c3715SXin Li* 1625*bf2c3715SXin Li* .. Parameters .. 1626*bf2c3715SXin Li COMPLEX ZERO, ONE 1627*bf2c3715SXin Li PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) ) 1628*bf2c3715SXin Li REAL RONE, RZERO 1629*bf2c3715SXin Li PARAMETER ( RONE = 1.0, RZERO = 0.0 ) 1630*bf2c3715SXin Li* .. Scalar Arguments .. 1631*bf2c3715SXin Li REAL EPS, THRESH 1632*bf2c3715SXin Li INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA 1633*bf2c3715SXin Li LOGICAL FATAL, REWI, TRACE 1634*bf2c3715SXin Li CHARACTER*6 SNAME 1635*bf2c3715SXin Li* .. Array Arguments .. 1636*bf2c3715SXin Li COMPLEX AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ), 1637*bf2c3715SXin Li $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ), 1638*bf2c3715SXin Li $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ), 1639*bf2c3715SXin Li $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ), 1640*bf2c3715SXin Li $ W( 2*NMAX ) 1641*bf2c3715SXin Li REAL G( NMAX ) 1642*bf2c3715SXin Li INTEGER IDIM( NIDIM ) 1643*bf2c3715SXin Li* .. Local Scalars .. 1644*bf2c3715SXin Li COMPLEX ALPHA, ALS, BETA, BETS 1645*bf2c3715SXin Li REAL ERR, ERRMAX, RBETA, RBETS 1646*bf2c3715SXin Li INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB, 1647*bf2c3715SXin Li $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS, 1648*bf2c3715SXin Li $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS 1649*bf2c3715SXin Li LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER 1650*bf2c3715SXin Li CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS 1651*bf2c3715SXin Li CHARACTER*2 ICHT, ICHU 1652*bf2c3715SXin Li* .. Local Arrays .. 1653*bf2c3715SXin Li LOGICAL ISAME( 13 ) 1654*bf2c3715SXin Li* .. External Functions .. 1655*bf2c3715SXin Li LOGICAL LCE, LCERES 1656*bf2c3715SXin Li EXTERNAL LCE, LCERES 1657*bf2c3715SXin Li* .. External Subroutines .. 1658*bf2c3715SXin Li EXTERNAL CHER2K, CMAKE, CMMCH, CSYR2K 1659*bf2c3715SXin Li* .. Intrinsic Functions .. 1660*bf2c3715SXin Li INTRINSIC CMPLX, CONJG, MAX, REAL 1661*bf2c3715SXin Li* .. Scalars in Common .. 1662*bf2c3715SXin Li INTEGER INFOT, NOUTC 1663*bf2c3715SXin Li LOGICAL LERR, OK 1664*bf2c3715SXin Li* .. Common blocks .. 1665*bf2c3715SXin Li COMMON /INFOC/INFOT, NOUTC, OK, LERR 1666*bf2c3715SXin Li* .. Data statements .. 1667*bf2c3715SXin Li DATA ICHT/'NC'/, ICHU/'UL'/ 1668*bf2c3715SXin Li* .. Executable Statements .. 1669*bf2c3715SXin Li CONJ = SNAME( 2: 3 ).EQ.'HE' 1670*bf2c3715SXin Li* 1671*bf2c3715SXin Li NARGS = 12 1672*bf2c3715SXin Li NC = 0 1673*bf2c3715SXin Li RESET = .TRUE. 1674*bf2c3715SXin Li ERRMAX = RZERO 1675*bf2c3715SXin Li* 1676*bf2c3715SXin Li DO 130 IN = 1, NIDIM 1677*bf2c3715SXin Li N = IDIM( IN ) 1678*bf2c3715SXin Li* Set LDC to 1 more than minimum value if room. 1679*bf2c3715SXin Li LDC = N 1680*bf2c3715SXin Li IF( LDC.LT.NMAX ) 1681*bf2c3715SXin Li $ LDC = LDC + 1 1682*bf2c3715SXin Li* Skip tests if not enough room. 1683*bf2c3715SXin Li IF( LDC.GT.NMAX ) 1684*bf2c3715SXin Li $ GO TO 130 1685*bf2c3715SXin Li LCC = LDC*N 1686*bf2c3715SXin Li* 1687*bf2c3715SXin Li DO 120 IK = 1, NIDIM 1688*bf2c3715SXin Li K = IDIM( IK ) 1689*bf2c3715SXin Li* 1690*bf2c3715SXin Li DO 110 ICT = 1, 2 1691*bf2c3715SXin Li TRANS = ICHT( ICT: ICT ) 1692*bf2c3715SXin Li TRAN = TRANS.EQ.'C' 1693*bf2c3715SXin Li IF( TRAN.AND..NOT.CONJ ) 1694*bf2c3715SXin Li $ TRANS = 'T' 1695*bf2c3715SXin Li IF( TRAN )THEN 1696*bf2c3715SXin Li MA = K 1697*bf2c3715SXin Li NA = N 1698*bf2c3715SXin Li ELSE 1699*bf2c3715SXin Li MA = N 1700*bf2c3715SXin Li NA = K 1701*bf2c3715SXin Li END IF 1702*bf2c3715SXin Li* Set LDA to 1 more than minimum value if room. 1703*bf2c3715SXin Li LDA = MA 1704*bf2c3715SXin Li IF( LDA.LT.NMAX ) 1705*bf2c3715SXin Li $ LDA = LDA + 1 1706*bf2c3715SXin Li* Skip tests if not enough room. 1707*bf2c3715SXin Li IF( LDA.GT.NMAX ) 1708*bf2c3715SXin Li $ GO TO 110 1709*bf2c3715SXin Li LAA = LDA*NA 1710*bf2c3715SXin Li* 1711*bf2c3715SXin Li* Generate the matrix A. 1712*bf2c3715SXin Li* 1713*bf2c3715SXin Li IF( TRAN )THEN 1714*bf2c3715SXin Li CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA, 1715*bf2c3715SXin Li $ LDA, RESET, ZERO ) 1716*bf2c3715SXin Li ELSE 1717*bf2c3715SXin Li CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA, 1718*bf2c3715SXin Li $ RESET, ZERO ) 1719*bf2c3715SXin Li END IF 1720*bf2c3715SXin Li* 1721*bf2c3715SXin Li* Generate the matrix B. 1722*bf2c3715SXin Li* 1723*bf2c3715SXin Li LDB = LDA 1724*bf2c3715SXin Li LBB = LAA 1725*bf2c3715SXin Li IF( TRAN )THEN 1726*bf2c3715SXin Li CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ), 1727*bf2c3715SXin Li $ 2*NMAX, BB, LDB, RESET, ZERO ) 1728*bf2c3715SXin Li ELSE 1729*bf2c3715SXin Li CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ), 1730*bf2c3715SXin Li $ NMAX, BB, LDB, RESET, ZERO ) 1731*bf2c3715SXin Li END IF 1732*bf2c3715SXin Li* 1733*bf2c3715SXin Li DO 100 ICU = 1, 2 1734*bf2c3715SXin Li UPLO = ICHU( ICU: ICU ) 1735*bf2c3715SXin Li UPPER = UPLO.EQ.'U' 1736*bf2c3715SXin Li* 1737*bf2c3715SXin Li DO 90 IA = 1, NALF 1738*bf2c3715SXin Li ALPHA = ALF( IA ) 1739*bf2c3715SXin Li* 1740*bf2c3715SXin Li DO 80 IB = 1, NBET 1741*bf2c3715SXin Li BETA = BET( IB ) 1742*bf2c3715SXin Li IF( CONJ )THEN 1743*bf2c3715SXin Li RBETA = REAL( BETA ) 1744*bf2c3715SXin Li BETA = CMPLX( RBETA, RZERO ) 1745*bf2c3715SXin Li END IF 1746*bf2c3715SXin Li NULL = N.LE.0 1747*bf2c3715SXin Li IF( CONJ ) 1748*bf2c3715SXin Li $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ. 1749*bf2c3715SXin Li $ ZERO ).AND.RBETA.EQ.RONE ) 1750*bf2c3715SXin Li* 1751*bf2c3715SXin Li* Generate the matrix C. 1752*bf2c3715SXin Li* 1753*bf2c3715SXin Li CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C, 1754*bf2c3715SXin Li $ NMAX, CC, LDC, RESET, ZERO ) 1755*bf2c3715SXin Li* 1756*bf2c3715SXin Li NC = NC + 1 1757*bf2c3715SXin Li* 1758*bf2c3715SXin Li* Save every datum before calling the subroutine. 1759*bf2c3715SXin Li* 1760*bf2c3715SXin Li UPLOS = UPLO 1761*bf2c3715SXin Li TRANSS = TRANS 1762*bf2c3715SXin Li NS = N 1763*bf2c3715SXin Li KS = K 1764*bf2c3715SXin Li ALS = ALPHA 1765*bf2c3715SXin Li DO 10 I = 1, LAA 1766*bf2c3715SXin Li AS( I ) = AA( I ) 1767*bf2c3715SXin Li 10 CONTINUE 1768*bf2c3715SXin Li LDAS = LDA 1769*bf2c3715SXin Li DO 20 I = 1, LBB 1770*bf2c3715SXin Li BS( I ) = BB( I ) 1771*bf2c3715SXin Li 20 CONTINUE 1772*bf2c3715SXin Li LDBS = LDB 1773*bf2c3715SXin Li IF( CONJ )THEN 1774*bf2c3715SXin Li RBETS = RBETA 1775*bf2c3715SXin Li ELSE 1776*bf2c3715SXin Li BETS = BETA 1777*bf2c3715SXin Li END IF 1778*bf2c3715SXin Li DO 30 I = 1, LCC 1779*bf2c3715SXin Li CS( I ) = CC( I ) 1780*bf2c3715SXin Li 30 CONTINUE 1781*bf2c3715SXin Li LDCS = LDC 1782*bf2c3715SXin Li* 1783*bf2c3715SXin Li* Call the subroutine. 1784*bf2c3715SXin Li* 1785*bf2c3715SXin Li IF( CONJ )THEN 1786*bf2c3715SXin Li IF( TRACE ) 1787*bf2c3715SXin Li $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, 1788*bf2c3715SXin Li $ TRANS, N, K, ALPHA, LDA, LDB, RBETA, LDC 1789*bf2c3715SXin Li IF( REWI ) 1790*bf2c3715SXin Li $ REWIND NTRA 1791*bf2c3715SXin Li CALL CHER2K( UPLO, TRANS, N, K, ALPHA, AA, 1792*bf2c3715SXin Li $ LDA, BB, LDB, RBETA, CC, LDC ) 1793*bf2c3715SXin Li ELSE 1794*bf2c3715SXin Li IF( TRACE ) 1795*bf2c3715SXin Li $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, 1796*bf2c3715SXin Li $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC 1797*bf2c3715SXin Li IF( REWI ) 1798*bf2c3715SXin Li $ REWIND NTRA 1799*bf2c3715SXin Li CALL CSYR2K( UPLO, TRANS, N, K, ALPHA, AA, 1800*bf2c3715SXin Li $ LDA, BB, LDB, BETA, CC, LDC ) 1801*bf2c3715SXin Li END IF 1802*bf2c3715SXin Li* 1803*bf2c3715SXin Li* Check if error-exit was taken incorrectly. 1804*bf2c3715SXin Li* 1805*bf2c3715SXin Li IF( .NOT.OK )THEN 1806*bf2c3715SXin Li WRITE( NOUT, FMT = 9992 ) 1807*bf2c3715SXin Li FATAL = .TRUE. 1808*bf2c3715SXin Li GO TO 150 1809*bf2c3715SXin Li END IF 1810*bf2c3715SXin Li* 1811*bf2c3715SXin Li* See what data changed inside subroutines. 1812*bf2c3715SXin Li* 1813*bf2c3715SXin Li ISAME( 1 ) = UPLOS.EQ.UPLO 1814*bf2c3715SXin Li ISAME( 2 ) = TRANSS.EQ.TRANS 1815*bf2c3715SXin Li ISAME( 3 ) = NS.EQ.N 1816*bf2c3715SXin Li ISAME( 4 ) = KS.EQ.K 1817*bf2c3715SXin Li ISAME( 5 ) = ALS.EQ.ALPHA 1818*bf2c3715SXin Li ISAME( 6 ) = LCE( AS, AA, LAA ) 1819*bf2c3715SXin Li ISAME( 7 ) = LDAS.EQ.LDA 1820*bf2c3715SXin Li ISAME( 8 ) = LCE( BS, BB, LBB ) 1821*bf2c3715SXin Li ISAME( 9 ) = LDBS.EQ.LDB 1822*bf2c3715SXin Li IF( CONJ )THEN 1823*bf2c3715SXin Li ISAME( 10 ) = RBETS.EQ.RBETA 1824*bf2c3715SXin Li ELSE 1825*bf2c3715SXin Li ISAME( 10 ) = BETS.EQ.BETA 1826*bf2c3715SXin Li END IF 1827*bf2c3715SXin Li IF( NULL )THEN 1828*bf2c3715SXin Li ISAME( 11 ) = LCE( CS, CC, LCC ) 1829*bf2c3715SXin Li ELSE 1830*bf2c3715SXin Li ISAME( 11 ) = LCERES( 'HE', UPLO, N, N, CS, 1831*bf2c3715SXin Li $ CC, LDC ) 1832*bf2c3715SXin Li END IF 1833*bf2c3715SXin Li ISAME( 12 ) = LDCS.EQ.LDC 1834*bf2c3715SXin Li* 1835*bf2c3715SXin Li* If data was incorrectly changed, report and 1836*bf2c3715SXin Li* return. 1837*bf2c3715SXin Li* 1838*bf2c3715SXin Li SAME = .TRUE. 1839*bf2c3715SXin Li DO 40 I = 1, NARGS 1840*bf2c3715SXin Li SAME = SAME.AND.ISAME( I ) 1841*bf2c3715SXin Li IF( .NOT.ISAME( I ) ) 1842*bf2c3715SXin Li $ WRITE( NOUT, FMT = 9998 )I 1843*bf2c3715SXin Li 40 CONTINUE 1844*bf2c3715SXin Li IF( .NOT.SAME )THEN 1845*bf2c3715SXin Li FATAL = .TRUE. 1846*bf2c3715SXin Li GO TO 150 1847*bf2c3715SXin Li END IF 1848*bf2c3715SXin Li* 1849*bf2c3715SXin Li IF( .NOT.NULL )THEN 1850*bf2c3715SXin Li* 1851*bf2c3715SXin Li* Check the result column by column. 1852*bf2c3715SXin Li* 1853*bf2c3715SXin Li IF( CONJ )THEN 1854*bf2c3715SXin Li TRANST = 'C' 1855*bf2c3715SXin Li ELSE 1856*bf2c3715SXin Li TRANST = 'T' 1857*bf2c3715SXin Li END IF 1858*bf2c3715SXin Li JJAB = 1 1859*bf2c3715SXin Li JC = 1 1860*bf2c3715SXin Li DO 70 J = 1, N 1861*bf2c3715SXin Li IF( UPPER )THEN 1862*bf2c3715SXin Li JJ = 1 1863*bf2c3715SXin Li LJ = J 1864*bf2c3715SXin Li ELSE 1865*bf2c3715SXin Li JJ = J 1866*bf2c3715SXin Li LJ = N - J + 1 1867*bf2c3715SXin Li END IF 1868*bf2c3715SXin Li IF( TRAN )THEN 1869*bf2c3715SXin Li DO 50 I = 1, K 1870*bf2c3715SXin Li W( I ) = ALPHA*AB( ( J - 1 )*2* 1871*bf2c3715SXin Li $ NMAX + K + I ) 1872*bf2c3715SXin Li IF( CONJ )THEN 1873*bf2c3715SXin Li W( K + I ) = CONJG( ALPHA )* 1874*bf2c3715SXin Li $ AB( ( J - 1 )*2* 1875*bf2c3715SXin Li $ NMAX + I ) 1876*bf2c3715SXin Li ELSE 1877*bf2c3715SXin Li W( K + I ) = ALPHA* 1878*bf2c3715SXin Li $ AB( ( J - 1 )*2* 1879*bf2c3715SXin Li $ NMAX + I ) 1880*bf2c3715SXin Li END IF 1881*bf2c3715SXin Li 50 CONTINUE 1882*bf2c3715SXin Li CALL CMMCH( TRANST, 'N', LJ, 1, 2*K, 1883*bf2c3715SXin Li $ ONE, AB( JJAB ), 2*NMAX, W, 1884*bf2c3715SXin Li $ 2*NMAX, BETA, C( JJ, J ), 1885*bf2c3715SXin Li $ NMAX, CT, G, CC( JC ), LDC, 1886*bf2c3715SXin Li $ EPS, ERR, FATAL, NOUT, 1887*bf2c3715SXin Li $ .TRUE. ) 1888*bf2c3715SXin Li ELSE 1889*bf2c3715SXin Li DO 60 I = 1, K 1890*bf2c3715SXin Li IF( CONJ )THEN 1891*bf2c3715SXin Li W( I ) = ALPHA*CONJG( AB( ( K + 1892*bf2c3715SXin Li $ I - 1 )*NMAX + J ) ) 1893*bf2c3715SXin Li W( K + I ) = CONJG( ALPHA* 1894*bf2c3715SXin Li $ AB( ( I - 1 )*NMAX + 1895*bf2c3715SXin Li $ J ) ) 1896*bf2c3715SXin Li ELSE 1897*bf2c3715SXin Li W( I ) = ALPHA*AB( ( K + I - 1 )* 1898*bf2c3715SXin Li $ NMAX + J ) 1899*bf2c3715SXin Li W( K + I ) = ALPHA* 1900*bf2c3715SXin Li $ AB( ( I - 1 )*NMAX + 1901*bf2c3715SXin Li $ J ) 1902*bf2c3715SXin Li END IF 1903*bf2c3715SXin Li 60 CONTINUE 1904*bf2c3715SXin Li CALL CMMCH( 'N', 'N', LJ, 1, 2*K, ONE, 1905*bf2c3715SXin Li $ AB( JJ ), NMAX, W, 2*NMAX, 1906*bf2c3715SXin Li $ BETA, C( JJ, J ), NMAX, CT, 1907*bf2c3715SXin Li $ G, CC( JC ), LDC, EPS, ERR, 1908*bf2c3715SXin Li $ FATAL, NOUT, .TRUE. ) 1909*bf2c3715SXin Li END IF 1910*bf2c3715SXin Li IF( UPPER )THEN 1911*bf2c3715SXin Li JC = JC + LDC 1912*bf2c3715SXin Li ELSE 1913*bf2c3715SXin Li JC = JC + LDC + 1 1914*bf2c3715SXin Li IF( TRAN ) 1915*bf2c3715SXin Li $ JJAB = JJAB + 2*NMAX 1916*bf2c3715SXin Li END IF 1917*bf2c3715SXin Li ERRMAX = MAX( ERRMAX, ERR ) 1918*bf2c3715SXin Li* If got really bad answer, report and 1919*bf2c3715SXin Li* return. 1920*bf2c3715SXin Li IF( FATAL ) 1921*bf2c3715SXin Li $ GO TO 140 1922*bf2c3715SXin Li 70 CONTINUE 1923*bf2c3715SXin Li END IF 1924*bf2c3715SXin Li* 1925*bf2c3715SXin Li 80 CONTINUE 1926*bf2c3715SXin Li* 1927*bf2c3715SXin Li 90 CONTINUE 1928*bf2c3715SXin Li* 1929*bf2c3715SXin Li 100 CONTINUE 1930*bf2c3715SXin Li* 1931*bf2c3715SXin Li 110 CONTINUE 1932*bf2c3715SXin Li* 1933*bf2c3715SXin Li 120 CONTINUE 1934*bf2c3715SXin Li* 1935*bf2c3715SXin Li 130 CONTINUE 1936*bf2c3715SXin Li* 1937*bf2c3715SXin Li* Report result. 1938*bf2c3715SXin Li* 1939*bf2c3715SXin Li IF( ERRMAX.LT.THRESH )THEN 1940*bf2c3715SXin Li WRITE( NOUT, FMT = 9999 )SNAME, NC 1941*bf2c3715SXin Li ELSE 1942*bf2c3715SXin Li WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX 1943*bf2c3715SXin Li END IF 1944*bf2c3715SXin Li GO TO 160 1945*bf2c3715SXin Li* 1946*bf2c3715SXin Li 140 CONTINUE 1947*bf2c3715SXin Li IF( N.GT.1 ) 1948*bf2c3715SXin Li $ WRITE( NOUT, FMT = 9995 )J 1949*bf2c3715SXin Li* 1950*bf2c3715SXin Li 150 CONTINUE 1951*bf2c3715SXin Li WRITE( NOUT, FMT = 9996 )SNAME 1952*bf2c3715SXin Li IF( CONJ )THEN 1953*bf2c3715SXin Li WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA, 1954*bf2c3715SXin Li $ LDA, LDB, RBETA, LDC 1955*bf2c3715SXin Li ELSE 1956*bf2c3715SXin Li WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA, 1957*bf2c3715SXin Li $ LDA, LDB, BETA, LDC 1958*bf2c3715SXin Li END IF 1959*bf2c3715SXin Li* 1960*bf2c3715SXin Li 160 CONTINUE 1961*bf2c3715SXin Li RETURN 1962*bf2c3715SXin Li* 1963*bf2c3715SXin Li 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', 1964*bf2c3715SXin Li $ 'S)' ) 1965*bf2c3715SXin Li 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', 1966*bf2c3715SXin Li $ 'ANGED INCORRECTLY *******' ) 1967*bf2c3715SXin Li 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', 1968*bf2c3715SXin Li $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, 1969*bf2c3715SXin Li $ ' - SUSPECT *******' ) 1970*bf2c3715SXin Li 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' ) 1971*bf2c3715SXin Li 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) 1972*bf2c3715SXin Li 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ), 1973*bf2c3715SXin Li $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1, 1974*bf2c3715SXin Li $ ', C,', I3, ') .' ) 1975*bf2c3715SXin Li 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ), 1976*bf2c3715SXin Li $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1, 1977*bf2c3715SXin Li $ ',', F4.1, '), C,', I3, ') .' ) 1978*bf2c3715SXin Li 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', 1979*bf2c3715SXin Li $ '******' ) 1980*bf2c3715SXin Li* 1981*bf2c3715SXin Li* End of CCHK5. 1982*bf2c3715SXin Li* 1983*bf2c3715SXin Li END 1984*bf2c3715SXin Li SUBROUTINE CCHKE( ISNUM, SRNAMT, NOUT ) 1985*bf2c3715SXin Li* 1986*bf2c3715SXin Li* Tests the error exits from the Level 3 Blas. 1987*bf2c3715SXin Li* Requires a special version of the error-handling routine XERBLA. 1988*bf2c3715SXin Li* A, B and C should not need to be defined. 1989*bf2c3715SXin Li* 1990*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 1991*bf2c3715SXin Li* 1992*bf2c3715SXin Li* -- Written on 8-February-1989. 1993*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 1994*bf2c3715SXin Li* Iain Duff, AERE Harwell. 1995*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 1996*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 1997*bf2c3715SXin Li* 1998*bf2c3715SXin Li* 3-19-92: Initialize ALPHA, BETA, RALPHA, and RBETA (eca) 1999*bf2c3715SXin Li* 3-19-92: Fix argument 12 in calls to CSYMM and CHEMM 2000*bf2c3715SXin Li* with INFOT = 9 (eca) 2001*bf2c3715SXin Li* 2002*bf2c3715SXin Li* .. Scalar Arguments .. 2003*bf2c3715SXin Li INTEGER ISNUM, NOUT 2004*bf2c3715SXin Li CHARACTER*6 SRNAMT 2005*bf2c3715SXin Li* .. Scalars in Common .. 2006*bf2c3715SXin Li INTEGER INFOT, NOUTC 2007*bf2c3715SXin Li LOGICAL LERR, OK 2008*bf2c3715SXin Li* .. Parameters .. 2009*bf2c3715SXin Li REAL ONE, TWO 2010*bf2c3715SXin Li PARAMETER ( ONE = 1.0E0, TWO = 2.0E0 ) 2011*bf2c3715SXin Li* .. Local Scalars .. 2012*bf2c3715SXin Li COMPLEX ALPHA, BETA 2013*bf2c3715SXin Li REAL RALPHA, RBETA 2014*bf2c3715SXin Li* .. Local Arrays .. 2015*bf2c3715SXin Li COMPLEX A( 2, 1 ), B( 2, 1 ), C( 2, 1 ) 2016*bf2c3715SXin Li* .. External Subroutines .. 2017*bf2c3715SXin Li EXTERNAL CGEMM, CHEMM, CHER2K, CHERK, CHKXER, CSYMM, 2018*bf2c3715SXin Li $ CSYR2K, CSYRK, CTRMM, CTRSM 2019*bf2c3715SXin Li* .. Common blocks .. 2020*bf2c3715SXin Li COMMON /INFOC/INFOT, NOUTC, OK, LERR 2021*bf2c3715SXin Li* .. Executable Statements .. 2022*bf2c3715SXin Li* OK is set to .FALSE. by the special version of XERBLA or by CHKXER 2023*bf2c3715SXin Li* if anything is wrong. 2024*bf2c3715SXin Li OK = .TRUE. 2025*bf2c3715SXin Li* LERR is set to .TRUE. by the special version of XERBLA each time 2026*bf2c3715SXin Li* it is called, and is then tested and re-set by CHKXER. 2027*bf2c3715SXin Li LERR = .FALSE. 2028*bf2c3715SXin Li* 2029*bf2c3715SXin Li* Initialize ALPHA, BETA, RALPHA, and RBETA. 2030*bf2c3715SXin Li* 2031*bf2c3715SXin Li ALPHA = CMPLX( ONE, -ONE ) 2032*bf2c3715SXin Li BETA = CMPLX( TWO, -TWO ) 2033*bf2c3715SXin Li RALPHA = ONE 2034*bf2c3715SXin Li RBETA = TWO 2035*bf2c3715SXin Li* 2036*bf2c3715SXin Li GO TO ( 10, 20, 30, 40, 50, 60, 70, 80, 2037*bf2c3715SXin Li $ 90 )ISNUM 2038*bf2c3715SXin Li 10 INFOT = 1 2039*bf2c3715SXin Li CALL CGEMM( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2040*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2041*bf2c3715SXin Li INFOT = 1 2042*bf2c3715SXin Li CALL CGEMM( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2043*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2044*bf2c3715SXin Li INFOT = 1 2045*bf2c3715SXin Li CALL CGEMM( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2046*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2047*bf2c3715SXin Li INFOT = 2 2048*bf2c3715SXin Li CALL CGEMM( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2049*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2050*bf2c3715SXin Li INFOT = 2 2051*bf2c3715SXin Li CALL CGEMM( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2052*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2053*bf2c3715SXin Li INFOT = 2 2054*bf2c3715SXin Li CALL CGEMM( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2055*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2056*bf2c3715SXin Li INFOT = 3 2057*bf2c3715SXin Li CALL CGEMM( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2058*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2059*bf2c3715SXin Li INFOT = 3 2060*bf2c3715SXin Li CALL CGEMM( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2061*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2062*bf2c3715SXin Li INFOT = 3 2063*bf2c3715SXin Li CALL CGEMM( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2064*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2065*bf2c3715SXin Li INFOT = 3 2066*bf2c3715SXin Li CALL CGEMM( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2067*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2068*bf2c3715SXin Li INFOT = 3 2069*bf2c3715SXin Li CALL CGEMM( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2070*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2071*bf2c3715SXin Li INFOT = 3 2072*bf2c3715SXin Li CALL CGEMM( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2073*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2074*bf2c3715SXin Li INFOT = 3 2075*bf2c3715SXin Li CALL CGEMM( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2076*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2077*bf2c3715SXin Li INFOT = 3 2078*bf2c3715SXin Li CALL CGEMM( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2079*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2080*bf2c3715SXin Li INFOT = 3 2081*bf2c3715SXin Li CALL CGEMM( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2082*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2083*bf2c3715SXin Li INFOT = 4 2084*bf2c3715SXin Li CALL CGEMM( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2085*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2086*bf2c3715SXin Li INFOT = 4 2087*bf2c3715SXin Li CALL CGEMM( 'N', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2088*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2089*bf2c3715SXin Li INFOT = 4 2090*bf2c3715SXin Li CALL CGEMM( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2091*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2092*bf2c3715SXin Li INFOT = 4 2093*bf2c3715SXin Li CALL CGEMM( 'C', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2094*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2095*bf2c3715SXin Li INFOT = 4 2096*bf2c3715SXin Li CALL CGEMM( 'C', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2097*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2098*bf2c3715SXin Li INFOT = 4 2099*bf2c3715SXin Li CALL CGEMM( 'C', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2100*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2101*bf2c3715SXin Li INFOT = 4 2102*bf2c3715SXin Li CALL CGEMM( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2103*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2104*bf2c3715SXin Li INFOT = 4 2105*bf2c3715SXin Li CALL CGEMM( 'T', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2106*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2107*bf2c3715SXin Li INFOT = 4 2108*bf2c3715SXin Li CALL CGEMM( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2109*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2110*bf2c3715SXin Li INFOT = 5 2111*bf2c3715SXin Li CALL CGEMM( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2112*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2113*bf2c3715SXin Li INFOT = 5 2114*bf2c3715SXin Li CALL CGEMM( 'N', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2115*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2116*bf2c3715SXin Li INFOT = 5 2117*bf2c3715SXin Li CALL CGEMM( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2118*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2119*bf2c3715SXin Li INFOT = 5 2120*bf2c3715SXin Li CALL CGEMM( 'C', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2121*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2122*bf2c3715SXin Li INFOT = 5 2123*bf2c3715SXin Li CALL CGEMM( 'C', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2124*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2125*bf2c3715SXin Li INFOT = 5 2126*bf2c3715SXin Li CALL CGEMM( 'C', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2127*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2128*bf2c3715SXin Li INFOT = 5 2129*bf2c3715SXin Li CALL CGEMM( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2130*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2131*bf2c3715SXin Li INFOT = 5 2132*bf2c3715SXin Li CALL CGEMM( 'T', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2133*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2134*bf2c3715SXin Li INFOT = 5 2135*bf2c3715SXin Li CALL CGEMM( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2136*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2137*bf2c3715SXin Li INFOT = 8 2138*bf2c3715SXin Li CALL CGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2139*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2140*bf2c3715SXin Li INFOT = 8 2141*bf2c3715SXin Li CALL CGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2142*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2143*bf2c3715SXin Li INFOT = 8 2144*bf2c3715SXin Li CALL CGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2145*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2146*bf2c3715SXin Li INFOT = 8 2147*bf2c3715SXin Li CALL CGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 ) 2148*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2149*bf2c3715SXin Li INFOT = 8 2150*bf2c3715SXin Li CALL CGEMM( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2151*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2152*bf2c3715SXin Li INFOT = 8 2153*bf2c3715SXin Li CALL CGEMM( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2154*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2155*bf2c3715SXin Li INFOT = 8 2156*bf2c3715SXin Li CALL CGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 ) 2157*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2158*bf2c3715SXin Li INFOT = 8 2159*bf2c3715SXin Li CALL CGEMM( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2160*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2161*bf2c3715SXin Li INFOT = 8 2162*bf2c3715SXin Li CALL CGEMM( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2163*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2164*bf2c3715SXin Li INFOT = 10 2165*bf2c3715SXin Li CALL CGEMM( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2166*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2167*bf2c3715SXin Li INFOT = 10 2168*bf2c3715SXin Li CALL CGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2169*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2170*bf2c3715SXin Li INFOT = 10 2171*bf2c3715SXin Li CALL CGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2172*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2173*bf2c3715SXin Li INFOT = 10 2174*bf2c3715SXin Li CALL CGEMM( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2175*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2176*bf2c3715SXin Li INFOT = 10 2177*bf2c3715SXin Li CALL CGEMM( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2178*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2179*bf2c3715SXin Li INFOT = 10 2180*bf2c3715SXin Li CALL CGEMM( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2181*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2182*bf2c3715SXin Li INFOT = 10 2183*bf2c3715SXin Li CALL CGEMM( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2184*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2185*bf2c3715SXin Li INFOT = 10 2186*bf2c3715SXin Li CALL CGEMM( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2187*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2188*bf2c3715SXin Li INFOT = 10 2189*bf2c3715SXin Li CALL CGEMM( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2190*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2191*bf2c3715SXin Li INFOT = 13 2192*bf2c3715SXin Li CALL CGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2193*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2194*bf2c3715SXin Li INFOT = 13 2195*bf2c3715SXin Li CALL CGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2196*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2197*bf2c3715SXin Li INFOT = 13 2198*bf2c3715SXin Li CALL CGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2199*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2200*bf2c3715SXin Li INFOT = 13 2201*bf2c3715SXin Li CALL CGEMM( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2202*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2203*bf2c3715SXin Li INFOT = 13 2204*bf2c3715SXin Li CALL CGEMM( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2205*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2206*bf2c3715SXin Li INFOT = 13 2207*bf2c3715SXin Li CALL CGEMM( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2208*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2209*bf2c3715SXin Li INFOT = 13 2210*bf2c3715SXin Li CALL CGEMM( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2211*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2212*bf2c3715SXin Li INFOT = 13 2213*bf2c3715SXin Li CALL CGEMM( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2214*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2215*bf2c3715SXin Li INFOT = 13 2216*bf2c3715SXin Li CALL CGEMM( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2217*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2218*bf2c3715SXin Li GO TO 100 2219*bf2c3715SXin Li 20 INFOT = 1 2220*bf2c3715SXin Li CALL CHEMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2221*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2222*bf2c3715SXin Li INFOT = 2 2223*bf2c3715SXin Li CALL CHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2224*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2225*bf2c3715SXin Li INFOT = 3 2226*bf2c3715SXin Li CALL CHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2227*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2228*bf2c3715SXin Li INFOT = 3 2229*bf2c3715SXin Li CALL CHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2230*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2231*bf2c3715SXin Li INFOT = 3 2232*bf2c3715SXin Li CALL CHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2233*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2234*bf2c3715SXin Li INFOT = 3 2235*bf2c3715SXin Li CALL CHEMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2236*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2237*bf2c3715SXin Li INFOT = 4 2238*bf2c3715SXin Li CALL CHEMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2239*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2240*bf2c3715SXin Li INFOT = 4 2241*bf2c3715SXin Li CALL CHEMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2242*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2243*bf2c3715SXin Li INFOT = 4 2244*bf2c3715SXin Li CALL CHEMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2245*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2246*bf2c3715SXin Li INFOT = 4 2247*bf2c3715SXin Li CALL CHEMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2248*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2249*bf2c3715SXin Li INFOT = 7 2250*bf2c3715SXin Li CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 ) 2251*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2252*bf2c3715SXin Li INFOT = 7 2253*bf2c3715SXin Li CALL CHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2254*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2255*bf2c3715SXin Li INFOT = 7 2256*bf2c3715SXin Li CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 ) 2257*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2258*bf2c3715SXin Li INFOT = 7 2259*bf2c3715SXin Li CALL CHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2260*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2261*bf2c3715SXin Li INFOT = 9 2262*bf2c3715SXin Li CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 ) 2263*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2264*bf2c3715SXin Li INFOT = 9 2265*bf2c3715SXin Li CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2266*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2267*bf2c3715SXin Li INFOT = 9 2268*bf2c3715SXin Li CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 ) 2269*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2270*bf2c3715SXin Li INFOT = 9 2271*bf2c3715SXin Li CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2272*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2273*bf2c3715SXin Li INFOT = 12 2274*bf2c3715SXin Li CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ) 2275*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2276*bf2c3715SXin Li INFOT = 12 2277*bf2c3715SXin Li CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 ) 2278*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2279*bf2c3715SXin Li INFOT = 12 2280*bf2c3715SXin Li CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ) 2281*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2282*bf2c3715SXin Li INFOT = 12 2283*bf2c3715SXin Li CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 ) 2284*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2285*bf2c3715SXin Li GO TO 100 2286*bf2c3715SXin Li 30 INFOT = 1 2287*bf2c3715SXin Li CALL CSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2288*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2289*bf2c3715SXin Li INFOT = 2 2290*bf2c3715SXin Li CALL CSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2291*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2292*bf2c3715SXin Li INFOT = 3 2293*bf2c3715SXin Li CALL CSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2294*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2295*bf2c3715SXin Li INFOT = 3 2296*bf2c3715SXin Li CALL CSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2297*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2298*bf2c3715SXin Li INFOT = 3 2299*bf2c3715SXin Li CALL CSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2300*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2301*bf2c3715SXin Li INFOT = 3 2302*bf2c3715SXin Li CALL CSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2303*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2304*bf2c3715SXin Li INFOT = 4 2305*bf2c3715SXin Li CALL CSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2306*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2307*bf2c3715SXin Li INFOT = 4 2308*bf2c3715SXin Li CALL CSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2309*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2310*bf2c3715SXin Li INFOT = 4 2311*bf2c3715SXin Li CALL CSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2312*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2313*bf2c3715SXin Li INFOT = 4 2314*bf2c3715SXin Li CALL CSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2315*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2316*bf2c3715SXin Li INFOT = 7 2317*bf2c3715SXin Li CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 ) 2318*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2319*bf2c3715SXin Li INFOT = 7 2320*bf2c3715SXin Li CALL CSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2321*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2322*bf2c3715SXin Li INFOT = 7 2323*bf2c3715SXin Li CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 ) 2324*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2325*bf2c3715SXin Li INFOT = 7 2326*bf2c3715SXin Li CALL CSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2327*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2328*bf2c3715SXin Li INFOT = 9 2329*bf2c3715SXin Li CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 ) 2330*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2331*bf2c3715SXin Li INFOT = 9 2332*bf2c3715SXin Li CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2333*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2334*bf2c3715SXin Li INFOT = 9 2335*bf2c3715SXin Li CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 ) 2336*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2337*bf2c3715SXin Li INFOT = 9 2338*bf2c3715SXin Li CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2339*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2340*bf2c3715SXin Li INFOT = 12 2341*bf2c3715SXin Li CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ) 2342*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2343*bf2c3715SXin Li INFOT = 12 2344*bf2c3715SXin Li CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 ) 2345*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2346*bf2c3715SXin Li INFOT = 12 2347*bf2c3715SXin Li CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ) 2348*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2349*bf2c3715SXin Li INFOT = 12 2350*bf2c3715SXin Li CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 ) 2351*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2352*bf2c3715SXin Li GO TO 100 2353*bf2c3715SXin Li 40 INFOT = 1 2354*bf2c3715SXin Li CALL CTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 ) 2355*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2356*bf2c3715SXin Li INFOT = 2 2357*bf2c3715SXin Li CALL CTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 ) 2358*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2359*bf2c3715SXin Li INFOT = 3 2360*bf2c3715SXin Li CALL CTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 ) 2361*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2362*bf2c3715SXin Li INFOT = 4 2363*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 ) 2364*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2365*bf2c3715SXin Li INFOT = 5 2366*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2367*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2368*bf2c3715SXin Li INFOT = 5 2369*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2370*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2371*bf2c3715SXin Li INFOT = 5 2372*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2373*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2374*bf2c3715SXin Li INFOT = 5 2375*bf2c3715SXin Li CALL CTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2376*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2377*bf2c3715SXin Li INFOT = 5 2378*bf2c3715SXin Li CALL CTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2379*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2380*bf2c3715SXin Li INFOT = 5 2381*bf2c3715SXin Li CALL CTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2382*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2383*bf2c3715SXin Li INFOT = 5 2384*bf2c3715SXin Li CALL CTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2385*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2386*bf2c3715SXin Li INFOT = 5 2387*bf2c3715SXin Li CALL CTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2388*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2389*bf2c3715SXin Li INFOT = 5 2390*bf2c3715SXin Li CALL CTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2391*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2392*bf2c3715SXin Li INFOT = 5 2393*bf2c3715SXin Li CALL CTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2394*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2395*bf2c3715SXin Li INFOT = 5 2396*bf2c3715SXin Li CALL CTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2397*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2398*bf2c3715SXin Li INFOT = 5 2399*bf2c3715SXin Li CALL CTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2400*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2401*bf2c3715SXin Li INFOT = 6 2402*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2403*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2404*bf2c3715SXin Li INFOT = 6 2405*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2406*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2407*bf2c3715SXin Li INFOT = 6 2408*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2409*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2410*bf2c3715SXin Li INFOT = 6 2411*bf2c3715SXin Li CALL CTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2412*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2413*bf2c3715SXin Li INFOT = 6 2414*bf2c3715SXin Li CALL CTRMM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2415*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2416*bf2c3715SXin Li INFOT = 6 2417*bf2c3715SXin Li CALL CTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2418*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2419*bf2c3715SXin Li INFOT = 6 2420*bf2c3715SXin Li CALL CTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2421*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2422*bf2c3715SXin Li INFOT = 6 2423*bf2c3715SXin Li CALL CTRMM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2424*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2425*bf2c3715SXin Li INFOT = 6 2426*bf2c3715SXin Li CALL CTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2427*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2428*bf2c3715SXin Li INFOT = 6 2429*bf2c3715SXin Li CALL CTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2430*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2431*bf2c3715SXin Li INFOT = 6 2432*bf2c3715SXin Li CALL CTRMM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2433*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2434*bf2c3715SXin Li INFOT = 6 2435*bf2c3715SXin Li CALL CTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2436*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2437*bf2c3715SXin Li INFOT = 9 2438*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2439*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2440*bf2c3715SXin Li INFOT = 9 2441*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2442*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2443*bf2c3715SXin Li INFOT = 9 2444*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2445*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2446*bf2c3715SXin Li INFOT = 9 2447*bf2c3715SXin Li CALL CTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2448*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2449*bf2c3715SXin Li INFOT = 9 2450*bf2c3715SXin Li CALL CTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2451*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2452*bf2c3715SXin Li INFOT = 9 2453*bf2c3715SXin Li CALL CTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2454*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2455*bf2c3715SXin Li INFOT = 9 2456*bf2c3715SXin Li CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2457*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2458*bf2c3715SXin Li INFOT = 9 2459*bf2c3715SXin Li CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2460*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2461*bf2c3715SXin Li INFOT = 9 2462*bf2c3715SXin Li CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2463*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2464*bf2c3715SXin Li INFOT = 9 2465*bf2c3715SXin Li CALL CTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2466*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2467*bf2c3715SXin Li INFOT = 9 2468*bf2c3715SXin Li CALL CTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2469*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2470*bf2c3715SXin Li INFOT = 9 2471*bf2c3715SXin Li CALL CTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2472*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2473*bf2c3715SXin Li INFOT = 11 2474*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2475*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2476*bf2c3715SXin Li INFOT = 11 2477*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2478*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2479*bf2c3715SXin Li INFOT = 11 2480*bf2c3715SXin Li CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2481*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2482*bf2c3715SXin Li INFOT = 11 2483*bf2c3715SXin Li CALL CTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2484*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2485*bf2c3715SXin Li INFOT = 11 2486*bf2c3715SXin Li CALL CTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2487*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2488*bf2c3715SXin Li INFOT = 11 2489*bf2c3715SXin Li CALL CTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2490*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2491*bf2c3715SXin Li INFOT = 11 2492*bf2c3715SXin Li CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2493*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2494*bf2c3715SXin Li INFOT = 11 2495*bf2c3715SXin Li CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2496*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2497*bf2c3715SXin Li INFOT = 11 2498*bf2c3715SXin Li CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2499*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2500*bf2c3715SXin Li INFOT = 11 2501*bf2c3715SXin Li CALL CTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2502*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2503*bf2c3715SXin Li INFOT = 11 2504*bf2c3715SXin Li CALL CTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2505*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2506*bf2c3715SXin Li INFOT = 11 2507*bf2c3715SXin Li CALL CTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2508*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2509*bf2c3715SXin Li GO TO 100 2510*bf2c3715SXin Li 50 INFOT = 1 2511*bf2c3715SXin Li CALL CTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 ) 2512*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2513*bf2c3715SXin Li INFOT = 2 2514*bf2c3715SXin Li CALL CTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 ) 2515*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2516*bf2c3715SXin Li INFOT = 3 2517*bf2c3715SXin Li CALL CTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 ) 2518*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2519*bf2c3715SXin Li INFOT = 4 2520*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 ) 2521*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2522*bf2c3715SXin Li INFOT = 5 2523*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2524*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2525*bf2c3715SXin Li INFOT = 5 2526*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2527*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2528*bf2c3715SXin Li INFOT = 5 2529*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2530*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2531*bf2c3715SXin Li INFOT = 5 2532*bf2c3715SXin Li CALL CTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2533*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2534*bf2c3715SXin Li INFOT = 5 2535*bf2c3715SXin Li CALL CTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2536*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2537*bf2c3715SXin Li INFOT = 5 2538*bf2c3715SXin Li CALL CTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2539*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2540*bf2c3715SXin Li INFOT = 5 2541*bf2c3715SXin Li CALL CTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2542*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2543*bf2c3715SXin Li INFOT = 5 2544*bf2c3715SXin Li CALL CTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2545*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2546*bf2c3715SXin Li INFOT = 5 2547*bf2c3715SXin Li CALL CTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2548*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2549*bf2c3715SXin Li INFOT = 5 2550*bf2c3715SXin Li CALL CTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2551*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2552*bf2c3715SXin Li INFOT = 5 2553*bf2c3715SXin Li CALL CTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2554*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2555*bf2c3715SXin Li INFOT = 5 2556*bf2c3715SXin Li CALL CTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2557*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2558*bf2c3715SXin Li INFOT = 6 2559*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2560*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2561*bf2c3715SXin Li INFOT = 6 2562*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2563*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2564*bf2c3715SXin Li INFOT = 6 2565*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2566*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2567*bf2c3715SXin Li INFOT = 6 2568*bf2c3715SXin Li CALL CTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2569*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2570*bf2c3715SXin Li INFOT = 6 2571*bf2c3715SXin Li CALL CTRSM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2572*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2573*bf2c3715SXin Li INFOT = 6 2574*bf2c3715SXin Li CALL CTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2575*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2576*bf2c3715SXin Li INFOT = 6 2577*bf2c3715SXin Li CALL CTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2578*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2579*bf2c3715SXin Li INFOT = 6 2580*bf2c3715SXin Li CALL CTRSM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2581*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2582*bf2c3715SXin Li INFOT = 6 2583*bf2c3715SXin Li CALL CTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2584*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2585*bf2c3715SXin Li INFOT = 6 2586*bf2c3715SXin Li CALL CTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2587*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2588*bf2c3715SXin Li INFOT = 6 2589*bf2c3715SXin Li CALL CTRSM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2590*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2591*bf2c3715SXin Li INFOT = 6 2592*bf2c3715SXin Li CALL CTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2593*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2594*bf2c3715SXin Li INFOT = 9 2595*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2596*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2597*bf2c3715SXin Li INFOT = 9 2598*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2599*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2600*bf2c3715SXin Li INFOT = 9 2601*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2602*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2603*bf2c3715SXin Li INFOT = 9 2604*bf2c3715SXin Li CALL CTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2605*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2606*bf2c3715SXin Li INFOT = 9 2607*bf2c3715SXin Li CALL CTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2608*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2609*bf2c3715SXin Li INFOT = 9 2610*bf2c3715SXin Li CALL CTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2611*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2612*bf2c3715SXin Li INFOT = 9 2613*bf2c3715SXin Li CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2614*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2615*bf2c3715SXin Li INFOT = 9 2616*bf2c3715SXin Li CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2617*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2618*bf2c3715SXin Li INFOT = 9 2619*bf2c3715SXin Li CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2620*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2621*bf2c3715SXin Li INFOT = 9 2622*bf2c3715SXin Li CALL CTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2623*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2624*bf2c3715SXin Li INFOT = 9 2625*bf2c3715SXin Li CALL CTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2626*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2627*bf2c3715SXin Li INFOT = 9 2628*bf2c3715SXin Li CALL CTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2629*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2630*bf2c3715SXin Li INFOT = 11 2631*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2632*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2633*bf2c3715SXin Li INFOT = 11 2634*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2635*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2636*bf2c3715SXin Li INFOT = 11 2637*bf2c3715SXin Li CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2638*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2639*bf2c3715SXin Li INFOT = 11 2640*bf2c3715SXin Li CALL CTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2641*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2642*bf2c3715SXin Li INFOT = 11 2643*bf2c3715SXin Li CALL CTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2644*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2645*bf2c3715SXin Li INFOT = 11 2646*bf2c3715SXin Li CALL CTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2647*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2648*bf2c3715SXin Li INFOT = 11 2649*bf2c3715SXin Li CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2650*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2651*bf2c3715SXin Li INFOT = 11 2652*bf2c3715SXin Li CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2653*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2654*bf2c3715SXin Li INFOT = 11 2655*bf2c3715SXin Li CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2656*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2657*bf2c3715SXin Li INFOT = 11 2658*bf2c3715SXin Li CALL CTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2659*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2660*bf2c3715SXin Li INFOT = 11 2661*bf2c3715SXin Li CALL CTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2662*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2663*bf2c3715SXin Li INFOT = 11 2664*bf2c3715SXin Li CALL CTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2665*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2666*bf2c3715SXin Li GO TO 100 2667*bf2c3715SXin Li 60 INFOT = 1 2668*bf2c3715SXin Li CALL CHERK( '/', 'N', 0, 0, RALPHA, A, 1, RBETA, C, 1 ) 2669*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2670*bf2c3715SXin Li INFOT = 2 2671*bf2c3715SXin Li CALL CHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 ) 2672*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2673*bf2c3715SXin Li INFOT = 3 2674*bf2c3715SXin Li CALL CHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 ) 2675*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2676*bf2c3715SXin Li INFOT = 3 2677*bf2c3715SXin Li CALL CHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 ) 2678*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2679*bf2c3715SXin Li INFOT = 3 2680*bf2c3715SXin Li CALL CHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 ) 2681*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2682*bf2c3715SXin Li INFOT = 3 2683*bf2c3715SXin Li CALL CHERK( 'L', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 ) 2684*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2685*bf2c3715SXin Li INFOT = 4 2686*bf2c3715SXin Li CALL CHERK( 'U', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 ) 2687*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2688*bf2c3715SXin Li INFOT = 4 2689*bf2c3715SXin Li CALL CHERK( 'U', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 ) 2690*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2691*bf2c3715SXin Li INFOT = 4 2692*bf2c3715SXin Li CALL CHERK( 'L', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 ) 2693*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2694*bf2c3715SXin Li INFOT = 4 2695*bf2c3715SXin Li CALL CHERK( 'L', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 ) 2696*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2697*bf2c3715SXin Li INFOT = 7 2698*bf2c3715SXin Li CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 ) 2699*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2700*bf2c3715SXin Li INFOT = 7 2701*bf2c3715SXin Li CALL CHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 ) 2702*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2703*bf2c3715SXin Li INFOT = 7 2704*bf2c3715SXin Li CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 ) 2705*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2706*bf2c3715SXin Li INFOT = 7 2707*bf2c3715SXin Li CALL CHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 ) 2708*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2709*bf2c3715SXin Li INFOT = 10 2710*bf2c3715SXin Li CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 ) 2711*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2712*bf2c3715SXin Li INFOT = 10 2713*bf2c3715SXin Li CALL CHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 ) 2714*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2715*bf2c3715SXin Li INFOT = 10 2716*bf2c3715SXin Li CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 ) 2717*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2718*bf2c3715SXin Li INFOT = 10 2719*bf2c3715SXin Li CALL CHERK( 'L', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 ) 2720*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2721*bf2c3715SXin Li GO TO 100 2722*bf2c3715SXin Li 70 INFOT = 1 2723*bf2c3715SXin Li CALL CSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 ) 2724*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2725*bf2c3715SXin Li INFOT = 2 2726*bf2c3715SXin Li CALL CSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 ) 2727*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2728*bf2c3715SXin Li INFOT = 3 2729*bf2c3715SXin Li CALL CSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 ) 2730*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2731*bf2c3715SXin Li INFOT = 3 2732*bf2c3715SXin Li CALL CSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 ) 2733*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2734*bf2c3715SXin Li INFOT = 3 2735*bf2c3715SXin Li CALL CSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 ) 2736*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2737*bf2c3715SXin Li INFOT = 3 2738*bf2c3715SXin Li CALL CSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 ) 2739*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2740*bf2c3715SXin Li INFOT = 4 2741*bf2c3715SXin Li CALL CSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 ) 2742*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2743*bf2c3715SXin Li INFOT = 4 2744*bf2c3715SXin Li CALL CSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 ) 2745*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2746*bf2c3715SXin Li INFOT = 4 2747*bf2c3715SXin Li CALL CSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 ) 2748*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2749*bf2c3715SXin Li INFOT = 4 2750*bf2c3715SXin Li CALL CSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 ) 2751*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2752*bf2c3715SXin Li INFOT = 7 2753*bf2c3715SXin Li CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 ) 2754*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2755*bf2c3715SXin Li INFOT = 7 2756*bf2c3715SXin Li CALL CSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 ) 2757*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2758*bf2c3715SXin Li INFOT = 7 2759*bf2c3715SXin Li CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 ) 2760*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2761*bf2c3715SXin Li INFOT = 7 2762*bf2c3715SXin Li CALL CSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 ) 2763*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2764*bf2c3715SXin Li INFOT = 10 2765*bf2c3715SXin Li CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 ) 2766*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2767*bf2c3715SXin Li INFOT = 10 2768*bf2c3715SXin Li CALL CSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 ) 2769*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2770*bf2c3715SXin Li INFOT = 10 2771*bf2c3715SXin Li CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 ) 2772*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2773*bf2c3715SXin Li INFOT = 10 2774*bf2c3715SXin Li CALL CSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 ) 2775*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2776*bf2c3715SXin Li GO TO 100 2777*bf2c3715SXin Li 80 INFOT = 1 2778*bf2c3715SXin Li CALL CHER2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2779*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2780*bf2c3715SXin Li INFOT = 2 2781*bf2c3715SXin Li CALL CHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2782*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2783*bf2c3715SXin Li INFOT = 3 2784*bf2c3715SXin Li CALL CHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2785*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2786*bf2c3715SXin Li INFOT = 3 2787*bf2c3715SXin Li CALL CHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2788*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2789*bf2c3715SXin Li INFOT = 3 2790*bf2c3715SXin Li CALL CHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2791*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2792*bf2c3715SXin Li INFOT = 3 2793*bf2c3715SXin Li CALL CHER2K( 'L', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2794*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2795*bf2c3715SXin Li INFOT = 4 2796*bf2c3715SXin Li CALL CHER2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2797*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2798*bf2c3715SXin Li INFOT = 4 2799*bf2c3715SXin Li CALL CHER2K( 'U', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2800*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2801*bf2c3715SXin Li INFOT = 4 2802*bf2c3715SXin Li CALL CHER2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2803*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2804*bf2c3715SXin Li INFOT = 4 2805*bf2c3715SXin Li CALL CHER2K( 'L', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2806*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2807*bf2c3715SXin Li INFOT = 7 2808*bf2c3715SXin Li CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 ) 2809*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2810*bf2c3715SXin Li INFOT = 7 2811*bf2c3715SXin Li CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2812*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2813*bf2c3715SXin Li INFOT = 7 2814*bf2c3715SXin Li CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 ) 2815*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2816*bf2c3715SXin Li INFOT = 7 2817*bf2c3715SXin Li CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2818*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2819*bf2c3715SXin Li INFOT = 9 2820*bf2c3715SXin Li CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 ) 2821*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2822*bf2c3715SXin Li INFOT = 9 2823*bf2c3715SXin Li CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 ) 2824*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2825*bf2c3715SXin Li INFOT = 9 2826*bf2c3715SXin Li CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 ) 2827*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2828*bf2c3715SXin Li INFOT = 9 2829*bf2c3715SXin Li CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 ) 2830*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2831*bf2c3715SXin Li INFOT = 12 2832*bf2c3715SXin Li CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 ) 2833*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2834*bf2c3715SXin Li INFOT = 12 2835*bf2c3715SXin Li CALL CHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2836*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2837*bf2c3715SXin Li INFOT = 12 2838*bf2c3715SXin Li CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 ) 2839*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2840*bf2c3715SXin Li INFOT = 12 2841*bf2c3715SXin Li CALL CHER2K( 'L', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2842*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2843*bf2c3715SXin Li GO TO 100 2844*bf2c3715SXin Li 90 INFOT = 1 2845*bf2c3715SXin Li CALL CSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2846*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2847*bf2c3715SXin Li INFOT = 2 2848*bf2c3715SXin Li CALL CSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2849*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2850*bf2c3715SXin Li INFOT = 3 2851*bf2c3715SXin Li CALL CSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2852*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2853*bf2c3715SXin Li INFOT = 3 2854*bf2c3715SXin Li CALL CSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2855*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2856*bf2c3715SXin Li INFOT = 3 2857*bf2c3715SXin Li CALL CSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2858*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2859*bf2c3715SXin Li INFOT = 3 2860*bf2c3715SXin Li CALL CSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2861*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2862*bf2c3715SXin Li INFOT = 4 2863*bf2c3715SXin Li CALL CSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2864*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2865*bf2c3715SXin Li INFOT = 4 2866*bf2c3715SXin Li CALL CSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2867*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2868*bf2c3715SXin Li INFOT = 4 2869*bf2c3715SXin Li CALL CSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2870*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2871*bf2c3715SXin Li INFOT = 4 2872*bf2c3715SXin Li CALL CSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2873*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2874*bf2c3715SXin Li INFOT = 7 2875*bf2c3715SXin Li CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2876*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2877*bf2c3715SXin Li INFOT = 7 2878*bf2c3715SXin Li CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2879*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2880*bf2c3715SXin Li INFOT = 7 2881*bf2c3715SXin Li CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2882*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2883*bf2c3715SXin Li INFOT = 7 2884*bf2c3715SXin Li CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2885*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2886*bf2c3715SXin Li INFOT = 9 2887*bf2c3715SXin Li CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 ) 2888*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2889*bf2c3715SXin Li INFOT = 9 2890*bf2c3715SXin Li CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2891*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2892*bf2c3715SXin Li INFOT = 9 2893*bf2c3715SXin Li CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 ) 2894*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2895*bf2c3715SXin Li INFOT = 9 2896*bf2c3715SXin Li CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2897*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2898*bf2c3715SXin Li INFOT = 12 2899*bf2c3715SXin Li CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ) 2900*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2901*bf2c3715SXin Li INFOT = 12 2902*bf2c3715SXin Li CALL CSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2903*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2904*bf2c3715SXin Li INFOT = 12 2905*bf2c3715SXin Li CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ) 2906*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2907*bf2c3715SXin Li INFOT = 12 2908*bf2c3715SXin Li CALL CSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2909*bf2c3715SXin Li CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2910*bf2c3715SXin Li* 2911*bf2c3715SXin Li 100 IF( OK )THEN 2912*bf2c3715SXin Li WRITE( NOUT, FMT = 9999 )SRNAMT 2913*bf2c3715SXin Li ELSE 2914*bf2c3715SXin Li WRITE( NOUT, FMT = 9998 )SRNAMT 2915*bf2c3715SXin Li END IF 2916*bf2c3715SXin Li RETURN 2917*bf2c3715SXin Li* 2918*bf2c3715SXin Li 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' ) 2919*bf2c3715SXin Li 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****', 2920*bf2c3715SXin Li $ '**' ) 2921*bf2c3715SXin Li* 2922*bf2c3715SXin Li* End of CCHKE. 2923*bf2c3715SXin Li* 2924*bf2c3715SXin Li END 2925*bf2c3715SXin Li SUBROUTINE CMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET, 2926*bf2c3715SXin Li $ TRANSL ) 2927*bf2c3715SXin Li* 2928*bf2c3715SXin Li* Generates values for an M by N matrix A. 2929*bf2c3715SXin Li* Stores the values in the array AA in the data structure required 2930*bf2c3715SXin Li* by the routine, with unwanted elements set to rogue value. 2931*bf2c3715SXin Li* 2932*bf2c3715SXin Li* TYPE is 'GE', 'HE', 'SY' or 'TR'. 2933*bf2c3715SXin Li* 2934*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 2935*bf2c3715SXin Li* 2936*bf2c3715SXin Li* -- Written on 8-February-1989. 2937*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 2938*bf2c3715SXin Li* Iain Duff, AERE Harwell. 2939*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 2940*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 2941*bf2c3715SXin Li* 2942*bf2c3715SXin Li* .. Parameters .. 2943*bf2c3715SXin Li COMPLEX ZERO, ONE 2944*bf2c3715SXin Li PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) ) 2945*bf2c3715SXin Li COMPLEX ROGUE 2946*bf2c3715SXin Li PARAMETER ( ROGUE = ( -1.0E10, 1.0E10 ) ) 2947*bf2c3715SXin Li REAL RZERO 2948*bf2c3715SXin Li PARAMETER ( RZERO = 0.0 ) 2949*bf2c3715SXin Li REAL RROGUE 2950*bf2c3715SXin Li PARAMETER ( RROGUE = -1.0E10 ) 2951*bf2c3715SXin Li* .. Scalar Arguments .. 2952*bf2c3715SXin Li COMPLEX TRANSL 2953*bf2c3715SXin Li INTEGER LDA, M, N, NMAX 2954*bf2c3715SXin Li LOGICAL RESET 2955*bf2c3715SXin Li CHARACTER*1 DIAG, UPLO 2956*bf2c3715SXin Li CHARACTER*2 TYPE 2957*bf2c3715SXin Li* .. Array Arguments .. 2958*bf2c3715SXin Li COMPLEX A( NMAX, * ), AA( * ) 2959*bf2c3715SXin Li* .. Local Scalars .. 2960*bf2c3715SXin Li INTEGER I, IBEG, IEND, J, JJ 2961*bf2c3715SXin Li LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER 2962*bf2c3715SXin Li* .. External Functions .. 2963*bf2c3715SXin Li COMPLEX CBEG 2964*bf2c3715SXin Li EXTERNAL CBEG 2965*bf2c3715SXin Li* .. Intrinsic Functions .. 2966*bf2c3715SXin Li INTRINSIC CMPLX, CONJG, REAL 2967*bf2c3715SXin Li* .. Executable Statements .. 2968*bf2c3715SXin Li GEN = TYPE.EQ.'GE' 2969*bf2c3715SXin Li HER = TYPE.EQ.'HE' 2970*bf2c3715SXin Li SYM = TYPE.EQ.'SY' 2971*bf2c3715SXin Li TRI = TYPE.EQ.'TR' 2972*bf2c3715SXin Li UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U' 2973*bf2c3715SXin Li LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L' 2974*bf2c3715SXin Li UNIT = TRI.AND.DIAG.EQ.'U' 2975*bf2c3715SXin Li* 2976*bf2c3715SXin Li* Generate data in array A. 2977*bf2c3715SXin Li* 2978*bf2c3715SXin Li DO 20 J = 1, N 2979*bf2c3715SXin Li DO 10 I = 1, M 2980*bf2c3715SXin Li IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) ) 2981*bf2c3715SXin Li $ THEN 2982*bf2c3715SXin Li A( I, J ) = CBEG( RESET ) + TRANSL 2983*bf2c3715SXin Li IF( I.NE.J )THEN 2984*bf2c3715SXin Li* Set some elements to zero 2985*bf2c3715SXin Li IF( N.GT.3.AND.J.EQ.N/2 ) 2986*bf2c3715SXin Li $ A( I, J ) = ZERO 2987*bf2c3715SXin Li IF( HER )THEN 2988*bf2c3715SXin Li A( J, I ) = CONJG( A( I, J ) ) 2989*bf2c3715SXin Li ELSE IF( SYM )THEN 2990*bf2c3715SXin Li A( J, I ) = A( I, J ) 2991*bf2c3715SXin Li ELSE IF( TRI )THEN 2992*bf2c3715SXin Li A( J, I ) = ZERO 2993*bf2c3715SXin Li END IF 2994*bf2c3715SXin Li END IF 2995*bf2c3715SXin Li END IF 2996*bf2c3715SXin Li 10 CONTINUE 2997*bf2c3715SXin Li IF( HER ) 2998*bf2c3715SXin Li $ A( J, J ) = CMPLX( REAL( A( J, J ) ), RZERO ) 2999*bf2c3715SXin Li IF( TRI ) 3000*bf2c3715SXin Li $ A( J, J ) = A( J, J ) + ONE 3001*bf2c3715SXin Li IF( UNIT ) 3002*bf2c3715SXin Li $ A( J, J ) = ONE 3003*bf2c3715SXin Li 20 CONTINUE 3004*bf2c3715SXin Li* 3005*bf2c3715SXin Li* Store elements in array AS in data structure required by routine. 3006*bf2c3715SXin Li* 3007*bf2c3715SXin Li IF( TYPE.EQ.'GE' )THEN 3008*bf2c3715SXin Li DO 50 J = 1, N 3009*bf2c3715SXin Li DO 30 I = 1, M 3010*bf2c3715SXin Li AA( I + ( J - 1 )*LDA ) = A( I, J ) 3011*bf2c3715SXin Li 30 CONTINUE 3012*bf2c3715SXin Li DO 40 I = M + 1, LDA 3013*bf2c3715SXin Li AA( I + ( J - 1 )*LDA ) = ROGUE 3014*bf2c3715SXin Li 40 CONTINUE 3015*bf2c3715SXin Li 50 CONTINUE 3016*bf2c3715SXin Li ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN 3017*bf2c3715SXin Li DO 90 J = 1, N 3018*bf2c3715SXin Li IF( UPPER )THEN 3019*bf2c3715SXin Li IBEG = 1 3020*bf2c3715SXin Li IF( UNIT )THEN 3021*bf2c3715SXin Li IEND = J - 1 3022*bf2c3715SXin Li ELSE 3023*bf2c3715SXin Li IEND = J 3024*bf2c3715SXin Li END IF 3025*bf2c3715SXin Li ELSE 3026*bf2c3715SXin Li IF( UNIT )THEN 3027*bf2c3715SXin Li IBEG = J + 1 3028*bf2c3715SXin Li ELSE 3029*bf2c3715SXin Li IBEG = J 3030*bf2c3715SXin Li END IF 3031*bf2c3715SXin Li IEND = N 3032*bf2c3715SXin Li END IF 3033*bf2c3715SXin Li DO 60 I = 1, IBEG - 1 3034*bf2c3715SXin Li AA( I + ( J - 1 )*LDA ) = ROGUE 3035*bf2c3715SXin Li 60 CONTINUE 3036*bf2c3715SXin Li DO 70 I = IBEG, IEND 3037*bf2c3715SXin Li AA( I + ( J - 1 )*LDA ) = A( I, J ) 3038*bf2c3715SXin Li 70 CONTINUE 3039*bf2c3715SXin Li DO 80 I = IEND + 1, LDA 3040*bf2c3715SXin Li AA( I + ( J - 1 )*LDA ) = ROGUE 3041*bf2c3715SXin Li 80 CONTINUE 3042*bf2c3715SXin Li IF( HER )THEN 3043*bf2c3715SXin Li JJ = J + ( J - 1 )*LDA 3044*bf2c3715SXin Li AA( JJ ) = CMPLX( REAL( AA( JJ ) ), RROGUE ) 3045*bf2c3715SXin Li END IF 3046*bf2c3715SXin Li 90 CONTINUE 3047*bf2c3715SXin Li END IF 3048*bf2c3715SXin Li RETURN 3049*bf2c3715SXin Li* 3050*bf2c3715SXin Li* End of CMAKE. 3051*bf2c3715SXin Li* 3052*bf2c3715SXin Li END 3053*bf2c3715SXin Li SUBROUTINE CMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB, 3054*bf2c3715SXin Li $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL, 3055*bf2c3715SXin Li $ NOUT, MV ) 3056*bf2c3715SXin Li* 3057*bf2c3715SXin Li* Checks the results of the computational tests. 3058*bf2c3715SXin Li* 3059*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 3060*bf2c3715SXin Li* 3061*bf2c3715SXin Li* -- Written on 8-February-1989. 3062*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 3063*bf2c3715SXin Li* Iain Duff, AERE Harwell. 3064*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3065*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 3066*bf2c3715SXin Li* 3067*bf2c3715SXin Li* .. Parameters .. 3068*bf2c3715SXin Li COMPLEX ZERO 3069*bf2c3715SXin Li PARAMETER ( ZERO = ( 0.0, 0.0 ) ) 3070*bf2c3715SXin Li REAL RZERO, RONE 3071*bf2c3715SXin Li PARAMETER ( RZERO = 0.0, RONE = 1.0 ) 3072*bf2c3715SXin Li* .. Scalar Arguments .. 3073*bf2c3715SXin Li COMPLEX ALPHA, BETA 3074*bf2c3715SXin Li REAL EPS, ERR 3075*bf2c3715SXin Li INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT 3076*bf2c3715SXin Li LOGICAL FATAL, MV 3077*bf2c3715SXin Li CHARACTER*1 TRANSA, TRANSB 3078*bf2c3715SXin Li* .. Array Arguments .. 3079*bf2c3715SXin Li COMPLEX A( LDA, * ), B( LDB, * ), C( LDC, * ), 3080*bf2c3715SXin Li $ CC( LDCC, * ), CT( * ) 3081*bf2c3715SXin Li REAL G( * ) 3082*bf2c3715SXin Li* .. Local Scalars .. 3083*bf2c3715SXin Li COMPLEX CL 3084*bf2c3715SXin Li REAL ERRI 3085*bf2c3715SXin Li INTEGER I, J, K 3086*bf2c3715SXin Li LOGICAL CTRANA, CTRANB, TRANA, TRANB 3087*bf2c3715SXin Li* .. Intrinsic Functions .. 3088*bf2c3715SXin Li INTRINSIC ABS, AIMAG, CONJG, MAX, REAL, SQRT 3089*bf2c3715SXin Li* .. Statement Functions .. 3090*bf2c3715SXin Li REAL ABS1 3091*bf2c3715SXin Li* .. Statement Function definitions .. 3092*bf2c3715SXin Li ABS1( CL ) = ABS( REAL( CL ) ) + ABS( AIMAG( CL ) ) 3093*bf2c3715SXin Li* .. Executable Statements .. 3094*bf2c3715SXin Li TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C' 3095*bf2c3715SXin Li TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C' 3096*bf2c3715SXin Li CTRANA = TRANSA.EQ.'C' 3097*bf2c3715SXin Li CTRANB = TRANSB.EQ.'C' 3098*bf2c3715SXin Li* 3099*bf2c3715SXin Li* Compute expected result, one column at a time, in CT using data 3100*bf2c3715SXin Li* in A, B and C. 3101*bf2c3715SXin Li* Compute gauges in G. 3102*bf2c3715SXin Li* 3103*bf2c3715SXin Li DO 220 J = 1, N 3104*bf2c3715SXin Li* 3105*bf2c3715SXin Li DO 10 I = 1, M 3106*bf2c3715SXin Li CT( I ) = ZERO 3107*bf2c3715SXin Li G( I ) = RZERO 3108*bf2c3715SXin Li 10 CONTINUE 3109*bf2c3715SXin Li IF( .NOT.TRANA.AND..NOT.TRANB )THEN 3110*bf2c3715SXin Li DO 30 K = 1, KK 3111*bf2c3715SXin Li DO 20 I = 1, M 3112*bf2c3715SXin Li CT( I ) = CT( I ) + A( I, K )*B( K, J ) 3113*bf2c3715SXin Li G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) ) 3114*bf2c3715SXin Li 20 CONTINUE 3115*bf2c3715SXin Li 30 CONTINUE 3116*bf2c3715SXin Li ELSE IF( TRANA.AND..NOT.TRANB )THEN 3117*bf2c3715SXin Li IF( CTRANA )THEN 3118*bf2c3715SXin Li DO 50 K = 1, KK 3119*bf2c3715SXin Li DO 40 I = 1, M 3120*bf2c3715SXin Li CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( K, J ) 3121*bf2c3715SXin Li G( I ) = G( I ) + ABS1( A( K, I ) )* 3122*bf2c3715SXin Li $ ABS1( B( K, J ) ) 3123*bf2c3715SXin Li 40 CONTINUE 3124*bf2c3715SXin Li 50 CONTINUE 3125*bf2c3715SXin Li ELSE 3126*bf2c3715SXin Li DO 70 K = 1, KK 3127*bf2c3715SXin Li DO 60 I = 1, M 3128*bf2c3715SXin Li CT( I ) = CT( I ) + A( K, I )*B( K, J ) 3129*bf2c3715SXin Li G( I ) = G( I ) + ABS1( A( K, I ) )* 3130*bf2c3715SXin Li $ ABS1( B( K, J ) ) 3131*bf2c3715SXin Li 60 CONTINUE 3132*bf2c3715SXin Li 70 CONTINUE 3133*bf2c3715SXin Li END IF 3134*bf2c3715SXin Li ELSE IF( .NOT.TRANA.AND.TRANB )THEN 3135*bf2c3715SXin Li IF( CTRANB )THEN 3136*bf2c3715SXin Li DO 90 K = 1, KK 3137*bf2c3715SXin Li DO 80 I = 1, M 3138*bf2c3715SXin Li CT( I ) = CT( I ) + A( I, K )*CONJG( B( J, K ) ) 3139*bf2c3715SXin Li G( I ) = G( I ) + ABS1( A( I, K ) )* 3140*bf2c3715SXin Li $ ABS1( B( J, K ) ) 3141*bf2c3715SXin Li 80 CONTINUE 3142*bf2c3715SXin Li 90 CONTINUE 3143*bf2c3715SXin Li ELSE 3144*bf2c3715SXin Li DO 110 K = 1, KK 3145*bf2c3715SXin Li DO 100 I = 1, M 3146*bf2c3715SXin Li CT( I ) = CT( I ) + A( I, K )*B( J, K ) 3147*bf2c3715SXin Li G( I ) = G( I ) + ABS1( A( I, K ) )* 3148*bf2c3715SXin Li $ ABS1( B( J, K ) ) 3149*bf2c3715SXin Li 100 CONTINUE 3150*bf2c3715SXin Li 110 CONTINUE 3151*bf2c3715SXin Li END IF 3152*bf2c3715SXin Li ELSE IF( TRANA.AND.TRANB )THEN 3153*bf2c3715SXin Li IF( CTRANA )THEN 3154*bf2c3715SXin Li IF( CTRANB )THEN 3155*bf2c3715SXin Li DO 130 K = 1, KK 3156*bf2c3715SXin Li DO 120 I = 1, M 3157*bf2c3715SXin Li CT( I ) = CT( I ) + CONJG( A( K, I ) )* 3158*bf2c3715SXin Li $ CONJG( B( J, K ) ) 3159*bf2c3715SXin Li G( I ) = G( I ) + ABS1( A( K, I ) )* 3160*bf2c3715SXin Li $ ABS1( B( J, K ) ) 3161*bf2c3715SXin Li 120 CONTINUE 3162*bf2c3715SXin Li 130 CONTINUE 3163*bf2c3715SXin Li ELSE 3164*bf2c3715SXin Li DO 150 K = 1, KK 3165*bf2c3715SXin Li DO 140 I = 1, M 3166*bf2c3715SXin Li CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( J, K ) 3167*bf2c3715SXin Li G( I ) = G( I ) + ABS1( A( K, I ) )* 3168*bf2c3715SXin Li $ ABS1( B( J, K ) ) 3169*bf2c3715SXin Li 140 CONTINUE 3170*bf2c3715SXin Li 150 CONTINUE 3171*bf2c3715SXin Li END IF 3172*bf2c3715SXin Li ELSE 3173*bf2c3715SXin Li IF( CTRANB )THEN 3174*bf2c3715SXin Li DO 170 K = 1, KK 3175*bf2c3715SXin Li DO 160 I = 1, M 3176*bf2c3715SXin Li CT( I ) = CT( I ) + A( K, I )*CONJG( B( J, K ) ) 3177*bf2c3715SXin Li G( I ) = G( I ) + ABS1( A( K, I ) )* 3178*bf2c3715SXin Li $ ABS1( B( J, K ) ) 3179*bf2c3715SXin Li 160 CONTINUE 3180*bf2c3715SXin Li 170 CONTINUE 3181*bf2c3715SXin Li ELSE 3182*bf2c3715SXin Li DO 190 K = 1, KK 3183*bf2c3715SXin Li DO 180 I = 1, M 3184*bf2c3715SXin Li CT( I ) = CT( I ) + A( K, I )*B( J, K ) 3185*bf2c3715SXin Li G( I ) = G( I ) + ABS1( A( K, I ) )* 3186*bf2c3715SXin Li $ ABS1( B( J, K ) ) 3187*bf2c3715SXin Li 180 CONTINUE 3188*bf2c3715SXin Li 190 CONTINUE 3189*bf2c3715SXin Li END IF 3190*bf2c3715SXin Li END IF 3191*bf2c3715SXin Li END IF 3192*bf2c3715SXin Li DO 200 I = 1, M 3193*bf2c3715SXin Li CT( I ) = ALPHA*CT( I ) + BETA*C( I, J ) 3194*bf2c3715SXin Li G( I ) = ABS1( ALPHA )*G( I ) + 3195*bf2c3715SXin Li $ ABS1( BETA )*ABS1( C( I, J ) ) 3196*bf2c3715SXin Li 200 CONTINUE 3197*bf2c3715SXin Li* 3198*bf2c3715SXin Li* Compute the error ratio for this result. 3199*bf2c3715SXin Li* 3200*bf2c3715SXin Li ERR = ZERO 3201*bf2c3715SXin Li DO 210 I = 1, M 3202*bf2c3715SXin Li ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS 3203*bf2c3715SXin Li IF( G( I ).NE.RZERO ) 3204*bf2c3715SXin Li $ ERRI = ERRI/G( I ) 3205*bf2c3715SXin Li ERR = MAX( ERR, ERRI ) 3206*bf2c3715SXin Li IF( ERR*SQRT( EPS ).GE.RONE ) 3207*bf2c3715SXin Li $ GO TO 230 3208*bf2c3715SXin Li 210 CONTINUE 3209*bf2c3715SXin Li* 3210*bf2c3715SXin Li 220 CONTINUE 3211*bf2c3715SXin Li* 3212*bf2c3715SXin Li* If the loop completes, all results are at least half accurate. 3213*bf2c3715SXin Li GO TO 250 3214*bf2c3715SXin Li* 3215*bf2c3715SXin Li* Report fatal error. 3216*bf2c3715SXin Li* 3217*bf2c3715SXin Li 230 FATAL = .TRUE. 3218*bf2c3715SXin Li WRITE( NOUT, FMT = 9999 ) 3219*bf2c3715SXin Li DO 240 I = 1, M 3220*bf2c3715SXin Li IF( MV )THEN 3221*bf2c3715SXin Li WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J ) 3222*bf2c3715SXin Li ELSE 3223*bf2c3715SXin Li WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I ) 3224*bf2c3715SXin Li END IF 3225*bf2c3715SXin Li 240 CONTINUE 3226*bf2c3715SXin Li IF( N.GT.1 ) 3227*bf2c3715SXin Li $ WRITE( NOUT, FMT = 9997 )J 3228*bf2c3715SXin Li* 3229*bf2c3715SXin Li 250 CONTINUE 3230*bf2c3715SXin Li RETURN 3231*bf2c3715SXin Li* 3232*bf2c3715SXin Li 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL', 3233*bf2c3715SXin Li $ 'F ACCURATE *******', /' EXPECTED RE', 3234*bf2c3715SXin Li $ 'SULT COMPUTED RESULT' ) 3235*bf2c3715SXin Li 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) ) 3236*bf2c3715SXin Li 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) 3237*bf2c3715SXin Li* 3238*bf2c3715SXin Li* End of CMMCH. 3239*bf2c3715SXin Li* 3240*bf2c3715SXin Li END 3241*bf2c3715SXin Li LOGICAL FUNCTION LCE( RI, RJ, LR ) 3242*bf2c3715SXin Li* 3243*bf2c3715SXin Li* Tests if two arrays are identical. 3244*bf2c3715SXin Li* 3245*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 3246*bf2c3715SXin Li* 3247*bf2c3715SXin Li* -- Written on 8-February-1989. 3248*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 3249*bf2c3715SXin Li* Iain Duff, AERE Harwell. 3250*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3251*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 3252*bf2c3715SXin Li* 3253*bf2c3715SXin Li* .. Scalar Arguments .. 3254*bf2c3715SXin Li INTEGER LR 3255*bf2c3715SXin Li* .. Array Arguments .. 3256*bf2c3715SXin Li COMPLEX RI( * ), RJ( * ) 3257*bf2c3715SXin Li* .. Local Scalars .. 3258*bf2c3715SXin Li INTEGER I 3259*bf2c3715SXin Li* .. Executable Statements .. 3260*bf2c3715SXin Li DO 10 I = 1, LR 3261*bf2c3715SXin Li IF( RI( I ).NE.RJ( I ) ) 3262*bf2c3715SXin Li $ GO TO 20 3263*bf2c3715SXin Li 10 CONTINUE 3264*bf2c3715SXin Li LCE = .TRUE. 3265*bf2c3715SXin Li GO TO 30 3266*bf2c3715SXin Li 20 CONTINUE 3267*bf2c3715SXin Li LCE = .FALSE. 3268*bf2c3715SXin Li 30 RETURN 3269*bf2c3715SXin Li* 3270*bf2c3715SXin Li* End of LCE. 3271*bf2c3715SXin Li* 3272*bf2c3715SXin Li END 3273*bf2c3715SXin Li LOGICAL FUNCTION LCERES( TYPE, UPLO, M, N, AA, AS, LDA ) 3274*bf2c3715SXin Li* 3275*bf2c3715SXin Li* Tests if selected elements in two arrays are equal. 3276*bf2c3715SXin Li* 3277*bf2c3715SXin Li* TYPE is 'GE' or 'HE' or 'SY'. 3278*bf2c3715SXin Li* 3279*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 3280*bf2c3715SXin Li* 3281*bf2c3715SXin Li* -- Written on 8-February-1989. 3282*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 3283*bf2c3715SXin Li* Iain Duff, AERE Harwell. 3284*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3285*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 3286*bf2c3715SXin Li* 3287*bf2c3715SXin Li* .. Scalar Arguments .. 3288*bf2c3715SXin Li INTEGER LDA, M, N 3289*bf2c3715SXin Li CHARACTER*1 UPLO 3290*bf2c3715SXin Li CHARACTER*2 TYPE 3291*bf2c3715SXin Li* .. Array Arguments .. 3292*bf2c3715SXin Li COMPLEX AA( LDA, * ), AS( LDA, * ) 3293*bf2c3715SXin Li* .. Local Scalars .. 3294*bf2c3715SXin Li INTEGER I, IBEG, IEND, J 3295*bf2c3715SXin Li LOGICAL UPPER 3296*bf2c3715SXin Li* .. Executable Statements .. 3297*bf2c3715SXin Li UPPER = UPLO.EQ.'U' 3298*bf2c3715SXin Li IF( TYPE.EQ.'GE' )THEN 3299*bf2c3715SXin Li DO 20 J = 1, N 3300*bf2c3715SXin Li DO 10 I = M + 1, LDA 3301*bf2c3715SXin Li IF( AA( I, J ).NE.AS( I, J ) ) 3302*bf2c3715SXin Li $ GO TO 70 3303*bf2c3715SXin Li 10 CONTINUE 3304*bf2c3715SXin Li 20 CONTINUE 3305*bf2c3715SXin Li ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY' )THEN 3306*bf2c3715SXin Li DO 50 J = 1, N 3307*bf2c3715SXin Li IF( UPPER )THEN 3308*bf2c3715SXin Li IBEG = 1 3309*bf2c3715SXin Li IEND = J 3310*bf2c3715SXin Li ELSE 3311*bf2c3715SXin Li IBEG = J 3312*bf2c3715SXin Li IEND = N 3313*bf2c3715SXin Li END IF 3314*bf2c3715SXin Li DO 30 I = 1, IBEG - 1 3315*bf2c3715SXin Li IF( AA( I, J ).NE.AS( I, J ) ) 3316*bf2c3715SXin Li $ GO TO 70 3317*bf2c3715SXin Li 30 CONTINUE 3318*bf2c3715SXin Li DO 40 I = IEND + 1, LDA 3319*bf2c3715SXin Li IF( AA( I, J ).NE.AS( I, J ) ) 3320*bf2c3715SXin Li $ GO TO 70 3321*bf2c3715SXin Li 40 CONTINUE 3322*bf2c3715SXin Li 50 CONTINUE 3323*bf2c3715SXin Li END IF 3324*bf2c3715SXin Li* 3325*bf2c3715SXin Li LCERES = .TRUE. 3326*bf2c3715SXin Li GO TO 80 3327*bf2c3715SXin Li 70 CONTINUE 3328*bf2c3715SXin Li LCERES = .FALSE. 3329*bf2c3715SXin Li 80 RETURN 3330*bf2c3715SXin Li* 3331*bf2c3715SXin Li* End of LCERES. 3332*bf2c3715SXin Li* 3333*bf2c3715SXin Li END 3334*bf2c3715SXin Li COMPLEX FUNCTION CBEG( RESET ) 3335*bf2c3715SXin Li* 3336*bf2c3715SXin Li* Generates complex numbers as pairs of random numbers uniformly 3337*bf2c3715SXin Li* distributed between -0.5 and 0.5. 3338*bf2c3715SXin Li* 3339*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 3340*bf2c3715SXin Li* 3341*bf2c3715SXin Li* -- Written on 8-February-1989. 3342*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 3343*bf2c3715SXin Li* Iain Duff, AERE Harwell. 3344*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3345*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 3346*bf2c3715SXin Li* 3347*bf2c3715SXin Li* .. Scalar Arguments .. 3348*bf2c3715SXin Li LOGICAL RESET 3349*bf2c3715SXin Li* .. Local Scalars .. 3350*bf2c3715SXin Li INTEGER I, IC, J, MI, MJ 3351*bf2c3715SXin Li* .. Save statement .. 3352*bf2c3715SXin Li SAVE I, IC, J, MI, MJ 3353*bf2c3715SXin Li* .. Intrinsic Functions .. 3354*bf2c3715SXin Li INTRINSIC CMPLX 3355*bf2c3715SXin Li* .. Executable Statements .. 3356*bf2c3715SXin Li IF( RESET )THEN 3357*bf2c3715SXin Li* Initialize local variables. 3358*bf2c3715SXin Li MI = 891 3359*bf2c3715SXin Li MJ = 457 3360*bf2c3715SXin Li I = 7 3361*bf2c3715SXin Li J = 7 3362*bf2c3715SXin Li IC = 0 3363*bf2c3715SXin Li RESET = .FALSE. 3364*bf2c3715SXin Li END IF 3365*bf2c3715SXin Li* 3366*bf2c3715SXin Li* The sequence of values of I or J is bounded between 1 and 999. 3367*bf2c3715SXin Li* If initial I or J = 1,2,3,6,7 or 9, the period will be 50. 3368*bf2c3715SXin Li* If initial I or J = 4 or 8, the period will be 25. 3369*bf2c3715SXin Li* If initial I or J = 5, the period will be 10. 3370*bf2c3715SXin Li* IC is used to break up the period by skipping 1 value of I or J 3371*bf2c3715SXin Li* in 6. 3372*bf2c3715SXin Li* 3373*bf2c3715SXin Li IC = IC + 1 3374*bf2c3715SXin Li 10 I = I*MI 3375*bf2c3715SXin Li J = J*MJ 3376*bf2c3715SXin Li I = I - 1000*( I/1000 ) 3377*bf2c3715SXin Li J = J - 1000*( J/1000 ) 3378*bf2c3715SXin Li IF( IC.GE.5 )THEN 3379*bf2c3715SXin Li IC = 0 3380*bf2c3715SXin Li GO TO 10 3381*bf2c3715SXin Li END IF 3382*bf2c3715SXin Li CBEG = CMPLX( ( I - 500 )/1001.0, ( J - 500 )/1001.0 ) 3383*bf2c3715SXin Li RETURN 3384*bf2c3715SXin Li* 3385*bf2c3715SXin Li* End of CBEG. 3386*bf2c3715SXin Li* 3387*bf2c3715SXin Li END 3388*bf2c3715SXin Li REAL FUNCTION SDIFF( X, Y ) 3389*bf2c3715SXin Li* 3390*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 3391*bf2c3715SXin Li* 3392*bf2c3715SXin Li* -- Written on 8-February-1989. 3393*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 3394*bf2c3715SXin Li* Iain Duff, AERE Harwell. 3395*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3396*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 3397*bf2c3715SXin Li* 3398*bf2c3715SXin Li* .. Scalar Arguments .. 3399*bf2c3715SXin Li REAL X, Y 3400*bf2c3715SXin Li* .. Executable Statements .. 3401*bf2c3715SXin Li SDIFF = X - Y 3402*bf2c3715SXin Li RETURN 3403*bf2c3715SXin Li* 3404*bf2c3715SXin Li* End of SDIFF. 3405*bf2c3715SXin Li* 3406*bf2c3715SXin Li END 3407*bf2c3715SXin Li SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 3408*bf2c3715SXin Li* 3409*bf2c3715SXin Li* Tests whether XERBLA has detected an error when it should. 3410*bf2c3715SXin Li* 3411*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 3412*bf2c3715SXin Li* 3413*bf2c3715SXin Li* -- Written on 8-February-1989. 3414*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 3415*bf2c3715SXin Li* Iain Duff, AERE Harwell. 3416*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3417*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 3418*bf2c3715SXin Li* 3419*bf2c3715SXin Li* .. Scalar Arguments .. 3420*bf2c3715SXin Li INTEGER INFOT, NOUT 3421*bf2c3715SXin Li LOGICAL LERR, OK 3422*bf2c3715SXin Li CHARACTER*6 SRNAMT 3423*bf2c3715SXin Li* .. Executable Statements .. 3424*bf2c3715SXin Li IF( .NOT.LERR )THEN 3425*bf2c3715SXin Li WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT 3426*bf2c3715SXin Li OK = .FALSE. 3427*bf2c3715SXin Li END IF 3428*bf2c3715SXin Li LERR = .FALSE. 3429*bf2c3715SXin Li RETURN 3430*bf2c3715SXin Li* 3431*bf2c3715SXin Li 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D', 3432*bf2c3715SXin Li $ 'ETECTED BY ', A6, ' *****' ) 3433*bf2c3715SXin Li* 3434*bf2c3715SXin Li* End of CHKXER. 3435*bf2c3715SXin Li* 3436*bf2c3715SXin Li END 3437*bf2c3715SXin Li SUBROUTINE XERBLA( SRNAME, INFO ) 3438*bf2c3715SXin Li* 3439*bf2c3715SXin Li* This is a special version of XERBLA to be used only as part of 3440*bf2c3715SXin Li* the test program for testing error exits from the Level 3 BLAS 3441*bf2c3715SXin Li* routines. 3442*bf2c3715SXin Li* 3443*bf2c3715SXin Li* XERBLA is an error handler for the Level 3 BLAS routines. 3444*bf2c3715SXin Li* 3445*bf2c3715SXin Li* It is called by the Level 3 BLAS routines if an input parameter is 3446*bf2c3715SXin Li* invalid. 3447*bf2c3715SXin Li* 3448*bf2c3715SXin Li* Auxiliary routine for test program for Level 3 Blas. 3449*bf2c3715SXin Li* 3450*bf2c3715SXin Li* -- Written on 8-February-1989. 3451*bf2c3715SXin Li* Jack Dongarra, Argonne National Laboratory. 3452*bf2c3715SXin Li* Iain Duff, AERE Harwell. 3453*bf2c3715SXin Li* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3454*bf2c3715SXin Li* Sven Hammarling, Numerical Algorithms Group Ltd. 3455*bf2c3715SXin Li* 3456*bf2c3715SXin Li* .. Scalar Arguments .. 3457*bf2c3715SXin Li INTEGER INFO 3458*bf2c3715SXin Li CHARACTER*6 SRNAME 3459*bf2c3715SXin Li* .. Scalars in Common .. 3460*bf2c3715SXin Li INTEGER INFOT, NOUT 3461*bf2c3715SXin Li LOGICAL LERR, OK 3462*bf2c3715SXin Li CHARACTER*6 SRNAMT 3463*bf2c3715SXin Li* .. Common blocks .. 3464*bf2c3715SXin Li COMMON /INFOC/INFOT, NOUT, OK, LERR 3465*bf2c3715SXin Li COMMON /SRNAMC/SRNAMT 3466*bf2c3715SXin Li* .. Executable Statements .. 3467*bf2c3715SXin Li LERR = .TRUE. 3468*bf2c3715SXin Li IF( INFO.NE.INFOT )THEN 3469*bf2c3715SXin Li IF( INFOT.NE.0 )THEN 3470*bf2c3715SXin Li WRITE( NOUT, FMT = 9999 )INFO, INFOT 3471*bf2c3715SXin Li ELSE 3472*bf2c3715SXin Li WRITE( NOUT, FMT = 9997 )INFO 3473*bf2c3715SXin Li END IF 3474*bf2c3715SXin Li OK = .FALSE. 3475*bf2c3715SXin Li END IF 3476*bf2c3715SXin Li IF( SRNAME.NE.SRNAMT )THEN 3477*bf2c3715SXin Li WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT 3478*bf2c3715SXin Li OK = .FALSE. 3479*bf2c3715SXin Li END IF 3480*bf2c3715SXin Li RETURN 3481*bf2c3715SXin Li* 3482*bf2c3715SXin Li 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD', 3483*bf2c3715SXin Li $ ' OF ', I2, ' *******' ) 3484*bf2c3715SXin Li 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE', 3485*bf2c3715SXin Li $ 'AD OF ', A6, ' *******' ) 3486*bf2c3715SXin Li 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, 3487*bf2c3715SXin Li $ ' *******' ) 3488*bf2c3715SXin Li* 3489*bf2c3715SXin Li* End of XERBLA 3490*bf2c3715SXin Li* 3491*bf2c3715SXin Li END 3492*bf2c3715SXin Li 3493