3 * =========== DOCUMENTATION ===========
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
19 *> Test program for the DOUBLE PRECISION Level 3 Blas.
21 *> The program must be driven by a short data file. The first 14 records
22 *> of the file are read using list-directed input, the last 6 records
23 *> are read using the format ( A6, L2 ). An annotated example of a data
24 *> file can be obtained by deleting the first 3 characters from the
25 *> following 20 lines:
26 *> 'dblat3.out' NAME OF SUMMARY OUTPUT FILE
27 *> 6 UNIT NUMBER OF SUMMARY FILE
28 *> 'DBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE
29 *> -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
30 *> F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
31 *> F LOGICAL FLAG, T TO STOP ON FAILURES.
32 *> T LOGICAL FLAG, T TO TEST ERROR EXITS.
33 *> 16.0 THRESHOLD VALUE OF TEST RATIO
34 *> 6 NUMBER OF VALUES OF N
35 *> 0 1 2 3 5 9 VALUES OF N
36 *> 3 NUMBER OF VALUES OF ALPHA
37 *> 0.0 1.0 0.7 VALUES OF ALPHA
38 *> 3 NUMBER OF VALUES OF BETA
39 *> 0.0 1.0 1.3 VALUES OF BETA
40 *> DGEMM T PUT F FOR NO TEST. SAME COLUMNS.
41 *> DSYMM T PUT F FOR NO TEST. SAME COLUMNS.
42 *> DTRMM T PUT F FOR NO TEST. SAME COLUMNS.
43 *> DTRSM T PUT F FOR NO TEST. SAME COLUMNS.
44 *> DSYRK T PUT F FOR NO TEST. SAME COLUMNS.
45 *> DSYR2K T PUT F FOR NO TEST. SAME COLUMNS.
52 *> Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S.
53 *> A Set of Level 3 Basic Linear Algebra Subprograms.
55 *> Technical Memorandum No.88 (Revision 1), Mathematics and
56 *> Computer Science Division, Argonne National Laboratory, 9700
57 *> South Cass Avenue, Argonne, Illinois 60439, US.
59 *> -- Written on 8-February-1989.
60 *> Jack Dongarra, Argonne National Laboratory.
61 *> Iain Duff, AERE Harwell.
62 *> Jeremy Du Croz, Numerical Algorithms Group Ltd.
63 *> Sven Hammarling, Numerical Algorithms Group Ltd.
65 *> 10-9-00: Change STATUS='NEW' to 'UNKNOWN' so that the testers
66 *> can be run multiple times without deleting generated
67 *> output files (susan)
73 *> \author Univ. of Tennessee
74 *> \author Univ. of California Berkeley
75 *> \author Univ. of Colorado Denver
80 *> \ingroup double_blas_testing
82 * =====================================================================
85 * -- Reference BLAS test routine (version 3.7.0) --
86 * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
87 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
90 * =====================================================================
96 PARAMETER ( NSUBS = 6 )
97 DOUBLE PRECISION ZERO, ONE
98 PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 )
100 PARAMETER ( NMAX = 65 )
101 INTEGER NIDMAX, NALMAX, NBEMAX
102 PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 )
103 * .. Local Scalars ..
104 DOUBLE PRECISION EPS, ERR, THRESH
105 INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NOUT, NTRA
106 LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
108 CHARACTER*1 TRANSA, TRANSB
110 CHARACTER*32 SNAPS, SUMMRY
112 DOUBLE PRECISION AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ),
113 $ ALF( NALMAX ), AS( NMAX*NMAX ),
114 $ BB( NMAX*NMAX ), BET( NBEMAX ),
115 $ BS( NMAX*NMAX ), C( NMAX, NMAX ),
116 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
117 $ G( NMAX ), W( 2*NMAX )
118 INTEGER IDIM( NIDMAX )
119 LOGICAL LTEST( NSUBS )
120 CHARACTER*6 SNAMES( NSUBS )
121 * .. External Functions ..
122 DOUBLE PRECISION DDIFF
125 * .. External Subroutines ..
126 EXTERNAL DCHK1, DCHK2, DCHK3, DCHK4, DCHK5, DCHKE, DMMCH
127 * .. Intrinsic Functions ..
129 * .. Scalars in Common ..
133 * .. Common blocks ..
134 COMMON /INFOC/INFOT, NOUTC, OK, LERR
135 COMMON /SRNAMC/SRNAMT
136 * .. Data statements ..
137 DATA SNAMES/'DGEMM ', 'DSYMM ', 'DTRMM ', 'DTRSM ',
138 $ 'DSYRK ', 'DSYR2K'/
139 * .. Executable Statements ..
141 * Read name and unit number for summary output file and open file.
143 READ( NIN, FMT = * )SUMMRY
144 READ( NIN, FMT = * )NOUT
145 OPEN( NOUT, FILE = SUMMRY, STATUS = 'UNKNOWN' )
148 * Read name and unit number for snapshot output file and open file.
150 READ( NIN, FMT = * )SNAPS
151 READ( NIN, FMT = * )NTRA
154 OPEN( NTRA, FILE = SNAPS, STATUS = 'UNKNOWN' )
156 * Read the flag that directs rewinding of the snapshot file.
157 READ( NIN, FMT = * )REWI
158 REWI = REWI.AND.TRACE
159 * Read the flag that directs stopping on any failure.
160 READ( NIN, FMT = * )SFATAL
161 * Read the flag that indicates whether error exits are to be tested.
162 READ( NIN, FMT = * )TSTERR
163 * Read the threshold value of the test ratio
164 READ( NIN, FMT = * )THRESH
166 * Read and check the parameter values for the tests.
169 READ( NIN, FMT = * )NIDIM
170 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
171 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
174 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
176 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
177 WRITE( NOUT, FMT = 9996 )NMAX
182 READ( NIN, FMT = * )NALF
183 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
184 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
187 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
189 READ( NIN, FMT = * )NBET
190 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
191 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
194 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
196 * Report values of parameters.
198 WRITE( NOUT, FMT = 9995 )
199 WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM )
200 WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF )
201 WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET )
202 IF( .NOT.TSTERR )THEN
203 WRITE( NOUT, FMT = * )
204 WRITE( NOUT, FMT = 9984 )
206 WRITE( NOUT, FMT = * )
207 WRITE( NOUT, FMT = 9999 )THRESH
208 WRITE( NOUT, FMT = * )
210 * Read names of subroutines and flags which indicate
211 * whether they are to be tested.
216 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT
218 IF( SNAMET.EQ.SNAMES( I ) )
221 WRITE( NOUT, FMT = 9990 )SNAMET
223 50 LTEST( I ) = LTESTT
229 * Compute EPS (the machine precision).
232 WRITE( NOUT, FMT = 9998 )EPS
234 * Check the reliability of DMMCH using exact data.
239 AB( I, J ) = MAX( I - J + 1, 0 )
241 AB( J, NMAX + 1 ) = J
242 AB( 1, NMAX + J ) = J
246 CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
248 * CC holds the exact result. On exit from DMMCH CT holds
249 * the result computed by DMMCH.
252 CALL DMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
253 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
254 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
255 SAME = LDE( CC, CT, N )
256 IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN
257 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
261 CALL DMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
262 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
263 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
264 SAME = LDE( CC, CT, N )
265 IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN
266 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
270 AB( J, NMAX + 1 ) = N - J + 1
271 AB( 1, NMAX + J ) = N - J + 1
274 CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 -
275 $ ( ( J + 1 )*J*( J - 1 ) )/3
279 CALL DMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
280 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
281 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
282 SAME = LDE( CC, CT, N )
283 IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN
284 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
288 CALL DMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
289 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
290 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
291 SAME = LDE( CC, CT, N )
292 IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN
293 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
297 * Test each subroutine in turn.
299 DO 200 ISNUM = 1, NSUBS
300 WRITE( NOUT, FMT = * )
301 IF( .NOT.LTEST( ISNUM ) )THEN
302 * Subprogram is not to be tested.
303 WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM )
305 SRNAMT = SNAMES( ISNUM )
308 CALL DCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
309 WRITE( NOUT, FMT = * )
315 GO TO ( 140, 150, 160, 160, 170, 180 )ISNUM
317 140 CALL DCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
318 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
319 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
323 150 CALL DCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
324 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
325 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
328 * Test DTRMM, 03, DTRSM, 04.
329 160 CALL DCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
330 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB,
331 $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C )
334 170 CALL DCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
335 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
336 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
340 180 CALL DCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
341 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
342 $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
345 190 IF( FATAL.AND.SFATAL )
349 WRITE( NOUT, FMT = 9986 )
353 WRITE( NOUT, FMT = 9985 )
357 WRITE( NOUT, FMT = 9991 )
365 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
367 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, D9.1 )
368 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
370 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
371 9995 FORMAT( ' TESTS OF THE DOUBLE PRECISION LEVEL 3 BLAS', //' THE F',
372 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
373 9994 FORMAT( ' FOR N ', 9I6 )
374 9993 FORMAT( ' FOR ALPHA ', 7F6.1 )
375 9992 FORMAT( ' FOR BETA ', 7F6.1 )
376 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
377 $ /' ******* TESTS ABANDONED *******' )
378 9990 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T',
379 $ 'ESTS ABANDONED *******' )
380 9989 FORMAT( ' ERROR IN DMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
381 $ 'ATED WRONGLY.', /' DMMCH WAS CALLED WITH TRANSA = ', A1,
382 $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ',
383 $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ',
384 $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ',
386 9988 FORMAT( A6, L2 )
387 9987 FORMAT( 1X, A6, ' WAS NOT TESTED' )
388 9986 FORMAT( /' END OF TESTS' )
389 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
390 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
395 SUBROUTINE DCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
396 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
397 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
401 * Auxiliary routine for test program for Level 3 Blas.
403 * -- Written on 8-February-1989.
404 * Jack Dongarra, Argonne National Laboratory.
405 * Iain Duff, AERE Harwell.
406 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
407 * Sven Hammarling, Numerical Algorithms Group Ltd.
410 DOUBLE PRECISION ZERO
411 PARAMETER ( ZERO = 0.0D0 )
412 * .. Scalar Arguments ..
413 DOUBLE PRECISION EPS, THRESH
414 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
415 LOGICAL FATAL, REWI, TRACE
417 * .. Array Arguments ..
418 DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
419 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
420 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
421 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
422 $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX )
423 INTEGER IDIM( NIDIM )
424 * .. Local Scalars ..
425 DOUBLE PRECISION ALPHA, ALS, BETA, BLS, ERR, ERRMAX
426 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
427 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
428 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
429 LOGICAL NULL, RESET, SAME, TRANA, TRANB
430 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
434 * .. External Functions ..
437 * .. External Subroutines ..
438 EXTERNAL DGEMM, DMAKE, DMMCH
439 * .. Intrinsic Functions ..
441 * .. Scalars in Common ..
444 * .. Common blocks ..
445 COMMON /INFOC/INFOT, NOUTC, OK, LERR
446 * .. Data statements ..
448 * .. Executable Statements ..
460 * Set LDC to 1 more than minimum value if room.
464 * Skip tests if not enough room.
468 NULL = N.LE.0.OR.M.LE.0
474 TRANSA = ICH( ICA: ICA )
475 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
484 * Set LDA to 1 more than minimum value if room.
488 * Skip tests if not enough room.
493 * Generate the matrix A.
495 CALL DMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
499 TRANSB = ICH( ICB: ICB )
500 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
509 * Set LDB to 1 more than minimum value if room.
513 * Skip tests if not enough room.
518 * Generate the matrix B.
520 CALL DMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB,
529 * Generate the matrix C.
531 CALL DMAKE( 'GE', ' ', ' ', M, N, C, NMAX,
532 $ CC, LDC, RESET, ZERO )
536 * Save every datum before calling the
559 * Call the subroutine.
562 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
563 $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB,
567 CALL DGEMM( TRANSA, TRANSB, M, N, K, ALPHA,
568 $ AA, LDA, BB, LDB, BETA, CC, LDC )
570 * Check if error-exit was taken incorrectly.
573 WRITE( NOUT, FMT = 9994 )
578 * See what data changed inside subroutines.
580 ISAME( 1 ) = TRANSA.EQ.TRANAS
581 ISAME( 2 ) = TRANSB.EQ.TRANBS
585 ISAME( 6 ) = ALS.EQ.ALPHA
586 ISAME( 7 ) = LDE( AS, AA, LAA )
587 ISAME( 8 ) = LDAS.EQ.LDA
588 ISAME( 9 ) = LDE( BS, BB, LBB )
589 ISAME( 10 ) = LDBS.EQ.LDB
590 ISAME( 11 ) = BLS.EQ.BETA
592 ISAME( 12 ) = LDE( CS, CC, LCC )
594 ISAME( 12 ) = LDERES( 'GE', ' ', M, N, CS,
597 ISAME( 13 ) = LDCS.EQ.LDC
599 * If data was incorrectly changed, report
604 SAME = SAME.AND.ISAME( I )
605 IF( .NOT.ISAME( I ) )
606 $ WRITE( NOUT, FMT = 9998 )I
617 CALL DMMCH( TRANSA, TRANSB, M, N, K,
618 $ ALPHA, A, NMAX, B, NMAX, BETA,
619 $ C, NMAX, CT, G, CC, LDC, EPS,
620 $ ERR, FATAL, NOUT, .TRUE. )
621 ERRMAX = MAX( ERRMAX, ERR )
622 * If got really bad answer, report and
644 IF( ERRMAX.LT.THRESH )THEN
645 WRITE( NOUT, FMT = 9999 )SNAME, NC
647 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
652 WRITE( NOUT, FMT = 9996 )SNAME
653 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K,
654 $ ALPHA, LDA, LDB, BETA, LDC
659 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
661 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
662 $ 'ANGED INCORRECTLY *******' )
663 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
664 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
665 $ ' - SUSPECT *******' )
666 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
667 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',''', A1, ''',',
668 $ 3( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', ',
670 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
676 SUBROUTINE DCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
677 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
678 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
682 * Auxiliary routine for test program for Level 3 Blas.
684 * -- Written on 8-February-1989.
685 * Jack Dongarra, Argonne National Laboratory.
686 * Iain Duff, AERE Harwell.
687 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
688 * Sven Hammarling, Numerical Algorithms Group Ltd.
691 DOUBLE PRECISION ZERO
692 PARAMETER ( ZERO = 0.0D0 )
693 * .. Scalar Arguments ..
694 DOUBLE PRECISION EPS, THRESH
695 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
696 LOGICAL FATAL, REWI, TRACE
698 * .. Array Arguments ..
699 DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
700 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
701 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
702 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
703 $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX )
704 INTEGER IDIM( NIDIM )
705 * .. Local Scalars ..
706 DOUBLE PRECISION ALPHA, ALS, BETA, BLS, ERR, ERRMAX
707 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
708 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
710 LOGICAL LEFT, NULL, RESET, SAME
711 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
712 CHARACTER*2 ICHS, ICHU
715 * .. External Functions ..
718 * .. External Subroutines ..
719 EXTERNAL DMAKE, DMMCH, DSYMM
720 * .. Intrinsic Functions ..
722 * .. Scalars in Common ..
725 * .. Common blocks ..
726 COMMON /INFOC/INFOT, NOUTC, OK, LERR
727 * .. Data statements ..
728 DATA ICHS/'LR'/, ICHU/'UL'/
729 * .. Executable Statements ..
741 * Set LDC to 1 more than minimum value if room.
745 * Skip tests if not enough room.
749 NULL = N.LE.0.OR.M.LE.0
751 * Set LDB to 1 more than minimum value if room.
755 * Skip tests if not enough room.
760 * Generate the matrix B.
762 CALL DMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
766 SIDE = ICHS( ICS: ICS )
774 * Set LDA to 1 more than minimum value if room.
778 * Skip tests if not enough room.
784 UPLO = ICHU( ICU: ICU )
786 * Generate the symmetric matrix A.
788 CALL DMAKE( 'SY', UPLO, ' ', NA, NA, A, NMAX, AA, LDA,
797 * Generate the matrix C.
799 CALL DMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC,
804 * Save every datum before calling the
826 * Call the subroutine.
829 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE,
830 $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC
833 CALL DSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
834 $ BB, LDB, BETA, CC, LDC )
836 * Check if error-exit was taken incorrectly.
839 WRITE( NOUT, FMT = 9994 )
844 * See what data changed inside subroutines.
846 ISAME( 1 ) = SIDES.EQ.SIDE
847 ISAME( 2 ) = UPLOS.EQ.UPLO
850 ISAME( 5 ) = ALS.EQ.ALPHA
851 ISAME( 6 ) = LDE( AS, AA, LAA )
852 ISAME( 7 ) = LDAS.EQ.LDA
853 ISAME( 8 ) = LDE( BS, BB, LBB )
854 ISAME( 9 ) = LDBS.EQ.LDB
855 ISAME( 10 ) = BLS.EQ.BETA
857 ISAME( 11 ) = LDE( CS, CC, LCC )
859 ISAME( 11 ) = LDERES( 'GE', ' ', M, N, CS,
862 ISAME( 12 ) = LDCS.EQ.LDC
864 * If data was incorrectly changed, report and
869 SAME = SAME.AND.ISAME( I )
870 IF( .NOT.ISAME( I ) )
871 $ WRITE( NOUT, FMT = 9998 )I
883 CALL DMMCH( 'N', 'N', M, N, M, ALPHA, A,
884 $ NMAX, B, NMAX, BETA, C, NMAX,
885 $ CT, G, CC, LDC, EPS, ERR,
886 $ FATAL, NOUT, .TRUE. )
888 CALL DMMCH( 'N', 'N', M, N, N, ALPHA, B,
889 $ NMAX, A, NMAX, BETA, C, NMAX,
890 $ CT, G, CC, LDC, EPS, ERR,
891 $ FATAL, NOUT, .TRUE. )
893 ERRMAX = MAX( ERRMAX, ERR )
894 * If got really bad answer, report and
914 IF( ERRMAX.LT.THRESH )THEN
915 WRITE( NOUT, FMT = 9999 )SNAME, NC
917 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
922 WRITE( NOUT, FMT = 9996 )SNAME
923 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA,
929 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
931 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
932 $ 'ANGED INCORRECTLY *******' )
933 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
934 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
935 $ ' - SUSPECT *******' )
936 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
937 9995 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
938 $ F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', C,', I3, ') ',
940 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
946 SUBROUTINE DCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
947 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
948 $ B, BB, BS, CT, G, C )
950 * Tests DTRMM and DTRSM.
952 * Auxiliary routine for test program for Level 3 Blas.
954 * -- Written on 8-February-1989.
955 * Jack Dongarra, Argonne National Laboratory.
956 * Iain Duff, AERE Harwell.
957 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
958 * Sven Hammarling, Numerical Algorithms Group Ltd.
961 DOUBLE PRECISION ZERO, ONE
962 PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 )
963 * .. Scalar Arguments ..
964 DOUBLE PRECISION EPS, THRESH
965 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
966 LOGICAL FATAL, REWI, TRACE
968 * .. Array Arguments ..
969 DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
970 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
971 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
972 $ C( NMAX, NMAX ), CT( NMAX ), G( NMAX )
973 INTEGER IDIM( NIDIM )
974 * .. Local Scalars ..
975 DOUBLE PRECISION ALPHA, ALS, ERR, ERRMAX
976 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
977 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
979 LOGICAL LEFT, NULL, RESET, SAME
980 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
982 CHARACTER*2 ICHD, ICHS, ICHU
986 * .. External Functions ..
989 * .. External Subroutines ..
990 EXTERNAL DMAKE, DMMCH, DTRMM, DTRSM
991 * .. Intrinsic Functions ..
993 * .. Scalars in Common ..
996 * .. Common blocks ..
997 COMMON /INFOC/INFOT, NOUTC, OK, LERR
998 * .. Data statements ..
999 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/
1000 * .. Executable Statements ..
1006 * Set up zero matrix for DMMCH.
1013 DO 140 IM = 1, NIDIM
1016 DO 130 IN = 1, NIDIM
1018 * Set LDB to 1 more than minimum value if room.
1022 * Skip tests if not enough room.
1026 NULL = M.LE.0.OR.N.LE.0
1029 SIDE = ICHS( ICS: ICS )
1036 * Set LDA to 1 more than minimum value if room.
1040 * Skip tests if not enough room.
1046 UPLO = ICHU( ICU: ICU )
1049 TRANSA = ICHT( ICT: ICT )
1052 DIAG = ICHD( ICD: ICD )
1057 * Generate the matrix A.
1059 CALL DMAKE( 'TR', UPLO, DIAG, NA, NA, A,
1060 $ NMAX, AA, LDA, RESET, ZERO )
1062 * Generate the matrix B.
1064 CALL DMAKE( 'GE', ' ', ' ', M, N, B, NMAX,
1065 $ BB, LDB, RESET, ZERO )
1069 * Save every datum before calling the
1088 * Call the subroutine.
1090 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1092 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1093 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1097 CALL DTRMM( SIDE, UPLO, TRANSA, DIAG, M,
1098 $ N, ALPHA, AA, LDA, BB, LDB )
1099 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1101 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1102 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1106 CALL DTRSM( SIDE, UPLO, TRANSA, DIAG, M,
1107 $ N, ALPHA, AA, LDA, BB, LDB )
1110 * Check if error-exit was taken incorrectly.
1113 WRITE( NOUT, FMT = 9994 )
1118 * See what data changed inside subroutines.
1120 ISAME( 1 ) = SIDES.EQ.SIDE
1121 ISAME( 2 ) = UPLOS.EQ.UPLO
1122 ISAME( 3 ) = TRANAS.EQ.TRANSA
1123 ISAME( 4 ) = DIAGS.EQ.DIAG
1124 ISAME( 5 ) = MS.EQ.M
1125 ISAME( 6 ) = NS.EQ.N
1126 ISAME( 7 ) = ALS.EQ.ALPHA
1127 ISAME( 8 ) = LDE( AS, AA, LAA )
1128 ISAME( 9 ) = LDAS.EQ.LDA
1130 ISAME( 10 ) = LDE( BS, BB, LBB )
1132 ISAME( 10 ) = LDERES( 'GE', ' ', M, N, BS,
1135 ISAME( 11 ) = LDBS.EQ.LDB
1137 * If data was incorrectly changed, report and
1142 SAME = SAME.AND.ISAME( I )
1143 IF( .NOT.ISAME( I ) )
1144 $ WRITE( NOUT, FMT = 9998 )I
1152 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1157 CALL DMMCH( TRANSA, 'N', M, N, M,
1158 $ ALPHA, A, NMAX, B, NMAX,
1159 $ ZERO, C, NMAX, CT, G,
1160 $ BB, LDB, EPS, ERR,
1161 $ FATAL, NOUT, .TRUE. )
1163 CALL DMMCH( 'N', TRANSA, M, N, N,
1164 $ ALPHA, B, NMAX, A, NMAX,
1165 $ ZERO, C, NMAX, CT, G,
1166 $ BB, LDB, EPS, ERR,
1167 $ FATAL, NOUT, .TRUE. )
1169 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1171 * Compute approximation to original
1176 C( I, J ) = BB( I + ( J - 1 )*
1178 BB( I + ( J - 1 )*LDB ) = ALPHA*
1184 CALL DMMCH( TRANSA, 'N', M, N, M,
1185 $ ONE, A, NMAX, C, NMAX,
1186 $ ZERO, B, NMAX, CT, G,
1187 $ BB, LDB, EPS, ERR,
1188 $ FATAL, NOUT, .FALSE. )
1190 CALL DMMCH( 'N', TRANSA, M, N, N,
1191 $ ONE, C, NMAX, A, NMAX,
1192 $ ZERO, B, NMAX, CT, G,
1193 $ BB, LDB, EPS, ERR,
1194 $ FATAL, NOUT, .FALSE. )
1197 ERRMAX = MAX( ERRMAX, ERR )
1198 * If got really bad answer, report and
1220 IF( ERRMAX.LT.THRESH )THEN
1221 WRITE( NOUT, FMT = 9999 )SNAME, NC
1223 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1228 WRITE( NOUT, FMT = 9996 )SNAME
1229 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M,
1230 $ N, ALPHA, LDA, LDB
1235 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1237 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1238 $ 'ANGED INCORRECTLY *******' )
1239 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1240 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1241 $ ' - SUSPECT *******' )
1242 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1243 9995 FORMAT( 1X, I6, ': ', A6, '(', 4( '''', A1, ''',' ), 2( I3, ',' ),
1244 $ F4.1, ', A,', I3, ', B,', I3, ') .' )
1245 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1251 SUBROUTINE DCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1252 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1253 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
1257 * Auxiliary routine for test program for Level 3 Blas.
1259 * -- Written on 8-February-1989.
1260 * Jack Dongarra, Argonne National Laboratory.
1261 * Iain Duff, AERE Harwell.
1262 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1263 * Sven Hammarling, Numerical Algorithms Group Ltd.
1266 DOUBLE PRECISION ZERO
1267 PARAMETER ( ZERO = 0.0D0 )
1268 * .. Scalar Arguments ..
1269 DOUBLE PRECISION EPS, THRESH
1270 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1271 LOGICAL FATAL, REWI, TRACE
1273 * .. Array Arguments ..
1274 DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1275 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1276 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1277 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
1278 $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX )
1279 INTEGER IDIM( NIDIM )
1280 * .. Local Scalars ..
1281 DOUBLE PRECISION ALPHA, ALS, BETA, BETS, ERR, ERRMAX
1282 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1283 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
1285 LOGICAL NULL, RESET, SAME, TRAN, UPPER
1286 CHARACTER*1 TRANS, TRANSS, UPLO, UPLOS
1289 * .. Local Arrays ..
1291 * .. External Functions ..
1293 EXTERNAL LDE, LDERES
1294 * .. External Subroutines ..
1295 EXTERNAL DMAKE, DMMCH, DSYRK
1296 * .. Intrinsic Functions ..
1298 * .. Scalars in Common ..
1299 INTEGER INFOT, NOUTC
1301 * .. Common blocks ..
1302 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1303 * .. Data statements ..
1304 DATA ICHT/'NTC'/, ICHU/'UL'/
1305 * .. Executable Statements ..
1312 DO 100 IN = 1, NIDIM
1314 * Set LDC to 1 more than minimum value if room.
1318 * Skip tests if not enough room.
1328 TRANS = ICHT( ICT: ICT )
1329 TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C'
1337 * Set LDA to 1 more than minimum value if room.
1341 * Skip tests if not enough room.
1346 * Generate the matrix A.
1348 CALL DMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
1352 UPLO = ICHU( ICU: ICU )
1361 * Generate the matrix C.
1363 CALL DMAKE( 'SY', UPLO, ' ', N, N, C, NMAX, CC,
1364 $ LDC, RESET, ZERO )
1368 * Save every datum before calling the subroutine.
1385 * Call the subroutine.
1388 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1389 $ TRANS, N, K, ALPHA, LDA, BETA, LDC
1392 CALL DSYRK( UPLO, TRANS, N, K, ALPHA, AA, LDA,
1395 * Check if error-exit was taken incorrectly.
1398 WRITE( NOUT, FMT = 9993 )
1403 * See what data changed inside subroutines.
1405 ISAME( 1 ) = UPLOS.EQ.UPLO
1406 ISAME( 2 ) = TRANSS.EQ.TRANS
1407 ISAME( 3 ) = NS.EQ.N
1408 ISAME( 4 ) = KS.EQ.K
1409 ISAME( 5 ) = ALS.EQ.ALPHA
1410 ISAME( 6 ) = LDE( AS, AA, LAA )
1411 ISAME( 7 ) = LDAS.EQ.LDA
1412 ISAME( 8 ) = BETS.EQ.BETA
1414 ISAME( 9 ) = LDE( CS, CC, LCC )
1416 ISAME( 9 ) = LDERES( 'SY', UPLO, N, N, CS,
1419 ISAME( 10 ) = LDCS.EQ.LDC
1421 * If data was incorrectly changed, report and
1426 SAME = SAME.AND.ISAME( I )
1427 IF( .NOT.ISAME( I ) )
1428 $ WRITE( NOUT, FMT = 9998 )I
1437 * Check the result column by column.
1449 CALL DMMCH( 'T', 'N', LJ, 1, K, ALPHA,
1451 $ A( 1, J ), NMAX, BETA,
1452 $ C( JJ, J ), NMAX, CT, G,
1453 $ CC( JC ), LDC, EPS, ERR,
1454 $ FATAL, NOUT, .TRUE. )
1456 CALL DMMCH( 'N', 'T', LJ, 1, K, ALPHA,
1458 $ A( J, 1 ), NMAX, BETA,
1459 $ C( JJ, J ), NMAX, CT, G,
1460 $ CC( JC ), LDC, EPS, ERR,
1461 $ FATAL, NOUT, .TRUE. )
1468 ERRMAX = MAX( ERRMAX, ERR )
1469 * If got really bad answer, report and
1490 IF( ERRMAX.LT.THRESH )THEN
1491 WRITE( NOUT, FMT = 9999 )SNAME, NC
1493 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1499 $ WRITE( NOUT, FMT = 9995 )J
1502 WRITE( NOUT, FMT = 9996 )SNAME
1503 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1509 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1511 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1512 $ 'ANGED INCORRECTLY *******' )
1513 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1514 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1515 $ ' - SUSPECT *******' )
1516 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1517 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1518 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1519 $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') .' )
1520 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1526 SUBROUTINE DCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1527 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1528 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
1532 * Auxiliary routine for test program for Level 3 Blas.
1534 * -- Written on 8-February-1989.
1535 * Jack Dongarra, Argonne National Laboratory.
1536 * Iain Duff, AERE Harwell.
1537 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1538 * Sven Hammarling, Numerical Algorithms Group Ltd.
1541 DOUBLE PRECISION ZERO
1542 PARAMETER ( ZERO = 0.0D0 )
1543 * .. Scalar Arguments ..
1544 DOUBLE PRECISION EPS, THRESH
1545 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1546 LOGICAL FATAL, REWI, TRACE
1548 * .. Array Arguments ..
1549 DOUBLE PRECISION AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1550 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
1551 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
1552 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
1553 $ G( NMAX ), W( 2*NMAX )
1554 INTEGER IDIM( NIDIM )
1555 * .. Local Scalars ..
1556 DOUBLE PRECISION ALPHA, ALS, BETA, BETS, ERR, ERRMAX
1557 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1558 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
1559 $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
1560 LOGICAL NULL, RESET, SAME, TRAN, UPPER
1561 CHARACTER*1 TRANS, TRANSS, UPLO, UPLOS
1564 * .. Local Arrays ..
1566 * .. External Functions ..
1568 EXTERNAL LDE, LDERES
1569 * .. External Subroutines ..
1570 EXTERNAL DMAKE, DMMCH, DSYR2K
1571 * .. Intrinsic Functions ..
1573 * .. Scalars in Common ..
1574 INTEGER INFOT, NOUTC
1576 * .. Common blocks ..
1577 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1578 * .. Data statements ..
1579 DATA ICHT/'NTC'/, ICHU/'UL'/
1580 * .. Executable Statements ..
1587 DO 130 IN = 1, NIDIM
1589 * Set LDC to 1 more than minimum value if room.
1593 * Skip tests if not enough room.
1599 DO 120 IK = 1, NIDIM
1603 TRANS = ICHT( ICT: ICT )
1604 TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C'
1612 * Set LDA to 1 more than minimum value if room.
1616 * Skip tests if not enough room.
1621 * Generate the matrix A.
1624 CALL DMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA,
1625 $ LDA, RESET, ZERO )
1627 CALL DMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA,
1631 * Generate the matrix B.
1636 CALL DMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ),
1637 $ 2*NMAX, BB, LDB, RESET, ZERO )
1639 CALL DMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ),
1640 $ NMAX, BB, LDB, RESET, ZERO )
1644 UPLO = ICHU( ICU: ICU )
1653 * Generate the matrix C.
1655 CALL DMAKE( 'SY', UPLO, ' ', N, N, C, NMAX, CC,
1656 $ LDC, RESET, ZERO )
1660 * Save every datum before calling the subroutine.
1681 * Call the subroutine.
1684 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1685 $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC
1688 CALL DSYR2K( UPLO, TRANS, N, K, ALPHA, AA, LDA,
1689 $ BB, LDB, BETA, CC, LDC )
1691 * Check if error-exit was taken incorrectly.
1694 WRITE( NOUT, FMT = 9993 )
1699 * See what data changed inside subroutines.
1701 ISAME( 1 ) = UPLOS.EQ.UPLO
1702 ISAME( 2 ) = TRANSS.EQ.TRANS
1703 ISAME( 3 ) = NS.EQ.N
1704 ISAME( 4 ) = KS.EQ.K
1705 ISAME( 5 ) = ALS.EQ.ALPHA
1706 ISAME( 6 ) = LDE( AS, AA, LAA )
1707 ISAME( 7 ) = LDAS.EQ.LDA
1708 ISAME( 8 ) = LDE( BS, BB, LBB )
1709 ISAME( 9 ) = LDBS.EQ.LDB
1710 ISAME( 10 ) = BETS.EQ.BETA
1712 ISAME( 11 ) = LDE( CS, CC, LCC )
1714 ISAME( 11 ) = LDERES( 'SY', UPLO, N, N, CS,
1717 ISAME( 12 ) = LDCS.EQ.LDC
1719 * If data was incorrectly changed, report and
1724 SAME = SAME.AND.ISAME( I )
1725 IF( .NOT.ISAME( I ) )
1726 $ WRITE( NOUT, FMT = 9998 )I
1735 * Check the result column by column.
1749 W( I ) = AB( ( J - 1 )*2*NMAX + K +
1751 W( K + I ) = AB( ( J - 1 )*2*NMAX +
1754 CALL DMMCH( 'T', 'N', LJ, 1, 2*K,
1755 $ ALPHA, AB( JJAB ), 2*NMAX,
1757 $ C( JJ, J ), NMAX, CT, G,
1758 $ CC( JC ), LDC, EPS, ERR,
1759 $ FATAL, NOUT, .TRUE. )
1762 W( I ) = AB( ( K + I - 1 )*NMAX +
1764 W( K + I ) = AB( ( I - 1 )*NMAX +
1767 CALL DMMCH( 'N', 'N', LJ, 1, 2*K,
1768 $ ALPHA, AB( JJ ), NMAX, W,
1769 $ 2*NMAX, BETA, C( JJ, J ),
1770 $ NMAX, CT, G, CC( JC ), LDC,
1771 $ EPS, ERR, FATAL, NOUT,
1779 $ JJAB = JJAB + 2*NMAX
1781 ERRMAX = MAX( ERRMAX, ERR )
1782 * If got really bad answer, report and
1803 IF( ERRMAX.LT.THRESH )THEN
1804 WRITE( NOUT, FMT = 9999 )SNAME, NC
1806 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1812 $ WRITE( NOUT, FMT = 9995 )J
1815 WRITE( NOUT, FMT = 9996 )SNAME
1816 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1817 $ LDA, LDB, BETA, LDC
1822 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1824 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1825 $ 'ANGED INCORRECTLY *******' )
1826 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1827 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1828 $ ' - SUSPECT *******' )
1829 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1830 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1831 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1832 $ F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', C,', I3, ') ',
1834 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1840 SUBROUTINE DCHKE( ISNUM, SRNAMT, NOUT )
1842 * Tests the error exits from the Level 3 Blas.
1843 * Requires a special version of the error-handling routine XERBLA.
1844 * A, B and C should not need to be defined.
1846 * Auxiliary routine for test program for Level 3 Blas.
1848 * -- Written on 8-February-1989.
1849 * Jack Dongarra, Argonne National Laboratory.
1850 * Iain Duff, AERE Harwell.
1851 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1852 * Sven Hammarling, Numerical Algorithms Group Ltd.
1854 * 3-19-92: Initialize ALPHA and BETA (eca)
1855 * 3-19-92: Fix argument 12 in calls to SSYMM with INFOT = 9 (eca)
1857 * .. Scalar Arguments ..
1860 * .. Scalars in Common ..
1861 INTEGER INFOT, NOUTC
1864 DOUBLE PRECISION ONE, TWO
1865 PARAMETER ( ONE = 1.0D0, TWO = 2.0D0 )
1866 * .. Local Scalars ..
1867 DOUBLE PRECISION ALPHA, BETA
1868 * .. Local Arrays ..
1869 DOUBLE PRECISION A( 2, 1 ), B( 2, 1 ), C( 2, 1 )
1870 * .. External Subroutines ..
1871 EXTERNAL CHKXER, DGEMM, DSYMM, DSYR2K, DSYRK, DTRMM,
1873 * .. Common blocks ..
1874 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1875 * .. Executable Statements ..
1876 * OK is set to .FALSE. by the special version of XERBLA or by CHKXER
1877 * if anything is wrong.
1879 * LERR is set to .TRUE. by the special version of XERBLA each time
1880 * it is called, and is then tested and re-set by CHKXER.
1883 * Initialize ALPHA and BETA.
1888 GO TO ( 10, 20, 30, 40, 50, 60 )ISNUM
1890 CALL DGEMM( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1891 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1893 CALL DGEMM( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1894 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1896 CALL DGEMM( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1897 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1899 CALL DGEMM( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1900 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1902 CALL DGEMM( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1903 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1905 CALL DGEMM( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1906 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1908 CALL DGEMM( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1909 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1911 CALL DGEMM( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1912 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1914 CALL DGEMM( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1915 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1917 CALL DGEMM( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1918 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1920 CALL DGEMM( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1921 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1923 CALL DGEMM( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1924 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1926 CALL DGEMM( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
1927 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1929 CALL DGEMM( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
1930 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1932 CALL DGEMM( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
1933 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1935 CALL DGEMM( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
1936 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1938 CALL DGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
1939 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1941 CALL DGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
1942 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1944 CALL DGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
1945 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1947 CALL DGEMM( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
1948 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1950 CALL DGEMM( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
1951 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1953 CALL DGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
1954 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1956 CALL DGEMM( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1957 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1959 CALL DGEMM( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1960 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1962 CALL DGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
1963 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1965 CALL DGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
1966 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1968 CALL DGEMM( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1969 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1971 CALL DGEMM( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1972 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1975 CALL DSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1976 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1978 CALL DSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1979 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1981 CALL DSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1982 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1984 CALL DSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1985 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1987 CALL DSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1988 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1990 CALL DSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1991 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1993 CALL DSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
1994 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1996 CALL DSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
1997 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1999 CALL DSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2000 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2002 CALL DSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2003 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2005 CALL DSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2006 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2008 CALL DSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2009 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2011 CALL DSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2012 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2014 CALL DSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2015 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2017 CALL DSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2018 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2020 CALL DSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2021 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2023 CALL DSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2024 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2026 CALL DSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2027 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2029 CALL DSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2030 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2032 CALL DSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2033 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2035 CALL DSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2036 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2038 CALL DSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2039 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2042 CALL DTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2043 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2045 CALL DTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2046 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2048 CALL DTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2049 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2051 CALL DTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2052 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2054 CALL DTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2055 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2057 CALL DTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2058 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2060 CALL DTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2061 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2063 CALL DTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2064 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2066 CALL DTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2067 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2069 CALL DTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2070 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2072 CALL DTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2073 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2075 CALL DTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2076 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2078 CALL DTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2079 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2081 CALL DTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2082 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2084 CALL DTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2085 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2087 CALL DTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2088 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2090 CALL DTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2091 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2093 CALL DTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2094 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2096 CALL DTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2097 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2099 CALL DTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2100 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2102 CALL DTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2103 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2105 CALL DTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2106 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2108 CALL DTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2109 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2111 CALL DTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2112 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2114 CALL DTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2115 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2117 CALL DTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2118 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2120 CALL DTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2121 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2123 CALL DTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2124 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2126 CALL DTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2127 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2129 CALL DTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2130 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2132 CALL DTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2133 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2135 CALL DTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2136 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2138 CALL DTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2139 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2141 CALL DTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2142 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2144 CALL DTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2145 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2147 CALL DTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2148 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2151 CALL DTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2152 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2154 CALL DTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2155 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2157 CALL DTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2158 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2160 CALL DTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2161 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2163 CALL DTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2164 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2166 CALL DTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2167 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2169 CALL DTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2170 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2172 CALL DTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2173 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2175 CALL DTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2176 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2178 CALL DTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2179 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2181 CALL DTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2182 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2184 CALL DTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2185 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2187 CALL DTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2188 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2190 CALL DTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2191 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2193 CALL DTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2194 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2196 CALL DTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2197 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2199 CALL DTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2200 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2202 CALL DTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2203 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2205 CALL DTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2206 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2208 CALL DTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2209 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2211 CALL DTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2212 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2214 CALL DTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2215 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2217 CALL DTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2218 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2220 CALL DTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2221 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2223 CALL DTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2224 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2226 CALL DTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2227 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2229 CALL DTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2230 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2232 CALL DTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2233 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2235 CALL DTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2236 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2238 CALL DTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2239 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2241 CALL DTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2242 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2244 CALL DTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2245 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2247 CALL DTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2248 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2250 CALL DTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2251 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2253 CALL DTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2254 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2256 CALL DTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2257 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2260 CALL DSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2261 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2263 CALL DSYRK( 'U', '/', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2264 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2266 CALL DSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2267 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2269 CALL DSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2270 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2272 CALL DSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2273 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2275 CALL DSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2276 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2278 CALL DSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2279 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2281 CALL DSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2282 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2284 CALL DSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2285 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2287 CALL DSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2288 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2290 CALL DSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2291 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2293 CALL DSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2294 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2296 CALL DSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2297 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2299 CALL DSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2300 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2302 CALL DSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2303 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2305 CALL DSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2306 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2308 CALL DSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2309 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2311 CALL DSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2312 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2315 CALL DSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2316 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2318 CALL DSYR2K( 'U', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2319 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2321 CALL DSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2322 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2324 CALL DSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2325 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2327 CALL DSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2328 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2330 CALL DSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2331 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2333 CALL DSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2334 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2336 CALL DSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2337 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2339 CALL DSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2340 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2342 CALL DSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2343 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2345 CALL DSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2346 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2348 CALL DSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2349 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2351 CALL DSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2352 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2354 CALL DSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2355 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2357 CALL DSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2358 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2360 CALL DSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2361 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2363 CALL DSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2364 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2366 CALL DSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2367 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2369 CALL DSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2370 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2372 CALL DSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2373 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2375 CALL DSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2376 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2378 CALL DSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2379 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2382 WRITE( NOUT, FMT = 9999 )SRNAMT
2384 WRITE( NOUT, FMT = 9998 )SRNAMT
2388 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
2389 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
2395 SUBROUTINE DMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2398 * Generates values for an M by N matrix A.
2399 * Stores the values in the array AA in the data structure required
2400 * by the routine, with unwanted elements set to rogue value.
2402 * TYPE is 'GE', 'SY' or 'TR'.
2404 * Auxiliary routine for test program for Level 3 Blas.
2406 * -- Written on 8-February-1989.
2407 * Jack Dongarra, Argonne National Laboratory.
2408 * Iain Duff, AERE Harwell.
2409 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2410 * Sven Hammarling, Numerical Algorithms Group Ltd.
2413 DOUBLE PRECISION ZERO, ONE
2414 PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 )
2415 DOUBLE PRECISION ROGUE
2416 PARAMETER ( ROGUE = -1.0D10 )
2417 * .. Scalar Arguments ..
2418 DOUBLE PRECISION TRANSL
2419 INTEGER LDA, M, N, NMAX
2421 CHARACTER*1 DIAG, UPLO
2423 * .. Array Arguments ..
2424 DOUBLE PRECISION A( NMAX, * ), AA( * )
2425 * .. Local Scalars ..
2426 INTEGER I, IBEG, IEND, J
2427 LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER
2428 * .. External Functions ..
2429 DOUBLE PRECISION DBEG
2431 * .. Executable Statements ..
2435 UPPER = ( SYM.OR.TRI ).AND.UPLO.EQ.'U'
2436 LOWER = ( SYM.OR.TRI ).AND.UPLO.EQ.'L'
2437 UNIT = TRI.AND.DIAG.EQ.'U'
2439 * Generate data in array A.
2443 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
2445 A( I, J ) = DBEG( RESET ) + TRANSL
2447 * Set some elements to zero
2448 IF( N.GT.3.AND.J.EQ.N/2 )
2451 A( J, I ) = A( I, J )
2459 $ A( J, J ) = A( J, J ) + ONE
2464 * Store elements in array AS in data structure required by routine.
2466 IF( TYPE.EQ.'GE' )THEN
2469 AA( I + ( J - 1 )*LDA ) = A( I, J )
2471 DO 40 I = M + 1, LDA
2472 AA( I + ( J - 1 )*LDA ) = ROGUE
2475 ELSE IF( TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
2492 DO 60 I = 1, IBEG - 1
2493 AA( I + ( J - 1 )*LDA ) = ROGUE
2495 DO 70 I = IBEG, IEND
2496 AA( I + ( J - 1 )*LDA ) = A( I, J )
2498 DO 80 I = IEND + 1, LDA
2499 AA( I + ( J - 1 )*LDA ) = ROGUE
2508 SUBROUTINE DMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
2509 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
2512 * Checks the results of the computational tests.
2514 * Auxiliary routine for test program for Level 3 Blas.
2516 * -- Written on 8-February-1989.
2517 * Jack Dongarra, Argonne National Laboratory.
2518 * Iain Duff, AERE Harwell.
2519 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2520 * Sven Hammarling, Numerical Algorithms Group Ltd.
2523 DOUBLE PRECISION ZERO, ONE
2524 PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 )
2525 * .. Scalar Arguments ..
2526 DOUBLE PRECISION ALPHA, BETA, EPS, ERR
2527 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
2529 CHARACTER*1 TRANSA, TRANSB
2530 * .. Array Arguments ..
2531 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), C( LDC, * ),
2532 $ CC( LDCC, * ), CT( * ), G( * )
2533 * .. Local Scalars ..
2534 DOUBLE PRECISION ERRI
2536 LOGICAL TRANA, TRANB
2537 * .. Intrinsic Functions ..
2538 INTRINSIC ABS, MAX, SQRT
2539 * .. Executable Statements ..
2540 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
2541 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
2543 * Compute expected result, one column at a time, in CT using data
2545 * Compute gauges in G.
2553 IF( .NOT.TRANA.AND..NOT.TRANB )THEN
2556 CT( I ) = CT( I ) + A( I, K )*B( K, J )
2557 G( I ) = G( I ) + ABS( A( I, K ) )*ABS( B( K, J ) )
2560 ELSE IF( TRANA.AND..NOT.TRANB )THEN
2563 CT( I ) = CT( I ) + A( K, I )*B( K, J )
2564 G( I ) = G( I ) + ABS( A( K, I ) )*ABS( B( K, J ) )
2567 ELSE IF( .NOT.TRANA.AND.TRANB )THEN
2570 CT( I ) = CT( I ) + A( I, K )*B( J, K )
2571 G( I ) = G( I ) + ABS( A( I, K ) )*ABS( B( J, K ) )
2574 ELSE IF( TRANA.AND.TRANB )THEN
2577 CT( I ) = CT( I ) + A( K, I )*B( J, K )
2578 G( I ) = G( I ) + ABS( A( K, I ) )*ABS( B( J, K ) )
2583 CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
2584 G( I ) = ABS( ALPHA )*G( I ) + ABS( BETA )*ABS( C( I, J ) )
2587 * Compute the error ratio for this result.
2591 ERRI = ABS( CT( I ) - CC( I, J ) )/EPS
2592 IF( G( I ).NE.ZERO )
2593 $ ERRI = ERRI/G( I )
2594 ERR = MAX( ERR, ERRI )
2595 IF( ERR*SQRT( EPS ).GE.ONE )
2601 * If the loop completes, all results are at least half accurate.
2604 * Report fatal error.
2607 WRITE( NOUT, FMT = 9999 )
2610 WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
2612 WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
2616 $ WRITE( NOUT, FMT = 9997 )J
2621 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
2622 $ 'F ACCURATE *******', /' EXPECTED RESULT COMPU',
2624 9998 FORMAT( 1X, I7, 2G18.6 )
2625 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
2630 LOGICAL FUNCTION LDE( RI, RJ, LR )
2632 * Tests if two arrays are identical.
2634 * Auxiliary routine for test program for Level 3 Blas.
2636 * -- Written on 8-February-1989.
2637 * Jack Dongarra, Argonne National Laboratory.
2638 * Iain Duff, AERE Harwell.
2639 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2640 * Sven Hammarling, Numerical Algorithms Group Ltd.
2642 * .. Scalar Arguments ..
2644 * .. Array Arguments ..
2645 DOUBLE PRECISION RI( * ), RJ( * )
2646 * .. Local Scalars ..
2648 * .. Executable Statements ..
2650 IF( RI( I ).NE.RJ( I ) )
2662 LOGICAL FUNCTION LDERES( TYPE, UPLO, M, N, AA, AS, LDA )
2664 * Tests if selected elements in two arrays are equal.
2666 * TYPE is 'GE' or 'SY'.
2668 * Auxiliary routine for test program for Level 3 Blas.
2670 * -- Written on 8-February-1989.
2671 * Jack Dongarra, Argonne National Laboratory.
2672 * Iain Duff, AERE Harwell.
2673 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2674 * Sven Hammarling, Numerical Algorithms Group Ltd.
2676 * .. Scalar Arguments ..
2680 * .. Array Arguments ..
2681 DOUBLE PRECISION AA( LDA, * ), AS( LDA, * )
2682 * .. Local Scalars ..
2683 INTEGER I, IBEG, IEND, J
2685 * .. Executable Statements ..
2687 IF( TYPE.EQ.'GE' )THEN
2689 DO 10 I = M + 1, LDA
2690 IF( AA( I, J ).NE.AS( I, J ) )
2694 ELSE IF( TYPE.EQ.'SY' )THEN
2703 DO 30 I = 1, IBEG - 1
2704 IF( AA( I, J ).NE.AS( I, J ) )
2707 DO 40 I = IEND + 1, LDA
2708 IF( AA( I, J ).NE.AS( I, J ) )
2723 DOUBLE PRECISION FUNCTION DBEG( RESET )
2725 * Generates random numbers uniformly distributed between -0.5 and 0.5.
2727 * Auxiliary routine for test program for Level 3 Blas.
2729 * -- Written on 8-February-1989.
2730 * Jack Dongarra, Argonne National Laboratory.
2731 * Iain Duff, AERE Harwell.
2732 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2733 * Sven Hammarling, Numerical Algorithms Group Ltd.
2735 * .. Scalar Arguments ..
2737 * .. Local Scalars ..
2739 * .. Save statement ..
2741 * .. Executable Statements ..
2743 * Initialize local variables.
2750 * The sequence of values of I is bounded between 1 and 999.
2751 * If initial I = 1,2,3,6,7 or 9, the period will be 50.
2752 * If initial I = 4 or 8, the period will be 25.
2753 * If initial I = 5, the period will be 10.
2754 * IC is used to break up the period by skipping 1 value of I in 6.
2758 I = I - 1000*( I/1000 )
2763 DBEG = ( I - 500 )/1001.0D0
2769 DOUBLE PRECISION FUNCTION DDIFF( X, Y )
2771 * Auxiliary routine for test program for Level 3 Blas.
2773 * -- Written on 8-February-1989.
2774 * Jack Dongarra, Argonne National Laboratory.
2775 * Iain Duff, AERE Harwell.
2776 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2777 * Sven Hammarling, Numerical Algorithms Group Ltd.
2779 * .. Scalar Arguments ..
2780 DOUBLE PRECISION X, Y
2781 * .. Executable Statements ..
2788 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2790 * Tests whether XERBLA has detected an error when it should.
2792 * Auxiliary routine for test program for Level 3 Blas.
2794 * -- Written on 8-February-1989.
2795 * Jack Dongarra, Argonne National Laboratory.
2796 * Iain Duff, AERE Harwell.
2797 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2798 * Sven Hammarling, Numerical Algorithms Group Ltd.
2800 * .. Scalar Arguments ..
2804 * .. Executable Statements ..
2806 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
2812 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
2813 $ 'ETECTED BY ', A6, ' *****' )
2818 SUBROUTINE XERBLA( SRNAME, INFO )
2820 * This is a special version of XERBLA to be used only as part of
2821 * the test program for testing error exits from the Level 3 BLAS
2824 * XERBLA is an error handler for the Level 3 BLAS routines.
2826 * It is called by the Level 3 BLAS routines if an input parameter is
2829 * Auxiliary routine for test program for Level 3 Blas.
2831 * -- Written on 8-February-1989.
2832 * Jack Dongarra, Argonne National Laboratory.
2833 * Iain Duff, AERE Harwell.
2834 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2835 * Sven Hammarling, Numerical Algorithms Group Ltd.
2837 * .. Scalar Arguments ..
2840 * .. Scalars in Common ..
2844 * .. Common blocks ..
2845 COMMON /INFOC/INFOT, NOUT, OK, LERR
2846 COMMON /SRNAMC/SRNAMT
2847 * .. Executable Statements ..
2849 IF( INFO.NE.INFOT )THEN
2850 IF( INFOT.NE.0 )THEN
2851 WRITE( NOUT, FMT = 9999 )INFO, INFOT
2853 WRITE( NOUT, FMT = 9997 )INFO
2857 IF( SRNAME.NE.SRNAMT )THEN
2858 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
2863 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
2864 $ ' OF ', I2, ' *******' )
2865 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE',
2866 $ 'AD OF ', A6, ' *******' )
2867 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,