LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
dchkee.F
Go to the documentation of this file.
1*> \brief \b DCHKEE
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8* Definition:
9* ===========
10*
11* PROGRAM DCHKEE
12*
13*
14*> \par Purpose:
15* =============
16*>
17*> \verbatim
18*>
19*> DCHKEE tests the DOUBLE PRECISION LAPACK subroutines for the matrix
20*> eigenvalue problem. The test paths in this version are
21*>
22*> NEP (Nonsymmetric Eigenvalue Problem):
23*> Test DGEHRD, DORGHR, DHSEQR, DTREVC, DHSEIN, and DORMHR
24*>
25*> SEP (Symmetric Eigenvalue Problem):
26*> Test DSYTRD, DORGTR, DSTEQR, DSTERF, DSTEIN, DSTEDC,
27*> and drivers DSYEV(X), DSBEV(X), DSPEV(X), DSTEV(X),
28*> DSYEVD, DSBEVD, DSPEVD, DSTEVD
29*>
30*> SVD (Singular Value Decomposition):
31*> Test DGEBRD, DORGBR, DBDSQR, DBDSDC
32*> and the drivers DGESVD, DGESDD
33*>
34*> DEV (Nonsymmetric Eigenvalue/eigenvector Driver):
35*> Test DGEEV
36*>
37*> DES (Nonsymmetric Schur form Driver):
38*> Test DGEES
39*>
40*> DVX (Nonsymmetric Eigenvalue/eigenvector Expert Driver):
41*> Test DGEEVX
42*>
43*> DSX (Nonsymmetric Schur form Expert Driver):
44*> Test DGEESX
45*>
46*> DGG (Generalized Nonsymmetric Eigenvalue Problem):
47*> Test DGGHD3, DGGBAL, DGGBAK, DHGEQZ, and DTGEVC
48*>
49*> DGS (Generalized Nonsymmetric Schur form Driver):
50*> Test DGGES
51*>
52*> DGV (Generalized Nonsymmetric Eigenvalue/eigenvector Driver):
53*> Test DGGEV
54*>
55*> DGX (Generalized Nonsymmetric Schur form Expert Driver):
56*> Test DGGESX
57*>
58*> DXV (Generalized Nonsymmetric Eigenvalue/eigenvector Expert Driver):
59*> Test DGGEVX
60*>
61*> DSG (Symmetric Generalized Eigenvalue Problem):
62*> Test DSYGST, DSYGV, DSYGVD, DSYGVX, DSPGST, DSPGV, DSPGVD,
63*> DSPGVX, DSBGST, DSBGV, DSBGVD, and DSBGVX
64*>
65*> DSB (Symmetric Band Eigenvalue Problem):
66*> Test DSBTRD
67*>
68*> DBB (Band Singular Value Decomposition):
69*> Test DGBBRD
70*>
71*> DEC (Eigencondition estimation):
72*> Test DLALN2, DLASY2, DLAEQU, DLAEXC, DTRSYL, DTREXC, DTRSNA,
73*> DTRSEN, and DLAQTR
74*>
75*> DBL (Balancing a general matrix)
76*> Test DGEBAL
77*>
78*> DBK (Back transformation on a balanced matrix)
79*> Test DGEBAK
80*>
81*> DGL (Balancing a matrix pair)
82*> Test DGGBAL
83*>
84*> DGK (Back transformation on a matrix pair)
85*> Test DGGBAK
86*>
87*> GLM (Generalized Linear Regression Model):
88*> Tests DGGGLM
89*>
90*> GQR (Generalized QR and RQ factorizations):
91*> Tests DGGQRF and DGGRQF
92*>
93*> GSV (Generalized Singular Value Decomposition):
94*> Tests DGGSVD, DGGSVP, DTGSJA, DLAGS2, DLAPLL, and DLAPMT
95*>
96*> CSD (CS decomposition):
97*> Tests DORCSD
98*>
99*> LSE (Constrained Linear Least Squares):
100*> Tests DGGLSE
101*>
102*> Each test path has a different set of inputs, but the data sets for
103*> the driver routines xEV, xES, xVX, and xSX can be concatenated in a
104*> single input file. The first line of input should contain one of the
105*> 3-character path names in columns 1-3. The number of remaining lines
106*> depends on what is found on the first line.
107*>
108*> The number of matrix types used in testing is often controllable from
109*> the input file. The number of matrix types for each path, and the
110*> test routine that describes them, is as follows:
111*>
112*> Path name(s) Types Test routine
113*>
114*> DHS or NEP 21 DCHKHS
115*> DST or SEP 21 DCHKST (routines)
116*> 18 DDRVST (drivers)
117*> DBD or SVD 16 DCHKBD (routines)
118*> 5 DDRVBD (drivers)
119*> DEV 21 DDRVEV
120*> DES 21 DDRVES
121*> DVX 21 DDRVVX
122*> DSX 21 DDRVSX
123*> DGG 26 DCHKGG (routines)
124*> DGS 26 DDRGES
125*> DGX 5 DDRGSX
126*> DGV 26 DDRGEV
127*> DXV 2 DDRGVX
128*> DSG 21 DDRVSG
129*> DSB 15 DCHKSB
130*> DBB 15 DCHKBB
131*> DEC - DCHKEC
132*> DBL - DCHKBL
133*> DBK - DCHKBK
134*> DGL - DCHKGL
135*> DGK - DCHKGK
136*> GLM 8 DCKGLM
137*> GQR 8 DCKGQR
138*> GSV 8 DCKGSV
139*> CSD 3 DCKCSD
140*> LSE 8 DCKLSE
141*>
142*>-----------------------------------------------------------------------
143*>
144*> NEP input file:
145*>
146*> line 2: NN, INTEGER
147*> Number of values of N.
148*>
149*> line 3: NVAL, INTEGER array, dimension (NN)
150*> The values for the matrix dimension N.
151*>
152*> line 4: NPARMS, INTEGER
153*> Number of values of the parameters NB, NBMIN, NX, NS, and
154*> MAXB.
155*>
156*> line 5: NBVAL, INTEGER array, dimension (NPARMS)
157*> The values for the blocksize NB.
158*>
159*> line 6: NBMIN, INTEGER array, dimension (NPARMS)
160*> The values for the minimum blocksize NBMIN.
161*>
162*> line 7: NXVAL, INTEGER array, dimension (NPARMS)
163*> The values for the crossover point NX.
164*>
165*> line 8: INMIN, INTEGER array, dimension (NPARMS)
166*> LAHQR vs TTQRE crossover point, >= 11
167*>
168*> line 9: INWIN, INTEGER array, dimension (NPARMS)
169*> recommended deflation window size
170*>
171*> line 10: INIBL, INTEGER array, dimension (NPARMS)
172*> nibble crossover point
173*>
174*> line 11: ISHFTS, INTEGER array, dimension (NPARMS)
175*> number of simultaneous shifts)
176*>
177*> line 12: IACC22, INTEGER array, dimension (NPARMS)
178*> select structured matrix multiply: 0, 1 or 2)
179*>
180*> line 13: THRESH
181*> Threshold value for the test ratios. Information will be
182*> printed about each test for which the test ratio is greater
183*> than or equal to the threshold. To have all of the test
184*> ratios printed, use THRESH = 0.0 .
185*>
186*> line 14: NEWSD, INTEGER
187*> A code indicating how to set the random number seed.
188*> = 0: Set the seed to a default value before each run
189*> = 1: Initialize the seed to a default value only before the
190*> first run
191*> = 2: Like 1, but use the seed values on the next line
192*>
193*> If line 14 was 2:
194*>
195*> line 15: INTEGER array, dimension (4)
196*> Four integer values for the random number seed.
197*>
198*> lines 15-EOF: The remaining lines occur in sets of 1 or 2 and allow
199*> the user to specify the matrix types. Each line contains
200*> a 3-character path name in columns 1-3, and the number
201*> of matrix types must be the first nonblank item in columns
202*> 4-80. If the number of matrix types is at least 1 but is
203*> less than the maximum number of possible types, a second
204*> line will be read to get the numbers of the matrix types to
205*> be used. For example,
206*> NEP 21
207*> requests all of the matrix types for the nonsymmetric
208*> eigenvalue problem, while
209*> NEP 4
210*> 9 10 11 12
211*> requests only matrices of type 9, 10, 11, and 12.
212*>
213*> The valid 3-character path names are 'NEP' or 'SHS' for the
214*> nonsymmetric eigenvalue routines.
215*>
216*>-----------------------------------------------------------------------
217*>
218*> SEP or DSG input file:
219*>
220*> line 2: NN, INTEGER
221*> Number of values of N.
222*>
223*> line 3: NVAL, INTEGER array, dimension (NN)
224*> The values for the matrix dimension N.
225*>
226*> line 4: NPARMS, INTEGER
227*> Number of values of the parameters NB, NBMIN, and NX.
228*>
229*> line 5: NBVAL, INTEGER array, dimension (NPARMS)
230*> The values for the blocksize NB.
231*>
232*> line 6: NBMIN, INTEGER array, dimension (NPARMS)
233*> The values for the minimum blocksize NBMIN.
234*>
235*> line 7: NXVAL, INTEGER array, dimension (NPARMS)
236*> The values for the crossover point NX.
237*>
238*> line 8: THRESH
239*> Threshold value for the test ratios. Information will be
240*> printed about each test for which the test ratio is greater
241*> than or equal to the threshold.
242*>
243*> line 9: TSTCHK, LOGICAL
244*> Flag indicating whether or not to test the LAPACK routines.
245*>
246*> line 10: TSTDRV, LOGICAL
247*> Flag indicating whether or not to test the driver routines.
248*>
249*> line 11: TSTERR, LOGICAL
250*> Flag indicating whether or not to test the error exits for
251*> the LAPACK routines and driver routines.
252*>
253*> line 12: NEWSD, INTEGER
254*> A code indicating how to set the random number seed.
255*> = 0: Set the seed to a default value before each run
256*> = 1: Initialize the seed to a default value only before the
257*> first run
258*> = 2: Like 1, but use the seed values on the next line
259*>
260*> If line 12 was 2:
261*>
262*> line 13: INTEGER array, dimension (4)
263*> Four integer values for the random number seed.
264*>
265*> lines 13-EOF: Lines specifying matrix types, as for NEP.
266*> The 3-character path names are 'SEP' or 'SST' for the
267*> symmetric eigenvalue routines and driver routines, and
268*> 'DSG' for the routines for the symmetric generalized
269*> eigenvalue problem.
270*>
271*>-----------------------------------------------------------------------
272*>
273*> SVD input file:
274*>
275*> line 2: NN, INTEGER
276*> Number of values of M and N.
277*>
278*> line 3: MVAL, INTEGER array, dimension (NN)
279*> The values for the matrix row dimension M.
280*>
281*> line 4: NVAL, INTEGER array, dimension (NN)
282*> The values for the matrix column dimension N.
283*>
284*> line 5: NPARMS, INTEGER
285*> Number of values of the parameter NB, NBMIN, NX, and NRHS.
286*>
287*> line 6: NBVAL, INTEGER array, dimension (NPARMS)
288*> The values for the blocksize NB.
289*>
290*> line 7: NBMIN, INTEGER array, dimension (NPARMS)
291*> The values for the minimum blocksize NBMIN.
292*>
293*> line 8: NXVAL, INTEGER array, dimension (NPARMS)
294*> The values for the crossover point NX.
295*>
296*> line 9: NSVAL, INTEGER array, dimension (NPARMS)
297*> The values for the number of right hand sides NRHS.
298*>
299*> line 10: THRESH
300*> Threshold value for the test ratios. Information will be
301*> printed about each test for which the test ratio is greater
302*> than or equal to the threshold.
303*>
304*> line 11: TSTCHK, LOGICAL
305*> Flag indicating whether or not to test the LAPACK routines.
306*>
307*> line 12: TSTDRV, LOGICAL
308*> Flag indicating whether or not to test the driver routines.
309*>
310*> line 13: TSTERR, LOGICAL
311*> Flag indicating whether or not to test the error exits for
312*> the LAPACK routines and driver routines.
313*>
314*> line 14: NEWSD, INTEGER
315*> A code indicating how to set the random number seed.
316*> = 0: Set the seed to a default value before each run
317*> = 1: Initialize the seed to a default value only before the
318*> first run
319*> = 2: Like 1, but use the seed values on the next line
320*>
321*> If line 14 was 2:
322*>
323*> line 15: INTEGER array, dimension (4)
324*> Four integer values for the random number seed.
325*>
326*> lines 15-EOF: Lines specifying matrix types, as for NEP.
327*> The 3-character path names are 'SVD' or 'SBD' for both the
328*> SVD routines and the SVD driver routines.
329*>
330*>-----------------------------------------------------------------------
331*>
332*> DEV and DES data files:
333*>
334*> line 1: 'DEV' or 'DES' in columns 1 to 3.
335*>
336*> line 2: NSIZES, INTEGER
337*> Number of sizes of matrices to use. Should be at least 0
338*> and at most 20. If NSIZES = 0, no testing is done
339*> (although the remaining 3 lines are still read).
340*>
341*> line 3: NN, INTEGER array, dimension(NSIZES)
342*> Dimensions of matrices to be tested.
343*>
344*> line 4: NB, NBMIN, NX, NS, NBCOL, INTEGERs
345*> These integer parameters determine how blocking is done
346*> (see ILAENV for details)
347*> NB : block size
348*> NBMIN : minimum block size
349*> NX : minimum dimension for blocking
350*> NS : number of shifts in xHSEQR
351*> NBCOL : minimum column dimension for blocking
352*>
353*> line 5: THRESH, REAL
354*> The test threshold against which computed residuals are
355*> compared. Should generally be in the range from 10. to 20.
356*> If it is 0., all test case data will be printed.
357*>
358*> line 6: TSTERR, LOGICAL
359*> Flag indicating whether or not to test the error exits.
360*>
361*> line 7: NEWSD, INTEGER
362*> A code indicating how to set the random number seed.
363*> = 0: Set the seed to a default value before each run
364*> = 1: Initialize the seed to a default value only before the
365*> first run
366*> = 2: Like 1, but use the seed values on the next line
367*>
368*> If line 7 was 2:
369*>
370*> line 8: INTEGER array, dimension (4)
371*> Four integer values for the random number seed.
372*>
373*> lines 9 and following: Lines specifying matrix types, as for NEP.
374*> The 3-character path name is 'DEV' to test SGEEV, or
375*> 'DES' to test SGEES.
376*>
377*>-----------------------------------------------------------------------
378*>
379*> The DVX data has two parts. The first part is identical to DEV,
380*> and the second part consists of test matrices with precomputed
381*> solutions.
382*>
383*> line 1: 'DVX' in columns 1-3.
384*>
385*> line 2: NSIZES, INTEGER
386*> If NSIZES = 0, no testing of randomly generated examples
387*> is done, but any precomputed examples are tested.
388*>
389*> line 3: NN, INTEGER array, dimension(NSIZES)
390*>
391*> line 4: NB, NBMIN, NX, NS, NBCOL, INTEGERs
392*>
393*> line 5: THRESH, REAL
394*>
395*> line 6: TSTERR, LOGICAL
396*>
397*> line 7: NEWSD, INTEGER
398*>
399*> If line 7 was 2:
400*>
401*> line 8: INTEGER array, dimension (4)
402*>
403*> lines 9 and following: The first line contains 'DVX' in columns 1-3
404*> followed by the number of matrix types, possibly with
405*> a second line to specify certain matrix types.
406*> If the number of matrix types = 0, no testing of randomly
407*> generated examples is done, but any precomputed examples
408*> are tested.
409*>
410*> remaining lines : Each matrix is stored on 1+2*N lines, where N is
411*> its dimension. The first line contains the dimension (a
412*> single integer). The next N lines contain the matrix, one
413*> row per line. The last N lines correspond to each
414*> eigenvalue. Each of these last N lines contains 4 real
415*> values: the real part of the eigenvalue, the imaginary
416*> part of the eigenvalue, the reciprocal condition number of
417*> the eigenvalues, and the reciprocal condition number of the
418*> eigenvector. The end of data is indicated by dimension N=0.
419*> Even if no data is to be tested, there must be at least one
420*> line containing N=0.
421*>
422*>-----------------------------------------------------------------------
423*>
424*> The DSX data is like DVX. The first part is identical to DEV, and the
425*> second part consists of test matrices with precomputed solutions.
426*>
427*> line 1: 'DSX' in columns 1-3.
428*>
429*> line 2: NSIZES, INTEGER
430*> If NSIZES = 0, no testing of randomly generated examples
431*> is done, but any precomputed examples are tested.
432*>
433*> line 3: NN, INTEGER array, dimension(NSIZES)
434*>
435*> line 4: NB, NBMIN, NX, NS, NBCOL, INTEGERs
436*>
437*> line 5: THRESH, REAL
438*>
439*> line 6: TSTERR, LOGICAL
440*>
441*> line 7: NEWSD, INTEGER
442*>
443*> If line 7 was 2:
444*>
445*> line 8: INTEGER array, dimension (4)
446*>
447*> lines 9 and following: The first line contains 'DSX' in columns 1-3
448*> followed by the number of matrix types, possibly with
449*> a second line to specify certain matrix types.
450*> If the number of matrix types = 0, no testing of randomly
451*> generated examples is done, but any precomputed examples
452*> are tested.
453*>
454*> remaining lines : Each matrix is stored on 3+N lines, where N is its
455*> dimension. The first line contains the dimension N and the
456*> dimension M of an invariant subspace. The second line
457*> contains M integers, identifying the eigenvalues in the
458*> invariant subspace (by their position in a list of
459*> eigenvalues ordered by increasing real part). The next N
460*> lines contain the matrix. The last line contains the
461*> reciprocal condition number for the average of the selected
462*> eigenvalues, and the reciprocal condition number for the
463*> corresponding right invariant subspace. The end of data is
464*> indicated by a line containing N=0 and M=0. Even if no data
465*> is to be tested, there must be at least one line containing
466*> N=0 and M=0.
467*>
468*>-----------------------------------------------------------------------
469*>
470*> DGG input file:
471*>
472*> line 2: NN, INTEGER
473*> Number of values of N.
474*>
475*> line 3: NVAL, INTEGER array, dimension (NN)
476*> The values for the matrix dimension N.
477*>
478*> line 4: NPARMS, INTEGER
479*> Number of values of the parameters NB, NBMIN, NS, MAXB, and
480*> NBCOL.
481*>
482*> line 5: NBVAL, INTEGER array, dimension (NPARMS)
483*> The values for the blocksize NB.
484*>
485*> line 6: NBMIN, INTEGER array, dimension (NPARMS)
486*> The values for NBMIN, the minimum row dimension for blocks.
487*>
488*> line 7: NSVAL, INTEGER array, dimension (NPARMS)
489*> The values for the number of shifts.
490*>
491*> line 8: MXBVAL, INTEGER array, dimension (NPARMS)
492*> The values for MAXB, used in determining minimum blocksize.
493*>
494*> line 9: IACC22, INTEGER array, dimension (NPARMS)
495*> select structured matrix multiply: 1 or 2)
496*>
497*> line 10: NBCOL, INTEGER array, dimension (NPARMS)
498*> The values for NBCOL, the minimum column dimension for
499*> blocks.
500*>
501*> line 11: THRESH
502*> Threshold value for the test ratios. Information will be
503*> printed about each test for which the test ratio is greater
504*> than or equal to the threshold.
505*>
506*> line 12: TSTCHK, LOGICAL
507*> Flag indicating whether or not to test the LAPACK routines.
508*>
509*> line 13: TSTDRV, LOGICAL
510*> Flag indicating whether or not to test the driver routines.
511*>
512*> line 14: TSTERR, LOGICAL
513*> Flag indicating whether or not to test the error exits for
514*> the LAPACK routines and driver routines.
515*>
516*> line 15: NEWSD, INTEGER
517*> A code indicating how to set the random number seed.
518*> = 0: Set the seed to a default value before each run
519*> = 1: Initialize the seed to a default value only before the
520*> first run
521*> = 2: Like 1, but use the seed values on the next line
522*>
523*> If line 15 was 2:
524*>
525*> line 16: INTEGER array, dimension (4)
526*> Four integer values for the random number seed.
527*>
528*> lines 17-EOF: Lines specifying matrix types, as for NEP.
529*> The 3-character path name is 'DGG' for the generalized
530*> eigenvalue problem routines and driver routines.
531*>
532*>-----------------------------------------------------------------------
533*>
534*> DGS and DGV input files:
535*>
536*> line 1: 'DGS' or 'DGV' in columns 1 to 3.
537*>
538*> line 2: NN, INTEGER
539*> Number of values of N.
540*>
541*> line 3: NVAL, INTEGER array, dimension(NN)
542*> Dimensions of matrices to be tested.
543*>
544*> line 4: NB, NBMIN, NX, NS, NBCOL, INTEGERs
545*> These integer parameters determine how blocking is done
546*> (see ILAENV for details)
547*> NB : block size
548*> NBMIN : minimum block size
549*> NX : minimum dimension for blocking
550*> NS : number of shifts in xHGEQR
551*> NBCOL : minimum column dimension for blocking
552*>
553*> line 5: THRESH, REAL
554*> The test threshold against which computed residuals are
555*> compared. Should generally be in the range from 10. to 20.
556*> If it is 0., all test case data will be printed.
557*>
558*> line 6: TSTERR, LOGICAL
559*> Flag indicating whether or not to test the error exits.
560*>
561*> line 7: NEWSD, INTEGER
562*> A code indicating how to set the random number seed.
563*> = 0: Set the seed to a default value before each run
564*> = 1: Initialize the seed to a default value only before the
565*> first run
566*> = 2: Like 1, but use the seed values on the next line
567*>
568*> If line 17 was 2:
569*>
570*> line 7: INTEGER array, dimension (4)
571*> Four integer values for the random number seed.
572*>
573*> lines 7-EOF: Lines specifying matrix types, as for NEP.
574*> The 3-character path name is 'DGS' for the generalized
575*> eigenvalue problem routines and driver routines.
576*>
577*>-----------------------------------------------------------------------
578*>
579*> DXV input files:
580*>
581*> line 1: 'DXV' in columns 1 to 3.
582*>
583*> line 2: N, INTEGER
584*> Value of N.
585*>
586*> line 3: NB, NBMIN, NX, NS, NBCOL, INTEGERs
587*> These integer parameters determine how blocking is done
588*> (see ILAENV for details)
589*> NB : block size
590*> NBMIN : minimum block size
591*> NX : minimum dimension for blocking
592*> NS : number of shifts in xHGEQR
593*> NBCOL : minimum column dimension for blocking
594*>
595*> line 4: THRESH, REAL
596*> The test threshold against which computed residuals are
597*> compared. Should generally be in the range from 10. to 20.
598*> Information will be printed about each test for which the
599*> test ratio is greater than or equal to the threshold.
600*>
601*> line 5: TSTERR, LOGICAL
602*> Flag indicating whether or not to test the error exits for
603*> the LAPACK routines and driver routines.
604*>
605*> line 6: NEWSD, INTEGER
606*> A code indicating how to set the random number seed.
607*> = 0: Set the seed to a default value before each run
608*> = 1: Initialize the seed to a default value only before the
609*> first run
610*> = 2: Like 1, but use the seed values on the next line
611*>
612*> If line 6 was 2:
613*>
614*> line 7: INTEGER array, dimension (4)
615*> Four integer values for the random number seed.
616*>
617*> If line 2 was 0:
618*>
619*> line 7-EOF: Precomputed examples are tested.
620*>
621*> remaining lines : Each example is stored on 3+2*N lines, where N is
622*> its dimension. The first line contains the dimension (a
623*> single integer). The next N lines contain the matrix A, one
624*> row per line. The next N lines contain the matrix B. The
625*> next line contains the reciprocals of the eigenvalue
626*> condition numbers. The last line contains the reciprocals of
627*> the eigenvector condition numbers. The end of data is
628*> indicated by dimension N=0. Even if no data is to be tested,
629*> there must be at least one line containing N=0.
630*>
631*>-----------------------------------------------------------------------
632*>
633*> DGX input files:
634*>
635*> line 1: 'DGX' in columns 1 to 3.
636*>
637*> line 2: N, INTEGER
638*> Value of N.
639*>
640*> line 3: NB, NBMIN, NX, NS, NBCOL, INTEGERs
641*> These integer parameters determine how blocking is done
642*> (see ILAENV for details)
643*> NB : block size
644*> NBMIN : minimum block size
645*> NX : minimum dimension for blocking
646*> NS : number of shifts in xHGEQR
647*> NBCOL : minimum column dimension for blocking
648*>
649*> line 4: THRESH, REAL
650*> The test threshold against which computed residuals are
651*> compared. Should generally be in the range from 10. to 20.
652*> Information will be printed about each test for which the
653*> test ratio is greater than or equal to the threshold.
654*>
655*> line 5: TSTERR, LOGICAL
656*> Flag indicating whether or not to test the error exits for
657*> the LAPACK routines and driver routines.
658*>
659*> line 6: NEWSD, INTEGER
660*> A code indicating how to set the random number seed.
661*> = 0: Set the seed to a default value before each run
662*> = 1: Initialize the seed to a default value only before the
663*> first run
664*> = 2: Like 1, but use the seed values on the next line
665*>
666*> If line 6 was 2:
667*>
668*> line 7: INTEGER array, dimension (4)
669*> Four integer values for the random number seed.
670*>
671*> If line 2 was 0:
672*>
673*> line 7-EOF: Precomputed examples are tested.
674*>
675*> remaining lines : Each example is stored on 3+2*N lines, where N is
676*> its dimension. The first line contains the dimension (a
677*> single integer). The next line contains an integer k such
678*> that only the last k eigenvalues will be selected and appear
679*> in the leading diagonal blocks of $A$ and $B$. The next N
680*> lines contain the matrix A, one row per line. The next N
681*> lines contain the matrix B. The last line contains the
682*> reciprocal of the eigenvalue cluster condition number and the
683*> reciprocal of the deflating subspace (associated with the
684*> selected eigencluster) condition number. The end of data is
685*> indicated by dimension N=0. Even if no data is to be tested,
686*> there must be at least one line containing N=0.
687*>
688*>-----------------------------------------------------------------------
689*>
690*> DSB input file:
691*>
692*> line 2: NN, INTEGER
693*> Number of values of N.
694*>
695*> line 3: NVAL, INTEGER array, dimension (NN)
696*> The values for the matrix dimension N.
697*>
698*> line 4: NK, INTEGER
699*> Number of values of K.
700*>
701*> line 5: KVAL, INTEGER array, dimension (NK)
702*> The values for the matrix dimension K.
703*>
704*> line 6: THRESH
705*> Threshold value for the test ratios. Information will be
706*> printed about each test for which the test ratio is greater
707*> than or equal to the threshold.
708*>
709*> line 7: NEWSD, INTEGER
710*> A code indicating how to set the random number seed.
711*> = 0: Set the seed to a default value before each run
712*> = 1: Initialize the seed to a default value only before the
713*> first run
714*> = 2: Like 1, but use the seed values on the next line
715*>
716*> If line 7 was 2:
717*>
718*> line 8: INTEGER array, dimension (4)
719*> Four integer values for the random number seed.
720*>
721*> lines 8-EOF: Lines specifying matrix types, as for NEP.
722*> The 3-character path name is 'DSB'.
723*>
724*>-----------------------------------------------------------------------
725*>
726*> DBB input file:
727*>
728*> line 2: NN, INTEGER
729*> Number of values of M and N.
730*>
731*> line 3: MVAL, INTEGER array, dimension (NN)
732*> The values for the matrix row dimension M.
733*>
734*> line 4: NVAL, INTEGER array, dimension (NN)
735*> The values for the matrix column dimension N.
736*>
737*> line 4: NK, INTEGER
738*> Number of values of K.
739*>
740*> line 5: KVAL, INTEGER array, dimension (NK)
741*> The values for the matrix bandwidth K.
742*>
743*> line 6: NPARMS, INTEGER
744*> Number of values of the parameter NRHS
745*>
746*> line 7: NSVAL, INTEGER array, dimension (NPARMS)
747*> The values for the number of right hand sides NRHS.
748*>
749*> line 8: THRESH
750*> Threshold value for the test ratios. Information will be
751*> printed about each test for which the test ratio is greater
752*> than or equal to the threshold.
753*>
754*> line 9: NEWSD, INTEGER
755*> A code indicating how to set the random number seed.
756*> = 0: Set the seed to a default value before each run
757*> = 1: Initialize the seed to a default value only before the
758*> first run
759*> = 2: Like 1, but use the seed values on the next line
760*>
761*> If line 9 was 2:
762*>
763*> line 10: INTEGER array, dimension (4)
764*> Four integer values for the random number seed.
765*>
766*> lines 10-EOF: Lines specifying matrix types, as for SVD.
767*> The 3-character path name is 'DBB'.
768*>
769*>-----------------------------------------------------------------------
770*>
771*> DEC input file:
772*>
773*> line 2: THRESH, REAL
774*> Threshold value for the test ratios. Information will be
775*> printed about each test for which the test ratio is greater
776*> than or equal to the threshold.
777*>
778*> lines 3-EOF:
779*>
780*> Input for testing the eigencondition routines consists of a set of
781*> specially constructed test cases and their solutions. The data
782*> format is not intended to be modified by the user.
783*>
784*>-----------------------------------------------------------------------
785*>
786*> DBL and DBK input files:
787*>
788*> line 1: 'DBL' in columns 1-3 to test SGEBAL, or 'DBK' in
789*> columns 1-3 to test SGEBAK.
790*>
791*> The remaining lines consist of specially constructed test cases.
792*>
793*>-----------------------------------------------------------------------
794*>
795*> DGL and DGK input files:
796*>
797*> line 1: 'DGL' in columns 1-3 to test DGGBAL, or 'DGK' in
798*> columns 1-3 to test DGGBAK.
799*>
800*> The remaining lines consist of specially constructed test cases.
801*>
802*>-----------------------------------------------------------------------
803*>
804*> GLM data file:
805*>
806*> line 1: 'GLM' in columns 1 to 3.
807*>
808*> line 2: NN, INTEGER
809*> Number of values of M, P, and N.
810*>
811*> line 3: MVAL, INTEGER array, dimension(NN)
812*> Values of M (row dimension).
813*>
814*> line 4: PVAL, INTEGER array, dimension(NN)
815*> Values of P (row dimension).
816*>
817*> line 5: NVAL, INTEGER array, dimension(NN)
818*> Values of N (column dimension), note M <= N <= M+P.
819*>
820*> line 6: THRESH, REAL
821*> Threshold value for the test ratios. Information will be
822*> printed about each test for which the test ratio is greater
823*> than or equal to the threshold.
824*>
825*> line 7: TSTERR, LOGICAL
826*> Flag indicating whether or not to test the error exits for
827*> the LAPACK routines and driver routines.
828*>
829*> line 8: NEWSD, INTEGER
830*> A code indicating how to set the random number seed.
831*> = 0: Set the seed to a default value before each run
832*> = 1: Initialize the seed to a default value only before the
833*> first run
834*> = 2: Like 1, but use the seed values on the next line
835*>
836*> If line 8 was 2:
837*>
838*> line 9: INTEGER array, dimension (4)
839*> Four integer values for the random number seed.
840*>
841*> lines 9-EOF: Lines specifying matrix types, as for NEP.
842*> The 3-character path name is 'GLM' for the generalized
843*> linear regression model routines.
844*>
845*>-----------------------------------------------------------------------
846*>
847*> GQR data file:
848*>
849*> line 1: 'GQR' in columns 1 to 3.
850*>
851*> line 2: NN, INTEGER
852*> Number of values of M, P, and N.
853*>
854*> line 3: MVAL, INTEGER array, dimension(NN)
855*> Values of M.
856*>
857*> line 4: PVAL, INTEGER array, dimension(NN)
858*> Values of P.
859*>
860*> line 5: NVAL, INTEGER array, dimension(NN)
861*> Values of N.
862*>
863*> line 6: THRESH, REAL
864*> Threshold value for the test ratios. Information will be
865*> printed about each test for which the test ratio is greater
866*> than or equal to the threshold.
867*>
868*> line 7: TSTERR, LOGICAL
869*> Flag indicating whether or not to test the error exits for
870*> the LAPACK routines and driver routines.
871*>
872*> line 8: NEWSD, INTEGER
873*> A code indicating how to set the random number seed.
874*> = 0: Set the seed to a default value before each run
875*> = 1: Initialize the seed to a default value only before the
876*> first run
877*> = 2: Like 1, but use the seed values on the next line
878*>
879*> If line 8 was 2:
880*>
881*> line 9: INTEGER array, dimension (4)
882*> Four integer values for the random number seed.
883*>
884*> lines 9-EOF: Lines specifying matrix types, as for NEP.
885*> The 3-character path name is 'GQR' for the generalized
886*> QR and RQ routines.
887*>
888*>-----------------------------------------------------------------------
889*>
890*> GSV data file:
891*>
892*> line 1: 'GSV' in columns 1 to 3.
893*>
894*> line 2: NN, INTEGER
895*> Number of values of M, P, and N.
896*>
897*> line 3: MVAL, INTEGER array, dimension(NN)
898*> Values of M (row dimension).
899*>
900*> line 4: PVAL, INTEGER array, dimension(NN)
901*> Values of P (row dimension).
902*>
903*> line 5: NVAL, INTEGER array, dimension(NN)
904*> Values of N (column dimension).
905*>
906*> line 6: THRESH, REAL
907*> Threshold value for the test ratios. Information will be
908*> printed about each test for which the test ratio is greater
909*> than or equal to the threshold.
910*>
911*> line 7: TSTERR, LOGICAL
912*> Flag indicating whether or not to test the error exits for
913*> the LAPACK routines and driver routines.
914*>
915*> line 8: NEWSD, INTEGER
916*> A code indicating how to set the random number seed.
917*> = 0: Set the seed to a default value before each run
918*> = 1: Initialize the seed to a default value only before the
919*> first run
920*> = 2: Like 1, but use the seed values on the next line
921*>
922*> If line 8 was 2:
923*>
924*> line 9: INTEGER array, dimension (4)
925*> Four integer values for the random number seed.
926*>
927*> lines 9-EOF: Lines specifying matrix types, as for NEP.
928*> The 3-character path name is 'GSV' for the generalized
929*> SVD routines.
930*>
931*>-----------------------------------------------------------------------
932*>
933*> CSD data file:
934*>
935*> line 1: 'CSD' in columns 1 to 3.
936*>
937*> line 2: NM, INTEGER
938*> Number of values of M, P, and N.
939*>
940*> line 3: MVAL, INTEGER array, dimension(NM)
941*> Values of M (row and column dimension of orthogonal matrix).
942*>
943*> line 4: PVAL, INTEGER array, dimension(NM)
944*> Values of P (row dimension of top-left block).
945*>
946*> line 5: NVAL, INTEGER array, dimension(NM)
947*> Values of N (column dimension of top-left block).
948*>
949*> line 6: THRESH, REAL
950*> Threshold value for the test ratios. Information will be
951*> printed about each test for which the test ratio is greater
952*> than or equal to the threshold.
953*>
954*> line 7: TSTERR, LOGICAL
955*> Flag indicating whether or not to test the error exits for
956*> the LAPACK routines and driver routines.
957*>
958*> line 8: NEWSD, INTEGER
959*> A code indicating how to set the random number seed.
960*> = 0: Set the seed to a default value before each run
961*> = 1: Initialize the seed to a default value only before the
962*> first run
963*> = 2: Like 1, but use the seed values on the next line
964*>
965*> If line 8 was 2:
966*>
967*> line 9: INTEGER array, dimension (4)
968*> Four integer values for the random number seed.
969*>
970*> lines 9-EOF: Lines specifying matrix types, as for NEP.
971*> The 3-character path name is 'CSD' for the CSD routine.
972*>
973*>-----------------------------------------------------------------------
974*>
975*> LSE data file:
976*>
977*> line 1: 'LSE' in columns 1 to 3.
978*>
979*> line 2: NN, INTEGER
980*> Number of values of M, P, and N.
981*>
982*> line 3: MVAL, INTEGER array, dimension(NN)
983*> Values of M.
984*>
985*> line 4: PVAL, INTEGER array, dimension(NN)
986*> Values of P.
987*>
988*> line 5: NVAL, INTEGER array, dimension(NN)
989*> Values of N, note P <= N <= P+M.
990*>
991*> line 6: THRESH, REAL
992*> Threshold value for the test ratios. Information will be
993*> printed about each test for which the test ratio is greater
994*> than or equal to the threshold.
995*>
996*> line 7: TSTERR, LOGICAL
997*> Flag indicating whether or not to test the error exits for
998*> the LAPACK routines and driver routines.
999*>
1000*> line 8: NEWSD, INTEGER
1001*> A code indicating how to set the random number seed.
1002*> = 0: Set the seed to a default value before each run
1003*> = 1: Initialize the seed to a default value only before the
1004*> first run
1005*> = 2: Like 1, but use the seed values on the next line
1006*>
1007*> If line 8 was 2:
1008*>
1009*> line 9: INTEGER array, dimension (4)
1010*> Four integer values for the random number seed.
1011*>
1012*> lines 9-EOF: Lines specifying matrix types, as for NEP.
1013*> The 3-character path name is 'GSV' for the generalized
1014*> SVD routines.
1015*>
1016*>-----------------------------------------------------------------------
1017*>
1018*> NMAX is currently set to 132 and must be at least 12 for some of the
1019*> precomputed examples, and LWORK = NMAX*(5*NMAX+5)+1 in the parameter
1020*> statements below. For SVD, we assume NRHS may be as big as N. The
1021*> parameter NEED is set to 14 to allow for 14 N-by-N matrices for DGG.
1022*> \endverbatim
1023*
1024* Arguments:
1025* ==========
1026*
1027*
1028* Authors:
1029* ========
1030*
1031*> \author Univ. of Tennessee
1032*> \author Univ. of California Berkeley
1033*> \author Univ. of Colorado Denver
1034*> \author NAG Ltd.
1035*
1036*> \ingroup double_eig
1037*
1038* =====================================================================
1039 PROGRAM dchkee
1040*
1041#if defined(_OPENMP)
1042 use omp_lib
1043#endif
1044*
1045* -- LAPACK test routine --
1046* -- LAPACK is a software package provided by Univ. of Tennessee, --
1047* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
1048*
1049* =====================================================================
1050*
1051* .. Parameters ..
1052 INTEGER nmax
1053 parameter( nmax = 132 )
1054 INTEGER ncmax
1055 parameter( ncmax = 20 )
1056 INTEGER need
1057 parameter( need = 14 )
1058 INTEGER lwork
1059 parameter( lwork = nmax*( 5*nmax+5 )+1 )
1060 INTEGER liwork
1061 parameter( liwork = nmax*( 5*nmax+20 ) )
1062 INTEGER maxin
1063 parameter( maxin = 20 )
1064 INTEGER maxt
1065 parameter( maxt = 30 )
1066 INTEGER nin, nout
1067 parameter( nin = 5, nout = 6 )
1068* ..
1069* .. Local Scalars ..
1070 LOGICAL csd, dbb, dgg, dsb, fatal, glm, gqr, gsv, lse,
1071 $ nep, dbk, dbl, sep, des, dev, dgk, dgl, dgs,
1072 $ dgv, dgx, dsx, svd, dvx, dxv, tstchk, tstdif,
1073 $ tstdrv, tsterr
1074 CHARACTER c1
1075 CHARACTER*3 c3, path
1076 CHARACTER*32 vname
1077 CHARACTER*10 intstr
1078 CHARACTER*80 line
1079 INTEGER i, i1, ic, info, itmp, k, lenp, maxtyp, newsd,
1080 $ nk, nn, nparms, nrhs, ntypes,
1081 $ vers_major, vers_minor, vers_patch
1082 INTEGER*4 n_threads, one_thread
1083 DOUBLE PRECISION eps, s1, s2, thresh, thrshn
1084* ..
1085* .. Local Arrays ..
1086 LOGICAL dotype( maxt ), logwrk( nmax )
1087 INTEGER ioldsd( 4 ), iseed( 4 ), iwork( liwork ),
1088 $ kval( maxin ), mval( maxin ), mxbval( maxin ),
1089 $ nbcol( maxin ), nbmin( maxin ), nbval( maxin ),
1090 $ nsval( maxin ), nval( maxin ), nxval( maxin ),
1091 $ pval( maxin )
1092 INTEGER inmin( maxin ), inwin( maxin ), inibl( maxin ),
1093 $ ishfts( maxin ), iacc22( maxin )
1094 DOUBLE PRECISION d( nmax, 12 ), result( 500 ), taua( nmax ),
1095 $ taub( nmax ), x( 5*nmax )
1096* ..
1097* .. Allocatable Arrays ..
1098 INTEGER allocatestatus
1099 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: work
1100 DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: a, b, c
1101* ..
1102* .. External Functions ..
1103 LOGICAL lsamen
1104 DOUBLE PRECISION dlamch, dsecnd
1105 EXTERNAL lsamen, dlamch, dsecnd
1106* ..
1107* .. External Subroutines ..
1108 EXTERNAL alareq, dchkbb, dchkbd, dchkbk, dchkbl, dchkec,
1114 $ ddrges3, ddrgev3,
1116* ..
1117* .. Intrinsic Functions ..
1118 INTRINSIC len, min
1119* ..
1120* .. Scalars in Common ..
1121 LOGICAL lerr, ok
1122 CHARACTER*32 srnamt
1123 INTEGER infot, maxb, nproc, nshift, nunit, seldim,
1124 $ selopt
1125* ..
1126* .. Arrays in Common ..
1127 LOGICAL selval( 20 )
1128 INTEGER iparms( 100 )
1129 DOUBLE PRECISION selwi( 20 ), selwr( 20 )
1130* ..
1131* .. Common blocks ..
1132 COMMON / cenvir / nproc, nshift, maxb
1133 COMMON / infoc / infot, nunit, ok, lerr
1134 COMMON / srnamc / srnamt
1135 COMMON / sslct / selopt, seldim, selval, selwr, selwi
1136 COMMON / claenv / iparms
1137* ..
1138* .. Data statements ..
1139 DATA intstr / '0123456789' /
1140 DATA ioldsd / 0, 0, 0, 1 /
1141* ..
1142* .. Allocate memory dynamically ..
1143*
1144 ALLOCATE ( a(nmax*nmax,need), stat = allocatestatus )
1145 IF (allocatestatus /= 0) stop "*** Not enough memory ***"
1146 ALLOCATE ( b(nmax*nmax,5), stat = allocatestatus )
1147 IF (allocatestatus /= 0) stop "*** Not enough memory ***"
1148 ALLOCATE ( c(ncmax*ncmax,ncmax*ncmax), stat = allocatestatus )
1149 IF (allocatestatus /= 0) stop "*** Not enough memory ***"
1150 ALLOCATE ( work(lwork), stat = allocatestatus )
1151 IF (allocatestatus /= 0) stop "*** Not enough memory ***"
1152* ..
1153* .. Executable Statements ..
1154*
1155 a = 0.0
1156 b = 0.0
1157 c = 0.0
1158 d = 0.0
1159 s1 = dsecnd( )
1160 fatal = .false.
1161 nunit = nout
1162*
1163* Return to here to read multiple sets of data
1164*
1165 10 CONTINUE
1166*
1167* Read the first line and set the 3-character test path
1168*
1169 READ( nin, fmt = '(A80)', END = 380 )line
1170 path = line( 1: 3 )
1171 nep = lsamen( 3, path, 'NEP' ) .OR. lsamen( 3, path, 'DHS' )
1172 sep = lsamen( 3, path, 'SEP' ) .OR. lsamen( 3, path, 'DST' ) .OR.
1173 $ lsamen( 3, path, 'DSG' ) .OR. lsamen( 3, path, 'SE2' )
1174 svd = lsamen( 3, path, 'SVD' ) .OR. lsamen( 3, path, 'DBD' )
1175 dev = lsamen( 3, path, 'DEV' )
1176 des = lsamen( 3, path, 'DES' )
1177 dvx = lsamen( 3, path, 'DVX' )
1178 dsx = lsamen( 3, path, 'DSX' )
1179 dgg = lsamen( 3, path, 'DGG' )
1180 dgs = lsamen( 3, path, 'DGS' )
1181 dgx = lsamen( 3, path, 'DGX' )
1182 dgv = lsamen( 3, path, 'DGV' )
1183 dxv = lsamen( 3, path, 'DXV' )
1184 dsb = lsamen( 3, path, 'DSB' )
1185 dbb = lsamen( 3, path, 'DBB' )
1186 glm = lsamen( 3, path, 'GLM' )
1187 gqr = lsamen( 3, path, 'GQR' ) .OR. lsamen( 3, path, 'GRQ' )
1188 gsv = lsamen( 3, path, 'GSV' )
1189 csd = lsamen( 3, path, 'CSD' )
1190 lse = lsamen( 3, path, 'LSE' )
1191 dbl = lsamen( 3, path, 'DBL' )
1192 dbk = lsamen( 3, path, 'DBK' )
1193 dgl = lsamen( 3, path, 'DGL' )
1194 dgk = lsamen( 3, path, 'DGK' )
1195*
1196* Report values of parameters.
1197*
1198 IF( path.EQ.' ' ) THEN
1199 GO TO 10
1200 ELSE IF( nep ) THEN
1201 WRITE( nout, fmt = 9987 )
1202 ELSE IF( sep ) THEN
1203 WRITE( nout, fmt = 9986 )
1204 ELSE IF( svd ) THEN
1205 WRITE( nout, fmt = 9985 )
1206 ELSE IF( dev ) THEN
1207 WRITE( nout, fmt = 9979 )
1208 ELSE IF( des ) THEN
1209 WRITE( nout, fmt = 9978 )
1210 ELSE IF( dvx ) THEN
1211 WRITE( nout, fmt = 9977 )
1212 ELSE IF( dsx ) THEN
1213 WRITE( nout, fmt = 9976 )
1214 ELSE IF( dgg ) THEN
1215 WRITE( nout, fmt = 9975 )
1216 ELSE IF( dgs ) THEN
1217 WRITE( nout, fmt = 9964 )
1218 ELSE IF( dgx ) THEN
1219 WRITE( nout, fmt = 9965 )
1220 ELSE IF( dgv ) THEN
1221 WRITE( nout, fmt = 9963 )
1222 ELSE IF( dxv ) THEN
1223 WRITE( nout, fmt = 9962 )
1224 ELSE IF( dsb ) THEN
1225 WRITE( nout, fmt = 9974 )
1226 ELSE IF( dbb ) THEN
1227 WRITE( nout, fmt = 9967 )
1228 ELSE IF( glm ) THEN
1229 WRITE( nout, fmt = 9971 )
1230 ELSE IF( gqr ) THEN
1231 WRITE( nout, fmt = 9970 )
1232 ELSE IF( gsv ) THEN
1233 WRITE( nout, fmt = 9969 )
1234 ELSE IF( csd ) THEN
1235 WRITE( nout, fmt = 9960 )
1236 ELSE IF( lse ) THEN
1237 WRITE( nout, fmt = 9968 )
1238 ELSE IF( dbl ) THEN
1239*
1240* DGEBAL: Balancing
1241*
1242 CALL dchkbl( nin, nout )
1243 GO TO 10
1244 ELSE IF( dbk ) THEN
1245*
1246* DGEBAK: Back transformation
1247*
1248 CALL dchkbk( nin, nout )
1249 GO TO 10
1250 ELSE IF( dgl ) THEN
1251*
1252* DGGBAL: Balancing
1253*
1254 CALL dchkgl( nin, nout )
1255 GO TO 10
1256 ELSE IF( dgk ) THEN
1257*
1258* DGGBAK: Back transformation
1259*
1260 CALL dchkgk( nin, nout )
1261 GO TO 10
1262 ELSE IF( lsamen( 3, path, 'DEC' ) ) THEN
1263*
1264* DEC: Eigencondition estimation
1265*
1266 READ( nin, fmt = * )thresh
1267 CALL xlaenv( 1, 1 )
1268 CALL xlaenv( 12, 11 )
1269 CALL xlaenv( 13, 2 )
1270 CALL xlaenv( 14, 0 )
1271 CALL xlaenv( 15, 2 )
1272 CALL xlaenv( 16, 2 )
1273 tsterr = .true.
1274 CALL dchkec( thresh, tsterr, nin, nout )
1275 GO TO 10
1276 ELSE
1277 WRITE( nout, fmt = 9992 )path
1278 GO TO 10
1279 END IF
1280 CALL ilaver( vers_major, vers_minor, vers_patch )
1281 WRITE( nout, fmt = 9972 ) vers_major, vers_minor, vers_patch
1282 WRITE( nout, fmt = 9984 )
1283*
1284* Read the number of values of M, P, and N.
1285*
1286 READ( nin, fmt = * )nn
1287 IF( nn.LT.0 ) THEN
1288 WRITE( nout, fmt = 9989 )' NN ', nn, 1
1289 nn = 0
1290 fatal = .true.
1291 ELSE IF( nn.GT.maxin ) THEN
1292 WRITE( nout, fmt = 9988 )' NN ', nn, maxin
1293 nn = 0
1294 fatal = .true.
1295 END IF
1296*
1297* Read the values of M
1298*
1299 IF( .NOT.( dgx .OR. dxv ) ) THEN
1300 READ( nin, fmt = * )( mval( i ), i = 1, nn )
1301 IF( svd ) THEN
1302 vname = ' M '
1303 ELSE
1304 vname = ' N '
1305 END IF
1306 DO 20 i = 1, nn
1307 IF( mval( i ).LT.0 ) THEN
1308 WRITE( nout, fmt = 9989 )vname, mval( i ), 0
1309 fatal = .true.
1310 ELSE IF( mval( i ).GT.nmax ) THEN
1311 WRITE( nout, fmt = 9988 )vname, mval( i ), nmax
1312 fatal = .true.
1313 END IF
1314 20 CONTINUE
1315 WRITE( nout, fmt = 9983 )'M: ', ( mval( i ), i = 1, nn )
1316 END IF
1317*
1318* Read the values of P
1319*
1320 IF( glm .OR. gqr .OR. gsv .OR. csd .OR. lse ) THEN
1321 READ( nin, fmt = * )( pval( i ), i = 1, nn )
1322 DO 30 i = 1, nn
1323 IF( pval( i ).LT.0 ) THEN
1324 WRITE( nout, fmt = 9989 )' P ', pval( i ), 0
1325 fatal = .true.
1326 ELSE IF( pval( i ).GT.nmax ) THEN
1327 WRITE( nout, fmt = 9988 )' P ', pval( i ), nmax
1328 fatal = .true.
1329 END IF
1330 30 CONTINUE
1331 WRITE( nout, fmt = 9983 )'P: ', ( pval( i ), i = 1, nn )
1332 END IF
1333*
1334* Read the values of N
1335*
1336 IF( svd .OR. dbb .OR. glm .OR. gqr .OR. gsv .OR. csd .OR.
1337 $ lse ) THEN
1338 READ( nin, fmt = * )( nval( i ), i = 1, nn )
1339 DO 40 i = 1, nn
1340 IF( nval( i ).LT.0 ) THEN
1341 WRITE( nout, fmt = 9989 )' N ', nval( i ), 0
1342 fatal = .true.
1343 ELSE IF( nval( i ).GT.nmax ) THEN
1344 WRITE( nout, fmt = 9988 )' N ', nval( i ), nmax
1345 fatal = .true.
1346 END IF
1347 40 CONTINUE
1348 ELSE
1349 DO 50 i = 1, nn
1350 nval( i ) = mval( i )
1351 50 CONTINUE
1352 END IF
1353 IF( .NOT.( dgx .OR. dxv ) ) THEN
1354 WRITE( nout, fmt = 9983 )'N: ', ( nval( i ), i = 1, nn )
1355 ELSE
1356 WRITE( nout, fmt = 9983 )'N: ', nn
1357 END IF
1358*
1359* Read the number of values of K, followed by the values of K
1360*
1361 IF( dsb .OR. dbb ) THEN
1362 READ( nin, fmt = * )nk
1363 READ( nin, fmt = * )( kval( i ), i = 1, nk )
1364 DO 60 i = 1, nk
1365 IF( kval( i ).LT.0 ) THEN
1366 WRITE( nout, fmt = 9989 )' K ', kval( i ), 0
1367 fatal = .true.
1368 ELSE IF( kval( i ).GT.nmax ) THEN
1369 WRITE( nout, fmt = 9988 )' K ', kval( i ), nmax
1370 fatal = .true.
1371 END IF
1372 60 CONTINUE
1373 WRITE( nout, fmt = 9983 )'K: ', ( kval( i ), i = 1, nk )
1374 END IF
1375*
1376 IF( dev .OR. des .OR. dvx .OR. dsx ) THEN
1377*
1378* For the nonsymmetric QR driver routines, only one set of
1379* parameters is allowed.
1380*
1381 READ( nin, fmt = * )nbval( 1 ), nbmin( 1 ), nxval( 1 ),
1382 $ inmin( 1 ), inwin( 1 ), inibl(1), ishfts(1), iacc22(1)
1383 IF( nbval( 1 ).LT.1 ) THEN
1384 WRITE( nout, fmt = 9989 )' NB ', nbval( 1 ), 1
1385 fatal = .true.
1386 ELSE IF( nbmin( 1 ).LT.1 ) THEN
1387 WRITE( nout, fmt = 9989 )'NBMIN ', nbmin( 1 ), 1
1388 fatal = .true.
1389 ELSE IF( nxval( 1 ).LT.1 ) THEN
1390 WRITE( nout, fmt = 9989 )' NX ', nxval( 1 ), 1
1391 fatal = .true.
1392 ELSE IF( inmin( 1 ).LT.1 ) THEN
1393 WRITE( nout, fmt = 9989 )' INMIN ', inmin( 1 ), 1
1394 fatal = .true.
1395 ELSE IF( inwin( 1 ).LT.1 ) THEN
1396 WRITE( nout, fmt = 9989 )' INWIN ', inwin( 1 ), 1
1397 fatal = .true.
1398 ELSE IF( inibl( 1 ).LT.1 ) THEN
1399 WRITE( nout, fmt = 9989 )' INIBL ', inibl( 1 ), 1
1400 fatal = .true.
1401 ELSE IF( ishfts( 1 ).LT.1 ) THEN
1402 WRITE( nout, fmt = 9989 )' ISHFTS ', ishfts( 1 ), 1
1403 fatal = .true.
1404 ELSE IF( iacc22( 1 ).LT.0 ) THEN
1405 WRITE( nout, fmt = 9989 )' IACC22 ', iacc22( 1 ), 0
1406 fatal = .true.
1407 END IF
1408 CALL xlaenv( 1, nbval( 1 ) )
1409 CALL xlaenv( 2, nbmin( 1 ) )
1410 CALL xlaenv( 3, nxval( 1 ) )
1411 CALL xlaenv(12, max( 11, inmin( 1 ) ) )
1412 CALL xlaenv(13, inwin( 1 ) )
1413 CALL xlaenv(14, inibl( 1 ) )
1414 CALL xlaenv(15, ishfts( 1 ) )
1415 CALL xlaenv(16, iacc22( 1 ) )
1416 WRITE( nout, fmt = 9983 )'NB: ', nbval( 1 )
1417 WRITE( nout, fmt = 9983 )'NBMIN:', nbmin( 1 )
1418 WRITE( nout, fmt = 9983 )'NX: ', nxval( 1 )
1419 WRITE( nout, fmt = 9983 )'INMIN: ', inmin( 1 )
1420 WRITE( nout, fmt = 9983 )'INWIN: ', inwin( 1 )
1421 WRITE( nout, fmt = 9983 )'INIBL: ', inibl( 1 )
1422 WRITE( nout, fmt = 9983 )'ISHFTS: ', ishfts( 1 )
1423 WRITE( nout, fmt = 9983 )'IACC22: ', iacc22( 1 )
1424*
1425 ELSEIF( dgs .OR. dgx .OR. dgv .OR. dxv ) THEN
1426*
1427* For the nonsymmetric generalized driver routines, only one set
1428* of parameters is allowed.
1429*
1430 READ( nin, fmt = * )nbval( 1 ), nbmin( 1 ), nxval( 1 ),
1431 $ nsval( 1 ), mxbval( 1 )
1432 IF( nbval( 1 ).LT.1 ) THEN
1433 WRITE( nout, fmt = 9989 )' NB ', nbval( 1 ), 1
1434 fatal = .true.
1435 ELSE IF( nbmin( 1 ).LT.1 ) THEN
1436 WRITE( nout, fmt = 9989 )'NBMIN ', nbmin( 1 ), 1
1437 fatal = .true.
1438 ELSE IF( nxval( 1 ).LT.1 ) THEN
1439 WRITE( nout, fmt = 9989 )' NX ', nxval( 1 ), 1
1440 fatal = .true.
1441 ELSE IF( nsval( 1 ).LT.2 ) THEN
1442 WRITE( nout, fmt = 9989 )' NS ', nsval( 1 ), 2
1443 fatal = .true.
1444 ELSE IF( mxbval( 1 ).LT.1 ) THEN
1445 WRITE( nout, fmt = 9989 )' MAXB ', mxbval( 1 ), 1
1446 fatal = .true.
1447 END IF
1448 CALL xlaenv( 1, nbval( 1 ) )
1449 CALL xlaenv( 2, nbmin( 1 ) )
1450 CALL xlaenv( 3, nxval( 1 ) )
1451 CALL xlaenv( 4, nsval( 1 ) )
1452 CALL xlaenv( 8, mxbval( 1 ) )
1453 WRITE( nout, fmt = 9983 )'NB: ', nbval( 1 )
1454 WRITE( nout, fmt = 9983 )'NBMIN:', nbmin( 1 )
1455 WRITE( nout, fmt = 9983 )'NX: ', nxval( 1 )
1456 WRITE( nout, fmt = 9983 )'NS: ', nsval( 1 )
1457 WRITE( nout, fmt = 9983 )'MAXB: ', mxbval( 1 )
1458*
1459 ELSE IF( .NOT.dsb .AND. .NOT.glm .AND. .NOT.gqr .AND. .NOT.
1460 $ gsv .AND. .NOT.csd .AND. .NOT.lse ) THEN
1461*
1462* For the other paths, the number of parameters can be varied
1463* from the input file. Read the number of parameter values.
1464*
1465 READ( nin, fmt = * )nparms
1466 IF( nparms.LT.1 ) THEN
1467 WRITE( nout, fmt = 9989 )'NPARMS', nparms, 1
1468 nparms = 0
1469 fatal = .true.
1470 ELSE IF( nparms.GT.maxin ) THEN
1471 WRITE( nout, fmt = 9988 )'NPARMS', nparms, maxin
1472 nparms = 0
1473 fatal = .true.
1474 END IF
1475*
1476* Read the values of NB
1477*
1478 IF( .NOT.dbb ) THEN
1479 READ( nin, fmt = * )( nbval( i ), i = 1, nparms )
1480 DO 70 i = 1, nparms
1481 IF( nbval( i ).LT.0 ) THEN
1482 WRITE( nout, fmt = 9989 )' NB ', nbval( i ), 0
1483 fatal = .true.
1484 ELSE IF( nbval( i ).GT.nmax ) THEN
1485 WRITE( nout, fmt = 9988 )' NB ', nbval( i ), nmax
1486 fatal = .true.
1487 END IF
1488 70 CONTINUE
1489 WRITE( nout, fmt = 9983 )'NB: ',
1490 $ ( nbval( i ), i = 1, nparms )
1491 END IF
1492*
1493* Read the values of NBMIN
1494*
1495 IF( nep .OR. sep .OR. svd .OR. dgg ) THEN
1496 READ( nin, fmt = * )( nbmin( i ), i = 1, nparms )
1497 DO 80 i = 1, nparms
1498 IF( nbmin( i ).LT.0 ) THEN
1499 WRITE( nout, fmt = 9989 )'NBMIN ', nbmin( i ), 0
1500 fatal = .true.
1501 ELSE IF( nbmin( i ).GT.nmax ) THEN
1502 WRITE( nout, fmt = 9988 )'NBMIN ', nbmin( i ), nmax
1503 fatal = .true.
1504 END IF
1505 80 CONTINUE
1506 WRITE( nout, fmt = 9983 )'NBMIN:',
1507 $ ( nbmin( i ), i = 1, nparms )
1508 ELSE
1509 DO 90 i = 1, nparms
1510 nbmin( i ) = 1
1511 90 CONTINUE
1512 END IF
1513*
1514* Read the values of NX
1515*
1516 IF( nep .OR. sep .OR. svd ) THEN
1517 READ( nin, fmt = * )( nxval( i ), i = 1, nparms )
1518 DO 100 i = 1, nparms
1519 IF( nxval( i ).LT.0 ) THEN
1520 WRITE( nout, fmt = 9989 )' NX ', nxval( i ), 0
1521 fatal = .true.
1522 ELSE IF( nxval( i ).GT.nmax ) THEN
1523 WRITE( nout, fmt = 9988 )' NX ', nxval( i ), nmax
1524 fatal = .true.
1525 END IF
1526 100 CONTINUE
1527 WRITE( nout, fmt = 9983 )'NX: ',
1528 $ ( nxval( i ), i = 1, nparms )
1529 ELSE
1530 DO 110 i = 1, nparms
1531 nxval( i ) = 1
1532 110 CONTINUE
1533 END IF
1534*
1535* Read the values of NSHIFT (if DGG) or NRHS (if SVD
1536* or DBB).
1537*
1538 IF( svd .OR. dbb .OR. dgg ) THEN
1539 READ( nin, fmt = * )( nsval( i ), i = 1, nparms )
1540 DO 120 i = 1, nparms
1541 IF( nsval( i ).LT.0 ) THEN
1542 WRITE( nout, fmt = 9989 )' NS ', nsval( i ), 0
1543 fatal = .true.
1544 ELSE IF( nsval( i ).GT.nmax ) THEN
1545 WRITE( nout, fmt = 9988 )' NS ', nsval( i ), nmax
1546 fatal = .true.
1547 END IF
1548 120 CONTINUE
1549 WRITE( nout, fmt = 9983 )'NS: ',
1550 $ ( nsval( i ), i = 1, nparms )
1551 ELSE
1552 DO 130 i = 1, nparms
1553 nsval( i ) = 1
1554 130 CONTINUE
1555 END IF
1556*
1557* Read the values for MAXB.
1558*
1559 IF( dgg ) THEN
1560 READ( nin, fmt = * )( mxbval( i ), i = 1, nparms )
1561 DO 140 i = 1, nparms
1562 IF( mxbval( i ).LT.0 ) THEN
1563 WRITE( nout, fmt = 9989 )' MAXB ', mxbval( i ), 0
1564 fatal = .true.
1565 ELSE IF( mxbval( i ).GT.nmax ) THEN
1566 WRITE( nout, fmt = 9988 )' MAXB ', mxbval( i ), nmax
1567 fatal = .true.
1568 END IF
1569 140 CONTINUE
1570 WRITE( nout, fmt = 9983 )'MAXB: ',
1571 $ ( mxbval( i ), i = 1, nparms )
1572 ELSE
1573 DO 150 i = 1, nparms
1574 mxbval( i ) = 1
1575 150 CONTINUE
1576 END IF
1577*
1578* Read the values for INMIN.
1579*
1580 IF( nep ) THEN
1581 READ( nin, fmt = * )( inmin( i ), i = 1, nparms )
1582 DO 540 i = 1, nparms
1583 IF( inmin( i ).LT.0 ) THEN
1584 WRITE( nout, fmt = 9989 )' INMIN ', inmin( i ), 0
1585 fatal = .true.
1586 END IF
1587 540 CONTINUE
1588 WRITE( nout, fmt = 9983 )'INMIN: ',
1589 $ ( inmin( i ), i = 1, nparms )
1590 ELSE
1591 DO 550 i = 1, nparms
1592 inmin( i ) = 1
1593 550 CONTINUE
1594 END IF
1595*
1596* Read the values for INWIN.
1597*
1598 IF( nep ) THEN
1599 READ( nin, fmt = * )( inwin( i ), i = 1, nparms )
1600 DO 560 i = 1, nparms
1601 IF( inwin( i ).LT.0 ) THEN
1602 WRITE( nout, fmt = 9989 )' INWIN ', inwin( i ), 0
1603 fatal = .true.
1604 END IF
1605 560 CONTINUE
1606 WRITE( nout, fmt = 9983 )'INWIN: ',
1607 $ ( inwin( i ), i = 1, nparms )
1608 ELSE
1609 DO 570 i = 1, nparms
1610 inwin( i ) = 1
1611 570 CONTINUE
1612 END IF
1613*
1614* Read the values for INIBL.
1615*
1616 IF( nep ) THEN
1617 READ( nin, fmt = * )( inibl( i ), i = 1, nparms )
1618 DO 580 i = 1, nparms
1619 IF( inibl( i ).LT.0 ) THEN
1620 WRITE( nout, fmt = 9989 )' INIBL ', inibl( i ), 0
1621 fatal = .true.
1622 END IF
1623 580 CONTINUE
1624 WRITE( nout, fmt = 9983 )'INIBL: ',
1625 $ ( inibl( i ), i = 1, nparms )
1626 ELSE
1627 DO 590 i = 1, nparms
1628 inibl( i ) = 1
1629 590 CONTINUE
1630 END IF
1631*
1632* Read the values for ISHFTS.
1633*
1634 IF( nep ) THEN
1635 READ( nin, fmt = * )( ishfts( i ), i = 1, nparms )
1636 DO 600 i = 1, nparms
1637 IF( ishfts( i ).LT.0 ) THEN
1638 WRITE( nout, fmt = 9989 )' ISHFTS ', ishfts( i ), 0
1639 fatal = .true.
1640 END IF
1641 600 CONTINUE
1642 WRITE( nout, fmt = 9983 )'ISHFTS: ',
1643 $ ( ishfts( i ), i = 1, nparms )
1644 ELSE
1645 DO 610 i = 1, nparms
1646 ishfts( i ) = 1
1647 610 CONTINUE
1648 END IF
1649*
1650* Read the values for IACC22.
1651*
1652 IF( nep .OR. dgg ) THEN
1653 READ( nin, fmt = * )( iacc22( i ), i = 1, nparms )
1654 DO 620 i = 1, nparms
1655 IF( iacc22( i ).LT.0 ) THEN
1656 WRITE( nout, fmt = 9989 )' IACC22 ', iacc22( i ), 0
1657 fatal = .true.
1658 END IF
1659 620 CONTINUE
1660 WRITE( nout, fmt = 9983 )'IACC22: ',
1661 $ ( iacc22( i ), i = 1, nparms )
1662 ELSE
1663 DO 630 i = 1, nparms
1664 iacc22( i ) = 1
1665 630 CONTINUE
1666 END IF
1667*
1668* Read the values for NBCOL.
1669*
1670 IF( dgg ) THEN
1671 READ( nin, fmt = * )( nbcol( i ), i = 1, nparms )
1672 DO 160 i = 1, nparms
1673 IF( nbcol( i ).LT.0 ) THEN
1674 WRITE( nout, fmt = 9989 )'NBCOL ', nbcol( i ), 0
1675 fatal = .true.
1676 ELSE IF( nbcol( i ).GT.nmax ) THEN
1677 WRITE( nout, fmt = 9988 )'NBCOL ', nbcol( i ), nmax
1678 fatal = .true.
1679 END IF
1680 160 CONTINUE
1681 WRITE( nout, fmt = 9983 )'NBCOL:',
1682 $ ( nbcol( i ), i = 1, nparms )
1683 ELSE
1684 DO 170 i = 1, nparms
1685 nbcol( i ) = 1
1686 170 CONTINUE
1687 END IF
1688 END IF
1689*
1690* Calculate and print the machine dependent constants.
1691*
1692 WRITE( nout, fmt = * )
1693 eps = dlamch( 'Underflow threshold' )
1694 WRITE( nout, fmt = 9981 )'underflow', eps
1695 eps = dlamch( 'Overflow threshold' )
1696 WRITE( nout, fmt = 9981 )'overflow ', eps
1697 eps = dlamch( 'Epsilon' )
1698 WRITE( nout, fmt = 9981 )'precision', eps
1699*
1700* Read the threshold value for the test ratios.
1701*
1702 READ( nin, fmt = * )thresh
1703 WRITE( nout, fmt = 9982 )thresh
1704 IF( sep .OR. svd .OR. dgg ) THEN
1705*
1706* Read the flag that indicates whether to test LAPACK routines.
1707*
1708 READ( nin, fmt = * )tstchk
1709*
1710* Read the flag that indicates whether to test driver routines.
1711*
1712 READ( nin, fmt = * )tstdrv
1713 END IF
1714*
1715* Read the flag that indicates whether to test the error exits.
1716*
1717 READ( nin, fmt = * )tsterr
1718*
1719* Read the code describing how to set the random number seed.
1720*
1721 READ( nin, fmt = * )newsd
1722*
1723* If NEWSD = 2, read another line with 4 integers for the seed.
1724*
1725 IF( newsd.EQ.2 )
1726 $ READ( nin, fmt = * )( ioldsd( i ), i = 1, 4 )
1727*
1728 DO 180 i = 1, 4
1729 iseed( i ) = ioldsd( i )
1730 180 CONTINUE
1731*
1732 IF( fatal ) THEN
1733 WRITE( nout, fmt = 9999 )
1734 stop
1735 END IF
1736*
1737* Read the input lines indicating the test path and its parameters.
1738* The first three characters indicate the test path, and the number
1739* of test matrix types must be the first nonblank item in columns
1740* 4-80.
1741*
1742 190 CONTINUE
1743*
1744 IF( .NOT.( dgx .OR. dxv ) ) THEN
1745*
1746 200 CONTINUE
1747 READ( nin, fmt = '(A80)', END = 380 )line
1748 c3 = line( 1: 3 )
1749 lenp = len( line )
1750 i = 3
1751 itmp = 0
1752 i1 = 0
1753 210 CONTINUE
1754 i = i + 1
1755 IF( i.GT.lenp ) THEN
1756 IF( i1.GT.0 ) THEN
1757 GO TO 240
1758 ELSE
1759 ntypes = maxt
1760 GO TO 240
1761 END IF
1762 END IF
1763 IF( line( i: i ).NE.' ' .AND. line( i: i ).NE.',' ) THEN
1764 i1 = i
1765 c1 = line( i1: i1 )
1766*
1767* Check that a valid integer was read
1768*
1769 DO 220 k = 1, 10
1770 IF( c1.EQ.intstr( k: k ) ) THEN
1771 ic = k - 1
1772 GO TO 230
1773 END IF
1774 220 CONTINUE
1775 WRITE( nout, fmt = 9991 )i, line
1776 GO TO 200
1777 230 CONTINUE
1778 itmp = 10*itmp + ic
1779 GO TO 210
1780 ELSE IF( i1.GT.0 ) THEN
1781 GO TO 240
1782 ELSE
1783 GO TO 210
1784 END IF
1785 240 CONTINUE
1786 ntypes = itmp
1787*
1788* Skip the tests if NTYPES is <= 0.
1789*
1790 IF( .NOT.( dev .OR. des .OR. dvx .OR. dsx .OR. dgv .OR.
1791 $ dgs ) .AND. ntypes.LE.0 ) THEN
1792 WRITE( nout, fmt = 9990 )c3
1793 GO TO 200
1794 END IF
1795*
1796 ELSE
1797 IF( dxv )
1798 $ c3 = 'DXV'
1799 IF( dgx )
1800 $ c3 = 'DGX'
1801 END IF
1802*
1803* Reset the random number seed.
1804*
1805 IF( newsd.EQ.0 ) THEN
1806 DO 250 k = 1, 4
1807 iseed( k ) = ioldsd( k )
1808 250 CONTINUE
1809 END IF
1810*
1811 IF( lsamen( 3, c3, 'DHS' ) .OR. lsamen( 3, c3, 'NEP' ) ) THEN
1812*
1813* -------------------------------------
1814* NEP: Nonsymmetric Eigenvalue Problem
1815* -------------------------------------
1816* Vary the parameters
1817* NB = block size
1818* NBMIN = minimum block size
1819* NX = crossover point
1820* NS = number of shifts
1821* MAXB = minimum submatrix size
1822*
1823 maxtyp = 21
1824 ntypes = min( maxtyp, ntypes )
1825 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
1826 CALL xlaenv( 1, 1 )
1827 IF( tsterr )
1828 $ CALL derrhs( 'DHSEQR', nout )
1829 DO 270 i = 1, nparms
1830 CALL xlaenv( 1, nbval( i ) )
1831 CALL xlaenv( 2, nbmin( i ) )
1832 CALL xlaenv( 3, nxval( i ) )
1833 CALL xlaenv(12, max( 11, inmin( i ) ) )
1834 CALL xlaenv(13, inwin( i ) )
1835 CALL xlaenv(14, inibl( i ) )
1836 CALL xlaenv(15, ishfts( i ) )
1837 CALL xlaenv(16, iacc22( i ) )
1838*
1839 IF( newsd.EQ.0 ) THEN
1840 DO 260 k = 1, 4
1841 iseed( k ) = ioldsd( k )
1842 260 CONTINUE
1843 END IF
1844 WRITE( nout, fmt = 9961 )c3, nbval( i ), nbmin( i ),
1845 $ nxval( i ), max( 11, inmin(i)),
1846 $ inwin( i ), inibl( i ), ishfts( i ), iacc22( i )
1847 CALL dchkhs( nn, nval, maxtyp, dotype, iseed, thresh, nout,
1848 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
1849 $ a( 1, 4 ), a( 1, 5 ), nmax, a( 1, 6 ),
1850 $ a( 1, 7 ), d( 1, 1 ), d( 1, 2 ), d( 1, 3 ),
1851 $ d( 1, 4 ), d( 1, 5 ), d( 1, 6 ), a( 1, 8 ),
1852 $ a( 1, 9 ), a( 1, 10 ), a( 1, 11 ), a( 1, 12 ),
1853 $ d( 1, 7 ), work, lwork, iwork, logwrk, result,
1854 $ info )
1855 IF( info.NE.0 )
1856 $ WRITE( nout, fmt = 9980 )'DCHKHS', info
1857 270 CONTINUE
1858*
1859 ELSE IF( lsamen( 3, c3, 'DST' ) .OR. lsamen( 3, c3, 'SEP' )
1860 $ .OR. lsamen( 3, c3, 'SE2' ) ) THEN
1861*
1862* ----------------------------------
1863* SEP: Symmetric Eigenvalue Problem
1864* ----------------------------------
1865* Vary the parameters
1866* NB = block size
1867* NBMIN = minimum block size
1868* NX = crossover point
1869*
1870 maxtyp = 21
1871 ntypes = min( maxtyp, ntypes )
1872 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
1873 CALL xlaenv( 1, 1 )
1874 CALL xlaenv( 9, 25 )
1875 IF( tsterr ) THEN
1876#if defined(_OPENMP)
1877 n_threads = omp_get_max_threads()
1878 one_thread = 1
1879 CALL omp_set_num_threads(one_thread)
1880#endif
1881 CALL derrst( 'DST', nout )
1882#if defined(_OPENMP)
1883 CALL omp_set_num_threads(n_threads)
1884#endif
1885 END IF
1886 DO 290 i = 1, nparms
1887 CALL xlaenv( 1, nbval( i ) )
1888 CALL xlaenv( 2, nbmin( i ) )
1889 CALL xlaenv( 3, nxval( i ) )
1890*
1891 IF( newsd.EQ.0 ) THEN
1892 DO 280 k = 1, 4
1893 iseed( k ) = ioldsd( k )
1894 280 CONTINUE
1895 END IF
1896 WRITE( nout, fmt = 9997 )c3, nbval( i ), nbmin( i ),
1897 $ nxval( i )
1898 IF( tstchk ) THEN
1899 IF( lsamen( 3, c3, 'SE2' ) ) THEN
1900 CALL dchkst2stg( nn, nval, maxtyp, dotype, iseed, thresh,
1901 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), d( 1, 1 ),
1902 $ d( 1, 2 ), d( 1, 3 ), d( 1, 4 ), d( 1, 5 ),
1903 $ d( 1, 6 ), d( 1, 7 ), d( 1, 8 ), d( 1, 9 ),
1904 $ d( 1, 10 ), d( 1, 11 ), a( 1, 3 ), nmax,
1905 $ a( 1, 4 ), a( 1, 5 ), d( 1, 12 ), a( 1, 6 ),
1906 $ work, lwork, iwork, liwork, result, info )
1907 ELSE
1908 CALL dchkst( nn, nval, maxtyp, dotype, iseed, thresh,
1909 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), d( 1, 1 ),
1910 $ d( 1, 2 ), d( 1, 3 ), d( 1, 4 ), d( 1, 5 ),
1911 $ d( 1, 6 ), d( 1, 7 ), d( 1, 8 ), d( 1, 9 ),
1912 $ d( 1, 10 ), d( 1, 11 ), a( 1, 3 ), nmax,
1913 $ a( 1, 4 ), a( 1, 5 ), d( 1, 12 ), a( 1, 6 ),
1914 $ work, lwork, iwork, liwork, result, info )
1915 ENDIF
1916 IF( info.NE.0 )
1917 $ WRITE( nout, fmt = 9980 )'DCHKST', info
1918 END IF
1919 IF( tstdrv ) THEN
1920 IF( lsamen( 3, c3, 'SE2' ) ) THEN
1921 CALL ddrvst2stg( nn, nval, 18, dotype, iseed, thresh,
1922 $ nout, a( 1, 1 ), nmax, d( 1, 3 ), d( 1, 4 ),
1923 $ d( 1, 5 ), d( 1, 6 ), d( 1, 8 ), d( 1, 9 ),
1924 $ d( 1, 10 ), d( 1, 11 ), a( 1, 2 ), nmax,
1925 $ a( 1, 3 ), d( 1, 12 ), a( 1, 4 ), work,
1926 $ lwork, iwork, liwork, result, info )
1927 ELSE
1928 CALL ddrvst( nn, nval, 18, dotype, iseed, thresh, nout,
1929 $ a( 1, 1 ), nmax, d( 1, 3 ), d( 1, 4 ),
1930 $ d( 1, 5 ), d( 1, 6 ), d( 1, 8 ), d( 1, 9 ),
1931 $ d( 1, 10 ), d( 1, 11 ), a( 1, 2 ), nmax,
1932 $ a( 1, 3 ), d( 1, 12 ), a( 1, 4 ), work,
1933 $ lwork, iwork, liwork, result, info )
1934 ENDIF
1935 IF( info.NE.0 )
1936 $ WRITE( nout, fmt = 9980 )'DDRVST', info
1937 END IF
1938 290 CONTINUE
1939*
1940 ELSE IF( lsamen( 3, c3, 'DSG' ) ) THEN
1941*
1942* ----------------------------------------------
1943* DSG: Symmetric Generalized Eigenvalue Problem
1944* ----------------------------------------------
1945* Vary the parameters
1946* NB = block size
1947* NBMIN = minimum block size
1948* NX = crossover point
1949*
1950 maxtyp = 21
1951 ntypes = min( maxtyp, ntypes )
1952 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
1953 CALL xlaenv( 9, 25 )
1954 DO 310 i = 1, nparms
1955 CALL xlaenv( 1, nbval( i ) )
1956 CALL xlaenv( 2, nbmin( i ) )
1957 CALL xlaenv( 3, nxval( i ) )
1958*
1959 IF( newsd.EQ.0 ) THEN
1960 DO 300 k = 1, 4
1961 iseed( k ) = ioldsd( k )
1962 300 CONTINUE
1963 END IF
1964 WRITE( nout, fmt = 9997 )c3, nbval( i ), nbmin( i ),
1965 $ nxval( i )
1966 IF( tstchk ) THEN
1967* CALL DDRVSG( NN, NVAL, MAXTYP, DOTYPE, ISEED, THRESH,
1968* $ NOUT, A( 1, 1 ), NMAX, A( 1, 2 ), NMAX,
1969* $ D( 1, 3 ), A( 1, 3 ), NMAX, A( 1, 4 ),
1970* $ A( 1, 5 ), A( 1, 6 ), A( 1, 7 ), WORK,
1971* $ LWORK, IWORK, LIWORK, RESULT, INFO )
1972 CALL ddrvsg2stg( nn, nval, maxtyp, dotype, iseed, thresh,
1973 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), nmax,
1974 $ d( 1, 3 ), d( 1, 3 ), a( 1, 3 ), nmax,
1975 $ a( 1, 4 ), a( 1, 5 ), a( 1, 6 ),
1976 $ a( 1, 7 ), work, lwork, iwork, liwork,
1977 $ result, info )
1978 IF( info.NE.0 )
1979 $ WRITE( nout, fmt = 9980 )'DDRVSG', info
1980 END IF
1981 310 CONTINUE
1982*
1983 ELSE IF( lsamen( 3, c3, 'DBD' ) .OR. lsamen( 3, c3, 'SVD' ) ) THEN
1984*
1985* ----------------------------------
1986* SVD: Singular Value Decomposition
1987* ----------------------------------
1988* Vary the parameters
1989* NB = block size
1990* NBMIN = minimum block size
1991* NX = crossover point
1992* NRHS = number of right hand sides
1993*
1994 maxtyp = 16
1995 ntypes = min( maxtyp, ntypes )
1996 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
1997 CALL xlaenv( 1, 1 )
1998 CALL xlaenv( 9, 25 )
1999*
2000* Test the error exits
2001*
2002 IF( tsterr .AND. tstchk )
2003 $ CALL derrbd( 'DBD', nout )
2004 IF( tsterr .AND. tstdrv )
2005 $ CALL derred( 'DBD', nout )
2006*
2007 DO 330 i = 1, nparms
2008 nrhs = nsval( i )
2009 CALL xlaenv( 1, nbval( i ) )
2010 CALL xlaenv( 2, nbmin( i ) )
2011 CALL xlaenv( 3, nxval( i ) )
2012 IF( newsd.EQ.0 ) THEN
2013 DO 320 k = 1, 4
2014 iseed( k ) = ioldsd( k )
2015 320 CONTINUE
2016 END IF
2017 WRITE( nout, fmt = 9995 )c3, nbval( i ), nbmin( i ),
2018 $ nxval( i ), nrhs
2019 IF( tstchk ) THEN
2020 CALL dchkbd( nn, mval, nval, maxtyp, dotype, nrhs, iseed,
2021 $ thresh, a( 1, 1 ), nmax, d( 1, 1 ),
2022 $ d( 1, 2 ), d( 1, 3 ), d( 1, 4 ), a( 1, 2 ),
2023 $ nmax, a( 1, 3 ), a( 1, 4 ), a( 1, 5 ), nmax,
2024 $ a( 1, 6 ), nmax, a( 1, 7 ), a( 1, 8 ), work,
2025 $ lwork, iwork, nout, info )
2026 IF( info.NE.0 )
2027 $ WRITE( nout, fmt = 9980 )'DCHKBD', info
2028 END IF
2029 IF( tstdrv )
2030 $ CALL ddrvbd( nn, mval, nval, maxtyp, dotype, iseed,
2031 $ thresh, a( 1, 1 ), nmax, a( 1, 2 ), nmax,
2032 $ a( 1, 3 ), nmax, a( 1, 4 ), a( 1, 5 ),
2033 $ a( 1, 6 ), d( 1, 1 ), d( 1, 2 ), d( 1, 3 ),
2034 $ work, lwork, iwork, nout, info )
2035 330 CONTINUE
2036*
2037 ELSE IF( lsamen( 3, c3, 'DEV' ) ) THEN
2038*
2039* --------------------------------------------
2040* DEV: Nonsymmetric Eigenvalue Problem Driver
2041* DGEEV (eigenvalues and eigenvectors)
2042* --------------------------------------------
2043*
2044 maxtyp = 21
2045 ntypes = min( maxtyp, ntypes )
2046 IF( ntypes.LE.0 ) THEN
2047 WRITE( nout, fmt = 9990 )c3
2048 ELSE
2049 IF( tsterr )
2050 $ CALL derred( c3, nout )
2051 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2052 CALL ddrvev( nn, nval, ntypes, dotype, iseed, thresh, nout,
2053 $ a( 1, 1 ), nmax, a( 1, 2 ), d( 1, 1 ),
2054 $ d( 1, 2 ), d( 1, 3 ), d( 1, 4 ), a( 1, 3 ),
2055 $ nmax, a( 1, 4 ), nmax, a( 1, 5 ), nmax, result,
2056 $ work, lwork, iwork, info )
2057 IF( info.NE.0 )
2058 $ WRITE( nout, fmt = 9980 )'DGEEV', info
2059 END IF
2060 WRITE( nout, fmt = 9973 )
2061 GO TO 10
2062*
2063 ELSE IF( lsamen( 3, c3, 'DES' ) ) THEN
2064*
2065* --------------------------------------------
2066* DES: Nonsymmetric Eigenvalue Problem Driver
2067* DGEES (Schur form)
2068* --------------------------------------------
2069*
2070 maxtyp = 21
2071 ntypes = min( maxtyp, ntypes )
2072 IF( ntypes.LE.0 ) THEN
2073 WRITE( nout, fmt = 9990 )c3
2074 ELSE
2075 IF( tsterr )
2076 $ CALL derred( c3, nout )
2077 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2078 CALL ddrves( nn, nval, ntypes, dotype, iseed, thresh, nout,
2079 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2080 $ d( 1, 1 ), d( 1, 2 ), d( 1, 3 ), d( 1, 4 ),
2081 $ a( 1, 4 ), nmax, result, work, lwork, iwork,
2082 $ logwrk, info )
2083 IF( info.NE.0 )
2084 $ WRITE( nout, fmt = 9980 )'DGEES', info
2085 END IF
2086 WRITE( nout, fmt = 9973 )
2087 GO TO 10
2088*
2089 ELSE IF( lsamen( 3, c3, 'DVX' ) ) THEN
2090*
2091* --------------------------------------------------------------
2092* DVX: Nonsymmetric Eigenvalue Problem Expert Driver
2093* DGEEVX (eigenvalues, eigenvectors and condition numbers)
2094* --------------------------------------------------------------
2095*
2096 maxtyp = 21
2097 ntypes = min( maxtyp, ntypes )
2098 IF( ntypes.LT.0 ) THEN
2099 WRITE( nout, fmt = 9990 )c3
2100 ELSE
2101 IF( tsterr )
2102 $ CALL derred( c3, nout )
2103 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2104 CALL ddrvvx( nn, nval, ntypes, dotype, iseed, thresh, nin,
2105 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), d( 1, 1 ),
2106 $ d( 1, 2 ), d( 1, 3 ), d( 1, 4 ), a( 1, 3 ),
2107 $ nmax, a( 1, 4 ), nmax, a( 1, 5 ), nmax,
2108 $ d( 1, 5 ), d( 1, 6 ), d( 1, 7 ), d( 1, 8 ),
2109 $ d( 1, 9 ), d( 1, 10 ), d( 1, 11 ), d( 1, 12 ),
2110 $ result, work, lwork, iwork, info )
2111 IF( info.NE.0 )
2112 $ WRITE( nout, fmt = 9980 )'DGEEVX', info
2113 END IF
2114 WRITE( nout, fmt = 9973 )
2115 GO TO 10
2116*
2117 ELSE IF( lsamen( 3, c3, 'DSX' ) ) THEN
2118*
2119* ---------------------------------------------------
2120* DSX: Nonsymmetric Eigenvalue Problem Expert Driver
2121* DGEESX (Schur form and condition numbers)
2122* ---------------------------------------------------
2123*
2124 maxtyp = 21
2125 ntypes = min( maxtyp, ntypes )
2126 IF( ntypes.LT.0 ) THEN
2127 WRITE( nout, fmt = 9990 )c3
2128 ELSE
2129 IF( tsterr )
2130 $ CALL derred( c3, nout )
2131 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2132 CALL ddrvsx( nn, nval, ntypes, dotype, iseed, thresh, nin,
2133 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2134 $ d( 1, 1 ), d( 1, 2 ), d( 1, 3 ), d( 1, 4 ),
2135 $ d( 1, 5 ), d( 1, 6 ), a( 1, 4 ), nmax,
2136 $ a( 1, 5 ), result, work, lwork, iwork, logwrk,
2137 $ info )
2138 IF( info.NE.0 )
2139 $ WRITE( nout, fmt = 9980 )'DGEESX', info
2140 END IF
2141 WRITE( nout, fmt = 9973 )
2142 GO TO 10
2143*
2144 ELSE IF( lsamen( 3, c3, 'DGG' ) ) THEN
2145*
2146* -------------------------------------------------
2147* DGG: Generalized Nonsymmetric Eigenvalue Problem
2148* -------------------------------------------------
2149* Vary the parameters
2150* NB = block size
2151* NBMIN = minimum block size
2152* NS = number of shifts
2153* MAXB = minimum submatrix size
2154* IACC22: structured matrix multiply
2155* NBCOL = minimum column dimension for blocks
2156*
2157 maxtyp = 26
2158 ntypes = min( maxtyp, ntypes )
2159 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2160 CALL xlaenv(1,1)
2161 IF( tstchk .AND. tsterr )
2162 $ CALL derrgg( c3, nout )
2163 DO 350 i = 1, nparms
2164 CALL xlaenv( 1, nbval( i ) )
2165 CALL xlaenv( 2, nbmin( i ) )
2166 CALL xlaenv( 4, nsval( i ) )
2167 CALL xlaenv( 8, mxbval( i ) )
2168 CALL xlaenv( 16, iacc22( i ) )
2169 CALL xlaenv( 5, nbcol( i ) )
2170*
2171 IF( newsd.EQ.0 ) THEN
2172 DO 340 k = 1, 4
2173 iseed( k ) = ioldsd( k )
2174 340 CONTINUE
2175 END IF
2176 WRITE( nout, fmt = 9996 )c3, nbval( i ), nbmin( i ),
2177 $ nsval( i ), mxbval( i ), iacc22( i ), nbcol( i )
2178 tstdif = .false.
2179 thrshn = 10.d0
2180 IF( tstchk ) THEN
2181 CALL dchkgg( nn, nval, maxtyp, dotype, iseed, thresh,
2182 $ tstdif, thrshn, nout, a( 1, 1 ), nmax,
2183 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), a( 1, 5 ),
2184 $ a( 1, 6 ), a( 1, 7 ), a( 1, 8 ), a( 1, 9 ),
2185 $ nmax, a( 1, 10 ), a( 1, 11 ), a( 1, 12 ),
2186 $ d( 1, 1 ), d( 1, 2 ), d( 1, 3 ), d( 1, 4 ),
2187 $ d( 1, 5 ), d( 1, 6 ), a( 1, 13 ),
2188 $ a( 1, 14 ), work, lwork, logwrk, result,
2189 $ info )
2190 IF( info.NE.0 )
2191 $ WRITE( nout, fmt = 9980 )'DCHKGG', info
2192 END IF
2193 350 CONTINUE
2194*
2195 ELSE IF( lsamen( 3, c3, 'DGS' ) ) THEN
2196*
2197* -------------------------------------------------
2198* DGS: Generalized Nonsymmetric Eigenvalue Problem
2199* DGGES (Schur form)
2200* -------------------------------------------------
2201*
2202 maxtyp = 26
2203 ntypes = min( maxtyp, ntypes )
2204 IF( ntypes.LE.0 ) THEN
2205 WRITE( nout, fmt = 9990 )c3
2206 ELSE
2207 IF( tsterr )
2208 $ CALL derrgg( c3, nout )
2209 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2210 CALL ddrges( nn, nval, maxtyp, dotype, iseed, thresh, nout,
2211 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2212 $ a( 1, 4 ), a( 1, 7 ), nmax, a( 1, 8 ),
2213 $ d( 1, 1 ), d( 1, 2 ), d( 1, 3 ), work, lwork,
2214 $ result, logwrk, info )
2215 IF( info.NE.0 )
2216 $ WRITE( nout, fmt = 9980 )'DDRGES', info
2217*
2218* Blocked version
2219*
2220 CALL xlaenv(16, 2)
2221 CALL ddrges3( nn, nval, maxtyp, dotype, iseed, thresh, nout,
2222 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2223 $ a( 1, 4 ), a( 1, 7 ), nmax, a( 1, 8 ),
2224 $ d( 1, 1 ), d( 1, 2 ), d( 1, 3 ), work, lwork,
2225 $ result, logwrk, info )
2226 IF( info.NE.0 )
2227 $ WRITE( nout, fmt = 9980 )'DDRGES3', info
2228 END IF
2229 WRITE( nout, fmt = 9973 )
2230 GO TO 10
2231*
2232 ELSE IF( dgx ) THEN
2233*
2234* -------------------------------------------------
2235* DGX: Generalized Nonsymmetric Eigenvalue Problem
2236* DGGESX (Schur form and condition numbers)
2237* -------------------------------------------------
2238*
2239 maxtyp = 5
2240 ntypes = maxtyp
2241 IF( nn.LT.0 ) THEN
2242 WRITE( nout, fmt = 9990 )c3
2243 ELSE
2244 IF( tsterr )
2245 $ CALL derrgg( c3, nout )
2246 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2247 CALL xlaenv( 5, 2 )
2248 CALL ddrgsx( nn, ncmax, thresh, nin, nout, a( 1, 1 ), nmax,
2249 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), a( 1, 5 ),
2250 $ a( 1, 6 ), d( 1, 1 ), d( 1, 2 ), d( 1, 3 ),
2251 $ c( 1, 1 ), ncmax*ncmax, a( 1, 12 ), work,
2252 $ lwork, iwork, liwork, logwrk, info )
2253 IF( info.NE.0 )
2254 $ WRITE( nout, fmt = 9980 )'DDRGSX', info
2255 END IF
2256 WRITE( nout, fmt = 9973 )
2257 GO TO 10
2258*
2259 ELSE IF( lsamen( 3, c3, 'DGV' ) ) THEN
2260*
2261* -------------------------------------------------
2262* DGV: Generalized Nonsymmetric Eigenvalue Problem
2263* DGGEV (Eigenvalue/vector form)
2264* -------------------------------------------------
2265*
2266 maxtyp = 26
2267 ntypes = min( maxtyp, ntypes )
2268 IF( ntypes.LE.0 ) THEN
2269 WRITE( nout, fmt = 9990 )c3
2270 ELSE
2271 IF( tsterr )
2272 $ CALL derrgg( c3, nout )
2273 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2274 CALL ddrgev( nn, nval, maxtyp, dotype, iseed, thresh, nout,
2275 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2276 $ a( 1, 4 ), a( 1, 7 ), nmax, a( 1, 8 ),
2277 $ a( 1, 9 ), nmax, d( 1, 1 ), d( 1, 2 ),
2278 $ d( 1, 3 ), d( 1, 4 ), d( 1, 5 ), d( 1, 6 ),
2279 $ work, lwork, result, info )
2280 IF( info.NE.0 )
2281 $ WRITE( nout, fmt = 9980 )'DDRGEV', info
2282*
2283* Blocked version
2284*
2285 CALL ddrgev3( nn, nval, maxtyp, dotype, iseed, thresh, nout,
2286 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2287 $ a( 1, 4 ), a( 1, 7 ), nmax, a( 1, 8 ),
2288 $ a( 1, 9 ), nmax, d( 1, 1 ), d( 1, 2 ),
2289 $ d( 1, 3 ), d( 1, 4 ), d( 1, 5 ), d( 1, 6 ),
2290 $ work, lwork, result, info )
2291 IF( info.NE.0 )
2292 $ WRITE( nout, fmt = 9980 )'DDRGEV3', info
2293 END IF
2294 WRITE( nout, fmt = 9973 )
2295 GO TO 10
2296*
2297 ELSE IF( dxv ) THEN
2298*
2299* -------------------------------------------------
2300* DXV: Generalized Nonsymmetric Eigenvalue Problem
2301* DGGEVX (eigenvalue/vector with condition numbers)
2302* -------------------------------------------------
2303*
2304 maxtyp = 2
2305 ntypes = maxtyp
2306 IF( nn.LT.0 ) THEN
2307 WRITE( nout, fmt = 9990 )c3
2308 ELSE
2309 IF( tsterr )
2310 $ CALL derrgg( c3, nout )
2311 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2312 CALL ddrgvx( nn, thresh, nin, nout, a( 1, 1 ), nmax,
2313 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), d( 1, 1 ),
2314 $ d( 1, 2 ), d( 1, 3 ), a( 1, 5 ), a( 1, 6 ),
2315 $ iwork( 1 ), iwork( 2 ), d( 1, 4 ), d( 1, 5 ),
2316 $ d( 1, 6 ), d( 1, 7 ), d( 1, 8 ), d( 1, 9 ),
2317 $ work, lwork, iwork( 3 ), liwork-2, result,
2318 $ logwrk, info )
2319*
2320 IF( info.NE.0 )
2321 $ WRITE( nout, fmt = 9980 )'DDRGVX', info
2322 END IF
2323 WRITE( nout, fmt = 9973 )
2324 GO TO 10
2325*
2326 ELSE IF( lsamen( 3, c3, 'DSB' ) ) THEN
2327*
2328* ------------------------------
2329* DSB: Symmetric Band Reduction
2330* ------------------------------
2331*
2332 maxtyp = 15
2333 ntypes = min( maxtyp, ntypes )
2334 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2335 IF( tsterr )
2336 $ CALL derrst( 'DSB', nout )
2337* CALL DCHKSB( NN, NVAL, NK, KVAL, MAXTYP, DOTYPE, ISEED, THRESH,
2338* $ NOUT, A( 1, 1 ), NMAX, D( 1, 1 ), D( 1, 2 ),
2339* $ A( 1, 2 ), NMAX, WORK, LWORK, RESULT, INFO )
2340 CALL dchksb2stg( nn, nval, nk, kval, maxtyp, dotype, iseed,
2341 $ thresh, nout, a( 1, 1 ), nmax, d( 1, 1 ),
2342 $ d( 1, 2 ), d( 1, 3 ), d( 1, 4 ), d( 1, 5 ),
2343 $ a( 1, 2 ), nmax, work, lwork, result, info )
2344 IF( info.NE.0 )
2345 $ WRITE( nout, fmt = 9980 )'DCHKSB', info
2346*
2347 ELSE IF( lsamen( 3, c3, 'DBB' ) ) THEN
2348*
2349* ------------------------------
2350* DBB: General Band Reduction
2351* ------------------------------
2352*
2353 maxtyp = 15
2354 ntypes = min( maxtyp, ntypes )
2355 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2356 DO 370 i = 1, nparms
2357 nrhs = nsval( i )
2358*
2359 IF( newsd.EQ.0 ) THEN
2360 DO 360 k = 1, 4
2361 iseed( k ) = ioldsd( k )
2362 360 CONTINUE
2363 END IF
2364 WRITE( nout, fmt = 9966 )c3, nrhs
2365 CALL dchkbb( nn, mval, nval, nk, kval, maxtyp, dotype, nrhs,
2366 $ iseed, thresh, nout, a( 1, 1 ), nmax,
2367 $ a( 1, 2 ), 2*nmax, d( 1, 1 ), d( 1, 2 ),
2368 $ a( 1, 4 ), nmax, a( 1, 5 ), nmax, a( 1, 6 ),
2369 $ nmax, a( 1, 7 ), work, lwork, result, info )
2370 IF( info.NE.0 )
2371 $ WRITE( nout, fmt = 9980 )'DCHKBB', info
2372 370 CONTINUE
2373*
2374 ELSE IF( lsamen( 3, c3, 'GLM' ) ) THEN
2375*
2376* -----------------------------------------
2377* GLM: Generalized Linear Regression Model
2378* -----------------------------------------
2379*
2380 CALL xlaenv( 1, 1 )
2381 IF( tsterr )
2382 $ CALL derrgg( 'GLM', nout )
2383 CALL dckglm( nn, mval, pval, nval, ntypes, iseed, thresh, nmax,
2384 $ a( 1, 1 ), a( 1, 2 ), b( 1, 1 ), b( 1, 2 ), x,
2385 $ work, d( 1, 1 ), nin, nout, info )
2386 IF( info.NE.0 )
2387 $ WRITE( nout, fmt = 9980 )'DCKGLM', info
2388*
2389 ELSE IF( lsamen( 3, c3, 'GQR' ) ) THEN
2390*
2391* ------------------------------------------
2392* GQR: Generalized QR and RQ factorizations
2393* ------------------------------------------
2394*
2395 CALL xlaenv( 1, 1 )
2396 IF( tsterr )
2397 $ CALL derrgg( 'GQR', nout )
2398 CALL dckgqr( nn, mval, nn, pval, nn, nval, ntypes, iseed,
2399 $ thresh, nmax, a( 1, 1 ), a( 1, 2 ), a( 1, 3 ),
2400 $ a( 1, 4 ), taua, b( 1, 1 ), b( 1, 2 ), b( 1, 3 ),
2401 $ b( 1, 4 ), b( 1, 5 ), taub, work, d( 1, 1 ), nin,
2402 $ nout, info )
2403 IF( info.NE.0 )
2404 $ WRITE( nout, fmt = 9980 )'DCKGQR', info
2405*
2406 ELSE IF( lsamen( 3, c3, 'GSV' ) ) THEN
2407*
2408* ----------------------------------------------
2409* GSV: Generalized Singular Value Decomposition
2410* ----------------------------------------------
2411*
2412 CALL xlaenv(1,1)
2413 IF( tsterr )
2414 $ CALL derrgg( 'GSV', nout )
2415 CALL dckgsv( nn, mval, pval, nval, ntypes, iseed, thresh, nmax,
2416 $ a( 1, 1 ), a( 1, 2 ), b( 1, 1 ), b( 1, 2 ),
2417 $ a( 1, 3 ), b( 1, 3 ), a( 1, 4 ), taua, taub,
2418 $ b( 1, 4 ), iwork, work, d( 1, 1 ), nin, nout,
2419 $ info )
2420 IF( info.NE.0 )
2421 $ WRITE( nout, fmt = 9980 )'DCKGSV', info
2422*
2423 ELSE IF( lsamen( 3, c3, 'CSD' ) ) THEN
2424*
2425* ----------------------------------------------
2426* CSD: CS Decomposition
2427* ----------------------------------------------
2428*
2429 CALL xlaenv(1,1)
2430 IF( tsterr )
2431 $ CALL derrgg( 'CSD', nout )
2432 CALL dckcsd( nn, mval, pval, nval, ntypes, iseed, thresh, nmax,
2433 $ a( 1, 1 ), a( 1, 2 ), a( 1, 3 ), a( 1, 4 ),
2434 $ a( 1, 5 ), a( 1, 6 ), a( 1, 7 ), iwork, work,
2435 $ d( 1, 1 ), nin, nout, info )
2436 IF( info.NE.0 )
2437 $ WRITE( nout, fmt = 9980 )'DCKCSD', info
2438*
2439 ELSE IF( lsamen( 3, c3, 'LSE' ) ) THEN
2440*
2441* --------------------------------------
2442* LSE: Constrained Linear Least Squares
2443* --------------------------------------
2444*
2445 CALL xlaenv( 1, 1 )
2446 IF( tsterr )
2447 $ CALL derrgg( 'LSE', nout )
2448 CALL dcklse( nn, mval, pval, nval, ntypes, iseed, thresh, nmax,
2449 $ a( 1, 1 ), a( 1, 2 ), b( 1, 1 ), b( 1, 2 ), x,
2450 $ work, d( 1, 1 ), nin, nout, info )
2451 IF( info.NE.0 )
2452 $ WRITE( nout, fmt = 9980 )'DCKLSE', info
2453*
2454 ELSE
2455 WRITE( nout, fmt = * )
2456 WRITE( nout, fmt = * )
2457 WRITE( nout, fmt = 9992 )c3
2458 END IF
2459 IF( .NOT.( dgx .OR. dxv ) )
2460 $ GO TO 190
2461 380 CONTINUE
2462 WRITE( nout, fmt = 9994 )
2463 s2 = dsecnd( )
2464 WRITE( nout, fmt = 9993 )s2 - s1
2465*
2466 DEALLOCATE (a, stat = allocatestatus)
2467 DEALLOCATE (b, stat = allocatestatus)
2468 DEALLOCATE (c, stat = allocatestatus)
2469 DEALLOCATE (work, stat = allocatestatus)
2470*
2471 9999 FORMAT( / ' Execution not attempted due to input errors' )
2472 9997 FORMAT( / / 1x, a3, ': NB =', i4, ', NBMIN =', i4, ', NX =', i4 )
2473 9996 FORMAT( / / 1x, a3, ': NB =', i4, ', NBMIN =', i4, ', NS =', i4,
2474 $ ', MAXB =', i4, ', IACC22 =', i4, ', NBCOL =', i4 )
2475 9995 FORMAT( / / 1x, a3, ': NB =', i4, ', NBMIN =', i4, ', NX =', i4,
2476 $ ', NRHS =', i4 )
2477 9994 FORMAT( / / ' End of tests' )
2478 9993 FORMAT( ' Total time used = ', f12.2, ' seconds', / )
2479 9992 FORMAT( 1x, a3, ': Unrecognized path name' )
2480 9991 FORMAT( / / ' *** Invalid integer value in column ', i2,
2481 $ ' of input', ' line:', / a79 )
2482 9990 FORMAT( / / 1x, a3, ' routines were not tested' )
2483 9989 FORMAT( ' Invalid input value: ', a, '=', i6, '; must be >=',
2484 $ i6 )
2485 9988 FORMAT( ' Invalid input value: ', a, '=', i6, '; must be <=',
2486 $ i6 )
2487 9987 FORMAT( ' Tests of the Nonsymmetric Eigenvalue Problem routines' )
2488 9986 FORMAT( ' Tests of the Symmetric Eigenvalue Problem routines' )
2489 9985 FORMAT( ' Tests of the Singular Value Decomposition routines' )
2490 9984 FORMAT( / ' The following parameter values will be used:' )
2491 9983 FORMAT( 4x, a, 10i6, / 10x, 10i6 )
2492 9982 FORMAT( / ' Routines pass computational tests if test ratio is ',
2493 $ 'less than', f8.2, / )
2494 9981 FORMAT( ' Relative machine ', a, ' is taken to be', d16.6 )
2495 9980 FORMAT( ' *** Error code from ', a, ' = ', i4 )
2496 9979 FORMAT( / ' Tests of the Nonsymmetric Eigenvalue Problem Driver',
2497 $ / ' DGEEV (eigenvalues and eigevectors)' )
2498 9978 FORMAT( / ' Tests of the Nonsymmetric Eigenvalue Problem Driver',
2499 $ / ' DGEES (Schur form)' )
2500 9977 FORMAT( / ' Tests of the Nonsymmetric Eigenvalue Problem Expert',
2501 $ ' Driver', / ' DGEEVX (eigenvalues, eigenvectors and',
2502 $ ' condition numbers)' )
2503 9976 FORMAT( / ' Tests of the Nonsymmetric Eigenvalue Problem Expert',
2504 $ ' Driver', / ' DGEESX (Schur form and condition',
2505 $ ' numbers)' )
2506 9975 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2507 $ 'Problem routines' )
2508 9974 FORMAT( ' Tests of DSBTRD', / ' (reduction of a symmetric band ',
2509 $ 'matrix to tridiagonal form)' )
2510 9973 FORMAT( / 1x, 71( '-' ) )
2511 9972 FORMAT( / ' LAPACK VERSION ', i1, '.', i1, '.', i1 )
2512 9971 FORMAT( / ' Tests of the Generalized Linear Regression Model ',
2513 $ 'routines' )
2514 9970 FORMAT( / ' Tests of the Generalized QR and RQ routines' )
2515 9969 FORMAT( / ' Tests of the Generalized Singular Value',
2516 $ ' Decomposition routines' )
2517 9968 FORMAT( / ' Tests of the Linear Least Squares routines' )
2518 9967 FORMAT( ' Tests of DGBBRD', / ' (reduction of a general band ',
2519 $ 'matrix to real bidiagonal form)' )
2520 9966 FORMAT( / / 1x, a3, ': NRHS =', i4 )
2521 9965 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2522 $ 'Problem Expert Driver DGGESX' )
2523 9964 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2524 $ 'Problem Driver DGGES' )
2525 9963 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2526 $ 'Problem Driver DGGEV' )
2527 9962 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2528 $ 'Problem Expert Driver DGGEVX' )
2529 9961 FORMAT( / / 1x, a3, ': NB =', i4, ', NBMIN =', i4, ', NX =', i4,
2530 $ ', INMIN=', i4,
2531 $ ', INWIN =', i4, ', INIBL =', i4, ', ISHFTS =', i4,
2532 $ ', IACC22 =', i4)
2533 9960 FORMAT( / ' Tests of the CS Decomposition routines' )
2534*
2535* End of DCHKEE
2536*
2537 END
subroutine alareq(path, nmats, dotype, ntypes, nin, nout)
ALAREQ
Definition alareq.f:90
subroutine xlaenv(ispec, nvalue)
XLAENV
Definition xlaenv.f:81
subroutine dchkbb(nsizes, mval, nval, nwdths, kk, ntypes, dotype, nrhs, iseed, thresh, nounit, a, lda, ab, ldab, bd, be, q, ldq, p, ldp, c, ldc, cc, work, lwork, result, info)
DCHKBB
Definition dchkbb.f:355
subroutine dchkbd(nsizes, mval, nval, ntypes, dotype, nrhs, iseed, thresh, a, lda, bd, be, s1, s2, x, ldx, y, z, q, ldq, pt, ldpt, u, vt, work, lwork, iwork, nout, info)
DCHKBD
Definition dchkbd.f:493
subroutine dchkbk(nin, nout)
DCHKBK
Definition dchkbk.f:55
subroutine dchkbl(nin, nout)
DCHKBL
Definition dchkbl.f:54
subroutine dchkec(thresh, tsterr, nin, nout)
DCHKEC
Definition dchkec.f:76
program dchkee
DCHKEE
Definition dchkee.F:1039
subroutine dchkgg(nsizes, nn, ntypes, dotype, iseed, thresh, tstdif, thrshn, nounit, a, lda, b, h, t, s1, s2, p1, p2, u, ldu, v, q, z, alphr1, alphi1, beta1, alphr3, alphi3, beta3, evectl, evectr, work, lwork, llwork, result, info)
DCHKGG
Definition dchkgg.f:511
subroutine dchkgk(nin, nout)
DCHKGK
Definition dchkgk.f:54
subroutine dchkgl(nin, nout)
DCHKGL
Definition dchkgl.f:53
subroutine dchkhs(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, h, t1, t2, u, ldu, z, uz, wr1, wi1, wr2, wi2, wr3, wi3, evectl, evectr, evecty, evectx, uu, tau, work, nwork, iwork, select, result, info)
DCHKHS
Definition dchkhs.f:422
subroutine dchksb2stg(nsizes, nn, nwdths, kk, ntypes, dotype, iseed, thresh, nounit, a, lda, sd, se, d1, d2, d3, u, ldu, work, lwork, result, info)
DCHKSB2STG
Definition dchksb2stg.f:332
subroutine dchksb(nsizes, nn, nwdths, kk, ntypes, dotype, iseed, thresh, nounit, a, lda, sd, se, u, ldu, work, lwork, result, info)
DCHKSB
Definition dchksb.f:293
subroutine dchkst2stg(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, ap, sd, se, d1, d2, d3, d4, d5, wa1, wa2, wa3, wr, u, ldu, v, vp, tau, z, work, lwork, iwork, liwork, result, info)
DCHKST2STG
Definition dchkst2stg.f:612
subroutine dchkst(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, ap, sd, se, d1, d2, d3, d4, d5, wa1, wa2, wa3, wr, u, ldu, v, vp, tau, z, work, lwork, iwork, liwork, result, info)
DCHKST
Definition dchkst.f:591
subroutine dckcsd(nm, mval, pval, qval, nmats, iseed, thresh, mmax, x, xf, u1, u2, v1t, v2t, theta, iwork, work, rwork, nin, nout, info)
DCKCSD
Definition dckcsd.f:184
subroutine dckglm(nn, mval, pval, nval, nmats, iseed, thresh, nmax, a, af, b, bf, x, work, rwork, nin, nout, info)
DCKGLM
Definition dckglm.f:167
subroutine dckgqr(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)
DCKGQR
Definition dckgqr.f:210
subroutine dckgsv(nm, mval, pval, nval, nmats, iseed, thresh, nmax, a, af, b, bf, u, v, q, alpha, beta, r, iwork, work, rwork, nin, nout, info)
DCKGSV
Definition dckgsv.f:198
subroutine dcklse(nn, mval, pval, nval, nmats, iseed, thresh, nmax, a, af, b, bf, x, work, rwork, nin, nout, info)
DCKLSE
Definition dcklse.f:167
subroutine ddrges3(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, b, s, t, q, ldq, z, alphar, alphai, beta, work, lwork, result, bwork, info)
DDRGES3
Definition ddrges3.f:403
subroutine ddrges(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, b, s, t, q, ldq, z, alphar, alphai, beta, work, lwork, result, bwork, info)
DDRGES
Definition ddrges.f:403
subroutine ddrgev3(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, b, s, t, q, ldq, z, qe, ldqe, alphar, alphai, beta, alphr1, alphi1, beta1, work, lwork, result, info)
DDRGEV3
Definition ddrgev3.f:408
subroutine ddrgev(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, b, s, t, q, ldq, z, qe, ldqe, alphar, alphai, beta, alphr1, alphi1, beta1, work, lwork, result, info)
DDRGEV
Definition ddrgev.f:408
subroutine ddrgsx(nsize, ncmax, thresh, nin, nout, a, lda, b, ai, bi, z, q, alphar, alphai, beta, c, ldc, s, work, lwork, iwork, liwork, bwork, info)
DDRGSX
Definition ddrgsx.f:359
subroutine ddrgvx(nsize, thresh, nin, nout, a, lda, b, ai, bi, alphar, alphai, beta, vl, vr, ilo, ihi, lscale, rscale, s, dtru, dif, diftru, work, lwork, iwork, liwork, result, bwork, info)
DDRGVX
Definition ddrgvx.f:300
subroutine ddrvbd(nsizes, mm, nn, ntypes, dotype, iseed, thresh, a, lda, u, ldu, vt, ldvt, asav, usav, vtsav, s, ssav, e, work, lwork, iwork, nout, info)
DDRVBD
Definition ddrvbd.f:366
subroutine ddrves(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, h, ht, wr, wi, wrt, wit, vs, ldvs, result, work, nwork, iwork, bwork, info)
DDRVES
Definition ddrves.f:388
subroutine ddrvev(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, h, wr, wi, wr1, wi1, vl, ldvl, vr, ldvr, lre, ldlre, result, work, nwork, iwork, info)
DDRVEV
Definition ddrvev.f:406
subroutine ddrvsg2stg(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, b, ldb, d, d2, z, ldz, ab, bb, ap, bp, work, nwork, iwork, liwork, result, info)
DDRVSG2STG
Definition ddrvsg2stg.f:362
subroutine ddrvsg(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, b, ldb, d, z, ldz, ab, bb, ap, bp, work, nwork, iwork, liwork, result, info)
DDRVSG
Definition ddrvsg.f:355
subroutine ddrvst2stg(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, d1, d2, d3, d4, eveigs, wa1, wa2, wa3, u, ldu, v, tau, z, work, lwork, iwork, liwork, result, info)
DDRVST2STG
Definition ddrvst2stg.f:453
subroutine ddrvst(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, d1, d2, d3, d4, eveigs, wa1, wa2, wa3, u, ldu, v, tau, z, work, lwork, iwork, liwork, result, info)
DDRVST
Definition ddrvst.f:453
subroutine ddrvsx(nsizes, nn, ntypes, dotype, iseed, thresh, niunit, nounit, a, lda, h, ht, wr, wi, wrt, wit, wrtmp, witmp, vs, ldvs, vs1, result, work, lwork, iwork, bwork, info)
DDRVSX
Definition ddrvsx.f:454
subroutine ddrvvx(nsizes, nn, ntypes, dotype, iseed, thresh, niunit, nounit, a, lda, h, wr, wi, wr1, wi1, vl, ldvl, vr, ldvr, lre, ldlre, rcondv, rcndv1, rcdvin, rconde, rcnde1, rcdein, scale, scale1, result, work, nwork, iwork, info)
DDRVVX
Definition ddrvvx.f:521
subroutine derrbd(path, nunit)
DERRBD
Definition derrbd.f:55
subroutine derred(path, nunit)
DERRED
Definition derred.f:70
subroutine derrgg(path, nunit)
DERRGG
Definition derrgg.f:57
subroutine derrhs(path, nunit)
DERRHS
Definition derrhs.f:55
subroutine derrst(path, nunit)
DERRST
Definition derrst.f:61
subroutine ilaver(vers_major, vers_minor, vers_patch)
ILAVER returns the LAPACK version.
Definition ilaver.f:51
double precision function dlamch(cmach)
DLAMCH
Definition dlamch.f:69
logical function lsamen(n, ca, cb)
LSAMEN
Definition lsamen.f:74
double precision function dsecnd()
DSECND Using ETIME
logical function lse(ri, rj, lr)
Definition sblat2.f:2970