LAPACK 3.11.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
schkee.F
Go to the documentation of this file.
1*> \brief \b SCHKEE
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 SCHKEE
12*
13*
14*> \par Purpose:
15* =============
16*>
17*> \verbatim
18*>
19*> SCHKEE tests the REAL LAPACK subroutines for the matrix
20*> eigenvalue problem. The test paths in this version are
21*>
22*> NEP (Nonsymmetric Eigenvalue Problem):
23*> Test SGEHRD, SORGHR, SHSEQR, STREVC, SHSEIN, and SORMHR
24*>
25*> SEP (Symmetric Eigenvalue Problem):
26*> Test SSYTRD, SORGTR, SSTEQR, SSTERF, SSTEIN, SSTEDC,
27*> and drivers SSYEV(X), SSBEV(X), SSPEV(X), SSTEV(X),
28*> SSYEVD, SSBEVD, SSPEVD, SSTEVD
29*>
30*> SVD (Singular Value Decomposition):
31*> Test SGEBRD, SORGBR, SBDSQR, SBDSDC
32*> and the drivers SGESVD, SGESDD
33*>
34*> SEV (Nonsymmetric Eigenvalue/eigenvector Driver):
35*> Test SGEEV
36*>
37*> SES (Nonsymmetric Schur form Driver):
38*> Test SGEES
39*>
40*> SVX (Nonsymmetric Eigenvalue/eigenvector Expert Driver):
41*> Test SGEEVX
42*>
43*> SSX (Nonsymmetric Schur form Expert Driver):
44*> Test SGEESX
45*>
46*> SGG (Generalized Nonsymmetric Eigenvalue Problem):
47*> Test SGGHD3, SGGBAL, SGGBAK, SHGEQZ, and STGEVC
48*>
49*> SGS (Generalized Nonsymmetric Schur form Driver):
50*> Test SGGES
51*>
52*> SGV (Generalized Nonsymmetric Eigenvalue/eigenvector Driver):
53*> Test SGGEV
54*>
55*> SGX (Generalized Nonsymmetric Schur form Expert Driver):
56*> Test SGGESX
57*>
58*> SXV (Generalized Nonsymmetric Eigenvalue/eigenvector Expert Driver):
59*> Test SGGEVX
60*>
61*> SSG (Symmetric Generalized Eigenvalue Problem):
62*> Test SSYGST, SSYGV, SSYGVD, SSYGVX, SSPGST, SSPGV, SSPGVD,
63*> SSPGVX, SSBGST, SSBGV, SSBGVD, and SSBGVX
64*>
65*> SSB (Symmetric Band Eigenvalue Problem):
66*> Test SSBTRD
67*>
68*> SBB (Band Singular Value Decomposition):
69*> Test SGBBRD
70*>
71*> SEC (Eigencondition estimation):
72*> Test SLALN2, SLASY2, SLAEQU, SLAEXC, STRSYL, STREXC, STRSNA,
73*> STRSEN, and SLAQTR
74*>
75*> SBL (Balancing a general matrix)
76*> Test SGEBAL
77*>
78*> SBK (Back transformation on a balanced matrix)
79*> Test SGEBAK
80*>
81*> SGL (Balancing a matrix pair)
82*> Test SGGBAL
83*>
84*> SGK (Back transformation on a matrix pair)
85*> Test SGGBAK
86*>
87*> GLM (Generalized Linear Regression Model):
88*> Tests SGGGLM
89*>
90*> GQR (Generalized QR and RQ factorizations):
91*> Tests SGGQRF and SGGRQF
92*>
93*> GSV (Generalized Singular Value Decomposition):
94*> Tests SGGSVD, SGGSVP, STGSJA, SLAGS2, SLAPLL, and SLAPMT
95*>
96*> CSD (CS decomposition):
97*> Tests SORCSD
98*>
99*> LSE (Constrained Linear Least Squares):
100*> Tests SGGLSE
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*> SHS or NEP 21 SCHKHS
115*> SST or SEP 21 SCHKST (routines)
116*> 18 SDRVST (drivers)
117*> SBD or SVD 16 SCHKBD (routines)
118*> 5 SDRVBD (drivers)
119*> SEV 21 SDRVEV
120*> SES 21 SDRVES
121*> SVX 21 SDRVVX
122*> SSX 21 SDRVSX
123*> SGG 26 SCHKGG (routines)
124*> SGS 26 SDRGES
125*> SGX 5 SDRGSX
126*> SGV 26 SDRGEV
127*> SXV 2 SDRGVX
128*> SSG 21 SDRVSG
129*> SSB 15 SCHKSB
130*> SBB 15 SCHKBB
131*> SEC - SCHKEC
132*> SBL - SCHKBL
133*> SBK - SCHKBK
134*> SGL - SCHKGL
135*> SGK - SCHKGK
136*> GLM 8 SCKGLM
137*> GQR 8 SCKGQR
138*> GSV 8 SCKGSV
139*> CSD 3 SCKCSD
140*> LSE 8 SCKLSE
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 SSG 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*> 'SSG' 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*> SEV and SES data files:
333*>
334*> line 1: 'SEV' or 'SES' 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 'SEV' to test SGEEV, or
375*> 'SES' to test SGEES.
376*>
377*>-----------------------------------------------------------------------
378*>
379*> The SVX data has two parts. The first part is identical to SEV,
380*> and the second part consists of test matrices with precomputed
381*> solutions.
382*>
383*> line 1: 'SVX' 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 'SVX' 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 SSX data is like SVX. The first part is identical to SEV, and the
425*> second part consists of test matrices with precomputed solutions.
426*>
427*> line 1: 'SSX' 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 'SSX' 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*> SGG 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 'SGG' for the generalized
530*> eigenvalue problem routines and driver routines.
531*>
532*>-----------------------------------------------------------------------
533*>
534*> SGS and SGV input files:
535*>
536*> line 1: 'SGS' or 'SGV' 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 'SGS' for the generalized
575*> eigenvalue problem routines and driver routines.
576*>
577*>-----------------------------------------------------------------------
578*>
579*> SXV input files:
580*>
581*> line 1: 'SXV' 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*> SGX input files:
634*>
635*> line 1: 'SGX' 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*> SSB 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 'SSB'.
723*>
724*>-----------------------------------------------------------------------
725*>
726*> SBB 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 'SBB'.
768*>
769*>-----------------------------------------------------------------------
770*>
771*> SEC 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*> SBL and SBK input files:
787*>
788*> line 1: 'SBL' in columns 1-3 to test SGEBAL, or 'SBK' in
789*> columns 1-3 to test SGEBAK.
790*>
791*> The remaining lines consist of specially constructed test cases.
792*>
793*>-----------------------------------------------------------------------
794*>
795*> SGL and SGK input files:
796*>
797*> line 1: 'SGL' in columns 1-3 to test SGGBAL, or 'SGK' in
798*> columns 1-3 to test SGGBAK.
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 SGG.
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 single_eig
1037*
1038* =====================================================================
1039 PROGRAM schkee
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, fatal, glm, gqr, gsv, lse, nep, sbb, sbk,
1071 $ sbl, sep, ses, sev, sgg, sgk, sgl, sgs, sgv,
1072 $ sgx, ssb, ssx, svd, svx, sxv, 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 REAL 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 REAL d( nmax, 12 ), result( 500 ), taua( nmax ),
1095 $ taub( nmax ), x( 5*nmax )
1096* ..
1097* .. Allocatable Arrays ..
1098 INTEGER allocatestatus
1099 REAL, DIMENSION(:), ALLOCATABLE :: work
1100 REAL, DIMENSION(:,:), ALLOCATABLE :: a, b, c
1101* ..
1102* .. External Functions ..
1103 LOGICAL lsamen
1104 REAL second, slamch
1105 EXTERNAL lsamen, second, slamch
1106* ..
1107* .. External Subroutines ..
1108 EXTERNAL alareq, schkbb, schkbd, schkbk, schkbl, schkec,
1114 $ sdrges3, sdrgev3,
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 REAL selwi( 20 ), selwr( 20 )
1130* ..
1131* .. Common blocks ..
1132 COMMON / cenvir / nproc, nshift, maxb
1133 COMMON / claenv / iparms
1134 COMMON / infoc / infot, nunit, ok, lerr
1135 COMMON / srnamc / srnamt
1136 COMMON / sslct / selopt, seldim, selval, selwr, selwi
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 = second( )
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, 'SHS' )
1172 sep = lsamen( 3, path, 'SEP' ) .OR. lsamen( 3, path, 'SST' ) .OR.
1173 $ lsamen( 3, path, 'SSG' ) .OR. lsamen( 3, path, 'SE2' )
1174 svd = lsamen( 3, path, 'SVD' ) .OR. lsamen( 3, path, 'DBD' )
1175 svd = lsamen( 3, path, 'SVD' ) .OR. lsamen( 3, path, 'SBD' )
1176 sev = lsamen( 3, path, 'SEV' )
1177 ses = lsamen( 3, path, 'SES' )
1178 svx = lsamen( 3, path, 'SVX' )
1179 ssx = lsamen( 3, path, 'SSX' )
1180 sgg = lsamen( 3, path, 'SGG' )
1181 sgs = lsamen( 3, path, 'SGS' )
1182 sgx = lsamen( 3, path, 'SGX' )
1183 sgv = lsamen( 3, path, 'SGV' )
1184 sxv = lsamen( 3, path, 'SXV' )
1185 ssb = lsamen( 3, path, 'SSB' )
1186 sbb = lsamen( 3, path, 'SBB' )
1187 glm = lsamen( 3, path, 'GLM' )
1188 gqr = lsamen( 3, path, 'GQR' ) .OR. lsamen( 3, path, 'GRQ' )
1189 gsv = lsamen( 3, path, 'GSV' )
1190 csd = lsamen( 3, path, 'CSD' )
1191 lse = lsamen( 3, path, 'LSE' )
1192 sbl = lsamen( 3, path, 'SBL' )
1193 sbk = lsamen( 3, path, 'SBK' )
1194 sgl = lsamen( 3, path, 'SGL' )
1195 sgk = lsamen( 3, path, 'SGK' )
1196*
1197* Report values of parameters.
1198*
1199 IF( path.EQ.' ' ) THEN
1200 GO TO 10
1201 ELSE IF( nep ) THEN
1202 WRITE( nout, fmt = 9987 )
1203 ELSE IF( sep ) THEN
1204 WRITE( nout, fmt = 9986 )
1205 ELSE IF( svd ) THEN
1206 WRITE( nout, fmt = 9985 )
1207 ELSE IF( sev ) THEN
1208 WRITE( nout, fmt = 9979 )
1209 ELSE IF( ses ) THEN
1210 WRITE( nout, fmt = 9978 )
1211 ELSE IF( svx ) THEN
1212 WRITE( nout, fmt = 9977 )
1213 ELSE IF( ssx ) THEN
1214 WRITE( nout, fmt = 9976 )
1215 ELSE IF( sgg ) THEN
1216 WRITE( nout, fmt = 9975 )
1217 ELSE IF( sgs ) THEN
1218 WRITE( nout, fmt = 9964 )
1219 ELSE IF( sgx ) THEN
1220 WRITE( nout, fmt = 9965 )
1221 ELSE IF( sgv ) THEN
1222 WRITE( nout, fmt = 9963 )
1223 ELSE IF( sxv ) THEN
1224 WRITE( nout, fmt = 9962 )
1225 ELSE IF( ssb ) THEN
1226 WRITE( nout, fmt = 9974 )
1227 ELSE IF( sbb ) THEN
1228 WRITE( nout, fmt = 9967 )
1229 ELSE IF( glm ) THEN
1230 WRITE( nout, fmt = 9971 )
1231 ELSE IF( gqr ) THEN
1232 WRITE( nout, fmt = 9970 )
1233 ELSE IF( gsv ) THEN
1234 WRITE( nout, fmt = 9969 )
1235 ELSE IF( csd ) THEN
1236 WRITE( nout, fmt = 9960 )
1237 ELSE IF( lse ) THEN
1238 WRITE( nout, fmt = 9968 )
1239 ELSE IF( sbl ) THEN
1240*
1241* SGEBAL: Balancing
1242*
1243 CALL schkbl( nin, nout )
1244 GO TO 10
1245 ELSE IF( sbk ) THEN
1246*
1247* SGEBAK: Back transformation
1248*
1249 CALL schkbk( nin, nout )
1250 GO TO 10
1251 ELSE IF( sgl ) THEN
1252*
1253* SGGBAL: Balancing
1254*
1255 CALL schkgl( nin, nout )
1256 GO TO 10
1257 ELSE IF( sgk ) THEN
1258*
1259* SGGBAK: Back transformation
1260*
1261 CALL schkgk( nin, nout )
1262 GO TO 10
1263 ELSE IF( lsamen( 3, path, 'SEC' ) ) THEN
1264*
1265* SEC: Eigencondition estimation
1266*
1267 READ( nin, fmt = * )thresh
1268 CALL xlaenv( 1, 1 )
1269 CALL xlaenv( 12, 11 )
1270 CALL xlaenv( 13, 2 )
1271 CALL xlaenv( 14, 0 )
1272 CALL xlaenv( 15, 2 )
1273 CALL xlaenv( 16, 2 )
1274 tsterr = .true.
1275 CALL schkec( thresh, tsterr, nin, nout )
1276 GO TO 10
1277 ELSE
1278 WRITE( nout, fmt = 9992 )path
1279 GO TO 10
1280 END IF
1281 CALL ilaver( vers_major, vers_minor, vers_patch )
1282 WRITE( nout, fmt = 9972 ) vers_major, vers_minor, vers_patch
1283 WRITE( nout, fmt = 9984 )
1284*
1285* Read the number of values of M, P, and N.
1286*
1287 READ( nin, fmt = * )nn
1288 IF( nn.LT.0 ) THEN
1289 WRITE( nout, fmt = 9989 )' NN ', nn, 1
1290 nn = 0
1291 fatal = .true.
1292 ELSE IF( nn.GT.maxin ) THEN
1293 WRITE( nout, fmt = 9988 )' NN ', nn, maxin
1294 nn = 0
1295 fatal = .true.
1296 END IF
1297*
1298* Read the values of M
1299*
1300 IF( .NOT.( sgx .OR. sxv ) ) THEN
1301 READ( nin, fmt = * )( mval( i ), i = 1, nn )
1302 IF( svd ) THEN
1303 vname = ' M '
1304 ELSE
1305 vname = ' N '
1306 END IF
1307 DO 20 i = 1, nn
1308 IF( mval( i ).LT.0 ) THEN
1309 WRITE( nout, fmt = 9989 )vname, mval( i ), 0
1310 fatal = .true.
1311 ELSE IF( mval( i ).GT.nmax ) THEN
1312 WRITE( nout, fmt = 9988 )vname, mval( i ), nmax
1313 fatal = .true.
1314 END IF
1315 20 CONTINUE
1316 WRITE( nout, fmt = 9983 )'M: ', ( mval( i ), i = 1, nn )
1317 END IF
1318*
1319* Read the values of P
1320*
1321 IF( glm .OR. gqr .OR. gsv .OR. csd .OR. lse ) THEN
1322 READ( nin, fmt = * )( pval( i ), i = 1, nn )
1323 DO 30 i = 1, nn
1324 IF( pval( i ).LT.0 ) THEN
1325 WRITE( nout, fmt = 9989 )' P ', pval( i ), 0
1326 fatal = .true.
1327 ELSE IF( pval( i ).GT.nmax ) THEN
1328 WRITE( nout, fmt = 9988 )' P ', pval( i ), nmax
1329 fatal = .true.
1330 END IF
1331 30 CONTINUE
1332 WRITE( nout, fmt = 9983 )'P: ', ( pval( i ), i = 1, nn )
1333 END IF
1334*
1335* Read the values of N
1336*
1337 IF( svd .OR. sbb .OR. glm .OR. gqr .OR. gsv .OR. csd .OR.
1338 $ lse ) THEN
1339 READ( nin, fmt = * )( nval( i ), i = 1, nn )
1340 DO 40 i = 1, nn
1341 IF( nval( i ).LT.0 ) THEN
1342 WRITE( nout, fmt = 9989 )' N ', nval( i ), 0
1343 fatal = .true.
1344 ELSE IF( nval( i ).GT.nmax ) THEN
1345 WRITE( nout, fmt = 9988 )' N ', nval( i ), nmax
1346 fatal = .true.
1347 END IF
1348 40 CONTINUE
1349 ELSE
1350 DO 50 i = 1, nn
1351 nval( i ) = mval( i )
1352 50 CONTINUE
1353 END IF
1354 IF( .NOT.( sgx .OR. sxv ) ) THEN
1355 WRITE( nout, fmt = 9983 )'N: ', ( nval( i ), i = 1, nn )
1356 ELSE
1357 WRITE( nout, fmt = 9983 )'N: ', nn
1358 END IF
1359*
1360* Read the number of values of K, followed by the values of K
1361*
1362 IF( ssb .OR. sbb ) THEN
1363 READ( nin, fmt = * )nk
1364 READ( nin, fmt = * )( kval( i ), i = 1, nk )
1365 DO 60 i = 1, nk
1366 IF( kval( i ).LT.0 ) THEN
1367 WRITE( nout, fmt = 9989 )' K ', kval( i ), 0
1368 fatal = .true.
1369 ELSE IF( kval( i ).GT.nmax ) THEN
1370 WRITE( nout, fmt = 9988 )' K ', kval( i ), nmax
1371 fatal = .true.
1372 END IF
1373 60 CONTINUE
1374 WRITE( nout, fmt = 9983 )'K: ', ( kval( i ), i = 1, nk )
1375 END IF
1376*
1377 IF( sev .OR. ses .OR. svx .OR. ssx ) THEN
1378*
1379* For the nonsymmetric QR driver routines, only one set of
1380* parameters is allowed.
1381*
1382 READ( nin, fmt = * )nbval( 1 ), nbmin( 1 ), nxval( 1 ),
1383 $ inmin( 1 ), inwin( 1 ), inibl(1), ishfts(1), iacc22(1)
1384 IF( nbval( 1 ).LT.1 ) THEN
1385 WRITE( nout, fmt = 9989 )' NB ', nbval( 1 ), 1
1386 fatal = .true.
1387 ELSE IF( nbmin( 1 ).LT.1 ) THEN
1388 WRITE( nout, fmt = 9989 )'NBMIN ', nbmin( 1 ), 1
1389 fatal = .true.
1390 ELSE IF( nxval( 1 ).LT.1 ) THEN
1391 WRITE( nout, fmt = 9989 )' NX ', nxval( 1 ), 1
1392 fatal = .true.
1393 ELSE IF( inmin( 1 ).LT.1 ) THEN
1394 WRITE( nout, fmt = 9989 )' INMIN ', inmin( 1 ), 1
1395 fatal = .true.
1396 ELSE IF( inwin( 1 ).LT.1 ) THEN
1397 WRITE( nout, fmt = 9989 )' INWIN ', inwin( 1 ), 1
1398 fatal = .true.
1399 ELSE IF( inibl( 1 ).LT.1 ) THEN
1400 WRITE( nout, fmt = 9989 )' INIBL ', inibl( 1 ), 1
1401 fatal = .true.
1402 ELSE IF( ishfts( 1 ).LT.1 ) THEN
1403 WRITE( nout, fmt = 9989 )' ISHFTS ', ishfts( 1 ), 1
1404 fatal = .true.
1405 ELSE IF( iacc22( 1 ).LT.0 ) THEN
1406 WRITE( nout, fmt = 9989 )' IACC22 ', iacc22( 1 ), 0
1407 fatal = .true.
1408 END IF
1409 CALL xlaenv( 1, nbval( 1 ) )
1410 CALL xlaenv( 2, nbmin( 1 ) )
1411 CALL xlaenv( 3, nxval( 1 ) )
1412 CALL xlaenv(12, max( 11, inmin( 1 ) ) )
1413 CALL xlaenv(13, inwin( 1 ) )
1414 CALL xlaenv(14, inibl( 1 ) )
1415 CALL xlaenv(15, ishfts( 1 ) )
1416 CALL xlaenv(16, iacc22( 1 ) )
1417 WRITE( nout, fmt = 9983 )'NB: ', nbval( 1 )
1418 WRITE( nout, fmt = 9983 )'NBMIN:', nbmin( 1 )
1419 WRITE( nout, fmt = 9983 )'NX: ', nxval( 1 )
1420 WRITE( nout, fmt = 9983 )'INMIN: ', inmin( 1 )
1421 WRITE( nout, fmt = 9983 )'INWIN: ', inwin( 1 )
1422 WRITE( nout, fmt = 9983 )'INIBL: ', inibl( 1 )
1423 WRITE( nout, fmt = 9983 )'ISHFTS: ', ishfts( 1 )
1424 WRITE( nout, fmt = 9983 )'IACC22: ', iacc22( 1 )
1425*
1426 ELSE IF( sgs .OR. sgx .OR. sgv .OR. sxv ) THEN
1427*
1428* For the nonsymmetric generalized driver routines, only one set
1429* of parameters is allowed.
1430*
1431 READ( nin, fmt = * )nbval( 1 ), nbmin( 1 ), nxval( 1 ),
1432 $ nsval( 1 ), mxbval( 1 )
1433 IF( nbval( 1 ).LT.1 ) THEN
1434 WRITE( nout, fmt = 9989 )' NB ', nbval( 1 ), 1
1435 fatal = .true.
1436 ELSE IF( nbmin( 1 ).LT.1 ) THEN
1437 WRITE( nout, fmt = 9989 )'NBMIN ', nbmin( 1 ), 1
1438 fatal = .true.
1439 ELSE IF( nxval( 1 ).LT.1 ) THEN
1440 WRITE( nout, fmt = 9989 )' NX ', nxval( 1 ), 1
1441 fatal = .true.
1442 ELSE IF( nsval( 1 ).LT.2 ) THEN
1443 WRITE( nout, fmt = 9989 )' NS ', nsval( 1 ), 2
1444 fatal = .true.
1445 ELSE IF( mxbval( 1 ).LT.1 ) THEN
1446 WRITE( nout, fmt = 9989 )' MAXB ', mxbval( 1 ), 1
1447 fatal = .true.
1448 END IF
1449 CALL xlaenv( 1, nbval( 1 ) )
1450 CALL xlaenv( 2, nbmin( 1 ) )
1451 CALL xlaenv( 3, nxval( 1 ) )
1452 CALL xlaenv( 4, nsval( 1 ) )
1453 CALL xlaenv( 8, mxbval( 1 ) )
1454 WRITE( nout, fmt = 9983 )'NB: ', nbval( 1 )
1455 WRITE( nout, fmt = 9983 )'NBMIN:', nbmin( 1 )
1456 WRITE( nout, fmt = 9983 )'NX: ', nxval( 1 )
1457 WRITE( nout, fmt = 9983 )'NS: ', nsval( 1 )
1458 WRITE( nout, fmt = 9983 )'MAXB: ', mxbval( 1 )
1459*
1460 ELSE IF( .NOT.ssb .AND. .NOT.glm .AND. .NOT.gqr .AND. .NOT.
1461 $ gsv .AND. .NOT.csd .AND. .NOT.lse ) THEN
1462*
1463* For the other paths, the number of parameters can be varied
1464* from the input file. Read the number of parameter values.
1465*
1466 READ( nin, fmt = * )nparms
1467 IF( nparms.LT.1 ) THEN
1468 WRITE( nout, fmt = 9989 )'NPARMS', nparms, 1
1469 nparms = 0
1470 fatal = .true.
1471 ELSE IF( nparms.GT.maxin ) THEN
1472 WRITE( nout, fmt = 9988 )'NPARMS', nparms, maxin
1473 nparms = 0
1474 fatal = .true.
1475 END IF
1476*
1477* Read the values of NB
1478*
1479 IF( .NOT.sbb ) THEN
1480 READ( nin, fmt = * )( nbval( i ), i = 1, nparms )
1481 DO 70 i = 1, nparms
1482 IF( nbval( i ).LT.0 ) THEN
1483 WRITE( nout, fmt = 9989 )' NB ', nbval( i ), 0
1484 fatal = .true.
1485 ELSE IF( nbval( i ).GT.nmax ) THEN
1486 WRITE( nout, fmt = 9988 )' NB ', nbval( i ), nmax
1487 fatal = .true.
1488 END IF
1489 70 CONTINUE
1490 WRITE( nout, fmt = 9983 )'NB: ',
1491 $ ( nbval( i ), i = 1, nparms )
1492 END IF
1493*
1494* Read the values of NBMIN
1495*
1496 IF( nep .OR. sep .OR. svd .OR. sgg ) THEN
1497 READ( nin, fmt = * )( nbmin( i ), i = 1, nparms )
1498 DO 80 i = 1, nparms
1499 IF( nbmin( i ).LT.0 ) THEN
1500 WRITE( nout, fmt = 9989 )'NBMIN ', nbmin( i ), 0
1501 fatal = .true.
1502 ELSE IF( nbmin( i ).GT.nmax ) THEN
1503 WRITE( nout, fmt = 9988 )'NBMIN ', nbmin( i ), nmax
1504 fatal = .true.
1505 END IF
1506 80 CONTINUE
1507 WRITE( nout, fmt = 9983 )'NBMIN:',
1508 $ ( nbmin( i ), i = 1, nparms )
1509 ELSE
1510 DO 90 i = 1, nparms
1511 nbmin( i ) = 1
1512 90 CONTINUE
1513 END IF
1514*
1515* Read the values of NX
1516*
1517 IF( nep .OR. sep .OR. svd ) THEN
1518 READ( nin, fmt = * )( nxval( i ), i = 1, nparms )
1519 DO 100 i = 1, nparms
1520 IF( nxval( i ).LT.0 ) THEN
1521 WRITE( nout, fmt = 9989 )' NX ', nxval( i ), 0
1522 fatal = .true.
1523 ELSE IF( nxval( i ).GT.nmax ) THEN
1524 WRITE( nout, fmt = 9988 )' NX ', nxval( i ), nmax
1525 fatal = .true.
1526 END IF
1527 100 CONTINUE
1528 WRITE( nout, fmt = 9983 )'NX: ',
1529 $ ( nxval( i ), i = 1, nparms )
1530 ELSE
1531 DO 110 i = 1, nparms
1532 nxval( i ) = 1
1533 110 CONTINUE
1534 END IF
1535*
1536* Read the values of NSHIFT (if SGG) or NRHS (if SVD
1537* or SBB).
1538*
1539 IF( svd .OR. sbb .OR. sgg ) THEN
1540 READ( nin, fmt = * )( nsval( i ), i = 1, nparms )
1541 DO 120 i = 1, nparms
1542 IF( nsval( i ).LT.0 ) THEN
1543 WRITE( nout, fmt = 9989 )' NS ', nsval( i ), 0
1544 fatal = .true.
1545 ELSE IF( nsval( i ).GT.nmax ) THEN
1546 WRITE( nout, fmt = 9988 )' NS ', nsval( i ), nmax
1547 fatal = .true.
1548 END IF
1549 120 CONTINUE
1550 WRITE( nout, fmt = 9983 )'NS: ',
1551 $ ( nsval( i ), i = 1, nparms )
1552 ELSE
1553 DO 130 i = 1, nparms
1554 nsval( i ) = 1
1555 130 CONTINUE
1556 END IF
1557*
1558* Read the values for MAXB.
1559*
1560 IF( sgg ) THEN
1561 READ( nin, fmt = * )( mxbval( i ), i = 1, nparms )
1562 DO 140 i = 1, nparms
1563 IF( mxbval( i ).LT.0 ) THEN
1564 WRITE( nout, fmt = 9989 )' MAXB ', mxbval( i ), 0
1565 fatal = .true.
1566 ELSE IF( mxbval( i ).GT.nmax ) THEN
1567 WRITE( nout, fmt = 9988 )' MAXB ', mxbval( i ), nmax
1568 fatal = .true.
1569 END IF
1570 140 CONTINUE
1571 WRITE( nout, fmt = 9983 )'MAXB: ',
1572 $ ( mxbval( i ), i = 1, nparms )
1573 ELSE
1574 DO 150 i = 1, nparms
1575 mxbval( i ) = 1
1576 150 CONTINUE
1577 END IF
1578*
1579* Read the values for INMIN.
1580*
1581 IF( nep ) THEN
1582 READ( nin, fmt = * )( inmin( i ), i = 1, nparms )
1583 DO 540 i = 1, nparms
1584 IF( inmin( i ).LT.0 ) THEN
1585 WRITE( nout, fmt = 9989 )' INMIN ', inmin( i ), 0
1586 fatal = .true.
1587 END IF
1588 540 CONTINUE
1589 WRITE( nout, fmt = 9983 )'INMIN: ',
1590 $ ( inmin( i ), i = 1, nparms )
1591 ELSE
1592 DO 550 i = 1, nparms
1593 inmin( i ) = 1
1594 550 CONTINUE
1595 END IF
1596*
1597* Read the values for INWIN.
1598*
1599 IF( nep ) THEN
1600 READ( nin, fmt = * )( inwin( i ), i = 1, nparms )
1601 DO 560 i = 1, nparms
1602 IF( inwin( i ).LT.0 ) THEN
1603 WRITE( nout, fmt = 9989 )' INWIN ', inwin( i ), 0
1604 fatal = .true.
1605 END IF
1606 560 CONTINUE
1607 WRITE( nout, fmt = 9983 )'INWIN: ',
1608 $ ( inwin( i ), i = 1, nparms )
1609 ELSE
1610 DO 570 i = 1, nparms
1611 inwin( i ) = 1
1612 570 CONTINUE
1613 END IF
1614*
1615* Read the values for INIBL.
1616*
1617 IF( nep ) THEN
1618 READ( nin, fmt = * )( inibl( i ), i = 1, nparms )
1619 DO 580 i = 1, nparms
1620 IF( inibl( i ).LT.0 ) THEN
1621 WRITE( nout, fmt = 9989 )' INIBL ', inibl( i ), 0
1622 fatal = .true.
1623 END IF
1624 580 CONTINUE
1625 WRITE( nout, fmt = 9983 )'INIBL: ',
1626 $ ( inibl( i ), i = 1, nparms )
1627 ELSE
1628 DO 590 i = 1, nparms
1629 inibl( i ) = 1
1630 590 CONTINUE
1631 END IF
1632*
1633* Read the values for ISHFTS.
1634*
1635 IF( nep ) THEN
1636 READ( nin, fmt = * )( ishfts( i ), i = 1, nparms )
1637 DO 600 i = 1, nparms
1638 IF( ishfts( i ).LT.0 ) THEN
1639 WRITE( nout, fmt = 9989 )' ISHFTS ', ishfts( i ), 0
1640 fatal = .true.
1641 END IF
1642 600 CONTINUE
1643 WRITE( nout, fmt = 9983 )'ISHFTS: ',
1644 $ ( ishfts( i ), i = 1, nparms )
1645 ELSE
1646 DO 610 i = 1, nparms
1647 ishfts( i ) = 1
1648 610 CONTINUE
1649 END IF
1650*
1651* Read the values for IACC22.
1652*
1653 IF( nep .OR. sgg ) THEN
1654 READ( nin, fmt = * )( iacc22( i ), i = 1, nparms )
1655 DO 620 i = 1, nparms
1656 IF( iacc22( i ).LT.0 ) THEN
1657 WRITE( nout, fmt = 9989 )' IACC22 ', iacc22( i ), 0
1658 fatal = .true.
1659 END IF
1660 620 CONTINUE
1661 WRITE( nout, fmt = 9983 )'IACC22: ',
1662 $ ( iacc22( i ), i = 1, nparms )
1663 ELSE
1664 DO 630 i = 1, nparms
1665 iacc22( i ) = 1
1666 630 CONTINUE
1667 END IF
1668*
1669* Read the values for NBCOL.
1670*
1671 IF( sgg ) THEN
1672 READ( nin, fmt = * )( nbcol( i ), i = 1, nparms )
1673 DO 160 i = 1, nparms
1674 IF( nbcol( i ).LT.0 ) THEN
1675 WRITE( nout, fmt = 9989 )'NBCOL ', nbcol( i ), 0
1676 fatal = .true.
1677 ELSE IF( nbcol( i ).GT.nmax ) THEN
1678 WRITE( nout, fmt = 9988 )'NBCOL ', nbcol( i ), nmax
1679 fatal = .true.
1680 END IF
1681 160 CONTINUE
1682 WRITE( nout, fmt = 9983 )'NBCOL:',
1683 $ ( nbcol( i ), i = 1, nparms )
1684 ELSE
1685 DO 170 i = 1, nparms
1686 nbcol( i ) = 1
1687 170 CONTINUE
1688 END IF
1689 END IF
1690*
1691* Calculate and print the machine dependent constants.
1692*
1693 WRITE( nout, fmt = * )
1694 eps = slamch( 'Underflow threshold' )
1695 WRITE( nout, fmt = 9981 )'underflow', eps
1696 eps = slamch( 'Overflow threshold' )
1697 WRITE( nout, fmt = 9981 )'overflow ', eps
1698 eps = slamch( 'Epsilon' )
1699 WRITE( nout, fmt = 9981 )'precision', eps
1700*
1701* Read the threshold value for the test ratios.
1702*
1703 READ( nin, fmt = * )thresh
1704 WRITE( nout, fmt = 9982 )thresh
1705 IF( sep .OR. svd .OR. sgg ) THEN
1706*
1707* Read the flag that indicates whether to test LAPACK routines.
1708*
1709 READ( nin, fmt = * )tstchk
1710*
1711* Read the flag that indicates whether to test driver routines.
1712*
1713 READ( nin, fmt = * )tstdrv
1714 END IF
1715*
1716* Read the flag that indicates whether to test the error exits.
1717*
1718 READ( nin, fmt = * )tsterr
1719*
1720* Read the code describing how to set the random number seed.
1721*
1722 READ( nin, fmt = * )newsd
1723*
1724* If NEWSD = 2, read another line with 4 integers for the seed.
1725*
1726 IF( newsd.EQ.2 )
1727 $ READ( nin, fmt = * )( ioldsd( i ), i = 1, 4 )
1728*
1729 DO 180 i = 1, 4
1730 iseed( i ) = ioldsd( i )
1731 180 CONTINUE
1732*
1733 IF( fatal ) THEN
1734 WRITE( nout, fmt = 9999 )
1735 stop
1736 END IF
1737*
1738* Read the input lines indicating the test path and its parameters.
1739* The first three characters indicate the test path, and the number
1740* of test matrix types must be the first nonblank item in columns
1741* 4-80.
1742*
1743 190 CONTINUE
1744*
1745 IF( .NOT.( sgx .OR. sxv ) ) THEN
1746*
1747 200 CONTINUE
1748 READ( nin, fmt = '(A80)', END = 380 )line
1749 c3 = line( 1: 3 )
1750 lenp = len( line )
1751 i = 3
1752 itmp = 0
1753 i1 = 0
1754 210 CONTINUE
1755 i = i + 1
1756 IF( i.GT.lenp ) THEN
1757 IF( i1.GT.0 ) THEN
1758 GO TO 240
1759 ELSE
1760 ntypes = maxt
1761 GO TO 240
1762 END IF
1763 END IF
1764 IF( line( i: i ).NE.' ' .AND. line( i: i ).NE.',' ) THEN
1765 i1 = i
1766 c1 = line( i1: i1 )
1767*
1768* Check that a valid integer was read
1769*
1770 DO 220 k = 1, 10
1771 IF( c1.EQ.intstr( k: k ) ) THEN
1772 ic = k - 1
1773 GO TO 230
1774 END IF
1775 220 CONTINUE
1776 WRITE( nout, fmt = 9991 )i, line
1777 GO TO 200
1778 230 CONTINUE
1779 itmp = 10*itmp + ic
1780 GO TO 210
1781 ELSE IF( i1.GT.0 ) THEN
1782 GO TO 240
1783 ELSE
1784 GO TO 210
1785 END IF
1786 240 CONTINUE
1787 ntypes = itmp
1788*
1789* Skip the tests if NTYPES is <= 0.
1790*
1791 IF( .NOT.( sev .OR. ses .OR. svx .OR. ssx .OR. sgv .OR.
1792 $ sgs ) .AND. ntypes.LE.0 ) THEN
1793 WRITE( nout, fmt = 9990 )c3
1794 GO TO 200
1795 END IF
1796*
1797 ELSE
1798 IF( sxv )
1799 $ c3 = 'SXV'
1800 IF( sgx )
1801 $ c3 = 'SGX'
1802 END IF
1803*
1804* Reset the random number seed.
1805*
1806 IF( newsd.EQ.0 ) THEN
1807 DO 250 k = 1, 4
1808 iseed( k ) = ioldsd( k )
1809 250 CONTINUE
1810 END IF
1811*
1812 IF( lsamen( 3, c3, 'SHS' ) .OR. lsamen( 3, c3, 'NEP' ) ) THEN
1813*
1814* -------------------------------------
1815* NEP: Nonsymmetric Eigenvalue Problem
1816* -------------------------------------
1817* Vary the parameters
1818* NB = block size
1819* NBMIN = minimum block size
1820* NX = crossover point
1821* NS = number of shifts
1822* MAXB = minimum submatrix size
1823*
1824 maxtyp = 21
1825 ntypes = min( maxtyp, ntypes )
1826 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
1827 CALL xlaenv( 1, 1 )
1828 IF( tsterr )
1829 $ CALL serrhs( 'SHSEQR', nout )
1830 DO 270 i = 1, nparms
1831 CALL xlaenv( 1, nbval( i ) )
1832 CALL xlaenv( 2, nbmin( i ) )
1833 CALL xlaenv( 3, nxval( i ) )
1834 CALL xlaenv(12, max( 11, inmin( i ) ) )
1835 CALL xlaenv(13, inwin( i ) )
1836 CALL xlaenv(14, inibl( i ) )
1837 CALL xlaenv(15, ishfts( i ) )
1838 CALL xlaenv(16, iacc22( i ) )
1839*
1840 IF( newsd.EQ.0 ) THEN
1841 DO 260 k = 1, 4
1842 iseed( k ) = ioldsd( k )
1843 260 CONTINUE
1844 END IF
1845 WRITE( nout, fmt = 9961 )c3, nbval( i ), nbmin( i ),
1846 $ nxval( i ), max( 11, inmin(i)),
1847 $ inwin( i ), inibl( i ), ishfts( i ), iacc22( i )
1848 CALL schkhs( nn, nval, maxtyp, dotype, iseed, thresh, nout,
1849 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
1850 $ a( 1, 4 ), a( 1, 5 ), nmax, a( 1, 6 ),
1851 $ a( 1, 7 ), d( 1, 1 ), d( 1, 2 ), d( 1, 3 ),
1852 $ d( 1, 4 ), d( 1, 5 ), d( 1, 6 ), a( 1, 8 ),
1853 $ a( 1, 9 ), a( 1, 10 ), a( 1, 11 ), a( 1, 12 ),
1854 $ d( 1, 7 ), work, lwork, iwork, logwrk, result,
1855 $ info )
1856 IF( info.NE.0 )
1857 $ WRITE( nout, fmt = 9980 )'SCHKHS', info
1858 270 CONTINUE
1859*
1860 ELSE IF( lsamen( 3, c3, 'SST' ) .OR. lsamen( 3, c3, 'SEP' )
1861 $ .OR. lsamen( 3, c3, 'SE2' ) ) THEN
1862*
1863* ----------------------------------
1864* SEP: Symmetric Eigenvalue Problem
1865* ----------------------------------
1866* Vary the parameters
1867* NB = block size
1868* NBMIN = minimum block size
1869* NX = crossover point
1870*
1871 maxtyp = 21
1872 ntypes = min( maxtyp, ntypes )
1873 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
1874 CALL xlaenv( 1, 1 )
1875 CALL xlaenv( 9, 25 )
1876 IF( tsterr ) THEN
1877#if defined(_OPENMP)
1878 n_threads = omp_get_max_threads()
1879 one_thread = 1
1880 CALL omp_set_num_threads(one_thread)
1881#endif
1882 CALL serrst( 'SST', nout )
1883#if defined(_OPENMP)
1884 CALL omp_set_num_threads(n_threads)
1885#endif
1886 END IF
1887 DO 290 i = 1, nparms
1888 CALL xlaenv( 1, nbval( i ) )
1889 CALL xlaenv( 2, nbmin( i ) )
1890 CALL xlaenv( 3, nxval( i ) )
1891*
1892 IF( newsd.EQ.0 ) THEN
1893 DO 280 k = 1, 4
1894 iseed( k ) = ioldsd( k )
1895 280 CONTINUE
1896 END IF
1897 WRITE( nout, fmt = 9997 )c3, nbval( i ), nbmin( i ),
1898 $ nxval( i )
1899 IF( tstchk ) THEN
1900 IF( lsamen( 3, c3, 'SE2' ) ) THEN
1901 CALL schkst2stg( nn, nval, maxtyp, dotype, iseed, thresh,
1902 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), d( 1, 1 ),
1903 $ d( 1, 2 ), d( 1, 3 ), d( 1, 4 ), d( 1, 5 ),
1904 $ d( 1, 6 ), d( 1, 7 ), d( 1, 8 ), d( 1, 9 ),
1905 $ d( 1, 10 ), d( 1, 11 ), a( 1, 3 ), nmax,
1906 $ a( 1, 4 ), a( 1, 5 ), d( 1, 12 ), a( 1, 6 ),
1907 $ work, lwork, iwork, liwork, result, info )
1908 ELSE
1909 CALL schkst( nn, nval, maxtyp, dotype, iseed, thresh,
1910 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), d( 1, 1 ),
1911 $ d( 1, 2 ), d( 1, 3 ), d( 1, 4 ), d( 1, 5 ),
1912 $ d( 1, 6 ), d( 1, 7 ), d( 1, 8 ), d( 1, 9 ),
1913 $ d( 1, 10 ), d( 1, 11 ), a( 1, 3 ), nmax,
1914 $ a( 1, 4 ), a( 1, 5 ), d( 1, 12 ), a( 1, 6 ),
1915 $ work, lwork, iwork, liwork, result, info )
1916 ENDIF
1917 IF( info.NE.0 )
1918 $ WRITE( nout, fmt = 9980 )'SCHKST', info
1919 END IF
1920 IF( tstdrv ) THEN
1921 IF( lsamen( 3, c3, 'SE2' ) ) THEN
1922 CALL sdrvst2stg( nn, nval, 18, dotype, iseed, thresh,
1923 $ nout, a( 1, 1 ), nmax, d( 1, 3 ), d( 1, 4 ),
1924 $ d( 1, 5 ), d( 1, 6 ), d( 1, 8 ), d( 1, 9 ),
1925 $ d( 1, 10 ), d( 1, 11), a( 1, 2 ), nmax,
1926 $ a( 1, 3 ), d( 1, 12 ), a( 1, 4 ), work,
1927 $ lwork, iwork, liwork, result, info )
1928 ELSE
1929 CALL sdrvst( nn, nval, 18, dotype, iseed, thresh,
1930 $ nout, a( 1, 1 ), nmax, d( 1, 3 ), d( 1, 4 ),
1931 $ d( 1, 5 ), d( 1, 6 ), d( 1, 8 ), d( 1, 9 ),
1932 $ d( 1, 10 ), d( 1, 11), a( 1, 2 ), nmax,
1933 $ a( 1, 3 ), d( 1, 12 ), a( 1, 4 ), work,
1934 $ lwork, iwork, liwork, result, info )
1935 ENDIF
1936 IF( info.NE.0 )
1937 $ WRITE( nout, fmt = 9980 )'SDRVST', info
1938 END IF
1939 290 CONTINUE
1940*
1941 ELSE IF( lsamen( 3, c3, 'SSG' ) ) THEN
1942*
1943* ----------------------------------------------
1944* SSG: Symmetric Generalized Eigenvalue Problem
1945* ----------------------------------------------
1946* Vary the parameters
1947* NB = block size
1948* NBMIN = minimum block size
1949* NX = crossover point
1950*
1951 maxtyp = 21
1952 ntypes = min( maxtyp, ntypes )
1953 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
1954 CALL xlaenv( 9, 25 )
1955 DO 310 i = 1, nparms
1956 CALL xlaenv( 1, nbval( i ) )
1957 CALL xlaenv( 2, nbmin( i ) )
1958 CALL xlaenv( 3, nxval( i ) )
1959*
1960 IF( newsd.EQ.0 ) THEN
1961 DO 300 k = 1, 4
1962 iseed( k ) = ioldsd( k )
1963 300 CONTINUE
1964 END IF
1965 WRITE( nout, fmt = 9997 )c3, nbval( i ), nbmin( i ),
1966 $ nxval( i )
1967 IF( tstchk ) THEN
1968* CALL SDRVSG( NN, NVAL, MAXTYP, DOTYPE, ISEED, THRESH,
1969* $ NOUT, A( 1, 1 ), NMAX, A( 1, 2 ), NMAX,
1970* $ D( 1, 3 ), A( 1, 3 ), NMAX, A( 1, 4 ),
1971* $ A( 1, 5 ), A( 1, 6 ), A( 1, 7 ), WORK,
1972* $ LWORK, IWORK, LIWORK, RESULT, INFO )
1973 CALL sdrvsg2stg( nn, nval, maxtyp, dotype, iseed, thresh,
1974 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), nmax,
1975 $ d( 1, 3 ), d( 1, 3 ), a( 1, 3 ), nmax,
1976 $ a( 1, 4 ), a( 1, 5 ), a( 1, 6 ),
1977 $ a( 1, 7 ), work, lwork, iwork, liwork,
1978 $ result, info )
1979 IF( info.NE.0 )
1980 $ WRITE( nout, fmt = 9980 )'SDRVSG', info
1981 END IF
1982 310 CONTINUE
1983*
1984 ELSE IF( lsamen( 3, c3, 'SBD' ) .OR. lsamen( 3, c3, 'SVD' ) ) THEN
1985*
1986* ----------------------------------
1987* SVD: Singular Value Decomposition
1988* ----------------------------------
1989* Vary the parameters
1990* NB = block size
1991* NBMIN = minimum block size
1992* NX = crossover point
1993* NRHS = number of right hand sides
1994*
1995 maxtyp = 16
1996 ntypes = min( maxtyp, ntypes )
1997 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
1998 CALL xlaenv( 1, 1 )
1999 CALL xlaenv( 9, 25 )
2000*
2001* Test the error exits
2002*
2003 IF( tsterr .AND. tstchk )
2004 $ CALL serrbd( 'SBD', nout )
2005 IF( tsterr .AND. tstdrv )
2006 $ CALL serred( 'SBD', nout )
2007*
2008 DO 330 i = 1, nparms
2009 nrhs = nsval( i )
2010 CALL xlaenv( 1, nbval( i ) )
2011 CALL xlaenv( 2, nbmin( i ) )
2012 CALL xlaenv( 3, nxval( i ) )
2013 IF( newsd.EQ.0 ) THEN
2014 DO 320 k = 1, 4
2015 iseed( k ) = ioldsd( k )
2016 320 CONTINUE
2017 END IF
2018 WRITE( nout, fmt = 9995 )c3, nbval( i ), nbmin( i ),
2019 $ nxval( i ), nrhs
2020 IF( tstchk ) THEN
2021 CALL schkbd( nn, mval, nval, maxtyp, dotype, nrhs, iseed,
2022 $ thresh, a( 1, 1 ), nmax, d( 1, 1 ),
2023 $ d( 1, 2 ), d( 1, 3 ), d( 1, 4 ), a( 1, 2 ),
2024 $ nmax, a( 1, 3 ), a( 1, 4 ), a( 1, 5 ), nmax,
2025 $ a( 1, 6 ), nmax, a( 1, 7 ), a( 1, 8 ), work,
2026 $ lwork, iwork, nout, info )
2027 IF( info.NE.0 )
2028 $ WRITE( nout, fmt = 9980 )'SCHKBD', info
2029 END IF
2030 IF( tstdrv )
2031 $ CALL sdrvbd( nn, mval, nval, maxtyp, dotype, iseed,
2032 $ thresh, a( 1, 1 ), nmax, a( 1, 2 ), nmax,
2033 $ a( 1, 3 ), nmax, a( 1, 4 ), a( 1, 5 ),
2034 $ a( 1, 6 ), d( 1, 1 ), d( 1, 2 ), d( 1, 3 ),
2035 $ work, lwork, iwork, nout, info )
2036 330 CONTINUE
2037*
2038 ELSE IF( lsamen( 3, c3, 'SEV' ) ) THEN
2039*
2040* --------------------------------------------
2041* SEV: Nonsymmetric Eigenvalue Problem Driver
2042* SGEEV (eigenvalues and eigenvectors)
2043* --------------------------------------------
2044*
2045 maxtyp = 21
2046 ntypes = min( maxtyp, ntypes )
2047 IF( ntypes.LE.0 ) THEN
2048 WRITE( nout, fmt = 9990 )c3
2049 ELSE
2050 IF( tsterr )
2051 $ CALL serred( c3, nout )
2052 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2053 CALL sdrvev( nn, nval, ntypes, dotype, iseed, thresh, nout,
2054 $ a( 1, 1 ), nmax, a( 1, 2 ), d( 1, 1 ),
2055 $ d( 1, 2 ), d( 1, 3 ), d( 1, 4 ), a( 1, 3 ),
2056 $ nmax, a( 1, 4 ), nmax, a( 1, 5 ), nmax, result,
2057 $ work, lwork, iwork, info )
2058 IF( info.NE.0 )
2059 $ WRITE( nout, fmt = 9980 )'SGEEV', info
2060 END IF
2061 WRITE( nout, fmt = 9973 )
2062 GO TO 10
2063*
2064 ELSE IF( lsamen( 3, c3, 'SES' ) ) THEN
2065*
2066* --------------------------------------------
2067* SES: Nonsymmetric Eigenvalue Problem Driver
2068* SGEES (Schur form)
2069* --------------------------------------------
2070*
2071 maxtyp = 21
2072 ntypes = min( maxtyp, ntypes )
2073 IF( ntypes.LE.0 ) THEN
2074 WRITE( nout, fmt = 9990 )c3
2075 ELSE
2076 IF( tsterr )
2077 $ CALL serred( c3, nout )
2078 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2079 CALL sdrves( nn, nval, ntypes, dotype, iseed, thresh, nout,
2080 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2081 $ d( 1, 1 ), d( 1, 2 ), d( 1, 3 ), d( 1, 4 ),
2082 $ a( 1, 4 ), nmax, result, work, lwork, iwork,
2083 $ logwrk, info )
2084 IF( info.NE.0 )
2085 $ WRITE( nout, fmt = 9980 )'SGEES', info
2086 END IF
2087 WRITE( nout, fmt = 9973 )
2088 GO TO 10
2089*
2090 ELSE IF( lsamen( 3, c3, 'SVX' ) ) THEN
2091*
2092* --------------------------------------------------------------
2093* SVX: Nonsymmetric Eigenvalue Problem Expert Driver
2094* SGEEVX (eigenvalues, eigenvectors and condition numbers)
2095* --------------------------------------------------------------
2096*
2097 maxtyp = 21
2098 ntypes = min( maxtyp, ntypes )
2099 IF( ntypes.LT.0 ) THEN
2100 WRITE( nout, fmt = 9990 )c3
2101 ELSE
2102 IF( tsterr )
2103 $ CALL serred( c3, nout )
2104 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2105 CALL sdrvvx( nn, nval, ntypes, dotype, iseed, thresh, nin,
2106 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), d( 1, 1 ),
2107 $ d( 1, 2 ), d( 1, 3 ), d( 1, 4 ), a( 1, 3 ),
2108 $ nmax, a( 1, 4 ), nmax, a( 1, 5 ), nmax,
2109 $ d( 1, 5 ), d( 1, 6 ), d( 1, 7 ), d( 1, 8 ),
2110 $ d( 1, 9 ), d( 1, 10 ), d( 1, 11 ), d( 1, 12 ),
2111 $ result, work, lwork, iwork, info )
2112 IF( info.NE.0 )
2113 $ WRITE( nout, fmt = 9980 )'SGEEVX', info
2114 END IF
2115 WRITE( nout, fmt = 9973 )
2116 GO TO 10
2117*
2118 ELSE IF( lsamen( 3, c3, 'SSX' ) ) THEN
2119*
2120* ---------------------------------------------------
2121* SSX: Nonsymmetric Eigenvalue Problem Expert Driver
2122* SGEESX (Schur form and condition numbers)
2123* ---------------------------------------------------
2124*
2125 maxtyp = 21
2126 ntypes = min( maxtyp, ntypes )
2127 IF( ntypes.LT.0 ) THEN
2128 WRITE( nout, fmt = 9990 )c3
2129 ELSE
2130 IF( tsterr )
2131 $ CALL serred( c3, nout )
2132 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2133 CALL sdrvsx( nn, nval, ntypes, dotype, iseed, thresh, nin,
2134 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2135 $ d( 1, 1 ), d( 1, 2 ), d( 1, 3 ), d( 1, 4 ),
2136 $ d( 1, 5 ), d( 1, 6 ), a( 1, 4 ), nmax,
2137 $ a( 1, 5 ), result, work, lwork, iwork, logwrk,
2138 $ info )
2139 IF( info.NE.0 )
2140 $ WRITE( nout, fmt = 9980 )'SGEESX', info
2141 END IF
2142 WRITE( nout, fmt = 9973 )
2143 GO TO 10
2144*
2145 ELSE IF( lsamen( 3, c3, 'SGG' ) ) THEN
2146*
2147* -------------------------------------------------
2148* SGG: Generalized Nonsymmetric Eigenvalue Problem
2149* -------------------------------------------------
2150* Vary the parameters
2151* NB = block size
2152* NBMIN = minimum block size
2153* NS = number of shifts
2154* MAXB = minimum submatrix size
2155* IACC22: structured matrix multiply
2156* NBCOL = minimum column dimension for blocks
2157*
2158 maxtyp = 26
2159 ntypes = min( maxtyp, ntypes )
2160 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2161 CALL xlaenv(1,1)
2162 IF( tstchk .AND. tsterr )
2163 & CALL serrgg( c3, nout )
2164 DO 350 i = 1, nparms
2165 CALL xlaenv( 1, nbval( i ) )
2166 CALL xlaenv( 2, nbmin( i ) )
2167 CALL xlaenv( 4, nsval( i ) )
2168 CALL xlaenv( 8, mxbval( i ) )
2169 CALL xlaenv( 16, iacc22( i ) )
2170 CALL xlaenv( 5, nbcol( i ) )
2171*
2172 IF( newsd.EQ.0 ) THEN
2173 DO 340 k = 1, 4
2174 iseed( k ) = ioldsd( k )
2175 340 CONTINUE
2176 END IF
2177 WRITE( nout, fmt = 9996 )c3, nbval( i ), nbmin( i ),
2178 $ nsval( i ), mxbval( i ), iacc22( i ), nbcol( i )
2179 tstdif = .false.
2180 thrshn = 10.
2181 IF( tstchk ) THEN
2182 CALL schkgg( nn, nval, maxtyp, dotype, iseed, thresh,
2183 $ tstdif, thrshn, nout, a( 1, 1 ), nmax,
2184 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), a( 1, 5 ),
2185 $ a( 1, 6 ), a( 1, 7 ), a( 1, 8 ), a( 1, 9 ),
2186 $ nmax, a( 1, 10 ), a( 1, 11 ), a( 1, 12 ),
2187 $ d( 1, 1 ), d( 1, 2 ), d( 1, 3 ), d( 1, 4 ),
2188 $ d( 1, 5 ), d( 1, 6 ), a( 1, 13 ),
2189 $ a( 1, 14 ), work, lwork, logwrk, result,
2190 $ info )
2191 IF( info.NE.0 )
2192 $ WRITE( nout, fmt = 9980 )'SCHKGG', info
2193 END IF
2194 350 CONTINUE
2195*
2196 ELSE IF( lsamen( 3, c3, 'SGS' ) ) THEN
2197*
2198* -------------------------------------------------
2199* SGS: Generalized Nonsymmetric Eigenvalue Problem
2200* SGGES (Schur form)
2201* -------------------------------------------------
2202*
2203 maxtyp = 26
2204 ntypes = min( maxtyp, ntypes )
2205 IF( ntypes.LE.0 ) THEN
2206 WRITE( nout, fmt = 9990 )c3
2207 ELSE
2208 IF( tsterr )
2209 $ CALL serrgg( c3, nout )
2210 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2211 CALL sdrges( nn, nval, maxtyp, dotype, iseed, thresh, nout,
2212 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2213 $ a( 1, 4 ), a( 1, 7 ), nmax, a( 1, 8 ),
2214 $ d( 1, 1 ), d( 1, 2 ), d( 1, 3 ), work, lwork,
2215 $ result, logwrk, info )
2216*
2217 IF( info.NE.0 )
2218 $ WRITE( nout, fmt = 9980 )'SDRGES', info
2219*
2220* Blocked version
2221*
2222 CALL xlaenv(16,1)
2223 CALL sdrges3( nn, nval, maxtyp, dotype, iseed, thresh, nout,
2224 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2225 $ a( 1, 4 ), a( 1, 7 ), nmax, a( 1, 8 ),
2226 $ d( 1, 1 ), d( 1, 2 ), d( 1, 3 ), work, lwork,
2227 $ result, logwrk, info )
2228*
2229 IF( info.NE.0 )
2230 $ WRITE( nout, fmt = 9980 )'SDRGES3', info
2231 END IF
2232 WRITE( nout, fmt = 9973 )
2233 GO TO 10
2234*
2235 ELSE IF( sgx ) THEN
2236*
2237* -------------------------------------------------
2238* SGX: Generalized Nonsymmetric Eigenvalue Problem
2239* SGGESX (Schur form and condition numbers)
2240* -------------------------------------------------
2241*
2242 maxtyp = 5
2243 ntypes = maxtyp
2244 IF( nn.LT.0 ) THEN
2245 WRITE( nout, fmt = 9990 )c3
2246 ELSE
2247 IF( tsterr )
2248 $ CALL serrgg( c3, nout )
2249 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2250 CALL xlaenv( 5, 2 )
2251 CALL sdrgsx( nn, ncmax, thresh, nin, nout, a( 1, 1 ), nmax,
2252 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), a( 1, 5 ),
2253 $ a( 1, 6 ), d( 1, 1 ), d( 1, 2 ), d( 1, 3 ),
2254 $ c( 1, 1 ), ncmax*ncmax, a( 1, 12 ), work,
2255 $ lwork, iwork, liwork, logwrk, info )
2256 IF( info.NE.0 )
2257 $ WRITE( nout, fmt = 9980 )'SDRGSX', info
2258 END IF
2259 WRITE( nout, fmt = 9973 )
2260 GO TO 10
2261*
2262 ELSE IF( lsamen( 3, c3, 'SGV' ) ) THEN
2263*
2264* -------------------------------------------------
2265* SGV: Generalized Nonsymmetric Eigenvalue Problem
2266* SGGEV (Eigenvalue/vector form)
2267* -------------------------------------------------
2268*
2269 maxtyp = 26
2270 ntypes = min( maxtyp, ntypes )
2271 IF( ntypes.LE.0 ) THEN
2272 WRITE( nout, fmt = 9990 )c3
2273 ELSE
2274 IF( tsterr )
2275 $ CALL serrgg( c3, nout )
2276 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2277 CALL sdrgev( nn, nval, maxtyp, dotype, iseed, thresh, nout,
2278 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2279 $ a( 1, 4 ), a( 1, 7 ), nmax, a( 1, 8 ),
2280 $ a( 1, 9 ), nmax, d( 1, 1 ), d( 1, 2 ),
2281 $ d( 1, 3 ), d( 1, 4 ), d( 1, 5 ), d( 1, 6 ),
2282 $ work, lwork, result, info )
2283 IF( info.NE.0 )
2284 $ WRITE( nout, fmt = 9980 )'SDRGEV', info
2285*
2286* Blocked version
2287*
2288 CALL sdrgev3( nn, nval, maxtyp, dotype, iseed, thresh, nout,
2289 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2290 $ a( 1, 4 ), a( 1, 7 ), nmax, a( 1, 8 ),
2291 $ a( 1, 9 ), nmax, d( 1, 1 ), d( 1, 2 ),
2292 $ d( 1, 3 ), d( 1, 4 ), d( 1, 5 ), d( 1, 6 ),
2293 $ work, lwork, result, info )
2294 IF( info.NE.0 )
2295 $ WRITE( nout, fmt = 9980 )'SDRGEV3', info
2296 END IF
2297 WRITE( nout, fmt = 9973 )
2298 GO TO 10
2299*
2300 ELSE IF( sxv ) THEN
2301*
2302* -------------------------------------------------
2303* SXV: Generalized Nonsymmetric Eigenvalue Problem
2304* SGGEVX (eigenvalue/vector with condition numbers)
2305* -------------------------------------------------
2306*
2307 maxtyp = 2
2308 ntypes = maxtyp
2309 IF( nn.LT.0 ) THEN
2310 WRITE( nout, fmt = 9990 )c3
2311 ELSE
2312 IF( tsterr )
2313 $ CALL serrgg( c3, nout )
2314 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2315 CALL sdrgvx( nn, thresh, nin, nout, a( 1, 1 ), nmax,
2316 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), d( 1, 1 ),
2317 $ d( 1, 2 ), d( 1, 3 ), a( 1, 5 ), a( 1, 6 ),
2318 $ iwork( 1 ), iwork( 2 ), d( 1, 4 ), d( 1, 5 ),
2319 $ d( 1, 6 ), d( 1, 7 ), d( 1, 8 ), d( 1, 9 ),
2320 $ work, lwork, iwork( 3 ), liwork-2, result,
2321 $ logwrk, info )
2322*
2323 IF( info.NE.0 )
2324 $ WRITE( nout, fmt = 9980 )'SDRGVX', info
2325 END IF
2326 WRITE( nout, fmt = 9973 )
2327 GO TO 10
2328*
2329 ELSE IF( lsamen( 3, c3, 'SSB' ) ) THEN
2330*
2331* ------------------------------
2332* SSB: Symmetric Band Reduction
2333* ------------------------------
2334*
2335 maxtyp = 15
2336 ntypes = min( maxtyp, ntypes )
2337 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2338 IF( tsterr )
2339 $ CALL serrst( 'SSB', nout )
2340* CALL SCHKSB( NN, NVAL, NK, KVAL, MAXTYP, DOTYPE, ISEED, THRESH,
2341* $ NOUT, A( 1, 1 ), NMAX, D( 1, 1 ), D( 1, 2 ),
2342* $ A( 1, 2 ), NMAX, WORK, LWORK, RESULT, INFO )
2343 CALL schksb2stg( nn, nval, nk, kval, maxtyp, dotype, iseed,
2344 $ thresh, nout, a( 1, 1 ), nmax, d( 1, 1 ),
2345 $ d( 1, 2 ), d( 1, 3 ), d( 1, 4 ), d( 1, 5 ),
2346 $ a( 1, 2 ), nmax, work, lwork, result, info )
2347 IF( info.NE.0 )
2348 $ WRITE( nout, fmt = 9980 )'SCHKSB', info
2349*
2350 ELSE IF( lsamen( 3, c3, 'SBB' ) ) THEN
2351*
2352* ------------------------------
2353* SBB: General Band Reduction
2354* ------------------------------
2355*
2356 maxtyp = 15
2357 ntypes = min( maxtyp, ntypes )
2358 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2359 DO 370 i = 1, nparms
2360 nrhs = nsval( i )
2361*
2362 IF( newsd.EQ.0 ) THEN
2363 DO 360 k = 1, 4
2364 iseed( k ) = ioldsd( k )
2365 360 CONTINUE
2366 END IF
2367 WRITE( nout, fmt = 9966 )c3, nrhs
2368 CALL schkbb( nn, mval, nval, nk, kval, maxtyp, dotype, nrhs,
2369 $ iseed, thresh, nout, a( 1, 1 ), nmax,
2370 $ a( 1, 2 ), 2*nmax, d( 1, 1 ), d( 1, 2 ),
2371 $ a( 1, 4 ), nmax, a( 1, 5 ), nmax, a( 1, 6 ),
2372 $ nmax, a( 1, 7 ), work, lwork, result, info )
2373 IF( info.NE.0 )
2374 $ WRITE( nout, fmt = 9980 )'SCHKBB', info
2375 370 CONTINUE
2376*
2377 ELSE IF( lsamen( 3, c3, 'GLM' ) ) THEN
2378*
2379* -----------------------------------------
2380* GLM: Generalized Linear Regression Model
2381* -----------------------------------------
2382*
2383 CALL xlaenv( 1, 1 )
2384 IF( tsterr )
2385 $ CALL serrgg( 'GLM', nout )
2386 CALL sckglm( nn, mval, pval, nval, ntypes, iseed, thresh, nmax,
2387 $ a( 1, 1 ), a( 1, 2 ), b( 1, 1 ), b( 1, 2 ), x,
2388 $ work, d( 1, 1 ), nin, nout, info )
2389 IF( info.NE.0 )
2390 $ WRITE( nout, fmt = 9980 )'SCKGLM', info
2391*
2392 ELSE IF( lsamen( 3, c3, 'GQR' ) ) THEN
2393*
2394* ------------------------------------------
2395* GQR: Generalized QR and RQ factorizations
2396* ------------------------------------------
2397*
2398 CALL xlaenv( 1, 1 )
2399 IF( tsterr )
2400 $ CALL serrgg( 'GQR', nout )
2401 CALL sckgqr( nn, mval, nn, pval, nn, nval, ntypes, iseed,
2402 $ thresh, nmax, a( 1, 1 ), a( 1, 2 ), a( 1, 3 ),
2403 $ a( 1, 4 ), taua, b( 1, 1 ), b( 1, 2 ), b( 1, 3 ),
2404 $ b( 1, 4 ), b( 1, 5 ), taub, work, d( 1, 1 ), nin,
2405 $ nout, info )
2406 IF( info.NE.0 )
2407 $ WRITE( nout, fmt = 9980 )'SCKGQR', info
2408*
2409 ELSE IF( lsamen( 3, c3, 'GSV' ) ) THEN
2410*
2411* ----------------------------------------------
2412* GSV: Generalized Singular Value Decomposition
2413* ----------------------------------------------
2414*
2415 CALL xlaenv( 1, 1 )
2416 IF( tsterr )
2417 $ CALL serrgg( 'GSV', nout )
2418 CALL sckgsv( nn, mval, pval, nval, ntypes, iseed, thresh, nmax,
2419 $ a( 1, 1 ), a( 1, 2 ), b( 1, 1 ), b( 1, 2 ),
2420 $ a( 1, 3 ), b( 1, 3 ), a( 1, 4 ), taua, taub,
2421 $ b( 1, 4 ), iwork, work, d( 1, 1 ), nin, nout,
2422 $ info )
2423 IF( info.NE.0 )
2424 $ WRITE( nout, fmt = 9980 )'SCKGSV', info
2425*
2426 ELSE IF( lsamen( 3, c3, 'CSD' ) ) THEN
2427*
2428* ----------------------------------------------
2429* CSD: CS Decomposition
2430* ----------------------------------------------
2431*
2432 CALL xlaenv(1,1)
2433 IF( tsterr )
2434 $ CALL serrgg( 'CSD', nout )
2435 CALL sckcsd( nn, mval, pval, nval, ntypes, iseed, thresh, nmax,
2436 $ a( 1, 1 ), a( 1, 2 ), a( 1, 3 ), a( 1, 4 ),
2437 $ a( 1, 5 ), a( 1, 6 ), a( 1, 7 ), iwork, work,
2438 $ d( 1, 1 ), nin, nout, info )
2439 IF( info.NE.0 )
2440 $ WRITE( nout, fmt = 9980 )'SCKCSD', info
2441*
2442 ELSE IF( lsamen( 3, c3, 'LSE' ) ) THEN
2443*
2444* --------------------------------------
2445* LSE: Constrained Linear Least Squares
2446* --------------------------------------
2447*
2448 CALL xlaenv( 1, 1 )
2449 IF( tsterr )
2450 $ CALL serrgg( 'LSE', nout )
2451 CALL scklse( nn, mval, pval, nval, ntypes, iseed, thresh, nmax,
2452 $ a( 1, 1 ), a( 1, 2 ), b( 1, 1 ), b( 1, 2 ), x,
2453 $ work, d( 1, 1 ), nin, nout, info )
2454 IF( info.NE.0 )
2455 $ WRITE( nout, fmt = 9980 )'SCKLSE', info
2456*
2457 ELSE
2458 WRITE( nout, fmt = * )
2459 WRITE( nout, fmt = * )
2460 WRITE( nout, fmt = 9992 )c3
2461 END IF
2462 IF( .NOT.( sgx .OR. sxv ) )
2463 $ GO TO 190
2464 380 CONTINUE
2465 WRITE( nout, fmt = 9994 )
2466 s2 = second( )
2467 WRITE( nout, fmt = 9993 )s2 - s1
2468*
2469 DEALLOCATE (a, stat = allocatestatus)
2470 DEALLOCATE (b, stat = allocatestatus)
2471 DEALLOCATE (c, stat = allocatestatus)
2472 DEALLOCATE (work, stat = allocatestatus)
2473*
2474 9999 FORMAT( / ' Execution not attempted due to input errors' )
2475 9997 FORMAT( / / 1x, a3, ': NB =', i4, ', NBMIN =', i4, ', NX =', i4 )
2476 9996 FORMAT( / / 1x, a3, ': NB =', i4, ', NBMIN =', i4, ', NS =', i4,
2477 $ ', MAXB =', i4, ', IACC22 =', i4, ', NBCOL =', i4 )
2478 9995 FORMAT( / / 1x, a3, ': NB =', i4, ', NBMIN =', i4, ', NX =', i4,
2479 $ ', NRHS =', i4 )
2480 9994 FORMAT( / / ' End of tests' )
2481 9993 FORMAT( ' Total time used = ', f12.2, ' seconds', / )
2482 9992 FORMAT( 1x, a3, ': Unrecognized path name' )
2483 9991 FORMAT( / / ' *** Invalid integer value in column ', i2,
2484 $ ' of input', ' line:', / a79 )
2485 9990 FORMAT( / / 1x, a3, ' routines were not tested' )
2486 9989 FORMAT( ' Invalid input value: ', a, '=', i6, '; must be >=',
2487 $ i6 )
2488 9988 FORMAT( ' Invalid input value: ', a, '=', i6, '; must be <=',
2489 $ i6 )
2490 9987 FORMAT( ' Tests of the Nonsymmetric Eigenvalue Problem routines' )
2491 9986 FORMAT( ' Tests of the Symmetric Eigenvalue Problem routines' )
2492 9985 FORMAT( ' Tests of the Singular Value Decomposition routines' )
2493 9984 FORMAT( / ' The following parameter values will be used:' )
2494 9983 FORMAT( 4x, a, 10i6, / 10x, 10i6 )
2495 9982 FORMAT( / ' Routines pass computational tests if test ratio is ',
2496 $ 'less than', f8.2, / )
2497 9981 FORMAT( ' Relative machine ', a, ' is taken to be', e16.6 )
2498 9980 FORMAT( ' *** Error code from ', a, ' = ', i4 )
2499 9979 FORMAT( / ' Tests of the Nonsymmetric Eigenvalue Problem Driver',
2500 $ / ' SGEEV (eigenvalues and eigevectors)' )
2501 9978 FORMAT( / ' Tests of the Nonsymmetric Eigenvalue Problem Driver',
2502 $ / ' SGEES (Schur form)' )
2503 9977 FORMAT( / ' Tests of the Nonsymmetric Eigenvalue Problem Expert',
2504 $ ' Driver', / ' SGEEVX (eigenvalues, eigenvectors and',
2505 $ ' condition numbers)' )
2506 9976 FORMAT( / ' Tests of the Nonsymmetric Eigenvalue Problem Expert',
2507 $ ' Driver', / ' SGEESX (Schur form and condition',
2508 $ ' numbers)' )
2509 9975 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2510 $ 'Problem routines' )
2511 9974 FORMAT( ' Tests of SSBTRD', / ' (reduction of a symmetric band ',
2512 $ 'matrix to tridiagonal form)' )
2513 9973 FORMAT( / 1x, 71( '-' ) )
2514 9972 FORMAT( / ' LAPACK VERSION ', i1, '.', i1, '.', i1 )
2515 9971 FORMAT( / ' Tests of the Generalized Linear Regression Model ',
2516 $ 'routines' )
2517 9970 FORMAT( / ' Tests of the Generalized QR and RQ routines' )
2518 9969 FORMAT( / ' Tests of the Generalized Singular Value',
2519 $ ' Decomposition routines' )
2520 9968 FORMAT( / ' Tests of the Linear Least Squares routines' )
2521 9967 FORMAT( ' Tests of SGBBRD', / ' (reduction of a general band ',
2522 $ 'matrix to real bidiagonal form)' )
2523 9966 FORMAT( / / 1x, a3, ': NRHS =', i4 )
2524 9965 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2525 $ 'Problem Expert Driver SGGESX' )
2526 9964 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2527 $ 'Problem Driver SGGES' )
2528 9963 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2529 $ 'Problem Driver SGGEV' )
2530 9962 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2531 $ 'Problem Expert Driver SGGEVX' )
2532 9961 FORMAT( / / 1x, a3, ': NB =', i4, ', NBMIN =', i4, ', NX =', i4,
2533 $ ', INMIN=', i4,
2534 $ ', INWIN =', i4, ', INIBL =', i4, ', ISHFTS =', i4,
2535 $ ', IACC22 =', i4)
2536 9960 FORMAT( / ' Tests of the CS Decomposition routines' )
2537*
2538* End of SCHKEE
2539*
2540 END
logical function lsamen(N, CA, CB)
LSAMEN
Definition: lsamen.f:74
subroutine alareq(PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT)
ALAREQ
Definition: alareq.f:90
subroutine xlaenv(ISPEC, NVALUE)
XLAENV
Definition: xlaenv.f:81
subroutine sdrgvx(NSIZE, THRESH, NIN, NOUT, A, LDA, B, AI, BI, ALPHAR, ALPHAI, BETA, VL, VR, ILO, IHI, LSCALE, RSCALE, S, STRU, DIF, DIFTRU, WORK, LWORK, IWORK, LIWORK, RESULT, BWORK, INFO)
SDRGVX
Definition: sdrgvx.f:301
subroutine schkbd(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)
SCHKBD
Definition: schkbd.f:493
subroutine schkbl(NIN, NOUT)
SCHKBL
Definition: schkbl.f:54
subroutine sckglm(NN, MVAL, PVAL, NVAL, NMATS, ISEED, THRESH, NMAX, A, AF, B, BF, X, WORK, RWORK, NIN, NOUT, INFO)
SCKGLM
Definition: sckglm.f:167
subroutine sdrvsg(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, B, LDB, D, Z, LDZ, AB, BB, AP, BP, WORK, NWORK, IWORK, LIWORK, RESULT, INFO)
SDRVSG
Definition: sdrvsg.f:355
subroutine sdrves(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, H, HT, WR, WI, WRT, WIT, VS, LDVS, RESULT, WORK, NWORK, IWORK, BWORK, INFO)
SDRVES
Definition: sdrves.f:388
subroutine schksb2stg(NSIZES, NN, NWDTHS, KK, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, SD, SE, D1, D2, D3, U, LDU, WORK, LWORK, RESULT, INFO)
SCHKSB2STG
Definition: schksb2stg.f:332
subroutine schkgk(NIN, NOUT)
SCHKGK
Definition: schkgk.f:54
subroutine sdrvev(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)
SDRVEV
Definition: sdrvev.f:406
subroutine sdrvst2stg(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)
SDRVST2STG
Definition: sdrvst2stg.f:453
subroutine sdrvsx(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)
SDRVSX
Definition: sdrvsx.f:454
subroutine sckcsd(NM, MVAL, PVAL, QVAL, NMATS, ISEED, THRESH, MMAX, X, XF, U1, U2, V1T, V2T, THETA, IWORK, WORK, RWORK, NIN, NOUT, INFO)
SCKCSD
Definition: sckcsd.f:184
subroutine sckgsv(NM, MVAL, PVAL, NVAL, NMATS, ISEED, THRESH, NMAX, A, AF, B, BF, U, V, Q, ALPHA, BETA, R, IWORK, WORK, RWORK, NIN, NOUT, INFO)
SCKGSV
Definition: sckgsv.f:198
subroutine serrgg(PATH, NUNIT)
SERRGG
Definition: serrgg.f:57
subroutine sdrvst(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)
SDRVST
Definition: sdrvst.f:453
subroutine schkbb(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)
SCHKBB
Definition: schkbb.f:355
subroutine sdrgev3(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)
SDRGEV3
Definition: sdrgev3.f:408
subroutine schkec(THRESH, TSTERR, NIN, NOUT)
SCHKEC
Definition: schkec.f:76
subroutine serrhs(PATH, NUNIT)
SERRHS
Definition: serrhs.f:55
subroutine sdrges3(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, B, S, T, Q, LDQ, Z, ALPHAR, ALPHAI, BETA, WORK, LWORK, RESULT, BWORK, INFO)
SDRGES3
Definition: sdrges3.f:403
subroutine schkst(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)
SCHKST
Definition: schkst.f:591
subroutine sdrvbd(NSIZES, MM, NN, NTYPES, DOTYPE, ISEED, THRESH, A, LDA, U, LDU, VT, LDVT, ASAV, USAV, VTSAV, S, SSAV, E, WORK, LWORK, IWORK, NOUT, INFO)
SDRVBD
Definition: sdrvbd.f:366
subroutine sdrvvx(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)
SDRVVX
Definition: sdrvvx.f:520
subroutine schkgg(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)
SCHKGG
Definition: schkgg.f:511
program schkee
SCHKEE
Definition: schkee.F:1039
subroutine serrbd(PATH, NUNIT)
SERRBD
Definition: serrbd.f:55
subroutine scklse(NN, MVAL, PVAL, NVAL, NMATS, ISEED, THRESH, NMAX, A, AF, B, BF, X, WORK, RWORK, NIN, NOUT, INFO)
SCKLSE
Definition: scklse.f:167
subroutine schkst2stg(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)
SCHKST2STG
Definition: schkst2stg.f:612
subroutine schkhs(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)
SCHKHS
Definition: schkhs.f:412
subroutine schksb(NSIZES, NN, NWDTHS, KK, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, SD, SE, U, LDU, WORK, LWORK, RESULT, INFO)
SCHKSB
Definition: schksb.f:293
subroutine serred(PATH, NUNIT)
SERRED
Definition: serred.f:70
subroutine sdrgev(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)
SDRGEV
Definition: sdrgev.f:408
subroutine sdrgsx(NSIZE, NCMAX, THRESH, NIN, NOUT, A, LDA, B, AI, BI, Z, Q, ALPHAR, ALPHAI, BETA, C, LDC, S, WORK, LWORK, IWORK, LIWORK, BWORK, INFO)
SDRGSX
Definition: sdrgsx.f:359
subroutine schkgl(NIN, NOUT)
SCHKGL
Definition: schkgl.f:53
subroutine serrst(PATH, NUNIT)
SERRST
Definition: serrst.f:61
subroutine sdrges(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, B, S, T, Q, LDQ, Z, ALPHAR, ALPHAI, BETA, WORK, LWORK, RESULT, BWORK, INFO)
SDRGES
Definition: sdrges.f:403
subroutine schkbk(NIN, NOUT)
SCHKBK
Definition: schkbk.f:55
subroutine sckgqr(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)
SCKGQR
Definition: sckgqr.f:210
subroutine ilaver(VERS_MAJOR, VERS_MINOR, VERS_PATCH)
ILAVER returns the LAPACK version.
Definition: ilaver.f:51
logical function lse(RI, RJ, LR)
Definition: sblat2.f:2970
subroutine sdrvsg2stg(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)
SDRVSG2STG
Definition: sdrvsg2stg.f:362
real function second()
SECOND Using ETIME
real function slamch(CMACH)
SLAMCH
Definition: slamch.f:68