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