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