1       SUBROUTINE ZERRLS( PATH, NUNIT )
  2 *
  3 *  -- LAPACK test routine (version 3.1) --
  4 *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
  5 *     November 2006
  6 *
  7 *     .. Scalar Arguments ..
  8       CHARACTER*3        PATH
  9       INTEGER            NUNIT
 10 *     ..
 11 *
 12 *  Purpose
 13 *  =======
 14 *
 15 *  ZERRLS tests the error exits for the COMPLEX*16 least squares
 16 *  driver routines (ZGELS, CGELSS, CGELSX, CGELSY, CGELSD).
 17 *
 18 *  Arguments
 19 *  =========
 20 *
 21 *  PATH    (input) CHARACTER*3
 22 *          The LAPACK path name for the routines to be tested.
 23 *
 24 *  NUNIT   (input) INTEGER
 25 *          The unit number for output.
 26 *
 27 *  =====================================================================
 28 *
 29 *     .. Parameters ..
 30       INTEGER            NMAX
 31       PARAMETER          ( NMAX = 2 )
 32 *     ..
 33 *     .. Local Scalars ..
 34       CHARACTER*2        C2
 35       INTEGER            INFO, IRNK
 36       DOUBLE PRECISION   RCOND
 37 *     ..
 38 *     .. Local Arrays ..
 39       INTEGER            IP( NMAX )
 40       DOUBLE PRECISION   RW( NMAX ), S( NMAX )
 41       COMPLEX*16         A( NMAX, NMAX ), B( NMAX, NMAX ), W( NMAX )
 42 *     ..
 43 *     .. External Functions ..
 44       LOGICAL            LSAMEN
 45       EXTERNAL           LSAMEN
 46 *     ..
 47 *     .. External Subroutines ..
 48       EXTERNAL           ALAESM, CHKXER, ZGELS, ZGELSD, ZGELSS, ZGELSX,
 49      $                   ZGELSY
 50 *     ..
 51 *     .. Scalars in Common ..
 52       LOGICAL            LERR, OK
 53       CHARACTER*32       SRNAMT
 54       INTEGER            INFOT, NOUT
 55 *     ..
 56 *     .. Common blocks ..
 57       COMMON             / INFOC / INFOT, NOUT, OK, LERR
 58       COMMON             / SRNAMC / SRNAMT
 59 *     ..
 60 *     .. Executable Statements ..
 61 *
 62       NOUT = NUNIT
 63       C2 = PATH( 23 )
 64       A( 11 ) = ( 1.0D+00.0D+0 )
 65       A( 12 ) = ( 2.0D+00.0D+0 )
 66       A( 22 ) = ( 3.0D+00.0D+0 )
 67       A( 21 ) = ( 4.0D+00.0D+0 )
 68       OK = .TRUE.
 69       WRITE( NOUT, FMT = * )
 70 *
 71 *     Test error exits for the least squares driver routines.
 72 *
 73       IF( LSAMEN( 2, C2, 'LS' ) ) THEN
 74 *
 75 *        ZGELS
 76 *
 77          SRNAMT = 'ZGELS '
 78          INFOT = 1
 79          CALL ZGELS( '/'000, A, 1, B, 1, W, 1, INFO )
 80          CALL CHKXER( 'ZGELS ', INFOT, NOUT, LERR, OK )
 81          INFOT = 2
 82          CALL ZGELS( 'N'-100, A, 1, B, 1, W, 1, INFO )
 83          CALL CHKXER( 'ZGELS ', INFOT, NOUT, LERR, OK )
 84          INFOT = 3
 85          CALL ZGELS( 'N'0-10, A, 1, B, 1, W, 1, INFO )
 86          CALL CHKXER( 'ZGELS ', INFOT, NOUT, LERR, OK )
 87          INFOT = 4
 88          CALL ZGELS( 'N'00-1, A, 1, B, 1, W, 1, INFO )
 89          CALL CHKXER( 'ZGELS ', INFOT, NOUT, LERR, OK )
 90          INFOT = 6
 91          CALL ZGELS( 'N'200, A, 1, B, 2, W, 2, INFO )
 92          CALL CHKXER( 'ZGELS ', INFOT, NOUT, LERR, OK )
 93          INFOT = 8
 94          CALL ZGELS( 'N'200, A, 2, B, 1, W, 2, INFO )
 95          CALL CHKXER( 'ZGELS ', INFOT, NOUT, LERR, OK )
 96          INFOT = 10
 97          CALL ZGELS( 'N'110, A, 1, B, 1, W, 1, INFO )
 98          CALL CHKXER( 'ZGELS ', INFOT, NOUT, LERR, OK )
 99 *
100 *        ZGELSS
101 *
102          SRNAMT = 'ZGELSS'
103          INFOT = 1
104          CALL ZGELSS( -100, A, 1, B, 1, S, RCOND, IRNK, W, 1, RW,
105      $                INFO )
106          CALL CHKXER( 'ZGELSS', INFOT, NOUT, LERR, OK )
107          INFOT = 2
108          CALL ZGELSS( 0-10, A, 1, B, 1, S, RCOND, IRNK, W, 1, RW,
109      $                INFO )
110          CALL CHKXER( 'ZGELSS', INFOT, NOUT, LERR, OK )
111          INFOT = 3
112          CALL ZGELSS( 00-1, A, 1, B, 1, S, RCOND, IRNK, W, 1, RW,
113      $                INFO )
114          CALL CHKXER( 'ZGELSS', INFOT, NOUT, LERR, OK )
115          INFOT = 5
116          CALL ZGELSS( 200, A, 1, B, 2, S, RCOND, IRNK, W, 2, RW,
117      $                INFO )
118          CALL CHKXER( 'ZGELSS', INFOT, NOUT, LERR, OK )
119          INFOT = 7
120          CALL ZGELSS( 200, A, 2, B, 1, S, RCOND, IRNK, W, 2, RW,
121      $                INFO )
122          CALL CHKXER( 'ZGELSS', INFOT, NOUT, LERR, OK )
123 *
124 *        ZGELSX
125 *
126          SRNAMT = 'ZGELSX'
127          INFOT = 1
128          CALL ZGELSX( -100, A, 1, B, 1, IP, RCOND, IRNK, W, RW,
129      $                INFO )
130          CALL CHKXER( 'ZGELSX', INFOT, NOUT, LERR, OK )
131          INFOT = 2
132          CALL ZGELSX( 0-10, A, 1, B, 1, IP, RCOND, IRNK, W, RW,
133      $                INFO )
134          CALL CHKXER( 'ZGELSX', INFOT, NOUT, LERR, OK )
135          INFOT = 3
136          CALL ZGELSX( 00-1, A, 1, B, 1, IP, RCOND, IRNK, W, RW,
137      $                INFO )
138          CALL CHKXER( 'ZGELSX', INFOT, NOUT, LERR, OK )
139          INFOT = 5
140          CALL ZGELSX( 200, A, 1, B, 2, IP, RCOND, IRNK, W, RW,
141      $                INFO )
142          CALL CHKXER( 'ZGELSX', INFOT, NOUT, LERR, OK )
143          INFOT = 7
144          CALL ZGELSX( 200, A, 2, B, 1, IP, RCOND, IRNK, W, RW,
145      $                INFO )
146          CALL CHKXER( 'ZGELSX', INFOT, NOUT, LERR, OK )
147 *
148 *        ZGELSY
149 *
150          SRNAMT = 'ZGELSY'
151          INFOT = 1
152          CALL ZGELSY( -100, A, 1, B, 1, IP, RCOND, IRNK, W, 10, RW,
153      $                INFO )
154          CALL CHKXER( 'ZGELSY', INFOT, NOUT, LERR, OK )
155          INFOT = 2
156          CALL ZGELSY( 0-10, A, 1, B, 1, IP, RCOND, IRNK, W, 10, RW,
157      $                INFO )
158          CALL CHKXER( 'ZGELSY', INFOT, NOUT, LERR, OK )
159          INFOT = 3
160          CALL ZGELSY( 00-1, A, 1, B, 1, IP, RCOND, IRNK, W, 10, RW,
161      $                INFO )
162          CALL CHKXER( 'ZGELSY', INFOT, NOUT, LERR, OK )
163          INFOT = 5
164          CALL ZGELSY( 200, A, 1, B, 2, IP, RCOND, IRNK, W, 10, RW,
165      $                INFO )
166          CALL CHKXER( 'ZGELSY', INFOT, NOUT, LERR, OK )
167          INFOT = 7
168          CALL ZGELSY( 200, A, 2, B, 1, IP, RCOND, IRNK, W, 10, RW,
169      $                INFO )
170          CALL CHKXER( 'ZGELSY', INFOT, NOUT, LERR, OK )
171          INFOT = 12
172          CALL ZGELSY( 030, A, 1, B, 3, IP, RCOND, IRNK, W, 1, RW,
173      $                INFO )
174          CALL CHKXER( 'ZGELSY', INFOT, NOUT, LERR, OK )
175 *
176 *        ZGELSD
177 *
178          SRNAMT = 'ZGELSD'
179          INFOT = 1
180          CALL ZGELSD( -100, A, 1, B, 1, S, RCOND, IRNK, W, 10, RW,
181      $                IP, INFO )
182          CALL CHKXER( 'ZGELSD', INFOT, NOUT, LERR, OK )
183          INFOT = 2
184          CALL ZGELSD( 0-10, A, 1, B, 1, S, RCOND, IRNK, W, 10, RW,
185      $                IP, INFO )
186          CALL CHKXER( 'ZGELSD', INFOT, NOUT, LERR, OK )
187          INFOT = 3
188          CALL ZGELSD( 00-1, A, 1, B, 1, S, RCOND, IRNK, W, 10, RW,
189      $                IP, INFO )
190          CALL CHKXER( 'ZGELSD', INFOT, NOUT, LERR, OK )
191          INFOT = 5
192          CALL ZGELSD( 200, A, 1, B, 2, S, RCOND, IRNK, W, 10, RW,
193      $                IP, INFO )
194          CALL CHKXER( 'ZGELSD', INFOT, NOUT, LERR, OK )
195          INFOT = 7
196          CALL ZGELSD( 200, A, 2, B, 1, S, RCOND, IRNK, W, 10, RW,
197      $                IP, INFO )
198          CALL CHKXER( 'ZGELSD', INFOT, NOUT, LERR, OK )
199          INFOT = 12
200          CALL ZGELSD( 221, A, 2, B, 2, S, RCOND, IRNK, W, 1, RW, IP,
201      $                INFO )
202          CALL CHKXER( 'ZGELSD', INFOT, NOUT, LERR, OK )
203       END IF
204 *
205 *     Print a summary line.
206 *
207       CALL ALAESM( PATH, OK, NOUT )
208 *
209       RETURN
210 *
211 *     End of ZERRLS
212 *
213       END