1*> \brief \b ZERRQR
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 ZERRQR( 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*> ZERRQR tests the error exits for the COMPLEX*16 routines
25*> that use the QR decomposition of a general matrix.
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*> \date December 2016
52*
53*> \ingroup complex16_lin
54*
55*  =====================================================================
56      SUBROUTINE ZERRQR( PATH, NUNIT )
57*
58*  -- LAPACK test routine ((version 3.7.0) --
59*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
60*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
61*     December 2016
62*
63*     .. Scalar Arguments ..
64      CHARACTER*3        PATH
65      INTEGER            NUNIT
66*     ..
67*
68*  =====================================================================
69*
70*     .. Parameters ..
71      INTEGER            NMAX
72      PARAMETER          ( NMAX = 2 )
73*     ..
74*     .. Local Scalars ..
75      INTEGER            I, INFO, J
76*     ..
77*     .. Local Arrays ..
78      COMPLEX*16         A( NMAX, NMAX ), AF( NMAX, NMAX ), B( NMAX ),
79     $                   W( NMAX ), X( NMAX )
80*     ..
81*     .. External Subroutines ..
82      EXTERNAL           ALAESM, CHKXER, ZGEQR2, ZGEQR2P, ZGEQRF,
83     $                   ZGEQRFP, ZGEQRS, ZUNG2R, ZUNGQR, ZUNM2R,
84     $                   ZUNMQR
85*     ..
86*     .. Scalars in Common ..
87      LOGICAL            LERR, OK
88      CHARACTER*32       SRNAMT
89      INTEGER            INFOT, NOUT
90*     ..
91*     .. Common blocks ..
92      COMMON             / INFOC / INFOT, NOUT, OK, LERR
93      COMMON             / SRNAMC / SRNAMT
94*     ..
95*     .. Intrinsic Functions ..
96      INTRINSIC          DBLE, DCMPLX
97*     ..
98*     .. Executable Statements ..
99*
100      NOUT = NUNIT
101      WRITE( NOUT, FMT = * )
102*
103*     Set the variables to innocuous values.
104*
105      DO 20 J = 1, NMAX
106         DO 10 I = 1, NMAX
107            A( I, J ) = DCMPLX( 1.D0 / DBLE( I+J ),
108     $                  -1.D0 / DBLE( I+J ) )
109            AF( I, J ) = DCMPLX( 1.D0 / DBLE( I+J ),
110     $                   -1.D0 / DBLE( I+J ) )
111   10    CONTINUE
112         B( J ) = 0.D0
113         W( J ) = 0.D0
114         X( J ) = 0.D0
115   20 CONTINUE
116      OK = .TRUE.
117*
118*     Error exits for QR factorization
119*
120*     ZGEQRF
121*
122      SRNAMT = 'ZGEQRF'
123      INFOT = 1
124      CALL ZGEQRF( -1, 0, A, 1, B, W, 1, INFO )
125      CALL CHKXER( 'ZGEQRF', INFOT, NOUT, LERR, OK )
126      INFOT = 2
127      CALL ZGEQRF( 0, -1, A, 1, B, W, 1, INFO )
128      CALL CHKXER( 'ZGEQRF', INFOT, NOUT, LERR, OK )
129      INFOT = 4
130      CALL ZGEQRF( 2, 1, A, 1, B, W, 1, INFO )
131      CALL CHKXER( 'ZGEQRF', INFOT, NOUT, LERR, OK )
132      INFOT = 7
133      CALL ZGEQRF( 1, 2, A, 1, B, W, 1, INFO )
134      CALL CHKXER( 'ZGEQRF', INFOT, NOUT, LERR, OK )
135*
136*     ZGEQRFP
137*
138      SRNAMT = 'ZGEQRFP'
139      INFOT = 1
140      CALL ZGEQRFP( -1, 0, A, 1, B, W, 1, INFO )
141      CALL CHKXER( 'ZGEQRFP', INFOT, NOUT, LERR, OK )
142      INFOT = 2
143      CALL ZGEQRFP( 0, -1, A, 1, B, W, 1, INFO )
144      CALL CHKXER( 'ZGEQRFP', INFOT, NOUT, LERR, OK )
145      INFOT = 4
146      CALL ZGEQRFP( 2, 1, A, 1, B, W, 1, INFO )
147      CALL CHKXER( 'ZGEQRFP', INFOT, NOUT, LERR, OK )
148      INFOT = 7
149      CALL ZGEQRFP( 1, 2, A, 1, B, W, 1, INFO )
150      CALL CHKXER( 'ZGEQRFP', INFOT, NOUT, LERR, OK )
151*
152*     ZGEQR2
153*
154      SRNAMT = 'ZGEQR2'
155      INFOT = 1
156      CALL ZGEQR2( -1, 0, A, 1, B, W, INFO )
157      CALL CHKXER( 'ZGEQR2', INFOT, NOUT, LERR, OK )
158      INFOT = 2
159      CALL ZGEQR2( 0, -1, A, 1, B, W, INFO )
160      CALL CHKXER( 'ZGEQR2', INFOT, NOUT, LERR, OK )
161      INFOT = 4
162      CALL ZGEQR2( 2, 1, A, 1, B, W, INFO )
163      CALL CHKXER( 'ZGEQR2', INFOT, NOUT, LERR, OK )
164*
165*     ZGEQR2P
166*
167      SRNAMT = 'ZGEQR2P'
168      INFOT = 1
169      CALL ZGEQR2P( -1, 0, A, 1, B, W, INFO )
170      CALL CHKXER( 'ZGEQR2P', INFOT, NOUT, LERR, OK )
171      INFOT = 2
172      CALL ZGEQR2P( 0, -1, A, 1, B, W, INFO )
173      CALL CHKXER( 'ZGEQR2P', INFOT, NOUT, LERR, OK )
174      INFOT = 4
175      CALL ZGEQR2P( 2, 1, A, 1, B, W, INFO )
176      CALL CHKXER( 'ZGEQR2P', INFOT, NOUT, LERR, OK )
177*
178*     ZGEQRS
179*
180      SRNAMT = 'ZGEQRS'
181      INFOT = 1
182      CALL ZGEQRS( -1, 0, 0, A, 1, X, B, 1, W, 1, INFO )
183      CALL CHKXER( 'ZGEQRS', INFOT, NOUT, LERR, OK )
184      INFOT = 2
185      CALL ZGEQRS( 0, -1, 0, A, 1, X, B, 1, W, 1, INFO )
186      CALL CHKXER( 'ZGEQRS', INFOT, NOUT, LERR, OK )
187      INFOT = 2
188      CALL ZGEQRS( 1, 2, 0, A, 2, X, B, 2, W, 1, INFO )
189      CALL CHKXER( 'ZGEQRS', INFOT, NOUT, LERR, OK )
190      INFOT = 3
191      CALL ZGEQRS( 0, 0, -1, A, 1, X, B, 1, W, 1, INFO )
192      CALL CHKXER( 'ZGEQRS', INFOT, NOUT, LERR, OK )
193      INFOT = 5
194      CALL ZGEQRS( 2, 1, 0, A, 1, X, B, 2, W, 1, INFO )
195      CALL CHKXER( 'ZGEQRS', INFOT, NOUT, LERR, OK )
196      INFOT = 8
197      CALL ZGEQRS( 2, 1, 0, A, 2, X, B, 1, W, 1, INFO )
198      CALL CHKXER( 'ZGEQRS', INFOT, NOUT, LERR, OK )
199      INFOT = 10
200      CALL ZGEQRS( 1, 1, 2, A, 1, X, B, 1, W, 1, INFO )
201      CALL CHKXER( 'ZGEQRS', INFOT, NOUT, LERR, OK )
202*
203*     ZUNGQR
204*
205      SRNAMT = 'ZUNGQR'
206      INFOT = 1
207      CALL ZUNGQR( -1, 0, 0, A, 1, X, W, 1, INFO )
208      CALL CHKXER( 'ZUNGQR', INFOT, NOUT, LERR, OK )
209      INFOT = 2
210      CALL ZUNGQR( 0, -1, 0, A, 1, X, W, 1, INFO )
211      CALL CHKXER( 'ZUNGQR', INFOT, NOUT, LERR, OK )
212      INFOT = 2
213      CALL ZUNGQR( 1, 2, 0, A, 1, X, W, 2, INFO )
214      CALL CHKXER( 'ZUNGQR', INFOT, NOUT, LERR, OK )
215      INFOT = 3
216      CALL ZUNGQR( 0, 0, -1, A, 1, X, W, 1, INFO )
217      CALL CHKXER( 'ZUNGQR', INFOT, NOUT, LERR, OK )
218      INFOT = 3
219      CALL ZUNGQR( 1, 1, 2, A, 1, X, W, 1, INFO )
220      CALL CHKXER( 'ZUNGQR', INFOT, NOUT, LERR, OK )
221      INFOT = 5
222      CALL ZUNGQR( 2, 2, 0, A, 1, X, W, 2, INFO )
223      CALL CHKXER( 'ZUNGQR', INFOT, NOUT, LERR, OK )
224      INFOT = 8
225      CALL ZUNGQR( 2, 2, 0, A, 2, X, W, 1, INFO )
226      CALL CHKXER( 'ZUNGQR', INFOT, NOUT, LERR, OK )
227*
228*     ZUNG2R
229*
230      SRNAMT = 'ZUNG2R'
231      INFOT = 1
232      CALL ZUNG2R( -1, 0, 0, A, 1, X, W, INFO )
233      CALL CHKXER( 'ZUNG2R', INFOT, NOUT, LERR, OK )
234      INFOT = 2
235      CALL ZUNG2R( 0, -1, 0, A, 1, X, W, INFO )
236      CALL CHKXER( 'ZUNG2R', INFOT, NOUT, LERR, OK )
237      INFOT = 2
238      CALL ZUNG2R( 1, 2, 0, A, 1, X, W, INFO )
239      CALL CHKXER( 'ZUNG2R', INFOT, NOUT, LERR, OK )
240      INFOT = 3
241      CALL ZUNG2R( 0, 0, -1, A, 1, X, W, INFO )
242      CALL CHKXER( 'ZUNG2R', INFOT, NOUT, LERR, OK )
243      INFOT = 3
244      CALL ZUNG2R( 2, 1, 2, A, 2, X, W, INFO )
245      CALL CHKXER( 'ZUNG2R', INFOT, NOUT, LERR, OK )
246      INFOT = 5
247      CALL ZUNG2R( 2, 1, 0, A, 1, X, W, INFO )
248      CALL CHKXER( 'ZUNG2R', INFOT, NOUT, LERR, OK )
249*
250*     ZUNMQR
251*
252      SRNAMT = 'ZUNMQR'
253      INFOT = 1
254      CALL ZUNMQR( '/', 'N', 0, 0, 0, A, 1, X, AF, 1, W, 1, INFO )
255      CALL CHKXER( 'ZUNMQR', INFOT, NOUT, LERR, OK )
256      INFOT = 2
257      CALL ZUNMQR( 'L', '/', 0, 0, 0, A, 1, X, AF, 1, W, 1, INFO )
258      CALL CHKXER( 'ZUNMQR', INFOT, NOUT, LERR, OK )
259      INFOT = 3
260      CALL ZUNMQR( 'L', 'N', -1, 0, 0, A, 1, X, AF, 1, W, 1, INFO )
261      CALL CHKXER( 'ZUNMQR', INFOT, NOUT, LERR, OK )
262      INFOT = 4
263      CALL ZUNMQR( 'L', 'N', 0, -1, 0, A, 1, X, AF, 1, W, 1, INFO )
264      CALL CHKXER( 'ZUNMQR', INFOT, NOUT, LERR, OK )
265      INFOT = 5
266      CALL ZUNMQR( 'L', 'N', 0, 0, -1, A, 1, X, AF, 1, W, 1, INFO )
267      CALL CHKXER( 'ZUNMQR', INFOT, NOUT, LERR, OK )
268      INFOT = 5
269      CALL ZUNMQR( 'L', 'N', 0, 1, 1, A, 1, X, AF, 1, W, 1, INFO )
270      CALL CHKXER( 'ZUNMQR', INFOT, NOUT, LERR, OK )
271      INFOT = 5
272      CALL ZUNMQR( 'R', 'N', 1, 0, 1, A, 1, X, AF, 1, W, 1, INFO )
273      CALL CHKXER( 'ZUNMQR', INFOT, NOUT, LERR, OK )
274      INFOT = 7
275      CALL ZUNMQR( 'L', 'N', 2, 1, 0, A, 1, X, AF, 2, W, 1, INFO )
276      CALL CHKXER( 'ZUNMQR', INFOT, NOUT, LERR, OK )
277      INFOT = 7
278      CALL ZUNMQR( 'R', 'N', 1, 2, 0, A, 1, X, AF, 1, W, 1, INFO )
279      CALL CHKXER( 'ZUNMQR', INFOT, NOUT, LERR, OK )
280      INFOT = 10
281      CALL ZUNMQR( 'L', 'N', 2, 1, 0, A, 2, X, AF, 1, W, 1, INFO )
282      CALL CHKXER( 'ZUNMQR', INFOT, NOUT, LERR, OK )
283      INFOT = 12
284      CALL ZUNMQR( 'L', 'N', 1, 2, 0, A, 1, X, AF, 1, W, 1, INFO )
285      CALL CHKXER( 'ZUNMQR', INFOT, NOUT, LERR, OK )
286      INFOT = 12
287      CALL ZUNMQR( 'R', 'N', 2, 1, 0, A, 1, X, AF, 2, W, 1, INFO )
288      CALL CHKXER( 'ZUNMQR', INFOT, NOUT, LERR, OK )
289*
290*     ZUNM2R
291*
292      SRNAMT = 'ZUNM2R'
293      INFOT = 1
294      CALL ZUNM2R( '/', 'N', 0, 0, 0, A, 1, X, AF, 1, W, INFO )
295      CALL CHKXER( 'ZUNM2R', INFOT, NOUT, LERR, OK )
296      INFOT = 2
297      CALL ZUNM2R( 'L', '/', 0, 0, 0, A, 1, X, AF, 1, W, INFO )
298      CALL CHKXER( 'ZUNM2R', INFOT, NOUT, LERR, OK )
299      INFOT = 3
300      CALL ZUNM2R( 'L', 'N', -1, 0, 0, A, 1, X, AF, 1, W, INFO )
301      CALL CHKXER( 'ZUNM2R', INFOT, NOUT, LERR, OK )
302      INFOT = 4
303      CALL ZUNM2R( 'L', 'N', 0, -1, 0, A, 1, X, AF, 1, W, INFO )
304      CALL CHKXER( 'ZUNM2R', INFOT, NOUT, LERR, OK )
305      INFOT = 5
306      CALL ZUNM2R( 'L', 'N', 0, 0, -1, A, 1, X, AF, 1, W, INFO )
307      CALL CHKXER( 'ZUNM2R', INFOT, NOUT, LERR, OK )
308      INFOT = 5
309      CALL ZUNM2R( 'L', 'N', 0, 1, 1, A, 1, X, AF, 1, W, INFO )
310      CALL CHKXER( 'ZUNM2R', INFOT, NOUT, LERR, OK )
311      INFOT = 5
312      CALL ZUNM2R( 'R', 'N', 1, 0, 1, A, 1, X, AF, 1, W, INFO )
313      CALL CHKXER( 'ZUNM2R', INFOT, NOUT, LERR, OK )
314      INFOT = 7
315      CALL ZUNM2R( 'L', 'N', 2, 1, 0, A, 1, X, AF, 2, W, INFO )
316      CALL CHKXER( 'ZUNM2R', INFOT, NOUT, LERR, OK )
317      INFOT = 7
318      CALL ZUNM2R( 'R', 'N', 1, 2, 0, A, 1, X, AF, 1, W, INFO )
319      CALL CHKXER( 'ZUNM2R', INFOT, NOUT, LERR, OK )
320      INFOT = 10
321      CALL ZUNM2R( 'L', 'N', 2, 1, 0, A, 2, X, AF, 1, W, INFO )
322      CALL CHKXER( 'ZUNM2R', INFOT, NOUT, LERR, OK )
323*
324*     Print a summary line.
325*
326      CALL ALAESM( PATH, OK, NOUT )
327*
328      RETURN
329*
330*     End of ZERRQR
331*
332      END
333