LAPACK 3.11.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
zckgqr.f
Go to the documentation of this file.
1*> \brief \b ZCKGQR
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 ZCKGQR( NM, MVAL, NP, PVAL, NN, NVAL, NMATS, ISEED,
12* THRESH, NMAX, A, AF, AQ, AR, TAUA, B, BF, BZ,
13* BT, BWK, TAUB, WORK, RWORK, NIN, NOUT, INFO )
14*
15* .. Scalar Arguments ..
16* INTEGER INFO, NIN, NM, NMATS, NMAX, NN, NOUT, NP
17* DOUBLE PRECISION THRESH
18* ..
19* .. Array Arguments ..
20* INTEGER ISEED( 4 ), MVAL( * ), NVAL( * ), PVAL( * )
21* DOUBLE PRECISION RWORK( * )
22* COMPLEX*16 A( * ), AF( * ), AQ( * ), AR( * ), B( * ),
23* $ BF( * ), BT( * ), BWK( * ), BZ( * ), TAUA( * ),
24* $ TAUB( * ), WORK( * )
25* ..
26*
27*
28*> \par Purpose:
29* =============
30*>
31*> \verbatim
32*>
33*> ZCKGQR tests
34*> ZGGQRF: GQR factorization for N-by-M matrix A and N-by-P matrix B,
35*> ZGGRQF: GRQ factorization for M-by-N matrix A and P-by-N matrix B.
36*> \endverbatim
37*
38* Arguments:
39* ==========
40*
41*> \param[in] NM
42*> \verbatim
43*> NM is INTEGER
44*> The number of values of M contained in the vector MVAL.
45*> \endverbatim
46*>
47*> \param[in] MVAL
48*> \verbatim
49*> MVAL is INTEGER array, dimension (NM)
50*> The values of the matrix row(column) dimension M.
51*> \endverbatim
52*>
53*> \param[in] NP
54*> \verbatim
55*> NP is INTEGER
56*> The number of values of P contained in the vector PVAL.
57*> \endverbatim
58*>
59*> \param[in] PVAL
60*> \verbatim
61*> PVAL is INTEGER array, dimension (NP)
62*> The values of the matrix row(column) dimension P.
63*> \endverbatim
64*>
65*> \param[in] NN
66*> \verbatim
67*> NN is INTEGER
68*> The number of values of N contained in the vector NVAL.
69*> \endverbatim
70*>
71*> \param[in] NVAL
72*> \verbatim
73*> NVAL is INTEGER array, dimension (NN)
74*> The values of the matrix column(row) dimension N.
75*> \endverbatim
76*>
77*> \param[in] NMATS
78*> \verbatim
79*> NMATS is INTEGER
80*> The number of matrix types to be tested for each combination
81*> of matrix dimensions. If NMATS >= NTYPES (the maximum
82*> number of matrix types), then all the different types are
83*> generated for testing. If NMATS < NTYPES, another input line
84*> is read to get the numbers of the matrix types to be used.
85*> \endverbatim
86*>
87*> \param[in,out] ISEED
88*> \verbatim
89*> ISEED is INTEGER array, dimension (4)
90*> On entry, the seed of the random number generator. The array
91*> elements should be between 0 and 4095, otherwise they will be
92*> reduced mod 4096, and ISEED(4) must be odd.
93*> On exit, the next seed in the random number sequence after
94*> all the test matrices have been generated.
95*> \endverbatim
96*>
97*> \param[in] THRESH
98*> \verbatim
99*> THRESH is DOUBLE PRECISION
100*> The threshold value for the test ratios. A result is
101*> included in the output file if RESULT >= THRESH. To have
102*> every test ratio printed, use THRESH = 0.
103*> \endverbatim
104*>
105*> \param[in] NMAX
106*> \verbatim
107*> NMAX is INTEGER
108*> The maximum value permitted for M or N, used in dimensioning
109*> the work arrays.
110*> \endverbatim
111*>
112*> \param[out] A
113*> \verbatim
114*> A is COMPLEX*16 array, dimension (NMAX*NMAX)
115*> \endverbatim
116*>
117*> \param[out] AF
118*> \verbatim
119*> AF is COMPLEX*16 array, dimension (NMAX*NMAX)
120*> \endverbatim
121*>
122*> \param[out] AQ
123*> \verbatim
124*> AQ is COMPLEX*16 array, dimension (NMAX*NMAX)
125*> \endverbatim
126*>
127*> \param[out] AR
128*> \verbatim
129*> AR is COMPLEX*16 array, dimension (NMAX*NMAX)
130*> \endverbatim
131*>
132*> \param[out] TAUA
133*> \verbatim
134*> TAUA is COMPLEX*16 array, dimension (NMAX)
135*> \endverbatim
136*>
137*> \param[out] B
138*> \verbatim
139*> B is COMPLEX*16 array, dimension (NMAX*NMAX)
140*> \endverbatim
141*>
142*> \param[out] BF
143*> \verbatim
144*> BF is COMPLEX*16 array, dimension (NMAX*NMAX)
145*> \endverbatim
146*>
147*> \param[out] BZ
148*> \verbatim
149*> BZ is COMPLEX*16 array, dimension (NMAX*NMAX)
150*> \endverbatim
151*>
152*> \param[out] BT
153*> \verbatim
154*> BT is COMPLEX*16 array, dimension (NMAX*NMAX)
155*> \endverbatim
156*>
157*> \param[out] BWK
158*> \verbatim
159*> BWK is COMPLEX*16 array, dimension (NMAX*NMAX)
160*> \endverbatim
161*>
162*> \param[out] TAUB
163*> \verbatim
164*> TAUB is COMPLEX*16 array, dimension (NMAX)
165*> \endverbatim
166*>
167*> \param[out] WORK
168*> \verbatim
169*> WORK is COMPLEX*16 array, dimension (NMAX*NMAX)
170*> \endverbatim
171*>
172*> \param[out] RWORK
173*> \verbatim
174*> RWORK is DOUBLE PRECISION array, dimension (NMAX)
175*> \endverbatim
176*>
177*> \param[in] NIN
178*> \verbatim
179*> NIN is INTEGER
180*> The unit number for input.
181*> \endverbatim
182*>
183*> \param[in] NOUT
184*> \verbatim
185*> NOUT is INTEGER
186*> The unit number for output.
187*> \endverbatim
188*>
189*> \param[out] INFO
190*> \verbatim
191*> INFO is INTEGER
192*> = 0 : successful exit
193*> > 0 : If ZLATMS returns an error code, the absolute value
194*> of it is returned.
195*> \endverbatim
196*
197* Authors:
198* ========
199*
200*> \author Univ. of Tennessee
201*> \author Univ. of California Berkeley
202*> \author Univ. of Colorado Denver
203*> \author NAG Ltd.
204*
205*> \ingroup complex16_eig
206*
207* =====================================================================
208 SUBROUTINE zckgqr( NM, MVAL, NP, PVAL, NN, NVAL, NMATS, ISEED,
209 $ THRESH, NMAX, A, AF, AQ, AR, TAUA, B, BF, BZ,
210 $ BT, BWK, TAUB, WORK, RWORK, NIN, NOUT, INFO )
211*
212* -- LAPACK test routine --
213* -- LAPACK is a software package provided by Univ. of Tennessee, --
214* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
215*
216* .. Scalar Arguments ..
217 INTEGER INFO, NIN, NM, NMATS, NMAX, NN, NOUT, NP
218 DOUBLE PRECISION THRESH
219* ..
220* .. Array Arguments ..
221 INTEGER ISEED( 4 ), MVAL( * ), NVAL( * ), PVAL( * )
222 DOUBLE PRECISION RWORK( * )
223 COMPLEX*16 A( * ), AF( * ), AQ( * ), AR( * ), B( * ),
224 $ bf( * ), bt( * ), bwk( * ), bz( * ), taua( * ),
225 $ taub( * ), work( * )
226* ..
227*
228* =====================================================================
229*
230* .. Parameters ..
231 INTEGER NTESTS
232 PARAMETER ( NTESTS = 7 )
233 INTEGER NTYPES
234 parameter( ntypes = 8 )
235* ..
236* .. Local Scalars ..
237 LOGICAL FIRSTT
238 CHARACTER DISTA, DISTB, TYPE
239 CHARACTER*3 PATH
240 INTEGER I, IINFO, IM, IMAT, IN, IP, KLA, KLB, KUA, KUB,
241 $ lda, ldb, lwork, m, modea, modeb, n, nfail,
242 $ nrun, nt, p
243 DOUBLE PRECISION ANORM, BNORM, CNDNMA, CNDNMB
244* ..
245* .. Local Arrays ..
246 LOGICAL DOTYPE( NTYPES )
247 DOUBLE PRECISION RESULT( NTESTS )
248* ..
249* .. External Subroutines ..
250 EXTERNAL alahdg, alareq, alasum, dlatb9, zgqrts, zgrqts,
251 $ zlatms
252* ..
253* .. Intrinsic Functions ..
254 INTRINSIC abs
255* ..
256* .. Executable Statements ..
257*
258* Initialize constants.
259*
260 path( 1: 3 ) = 'GQR'
261 info = 0
262 nrun = 0
263 nfail = 0
264 firstt = .true.
265 CALL alareq( path, nmats, dotype, ntypes, nin, nout )
266 lda = nmax
267 ldb = nmax
268 lwork = nmax*nmax
269*
270* Do for each value of M in MVAL.
271*
272 DO 60 im = 1, nm
273 m = mval( im )
274*
275* Do for each value of P in PVAL.
276*
277 DO 50 ip = 1, np
278 p = pval( ip )
279*
280* Do for each value of N in NVAL.
281*
282 DO 40 in = 1, nn
283 n = nval( in )
284*
285 DO 30 imat = 1, ntypes
286*
287* Do the tests only if DOTYPE( IMAT ) is true.
288*
289 IF( .NOT.dotype( imat ) )
290 $ GO TO 30
291*
292* Test ZGGRQF
293*
294* Set up parameters with DLATB9 and generate test
295* matrices A and B with ZLATMS.
296*
297 CALL dlatb9( 'GRQ', imat, m, p, n, TYPE, kla, kua,
298 $ klb, kub, anorm, bnorm, modea, modeb,
299 $ cndnma, cndnmb, dista, distb )
300*
301 CALL zlatms( m, n, dista, iseed, TYPE, rwork, modea,
302 $ cndnma, anorm, kla, kua, 'No packing', a,
303 $ lda, work, iinfo )
304 IF( iinfo.NE.0 ) THEN
305 WRITE( nout, fmt = 9999 )iinfo
306 info = abs( iinfo )
307 GO TO 30
308 END IF
309*
310 CALL zlatms( p, n, distb, iseed, TYPE, rwork, modeb,
311 $ cndnmb, bnorm, klb, kub, 'No packing', b,
312 $ ldb, work, iinfo )
313 IF( iinfo.NE.0 ) THEN
314 WRITE( nout, fmt = 9999 )iinfo
315 info = abs( iinfo )
316 GO TO 30
317 END IF
318*
319 nt = 4
320*
321 CALL zgrqts( m, p, n, a, af, aq, ar, lda, taua, b, bf,
322 $ bz, bt, bwk, ldb, taub, work, lwork,
323 $ rwork, result )
324*
325* Print information about the tests that did not
326* pass the threshold.
327*
328 DO 10 i = 1, nt
329 IF( result( i ).GE.thresh ) THEN
330 IF( nfail.EQ.0 .AND. firstt ) THEN
331 firstt = .false.
332 CALL alahdg( nout, 'GRQ' )
333 END IF
334 WRITE( nout, fmt = 9998 )m, p, n, imat, i,
335 $ result( i )
336 nfail = nfail + 1
337 END IF
338 10 CONTINUE
339 nrun = nrun + nt
340*
341* Test ZGGQRF
342*
343* Set up parameters with DLATB9 and generate test
344* matrices A and B with ZLATMS.
345*
346 CALL dlatb9( 'GQR', imat, m, p, n, TYPE, kla, kua,
347 $ klb, kub, anorm, bnorm, modea, modeb,
348 $ cndnma, cndnmb, dista, distb )
349*
350 CALL zlatms( n, m, dista, iseed, TYPE, rwork, modea,
351 $ cndnma, anorm, kla, kua, 'No packing', a,
352 $ lda, work, iinfo )
353 IF( iinfo.NE.0 ) THEN
354 WRITE( nout, fmt = 9999 )iinfo
355 info = abs( iinfo )
356 GO TO 30
357 END IF
358*
359 CALL zlatms( n, p, distb, iseed, TYPE, rwork, modea,
360 $ cndnma, bnorm, klb, kub, 'No packing', b,
361 $ ldb, work, iinfo )
362 IF( iinfo.NE.0 ) THEN
363 WRITE( nout, fmt = 9999 )iinfo
364 info = abs( iinfo )
365 GO TO 30
366 END IF
367*
368 nt = 4
369*
370 CALL zgqrts( n, m, p, a, af, aq, ar, lda, taua, b, bf,
371 $ bz, bt, bwk, ldb, taub, work, lwork,
372 $ rwork, result )
373*
374* Print information about the tests that did not
375* pass the threshold.
376*
377 DO 20 i = 1, nt
378 IF( result( i ).GE.thresh ) THEN
379 IF( nfail.EQ.0 .AND. firstt ) THEN
380 firstt = .false.
381 CALL alahdg( nout, path )
382 END IF
383 WRITE( nout, fmt = 9997 )n, m, p, imat, i,
384 $ result( i )
385 nfail = nfail + 1
386 END IF
387 20 CONTINUE
388 nrun = nrun + nt
389*
390 30 CONTINUE
391 40 CONTINUE
392 50 CONTINUE
393 60 CONTINUE
394*
395* Print a summary of the results.
396*
397 CALL alasum( path, nout, nfail, nrun, 0 )
398*
399 9999 FORMAT( ' ZLATMS in ZCKGQR: INFO = ', i5 )
400 9998 FORMAT( ' M=', i4, ' P=', i4, ', N=', i4, ', type ', i2,
401 $ ', test ', i2, ', ratio=', g13.6 )
402 9997 FORMAT( ' N=', i4, ' M=', i4, ', P=', i4, ', type ', i2,
403 $ ', test ', i2, ', ratio=', g13.6 )
404 RETURN
405*
406* End of ZCKGQR
407*
408 END
subroutine alareq(PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT)
ALAREQ
Definition: alareq.f:90
subroutine alahdg(IOUNIT, PATH)
ALAHDG
Definition: alahdg.f:62
subroutine alasum(TYPE, NOUT, NFAIL, NRUN, NERRS)
ALASUM
Definition: alasum.f:73
subroutine zgrqts(M, P, N, A, AF, Q, R, LDA, TAUA, B, BF, Z, T, BWK, LDB, TAUB, WORK, LWORK, RWORK, RESULT)
ZGRQTS
Definition: zgrqts.f:176
subroutine zgqrts(N, M, P, A, AF, Q, R, LDA, TAUA, B, BF, Z, T, BWK, LDB, TAUB, WORK, LWORK, RWORK, RESULT)
ZGQRTS
Definition: zgqrts.f:176
subroutine zckgqr(NM, MVAL, NP, PVAL, NN, NVAL, NMATS, ISEED, THRESH, NMAX, A, AF, AQ, AR, TAUA, B, BF, BZ, BT, BWK, TAUB, WORK, RWORK, NIN, NOUT, INFO)
ZCKGQR
Definition: zckgqr.f:211
subroutine zlatms(M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX, KL, KU, PACK, A, LDA, WORK, INFO)
ZLATMS
Definition: zlatms.f:332
subroutine dlatb9(PATH, IMAT, M, P, N, TYPE, KLA, KUA, KLB, KUB, ANORM, BNORM, MODEA, MODEB, CNDNMA, CNDNMB, DISTA, DISTB)
DLATB9
Definition: dlatb9.f:170