1*> \brief \b CDRVGE
2*
3*  =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6*            http://www.netlib.org/lapack/explore-html/
7*
8*  Definition:
9*  ===========
10*
11*       SUBROUTINE CDRVGE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX,
12*                          A, AFAC, ASAV, B, BSAV, X, XACT, S, WORK,
13*                          RWORK, IWORK, NOUT )
14*
15*       .. Scalar Arguments ..
16*       LOGICAL            TSTERR
17*       INTEGER            NMAX, NN, NOUT, NRHS
18*       REAL               THRESH
19*       ..
20*       .. Array Arguments ..
21*       LOGICAL            DOTYPE( * )
22*       INTEGER            IWORK( * ), NVAL( * )
23*       REAL               RWORK( * ), S( * )
24*       COMPLEX            A( * ), AFAC( * ), ASAV( * ), B( * ),
25*      $                   BSAV( * ), WORK( * ), X( * ), XACT( * )
26*       ..
27*
28*
29*> \par Purpose:
30*  =============
31*>
32*> \verbatim
33*>
34*> CDRVGE tests the driver routines CGESV and -SVX.
35*> \endverbatim
36*
37*  Arguments:
38*  ==========
39*
40*> \param[in] DOTYPE
41*> \verbatim
42*>          DOTYPE is LOGICAL array, dimension (NTYPES)
43*>          The matrix types to be used for testing.  Matrices of type j
44*>          (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
45*>          .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.
46*> \endverbatim
47*>
48*> \param[in] NN
49*> \verbatim
50*>          NN is INTEGER
51*>          The number of values of N contained in the vector NVAL.
52*> \endverbatim
53*>
54*> \param[in] NVAL
55*> \verbatim
56*>          NVAL is INTEGER array, dimension (NN)
57*>          The values of the matrix column dimension N.
58*> \endverbatim
59*>
60*> \param[in] NRHS
61*> \verbatim
62*>          NRHS is INTEGER
63*>          The number of right hand side vectors to be generated for
64*>          each linear system.
65*> \endverbatim
66*>
67*> \param[in] THRESH
68*> \verbatim
69*>          THRESH is REAL
70*>          The threshold value for the test ratios.  A result is
71*>          included in the output file if RESULT >= THRESH.  To have
72*>          every test ratio printed, use THRESH = 0.
73*> \endverbatim
74*>
75*> \param[in] TSTERR
76*> \verbatim
77*>          TSTERR is LOGICAL
78*>          Flag that indicates whether error exits are to be tested.
79*> \endverbatim
80*>
81*> \param[in] NMAX
82*> \verbatim
83*>          NMAX is INTEGER
84*>          The maximum value permitted for N, used in dimensioning the
85*>          work arrays.
86*> \endverbatim
87*>
88*> \param[out] A
89*> \verbatim
90*>          A is COMPLEX array, dimension (NMAX*NMAX)
91*> \endverbatim
92*>
93*> \param[out] AFAC
94*> \verbatim
95*>          AFAC is COMPLEX array, dimension (NMAX*NMAX)
96*> \endverbatim
97*>
98*> \param[out] ASAV
99*> \verbatim
100*>          ASAV is COMPLEX array, dimension (NMAX*NMAX)
101*> \endverbatim
102*>
103*> \param[out] B
104*> \verbatim
105*>          B is COMPLEX array, dimension (NMAX*NRHS)
106*> \endverbatim
107*>
108*> \param[out] BSAV
109*> \verbatim
110*>          BSAV is COMPLEX array, dimension (NMAX*NRHS)
111*> \endverbatim
112*>
113*> \param[out] X
114*> \verbatim
115*>          X is COMPLEX array, dimension (NMAX*NRHS)
116*> \endverbatim
117*>
118*> \param[out] XACT
119*> \verbatim
120*>          XACT is COMPLEX array, dimension (NMAX*NRHS)
121*> \endverbatim
122*>
123*> \param[out] S
124*> \verbatim
125*>          S is REAL array, dimension (2*NMAX)
126*> \endverbatim
127*>
128*> \param[out] WORK
129*> \verbatim
130*>          WORK is COMPLEX array, dimension
131*>                      (NMAX*max(3,NRHS))
132*> \endverbatim
133*>
134*> \param[out] RWORK
135*> \verbatim
136*>          RWORK is REAL array, dimension (2*NRHS+NMAX)
137*> \endverbatim
138*>
139*> \param[out] IWORK
140*> \verbatim
141*>          IWORK is INTEGER array, dimension (NMAX)
142*> \endverbatim
143*>
144*> \param[in] NOUT
145*> \verbatim
146*>          NOUT is INTEGER
147*>          The unit number for output.
148*> \endverbatim
149*
150*  Authors:
151*  ========
152*
153*> \author Univ. of Tennessee
154*> \author Univ. of California Berkeley
155*> \author Univ. of Colorado Denver
156*> \author NAG Ltd.
157*
158*> \date November 2011
159*
160*> \ingroup complex_lin
161*
162*  =====================================================================
163      SUBROUTINE CDRVGE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX,
164     $                   A, AFAC, ASAV, B, BSAV, X, XACT, S, WORK,
165     $                   RWORK, IWORK, NOUT )
166*
167*  -- LAPACK test routine (version 3.4.0) --
168*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
169*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
170*     November 2011
171*
172*     .. Scalar Arguments ..
173      LOGICAL            TSTERR
174      INTEGER            NMAX, NN, NOUT, NRHS
175      REAL               THRESH
176*     ..
177*     .. Array Arguments ..
178      LOGICAL            DOTYPE( * )
179      INTEGER            IWORK( * ), NVAL( * )
180      REAL               RWORK( * ), S( * )
181      COMPLEX            A( * ), AFAC( * ), ASAV( * ), B( * ),
182     $                   BSAV( * ), WORK( * ), X( * ), XACT( * )
183*     ..
184*
185*  =====================================================================
186*
187*     .. Parameters ..
188      REAL               ONE, ZERO
189      PARAMETER          ( ONE = 1.0E+0, ZERO = 0.0E+0 )
190      INTEGER            NTYPES
191      PARAMETER          ( NTYPES = 11 )
192      INTEGER            NTESTS
193      PARAMETER          ( NTESTS = 7 )
194      INTEGER            NTRAN
195      PARAMETER          ( NTRAN = 3 )
196*     ..
197*     .. Local Scalars ..
198      LOGICAL            EQUIL, NOFACT, PREFAC, TRFCON, ZEROT
199      CHARACTER          DIST, EQUED, FACT, TRANS, TYPE, XTYPE
200      CHARACTER*3        PATH
201      INTEGER            I, IEQUED, IFACT, IMAT, IN, INFO, IOFF, ITRAN,
202     $                   IZERO, K, K1, KL, KU, LDA, LWORK, MODE, N, NB,
203     $                   NBMIN, NERRS, NFACT, NFAIL, NIMAT, NRUN, NT
204      REAL               AINVNM, AMAX, ANORM, ANORMI, ANORMO, CNDNUM,
205     $                   COLCND, RCOND, RCONDC, RCONDI, RCONDO, ROLDC,
206     $                   ROLDI, ROLDO, ROWCND, RPVGRW
207*     ..
208*     .. Local Arrays ..
209      CHARACTER          EQUEDS( 4 ), FACTS( 3 ), TRANSS( NTRAN )
210      INTEGER            ISEED( 4 ), ISEEDY( 4 )
211      REAL               RDUM( 1 ), RESULT( NTESTS )
212*     ..
213*     .. External Functions ..
214      LOGICAL            LSAME
215      REAL               CLANGE, CLANTR, SGET06, SLAMCH
216      EXTERNAL           LSAME, CLANGE, CLANTR, SGET06, SLAMCH
217*     ..
218*     .. External Subroutines ..
219      EXTERNAL           ALADHD, ALAERH, ALASVM, CERRVX, CGEEQU, CGESV,
220     $                   CGESVX, CGET01, CGET02, CGET04, CGET07, CGETRF,
221     $                   CGETRI, CLACPY, CLAQGE, CLARHS, CLASET, CLATB4,
222     $                   CLATMS, XLAENV
223*     ..
224*     .. Intrinsic Functions ..
225      INTRINSIC          ABS, CMPLX, MAX
226*     ..
227*     .. Scalars in Common ..
228      LOGICAL            LERR, OK
229      CHARACTER*32       SRNAMT
230      INTEGER            INFOT, NUNIT
231*     ..
232*     .. Common blocks ..
233      COMMON             / INFOC / INFOT, NUNIT, OK, LERR
234      COMMON             / SRNAMC / SRNAMT
235*     ..
236*     .. Data statements ..
237      DATA               ISEEDY / 1988, 1989, 1990, 1991 /
238      DATA               TRANSS / 'N', 'T', 'C' /
239      DATA               FACTS / 'F', 'N', 'E' /
240      DATA               EQUEDS / 'N', 'R', 'C', 'B' /
241*     ..
242*     .. Executable Statements ..
243*
244*     Initialize constants and the random number seed.
245*
246      PATH( 1: 1 ) = 'Complex precision'
247      PATH( 2: 3 ) = 'GE'
248      NRUN = 0
249      NFAIL = 0
250      NERRS = 0
251      DO 10 I = 1, 4
252         ISEED( I ) = ISEEDY( I )
253   10 CONTINUE
254*
255*     Test the error exits
256*
257      IF( TSTERR )
258     $   CALL CERRVX( PATH, NOUT )
259      INFOT = 0
260*
261*     Set the block size and minimum block size for testing.
262*
263      NB = 1
264      NBMIN = 2
265      CALL XLAENV( 1, NB )
266      CALL XLAENV( 2, NBMIN )
267*
268*     Do for each value of N in NVAL
269*
270      DO 90 IN = 1, NN
271         N = NVAL( IN )
272         LDA = MAX( N, 1 )
273         XTYPE = 'N'
274         NIMAT = NTYPES
275         IF( N.LE.0 )
276     $      NIMAT = 1
277*
278         DO 80 IMAT = 1, NIMAT
279*
280*           Do the tests only if DOTYPE( IMAT ) is true.
281*
282            IF( .NOT.DOTYPE( IMAT ) )
283     $         GO TO 80
284*
285*           Skip types 5, 6, or 7 if the matrix size is too small.
286*
287            ZEROT = IMAT.GE.5 .AND. IMAT.LE.7
288            IF( ZEROT .AND. N.LT.IMAT-4 )
289     $         GO TO 80
290*
291*           Set up parameters with CLATB4 and generate a test matrix
292*           with CLATMS.
293*
294            CALL CLATB4( PATH, IMAT, N, N, TYPE, KL, KU, ANORM, MODE,
295     $                   CNDNUM, DIST )
296            RCONDC = ONE / CNDNUM
297*
298            SRNAMT = 'CLATMS'
299            CALL CLATMS( N, N, DIST, ISEED, TYPE, RWORK, MODE, CNDNUM,
300     $                   ANORM, KL, KU, 'No packing', A, LDA, WORK,
301     $                   INFO )
302*
303*           Check error code from CLATMS.
304*
305            IF( INFO.NE.0 ) THEN
306               CALL ALAERH( PATH, 'CLATMS', INFO, 0, ' ', N, N, -1, -1,
307     $                      -1, IMAT, NFAIL, NERRS, NOUT )
308               GO TO 80
309            END IF
310*
311*           For types 5-7, zero one or more columns of the matrix to
312*           test that INFO is returned correctly.
313*
314            IF( ZEROT ) THEN
315               IF( IMAT.EQ.5 ) THEN
316                  IZERO = 1
317               ELSE IF( IMAT.EQ.6 ) THEN
318                  IZERO = N
319               ELSE
320                  IZERO = N / 2 + 1
321               END IF
322               IOFF = ( IZERO-1 )*LDA
323               IF( IMAT.LT.7 ) THEN
324                  DO 20 I = 1, N
325                     A( IOFF+I ) = ZERO
326   20             CONTINUE
327               ELSE
328                  CALL CLASET( 'Full', N, N-IZERO+1, CMPLX( ZERO ),
329     $                         CMPLX( ZERO ), A( IOFF+1 ), LDA )
330               END IF
331            ELSE
332               IZERO = 0
333            END IF
334*
335*           Save a copy of the matrix A in ASAV.
336*
337            CALL CLACPY( 'Full', N, N, A, LDA, ASAV, LDA )
338*
339            DO 70 IEQUED = 1, 4
340               EQUED = EQUEDS( IEQUED )
341               IF( IEQUED.EQ.1 ) THEN
342                  NFACT = 3
343               ELSE
344                  NFACT = 1
345               END IF
346*
347               DO 60 IFACT = 1, NFACT
348                  FACT = FACTS( IFACT )
349                  PREFAC = LSAME( FACT, 'F' )
350                  NOFACT = LSAME( FACT, 'N' )
351                  EQUIL = LSAME( FACT, 'E' )
352*
353                  IF( ZEROT ) THEN
354                     IF( PREFAC )
355     $                  GO TO 60
356                     RCONDO = ZERO
357                     RCONDI = ZERO
358*
359                  ELSE IF( .NOT.NOFACT ) THEN
360*
361*                    Compute the condition number for comparison with
362*                    the value returned by CGESVX (FACT = 'N' reuses
363*                    the condition number from the previous iteration
364*                    with FACT = 'F').
365*
366                     CALL CLACPY( 'Full', N, N, ASAV, LDA, AFAC, LDA )
367                     IF( EQUIL .OR. IEQUED.GT.1 ) THEN
368*
369*                       Compute row and column scale factors to
370*                       equilibrate the matrix A.
371*
372                        CALL CGEEQU( N, N, AFAC, LDA, S, S( N+1 ),
373     $                               ROWCND, COLCND, AMAX, INFO )
374                        IF( INFO.EQ.0 .AND. N.GT.0 ) THEN
375                           IF( LSAME( EQUED, 'R' ) ) THEN
376                              ROWCND = ZERO
377                              COLCND = ONE
378                           ELSE IF( LSAME( EQUED, 'C' ) ) THEN
379                              ROWCND = ONE
380                              COLCND = ZERO
381                           ELSE IF( LSAME( EQUED, 'B' ) ) THEN
382                              ROWCND = ZERO
383                              COLCND = ZERO
384                           END IF
385*
386*                          Equilibrate the matrix.
387*
388                           CALL CLAQGE( N, N, AFAC, LDA, S, S( N+1 ),
389     $                                  ROWCND, COLCND, AMAX, EQUED )
390                        END IF
391                     END IF
392*
393*                    Save the condition number of the non-equilibrated
394*                    system for use in CGET04.
395*
396                     IF( EQUIL ) THEN
397                        ROLDO = RCONDO
398                        ROLDI = RCONDI
399                     END IF
400*
401*                    Compute the 1-norm and infinity-norm of A.
402*
403                     ANORMO = CLANGE( '1', N, N, AFAC, LDA, RWORK )
404                     ANORMI = CLANGE( 'I', N, N, AFAC, LDA, RWORK )
405*
406*                    Factor the matrix A.
407*
408                     SRNAMT = 'CGETRF'
409                     CALL CGETRF( N, N, AFAC, LDA, IWORK, INFO )
410*
411*                    Form the inverse of A.
412*
413                     CALL CLACPY( 'Full', N, N, AFAC, LDA, A, LDA )
414                     LWORK = NMAX*MAX( 3, NRHS )
415                     SRNAMT = 'CGETRI'
416                     CALL CGETRI( N, A, LDA, IWORK, WORK, LWORK, INFO )
417*
418*                    Compute the 1-norm condition number of A.
419*
420                     AINVNM = CLANGE( '1', N, N, A, LDA, RWORK )
421                     IF( ANORMO.LE.ZERO .OR. AINVNM.LE.ZERO ) THEN
422                        RCONDO = ONE
423                     ELSE
424                        RCONDO = ( ONE / ANORMO ) / AINVNM
425                     END IF
426*
427*                    Compute the infinity-norm condition number of A.
428*
429                     AINVNM = CLANGE( 'I', N, N, A, LDA, RWORK )
430                     IF( ANORMI.LE.ZERO .OR. AINVNM.LE.ZERO ) THEN
431                        RCONDI = ONE
432                     ELSE
433                        RCONDI = ( ONE / ANORMI ) / AINVNM
434                     END IF
435                  END IF
436*
437                  DO 50 ITRAN = 1, NTRAN
438*
439*                    Do for each value of TRANS.
440*
441                     TRANS = TRANSS( ITRAN )
442                     IF( ITRAN.EQ.1 ) THEN
443                        RCONDC = RCONDO
444                     ELSE
445                        RCONDC = RCONDI
446                     END IF
447*
448*                    Restore the matrix A.
449*
450                     CALL CLACPY( 'Full', N, N, ASAV, LDA, A, LDA )
451*
452*                    Form an exact solution and set the right hand side.
453*
454                     SRNAMT = 'CLARHS'
455                     CALL CLARHS( PATH, XTYPE, 'Full', TRANS, N, N, KL,
456     $                            KU, NRHS, A, LDA, XACT, LDA, B, LDA,
457     $                            ISEED, INFO )
458                     XTYPE = 'C'
459                     CALL CLACPY( 'Full', N, NRHS, B, LDA, BSAV, LDA )
460*
461                     IF( NOFACT .AND. ITRAN.EQ.1 ) THEN
462*
463*                       --- Test CGESV  ---
464*
465*                       Compute the LU factorization of the matrix and
466*                       solve the system.
467*
468                        CALL CLACPY( 'Full', N, N, A, LDA, AFAC, LDA )
469                        CALL CLACPY( 'Full', N, NRHS, B, LDA, X, LDA )
470*
471                        SRNAMT = 'CGESV '
472                        CALL CGESV( N, NRHS, AFAC, LDA, IWORK, X, LDA,
473     $                              INFO )
474*
475*                       Check error code from CGESV .
476*
477                        IF( INFO.NE.IZERO )
478     $                     CALL ALAERH( PATH, 'CGESV ', INFO, IZERO,
479     $                                  ' ', N, N, -1, -1, NRHS, IMAT,
480     $                                  NFAIL, NERRS, NOUT )
481*
482*                       Reconstruct matrix from factors and compute
483*                       residual.
484*
485                        CALL CGET01( N, N, A, LDA, AFAC, LDA, IWORK,
486     $                               RWORK, RESULT( 1 ) )
487                        NT = 1
488                        IF( IZERO.EQ.0 ) THEN
489*
490*                          Compute residual of the computed solution.
491*
492                           CALL CLACPY( 'Full', N, NRHS, B, LDA, WORK,
493     $                                  LDA )
494                           CALL CGET02( 'No transpose', N, N, NRHS, A,
495     $                                  LDA, X, LDA, WORK, LDA, RWORK,
496     $                                  RESULT( 2 ) )
497*
498*                          Check solution from generated exact solution.
499*
500                           CALL CGET04( N, NRHS, X, LDA, XACT, LDA,
501     $                                  RCONDC, RESULT( 3 ) )
502                           NT = 3
503                        END IF
504*
505*                       Print information about the tests that did not
506*                       pass the threshold.
507*
508                        DO 30 K = 1, NT
509                           IF( RESULT( K ).GE.THRESH ) THEN
510                              IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 )
511     $                           CALL ALADHD( NOUT, PATH )
512                              WRITE( NOUT, FMT = 9999 )'CGESV ', N,
513     $                           IMAT, K, RESULT( K )
514                              NFAIL = NFAIL + 1
515                           END IF
516   30                   CONTINUE
517                        NRUN = NRUN + NT
518                     END IF
519*
520*                    --- Test CGESVX ---
521*
522                     IF( .NOT.PREFAC )
523     $                  CALL CLASET( 'Full', N, N, CMPLX( ZERO ),
524     $                               CMPLX( ZERO ), AFAC, LDA )
525                     CALL CLASET( 'Full', N, NRHS, CMPLX( ZERO ),
526     $                            CMPLX( ZERO ), X, LDA )
527                     IF( IEQUED.GT.1 .AND. N.GT.0 ) THEN
528*
529*                       Equilibrate the matrix if FACT = 'F' and
530*                       EQUED = 'R', 'C', or 'B'.
531*
532                        CALL CLAQGE( N, N, A, LDA, S, S( N+1 ), ROWCND,
533     $                               COLCND, AMAX, EQUED )
534                     END IF
535*
536*                    Solve the system and compute the condition number
537*                    and error bounds using CGESVX.
538*
539                     SRNAMT = 'CGESVX'
540                     CALL CGESVX( FACT, TRANS, N, NRHS, A, LDA, AFAC,
541     $                            LDA, IWORK, EQUED, S, S( N+1 ), B,
542     $                            LDA, X, LDA, RCOND, RWORK,
543     $                            RWORK( NRHS+1 ), WORK,
544     $                            RWORK( 2*NRHS+1 ), INFO )
545*
546*                    Check the error code from CGESVX.
547*
548                     IF( INFO.NE.IZERO )
549     $                  CALL ALAERH( PATH, 'CGESVX', INFO, IZERO,
550     $                               FACT // TRANS, N, N, -1, -1, NRHS,
551     $                               IMAT, NFAIL, NERRS, NOUT )
552*
553*                    Compare RWORK(2*NRHS+1) from CGESVX with the
554*                    computed reciprocal pivot growth factor RPVGRW
555*
556                     IF( INFO.NE.0 .AND. INFO.LE.N) THEN
557                        RPVGRW = CLANTR( 'M', 'U', 'N', INFO, INFO,
558     $                           AFAC, LDA, RDUM )
559                        IF( RPVGRW.EQ.ZERO ) THEN
560                           RPVGRW = ONE
561                        ELSE
562                           RPVGRW = CLANGE( 'M', N, INFO, A, LDA,
563     $                              RDUM ) / RPVGRW
564                        END IF
565                     ELSE
566                        RPVGRW = CLANTR( 'M', 'U', 'N', N, N, AFAC, LDA,
567     $                           RDUM )
568                        IF( RPVGRW.EQ.ZERO ) THEN
569                           RPVGRW = ONE
570                        ELSE
571                           RPVGRW = CLANGE( 'M', N, N, A, LDA, RDUM ) /
572     $                              RPVGRW
573                        END IF
574                     END IF
575                     RESULT( 7 ) = ABS( RPVGRW-RWORK( 2*NRHS+1 ) ) /
576     $                             MAX( RWORK( 2*NRHS+1 ), RPVGRW ) /
577     $                             SLAMCH( 'E' )
578*
579                     IF( .NOT.PREFAC ) THEN
580*
581*                       Reconstruct matrix from factors and compute
582*                       residual.
583*
584                        CALL CGET01( N, N, A, LDA, AFAC, LDA, IWORK,
585     $                               RWORK( 2*NRHS+1 ), RESULT( 1 ) )
586                        K1 = 1
587                     ELSE
588                        K1 = 2
589                     END IF
590*
591                     IF( INFO.EQ.0 ) THEN
592                        TRFCON = .FALSE.
593*
594*                       Compute residual of the computed solution.
595*
596                        CALL CLACPY( 'Full', N, NRHS, BSAV, LDA, WORK,
597     $                               LDA )
598                        CALL CGET02( TRANS, N, N, NRHS, ASAV, LDA, X,
599     $                               LDA, WORK, LDA, RWORK( 2*NRHS+1 ),
600     $                               RESULT( 2 ) )
601*
602*                       Check solution from generated exact solution.
603*
604                        IF( NOFACT .OR. ( PREFAC .AND. LSAME( EQUED,
605     $                      'N' ) ) ) THEN
606                           CALL CGET04( N, NRHS, X, LDA, XACT, LDA,
607     $                                  RCONDC, RESULT( 3 ) )
608                        ELSE
609                           IF( ITRAN.EQ.1 ) THEN
610                              ROLDC = ROLDO
611                           ELSE
612                              ROLDC = ROLDI
613                           END IF
614                           CALL CGET04( N, NRHS, X, LDA, XACT, LDA,
615     $                                  ROLDC, RESULT( 3 ) )
616                        END IF
617*
618*                       Check the error bounds from iterative
619*                       refinement.
620*
621                        CALL CGET07( TRANS, N, NRHS, ASAV, LDA, B, LDA,
622     $                               X, LDA, XACT, LDA, RWORK, .TRUE.,
623     $                               RWORK( NRHS+1 ), RESULT( 4 ) )
624                     ELSE
625                        TRFCON = .TRUE.
626                     END IF
627*
628*                    Compare RCOND from CGESVX with the computed value
629*                    in RCONDC.
630*
631                     RESULT( 6 ) = SGET06( RCOND, RCONDC )
632*
633*                    Print information about the tests that did not pass
634*                    the threshold.
635*
636                     IF( .NOT.TRFCON ) THEN
637                        DO 40 K = K1, NTESTS
638                           IF( RESULT( K ).GE.THRESH ) THEN
639                              IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 )
640     $                           CALL ALADHD( NOUT, PATH )
641                              IF( PREFAC ) THEN
642                                 WRITE( NOUT, FMT = 9997 )'CGESVX',
643     $                              FACT, TRANS, N, EQUED, IMAT, K,
644     $                              RESULT( K )
645                              ELSE
646                                 WRITE( NOUT, FMT = 9998 )'CGESVX',
647     $                              FACT, TRANS, N, IMAT, K, RESULT( K )
648                              END IF
649                              NFAIL = NFAIL + 1
650                           END IF
651   40                   CONTINUE
652                        NRUN = NRUN + 7 - K1
653                     ELSE
654                        IF( RESULT( 1 ).GE.THRESH .AND. .NOT.PREFAC )
655     $                       THEN
656                           IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 )
657     $                        CALL ALADHD( NOUT, PATH )
658                           IF( PREFAC ) THEN
659                              WRITE( NOUT, FMT = 9997 )'CGESVX', FACT,
660     $                           TRANS, N, EQUED, IMAT, 1, RESULT( 1 )
661                           ELSE
662                              WRITE( NOUT, FMT = 9998 )'CGESVX', FACT,
663     $                           TRANS, N, IMAT, 1, RESULT( 1 )
664                           END IF
665                           NFAIL = NFAIL + 1
666                           NRUN = NRUN + 1
667                        END IF
668                        IF( RESULT( 6 ).GE.THRESH ) THEN
669                           IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 )
670     $                        CALL ALADHD( NOUT, PATH )
671                           IF( PREFAC ) THEN
672                              WRITE( NOUT, FMT = 9997 )'CGESVX', FACT,
673     $                           TRANS, N, EQUED, IMAT, 6, RESULT( 6 )
674                           ELSE
675                              WRITE( NOUT, FMT = 9998 )'CGESVX', FACT,
676     $                           TRANS, N, IMAT, 6, RESULT( 6 )
677                           END IF
678                           NFAIL = NFAIL + 1
679                           NRUN = NRUN + 1
680                        END IF
681                        IF( RESULT( 7 ).GE.THRESH ) THEN
682                           IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 )
683     $                        CALL ALADHD( NOUT, PATH )
684                           IF( PREFAC ) THEN
685                              WRITE( NOUT, FMT = 9997 )'CGESVX', FACT,
686     $                           TRANS, N, EQUED, IMAT, 7, RESULT( 7 )
687                           ELSE
688                              WRITE( NOUT, FMT = 9998 )'CGESVX', FACT,
689     $                           TRANS, N, IMAT, 7, RESULT( 7 )
690                           END IF
691                           NFAIL = NFAIL + 1
692                           NRUN = NRUN + 1
693                        END IF
694*
695                     END IF
696*
697   50             CONTINUE
698   60          CONTINUE
699   70       CONTINUE
700   80    CONTINUE
701   90 CONTINUE
702*
703*     Print a summary of the results.
704*
705      CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
706*
707 9999 FORMAT( 1X, A, ', N =', I5, ', type ', I2, ', test(', I2, ') =',
708     $      G12.5 )
709 9998 FORMAT( 1X, A, ', FACT=''', A1, ''', TRANS=''', A1, ''', N=', I5,
710     $      ', type ', I2, ', test(', I1, ')=', G12.5 )
711 9997 FORMAT( 1X, A, ', FACT=''', A1, ''', TRANS=''', A1, ''', N=', I5,
712     $      ', EQUED=''', A1, ''', type ', I2, ', test(', I1, ')=',
713     $      G12.5 )
714      RETURN
715*
716*     End of CDRVGE
717*
718      END
719