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