1*> \brief \b DERRQR
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 DERRQR( 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*> DERRQR tests the error exits for the DOUBLE PRECISION 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 November 2011
52*
53*> \ingroup double_lin
54*
55*  =====================================================================
56      SUBROUTINE DERRQR( PATH, NUNIT )
57*
58*  -- LAPACK test routine (version 3.4.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*     November 2011
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      DOUBLE PRECISION   A( NMAX, NMAX ), AF( NMAX, NMAX ), B( NMAX ),
79     $                   W( NMAX ), X( NMAX )
80*     ..
81*     .. External Subroutines ..
82      EXTERNAL           ALAESM, CHKXER, DGEQR2, DGEQR2P, DGEQRF,
83     $                   DGEQRFP, DGEQRS, DORG2R, DORGQR, DORM2R,
84     $                   DORMQR
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
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 ) = 1.D0 / DBLE( I+J )
108            AF( I, J ) = 1.D0 / DBLE( I+J )
109   10    CONTINUE
110         B( J ) = 0.D0
111         W( J ) = 0.D0
112         X( J ) = 0.D0
113   20 CONTINUE
114      OK = .TRUE.
115*
116*     Error exits for QR factorization
117*
118*     DGEQRF
119*
120      SRNAMT = 'DGEQRF'
121      INFOT = 1
122      CALL DGEQRF( -1, 0, A, 1, B, W, 1, INFO )
123      CALL CHKXER( 'DGEQRF', INFOT, NOUT, LERR, OK )
124      INFOT = 2
125      CALL DGEQRF( 0, -1, A, 1, B, W, 1, INFO )
126      CALL CHKXER( 'DGEQRF', INFOT, NOUT, LERR, OK )
127      INFOT = 4
128      CALL DGEQRF( 2, 1, A, 1, B, W, 1, INFO )
129      CALL CHKXER( 'DGEQRF', INFOT, NOUT, LERR, OK )
130      INFOT = 7
131      CALL DGEQRF( 1, 2, A, 1, B, W, 1, INFO )
132      CALL CHKXER( 'DGEQRF', INFOT, NOUT, LERR, OK )
133*
134*     DGEQRFP
135*
136      SRNAMT = 'DGEQRFP'
137      INFOT = 1
138      CALL DGEQRFP( -1, 0, A, 1, B, W, 1, INFO )
139      CALL CHKXER( 'DGEQRFP', INFOT, NOUT, LERR, OK )
140      INFOT = 2
141      CALL DGEQRFP( 0, -1, A, 1, B, W, 1, INFO )
142      CALL CHKXER( 'DGEQRFP', INFOT, NOUT, LERR, OK )
143      INFOT = 4
144      CALL DGEQRFP( 2, 1, A, 1, B, W, 1, INFO )
145      CALL CHKXER( 'DGEQRFP', INFOT, NOUT, LERR, OK )
146      INFOT = 7
147      CALL DGEQRFP( 1, 2, A, 1, B, W, 1, INFO )
148      CALL CHKXER( 'DGEQRFP', INFOT, NOUT, LERR, OK )
149*
150*     DGEQR2
151*
152      SRNAMT = 'DGEQR2'
153      INFOT = 1
154      CALL DGEQR2( -1, 0, A, 1, B, W, INFO )
155      CALL CHKXER( 'DGEQR2', INFOT, NOUT, LERR, OK )
156      INFOT = 2
157      CALL DGEQR2( 0, -1, A, 1, B, W, INFO )
158      CALL CHKXER( 'DGEQR2', INFOT, NOUT, LERR, OK )
159      INFOT = 4
160      CALL DGEQR2( 2, 1, A, 1, B, W, INFO )
161      CALL CHKXER( 'DGEQR2', INFOT, NOUT, LERR, OK )
162*
163*     DGEQR2P
164*
165      SRNAMT = 'DGEQR2P'
166      INFOT = 1
167      CALL DGEQR2P( -1, 0, A, 1, B, W, INFO )
168      CALL CHKXER( 'DGEQR2P', INFOT, NOUT, LERR, OK )
169      INFOT = 2
170      CALL DGEQR2P( 0, -1, A, 1, B, W, INFO )
171      CALL CHKXER( 'DGEQR2P', INFOT, NOUT, LERR, OK )
172      INFOT = 4
173      CALL DGEQR2P( 2, 1, A, 1, B, W, INFO )
174      CALL CHKXER( 'DGEQR2P', INFOT, NOUT, LERR, OK )
175*
176*     DGEQRS
177*
178      SRNAMT = 'DGEQRS'
179      INFOT = 1
180      CALL DGEQRS( -1, 0, 0, A, 1, X, B, 1, W, 1, INFO )
181      CALL CHKXER( 'DGEQRS', INFOT, NOUT, LERR, OK )
182      INFOT = 2
183      CALL DGEQRS( 0, -1, 0, A, 1, X, B, 1, W, 1, INFO )
184      CALL CHKXER( 'DGEQRS', INFOT, NOUT, LERR, OK )
185      INFOT = 2
186      CALL DGEQRS( 1, 2, 0, A, 2, X, B, 2, W, 1, INFO )
187      CALL CHKXER( 'DGEQRS', INFOT, NOUT, LERR, OK )
188      INFOT = 3
189      CALL DGEQRS( 0, 0, -1, A, 1, X, B, 1, W, 1, INFO )
190      CALL CHKXER( 'DGEQRS', INFOT, NOUT, LERR, OK )
191      INFOT = 5
192      CALL DGEQRS( 2, 1, 0, A, 1, X, B, 2, W, 1, INFO )
193      CALL CHKXER( 'DGEQRS', INFOT, NOUT, LERR, OK )
194      INFOT = 8
195      CALL DGEQRS( 2, 1, 0, A, 2, X, B, 1, W, 1, INFO )
196      CALL CHKXER( 'DGEQRS', INFOT, NOUT, LERR, OK )
197      INFOT = 10
198      CALL DGEQRS( 1, 1, 2, A, 1, X, B, 1, W, 1, INFO )
199      CALL CHKXER( 'DGEQRS', INFOT, NOUT, LERR, OK )
200*
201*     DORGQR
202*
203      SRNAMT = 'DORGQR'
204      INFOT = 1
205      CALL DORGQR( -1, 0, 0, A, 1, X, W, 1, INFO )
206      CALL CHKXER( 'DORGQR', INFOT, NOUT, LERR, OK )
207      INFOT = 2
208      CALL DORGQR( 0, -1, 0, A, 1, X, W, 1, INFO )
209      CALL CHKXER( 'DORGQR', INFOT, NOUT, LERR, OK )
210      INFOT = 2
211      CALL DORGQR( 1, 2, 0, A, 1, X, W, 2, INFO )
212      CALL CHKXER( 'DORGQR', INFOT, NOUT, LERR, OK )
213      INFOT = 3
214      CALL DORGQR( 0, 0, -1, A, 1, X, W, 1, INFO )
215      CALL CHKXER( 'DORGQR', INFOT, NOUT, LERR, OK )
216      INFOT = 3
217      CALL DORGQR( 1, 1, 2, A, 1, X, W, 1, INFO )
218      CALL CHKXER( 'DORGQR', INFOT, NOUT, LERR, OK )
219      INFOT = 5
220      CALL DORGQR( 2, 2, 0, A, 1, X, W, 2, INFO )
221      CALL CHKXER( 'DORGQR', INFOT, NOUT, LERR, OK )
222      INFOT = 8
223      CALL DORGQR( 2, 2, 0, A, 2, X, W, 1, INFO )
224      CALL CHKXER( 'DORGQR', INFOT, NOUT, LERR, OK )
225*
226*     DORG2R
227*
228      SRNAMT = 'DORG2R'
229      INFOT = 1
230      CALL DORG2R( -1, 0, 0, A, 1, X, W, INFO )
231      CALL CHKXER( 'DORG2R', INFOT, NOUT, LERR, OK )
232      INFOT = 2
233      CALL DORG2R( 0, -1, 0, A, 1, X, W, INFO )
234      CALL CHKXER( 'DORG2R', INFOT, NOUT, LERR, OK )
235      INFOT = 2
236      CALL DORG2R( 1, 2, 0, A, 1, X, W, INFO )
237      CALL CHKXER( 'DORG2R', INFOT, NOUT, LERR, OK )
238      INFOT = 3
239      CALL DORG2R( 0, 0, -1, A, 1, X, W, INFO )
240      CALL CHKXER( 'DORG2R', INFOT, NOUT, LERR, OK )
241      INFOT = 3
242      CALL DORG2R( 2, 1, 2, A, 2, X, W, INFO )
243      CALL CHKXER( 'DORG2R', INFOT, NOUT, LERR, OK )
244      INFOT = 5
245      CALL DORG2R( 2, 1, 0, A, 1, X, W, INFO )
246      CALL CHKXER( 'DORG2R', INFOT, NOUT, LERR, OK )
247*
248*     DORMQR
249*
250      SRNAMT = 'DORMQR'
251      INFOT = 1
252      CALL DORMQR( '/', 'N', 0, 0, 0, A, 1, X, AF, 1, W, 1, INFO )
253      CALL CHKXER( 'DORMQR', INFOT, NOUT, LERR, OK )
254      INFOT = 2
255      CALL DORMQR( 'L', '/', 0, 0, 0, A, 1, X, AF, 1, W, 1, INFO )
256      CALL CHKXER( 'DORMQR', INFOT, NOUT, LERR, OK )
257      INFOT = 3
258      CALL DORMQR( 'L', 'N', -1, 0, 0, A, 1, X, AF, 1, W, 1, INFO )
259      CALL CHKXER( 'DORMQR', INFOT, NOUT, LERR, OK )
260      INFOT = 4
261      CALL DORMQR( 'L', 'N', 0, -1, 0, A, 1, X, AF, 1, W, 1, INFO )
262      CALL CHKXER( 'DORMQR', INFOT, NOUT, LERR, OK )
263      INFOT = 5
264      CALL DORMQR( 'L', 'N', 0, 0, -1, A, 1, X, AF, 1, W, 1, INFO )
265      CALL CHKXER( 'DORMQR', INFOT, NOUT, LERR, OK )
266      INFOT = 5
267      CALL DORMQR( 'L', 'N', 0, 1, 1, A, 1, X, AF, 1, W, 1, INFO )
268      CALL CHKXER( 'DORMQR', INFOT, NOUT, LERR, OK )
269      INFOT = 5
270      CALL DORMQR( 'R', 'N', 1, 0, 1, A, 1, X, AF, 1, W, 1, INFO )
271      CALL CHKXER( 'DORMQR', INFOT, NOUT, LERR, OK )
272      INFOT = 7
273      CALL DORMQR( 'L', 'N', 2, 1, 0, A, 1, X, AF, 2, W, 1, INFO )
274      CALL CHKXER( 'DORMQR', INFOT, NOUT, LERR, OK )
275      INFOT = 7
276      CALL DORMQR( 'R', 'N', 1, 2, 0, A, 1, X, AF, 1, W, 1, INFO )
277      CALL CHKXER( 'DORMQR', INFOT, NOUT, LERR, OK )
278      INFOT = 10
279      CALL DORMQR( 'L', 'N', 2, 1, 0, A, 2, X, AF, 1, W, 1, INFO )
280      CALL CHKXER( 'DORMQR', INFOT, NOUT, LERR, OK )
281      INFOT = 12
282      CALL DORMQR( 'L', 'N', 1, 2, 0, A, 1, X, AF, 1, W, 1, INFO )
283      CALL CHKXER( 'DORMQR', INFOT, NOUT, LERR, OK )
284      INFOT = 12
285      CALL DORMQR( 'R', 'N', 2, 1, 0, A, 1, X, AF, 2, W, 1, INFO )
286      CALL CHKXER( 'DORMQR', INFOT, NOUT, LERR, OK )
287*
288*     DORM2R
289*
290      SRNAMT = 'DORM2R'
291      INFOT = 1
292      CALL DORM2R( '/', 'N', 0, 0, 0, A, 1, X, AF, 1, W, INFO )
293      CALL CHKXER( 'DORM2R', INFOT, NOUT, LERR, OK )
294      INFOT = 2
295      CALL DORM2R( 'L', '/', 0, 0, 0, A, 1, X, AF, 1, W, INFO )
296      CALL CHKXER( 'DORM2R', INFOT, NOUT, LERR, OK )
297      INFOT = 3
298      CALL DORM2R( 'L', 'N', -1, 0, 0, A, 1, X, AF, 1, W, INFO )
299      CALL CHKXER( 'DORM2R', INFOT, NOUT, LERR, OK )
300      INFOT = 4
301      CALL DORM2R( 'L', 'N', 0, -1, 0, A, 1, X, AF, 1, W, INFO )
302      CALL CHKXER( 'DORM2R', INFOT, NOUT, LERR, OK )
303      INFOT = 5
304      CALL DORM2R( 'L', 'N', 0, 0, -1, A, 1, X, AF, 1, W, INFO )
305      CALL CHKXER( 'DORM2R', INFOT, NOUT, LERR, OK )
306      INFOT = 5
307      CALL DORM2R( 'L', 'N', 0, 1, 1, A, 1, X, AF, 1, W, INFO )
308      CALL CHKXER( 'DORM2R', INFOT, NOUT, LERR, OK )
309      INFOT = 5
310      CALL DORM2R( 'R', 'N', 1, 0, 1, A, 1, X, AF, 1, W, INFO )
311      CALL CHKXER( 'DORM2R', INFOT, NOUT, LERR, OK )
312      INFOT = 7
313      CALL DORM2R( 'L', 'N', 2, 1, 0, A, 1, X, AF, 2, W, INFO )
314      CALL CHKXER( 'DORM2R', INFOT, NOUT, LERR, OK )
315      INFOT = 7
316      CALL DORM2R( 'R', 'N', 1, 2, 0, A, 1, X, AF, 1, W, INFO )
317      CALL CHKXER( 'DORM2R', INFOT, NOUT, LERR, OK )
318      INFOT = 10
319      CALL DORM2R( 'L', 'N', 2, 1, 0, A, 2, X, AF, 1, W, INFO )
320      CALL CHKXER( 'DORM2R', INFOT, NOUT, LERR, OK )
321*
322*     Print a summary line.
323*
324      CALL ALAESM( PATH, OK, NOUT )
325*
326      RETURN
327*
328*     End of DERRQR
329*
330      END
331