LAPACK 3.11.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
cchkee.F
Go to the documentation of this file.
1*> \brief \b CCHKEE
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 CCHKEE
12*
13*
14*> \par Purpose:
15* =============
16*>
17*> \verbatim
18*>
19*> CCHKEE tests the COMPLEX LAPACK subroutines for the matrix
20*> eigenvalue problem. The test paths in this version are
21*>
22*> NEP (Nonsymmetric Eigenvalue Problem):
23*> Test CGEHRD, CUNGHR, CHSEQR, CTREVC, CHSEIN, and CUNMHR
24*>
25*> SEP (Hermitian Eigenvalue Problem):
26*> Test CHETRD, CUNGTR, CSTEQR, CSTERF, CSTEIN, CSTEDC,
27*> and drivers CHEEV(X), CHBEV(X), CHPEV(X),
28*> CHEEVD, CHBEVD, CHPEVD
29*>
30*> SVD (Singular Value Decomposition):
31*> Test CGEBRD, CUNGBR, and CBDSQR
32*> and the drivers CGESVD, CGESDD
33*>
34*> CEV (Nonsymmetric Eigenvalue/eigenvector Driver):
35*> Test CGEEV
36*>
37*> CES (Nonsymmetric Schur form Driver):
38*> Test CGEES
39*>
40*> CVX (Nonsymmetric Eigenvalue/eigenvector Expert Driver):
41*> Test CGEEVX
42*>
43*> CSX (Nonsymmetric Schur form Expert Driver):
44*> Test CGEESX
45*>
46*> CGG (Generalized Nonsymmetric Eigenvalue Problem):
47*> Test CGGHD3, CGGBAL, CGGBAK, CHGEQZ, and CTGEVC
48*>
49*> CGS (Generalized Nonsymmetric Schur form Driver):
50*> Test CGGES
51*>
52*> CGV (Generalized Nonsymmetric Eigenvalue/eigenvector Driver):
53*> Test CGGEV
54*>
55*> CGX (Generalized Nonsymmetric Schur form Expert Driver):
56*> Test CGGESX
57*>
58*> CXV (Generalized Nonsymmetric Eigenvalue/eigenvector Expert Driver):
59*> Test CGGEVX
60*>
61*> CSG (Hermitian Generalized Eigenvalue Problem):
62*> Test CHEGST, CHEGV, CHEGVD, CHEGVX, CHPGST, CHPGV, CHPGVD,
63*> CHPGVX, CHBGST, CHBGV, CHBGVD, and CHBGVX
64*>
65*> CHB (Hermitian Band Eigenvalue Problem):
66*> Test CHBTRD
67*>
68*> CBB (Band Singular Value Decomposition):
69*> Test CGBBRD
70*>
71*> CEC (Eigencondition estimation):
72*> Test CTRSYL, CTREXC, CTRSNA, and CTRSEN
73*>
74*> CBL (Balancing a general matrix)
75*> Test CGEBAL
76*>
77*> CBK (Back transformation on a balanced matrix)
78*> Test CGEBAK
79*>
80*> CGL (Balancing a matrix pair)
81*> Test CGGBAL
82*>
83*> CGK (Back transformation on a matrix pair)
84*> Test CGGBAK
85*>
86*> GLM (Generalized Linear Regression Model):
87*> Tests CGGGLM
88*>
89*> GQR (Generalized QR and RQ factorizations):
90*> Tests CGGQRF and CGGRQF
91*>
92*> GSV (Generalized Singular Value Decomposition):
93*> Tests CGGSVD, CGGSVP, CTGSJA, CLAGS2, CLAPLL, and CLAPMT
94*>
95*> CSD (CS decomposition):
96*> Tests CUNCSD
97*>
98*> LSE (Constrained Linear Least Squares):
99*> Tests CGGLSE
100*>
101*> Each test path has a different set of inputs, but the data sets for
102*> the driver routines xEV, xES, xVX, and xSX can be concatenated in a
103*> single input file. The first line of input should contain one of the
104*> 3-character path names in columns 1-3. The number of remaining lines
105*> depends on what is found on the first line.
106*>
107*> The number of matrix types used in testing is often controllable from
108*> the input file. The number of matrix types for each path, and the
109*> test routine that describes them, is as follows:
110*>
111*> Path name(s) Types Test routine
112*>
113*> CHS or NEP 21 CCHKHS
114*> CST or SEP 21 CCHKST (routines)
115*> 18 CDRVST (drivers)
116*> CBD or SVD 16 CCHKBD (routines)
117*> 5 CDRVBD (drivers)
118*> CEV 21 CDRVEV
119*> CES 21 CDRVES
120*> CVX 21 CDRVVX
121*> CSX 21 CDRVSX
122*> CGG 26 CCHKGG (routines)
123*> CGS 26 CDRGES
124*> CGX 5 CDRGSX
125*> CGV 26 CDRGEV
126*> CXV 2 CDRGVX
127*> CSG 21 CDRVSG
128*> CHB 15 CCHKHB
129*> CBB 15 CCHKBB
130*> CEC - CCHKEC
131*> CBL - CCHKBL
132*> CBK - CCHKBK
133*> CGL - CCHKGL
134*> CGK - CCHKGK
135*> GLM 8 CCKGLM
136*> GQR 8 CCKGQR
137*> GSV 8 CCKGSV
138*> CSD 3 CCKCSD
139*> LSE 8 CCKLSE
140*>
141*>-----------------------------------------------------------------------
142*>
143*> NEP input file:
144*>
145*> line 2: NN, INTEGER
146*> Number of values of N.
147*>
148*> line 3: NVAL, INTEGER array, dimension (NN)
149*> The values for the matrix dimension N.
150*>
151*> line 4: NPARMS, INTEGER
152*> Number of values of the parameters NB, NBMIN, NX, NS, and
153*> MAXB.
154*>
155*> line 5: NBVAL, INTEGER array, dimension (NPARMS)
156*> The values for the blocksize NB.
157*>
158*> line 6: NBMIN, INTEGER array, dimension (NPARMS)
159*> The values for the minimum blocksize NBMIN.
160*>
161*> line 7: NXVAL, INTEGER array, dimension (NPARMS)
162*> The values for the crossover point NX.
163*>
164*> line 8: INMIN, INTEGER array, dimension (NPARMS)
165*> LAHQR vs TTQRE crossover point, >= 11
166*>
167*> line 9: INWIN, INTEGER array, dimension (NPARMS)
168*> recommended deflation window size
169*>
170*> line 10: INIBL, INTEGER array, dimension (NPARMS)
171*> nibble crossover point
172*>
173*> line 11: ISHFTS, INTEGER array, dimension (NPARMS)
174*> number of simultaneous shifts)
175*>
176*> line 12: IACC22, INTEGER array, dimension (NPARMS)
177*> select structured matrix multiply: 0, 1 or 2)
178*>
179*> line 13: THRESH
180*> Threshold value for the test ratios. Information will be
181*> printed about each test for which the test ratio is greater
182*> than or equal to the threshold. To have all of the test
183*> ratios printed, use THRESH = 0.0 .
184*>
185*> line 14: NEWSD, INTEGER
186*> A code indicating how to set the random number seed.
187*> = 0: Set the seed to a default value before each run
188*> = 1: Initialize the seed to a default value only before the
189*> first run
190*> = 2: Like 1, but use the seed values on the next line
191*>
192*> If line 14 was 2:
193*>
194*> line 15: INTEGER array, dimension (4)
195*> Four integer values for the random number seed.
196*>
197*> lines 15-EOF: The remaining lines occur in sets of 1 or 2 and allow
198*> the user to specify the matrix types. Each line contains
199*> a 3-character path name in columns 1-3, and the number
200*> of matrix types must be the first nonblank item in columns
201*> 4-80. If the number of matrix types is at least 1 but is
202*> less than the maximum number of possible types, a second
203*> line will be read to get the numbers of the matrix types to
204*> be used. For example,
205*> NEP 21
206*> requests all of the matrix types for the nonsymmetric
207*> eigenvalue problem, while
208*> NEP 4
209*> 9 10 11 12
210*> requests only matrices of type 9, 10, 11, and 12.
211*>
212*> The valid 3-character path names are 'NEP' or 'CHS' for the
213*> nonsymmetric eigenvalue routines.
214*>
215*>-----------------------------------------------------------------------
216*>
217*> SEP or CSG input file:
218*>
219*> line 2: NN, INTEGER
220*> Number of values of N.
221*>
222*> line 3: NVAL, INTEGER array, dimension (NN)
223*> The values for the matrix dimension N.
224*>
225*> line 4: NPARMS, INTEGER
226*> Number of values of the parameters NB, NBMIN, and NX.
227*>
228*> line 5: NBVAL, INTEGER array, dimension (NPARMS)
229*> The values for the blocksize NB.
230*>
231*> line 6: NBMIN, INTEGER array, dimension (NPARMS)
232*> The values for the minimum blocksize NBMIN.
233*>
234*> line 7: NXVAL, INTEGER array, dimension (NPARMS)
235*> The values for the crossover point NX.
236*>
237*> line 8: THRESH
238*> Threshold value for the test ratios. Information will be
239*> printed about each test for which the test ratio is greater
240*> than or equal to the threshold.
241*>
242*> line 9: TSTCHK, LOGICAL
243*> Flag indicating whether or not to test the LAPACK routines.
244*>
245*> line 10: TSTDRV, LOGICAL
246*> Flag indicating whether or not to test the driver routines.
247*>
248*> line 11: TSTERR, LOGICAL
249*> Flag indicating whether or not to test the error exits for
250*> the LAPACK routines and driver routines.
251*>
252*> line 12: NEWSD, INTEGER
253*> A code indicating how to set the random number seed.
254*> = 0: Set the seed to a default value before each run
255*> = 1: Initialize the seed to a default value only before the
256*> first run
257*> = 2: Like 1, but use the seed values on the next line
258*>
259*> If line 12 was 2:
260*>
261*> line 13: INTEGER array, dimension (4)
262*> Four integer values for the random number seed.
263*>
264*> lines 13-EOF: Lines specifying matrix types, as for NEP.
265*> The valid 3-character path names are 'SEP' or 'CST' for the
266*> Hermitian eigenvalue routines and driver routines, and
267*> 'CSG' for the routines for the Hermitian generalized
268*> eigenvalue problem.
269*>
270*>-----------------------------------------------------------------------
271*>
272*> SVD input file:
273*>
274*> line 2: NN, INTEGER
275*> Number of values of M and N.
276*>
277*> line 3: MVAL, INTEGER array, dimension (NN)
278*> The values for the matrix row dimension M.
279*>
280*> line 4: NVAL, INTEGER array, dimension (NN)
281*> The values for the matrix column dimension N.
282*>
283*> line 5: NPARMS, INTEGER
284*> Number of values of the parameter NB, NBMIN, NX, and NRHS.
285*>
286*> line 6: NBVAL, INTEGER array, dimension (NPARMS)
287*> The values for the blocksize NB.
288*>
289*> line 7: NBMIN, INTEGER array, dimension (NPARMS)
290*> The values for the minimum blocksize NBMIN.
291*>
292*> line 8: NXVAL, INTEGER array, dimension (NPARMS)
293*> The values for the crossover point NX.
294*>
295*> line 9: NSVAL, INTEGER array, dimension (NPARMS)
296*> The values for the number of right hand sides NRHS.
297*>
298*> line 10: THRESH
299*> Threshold value for the test ratios. Information will be
300*> printed about each test for which the test ratio is greater
301*> than or equal to the threshold.
302*>
303*> line 11: TSTCHK, LOGICAL
304*> Flag indicating whether or not to test the LAPACK routines.
305*>
306*> line 12: TSTDRV, LOGICAL
307*> Flag indicating whether or not to test the driver routines.
308*>
309*> line 13: TSTERR, LOGICAL
310*> Flag indicating whether or not to test the error exits for
311*> the LAPACK routines and driver routines.
312*>
313*> line 14: NEWSD, INTEGER
314*> A code indicating how to set the random number seed.
315*> = 0: Set the seed to a default value before each run
316*> = 1: Initialize the seed to a default value only before the
317*> first run
318*> = 2: Like 1, but use the seed values on the next line
319*>
320*> If line 14 was 2:
321*>
322*> line 15: INTEGER array, dimension (4)
323*> Four integer values for the random number seed.
324*>
325*> lines 15-EOF: Lines specifying matrix types, as for NEP.
326*> The 3-character path names are 'SVD' or 'CBD' for both the
327*> SVD routines and the SVD driver routines.
328*>
329*>-----------------------------------------------------------------------
330*>
331*> CEV and CES data files:
332*>
333*> line 1: 'CEV' or 'CES' in columns 1 to 3.
334*>
335*> line 2: NSIZES, INTEGER
336*> Number of sizes of matrices to use. Should be at least 0
337*> and at most 20. If NSIZES = 0, no testing is done
338*> (although the remaining 3 lines are still read).
339*>
340*> line 3: NN, INTEGER array, dimension(NSIZES)
341*> Dimensions of matrices to be tested.
342*>
343*> line 4: NB, NBMIN, NX, NS, NBCOL, INTEGERs
344*> These integer parameters determine how blocking is done
345*> (see ILAENV for details)
346*> NB : block size
347*> NBMIN : minimum block size
348*> NX : minimum dimension for blocking
349*> NS : number of shifts in xHSEQR
350*> NBCOL : minimum column dimension for blocking
351*>
352*> line 5: THRESH, REAL
353*> The test threshold against which computed residuals are
354*> compared. Should generally be in the range from 10. to 20.
355*> If it is 0., all test case data will be printed.
356*>
357*> line 6: NEWSD, INTEGER
358*> A code indicating how to set the random number seed.
359*> = 0: Set the seed to a default value before each run
360*> = 1: Initialize the seed to a default value only before the
361*> first run
362*> = 2: Like 1, but use the seed values on the next line
363*>
364*> If line 6 was 2:
365*>
366*> line 7: INTEGER array, dimension (4)
367*> Four integer values for the random number seed.
368*>
369*> lines 8 and following: Lines specifying matrix types, as for NEP.
370*> The 3-character path name is 'CEV' to test CGEEV, or
371*> 'CES' to test CGEES.
372*>
373*>-----------------------------------------------------------------------
374*>
375*> The CVX data has two parts. The first part is identical to CEV,
376*> and the second part consists of test matrices with precomputed
377*> solutions.
378*>
379*> line 1: 'CVX' in columns 1-3.
380*>
381*> line 2: NSIZES, INTEGER
382*> If NSIZES = 0, no testing of randomly generated examples
383*> is done, but any precomputed examples are tested.
384*>
385*> line 3: NN, INTEGER array, dimension(NSIZES)
386*>
387*> line 4: NB, NBMIN, NX, NS, NBCOL, INTEGERs
388*>
389*> line 5: THRESH, REAL
390*>
391*> line 6: NEWSD, INTEGER
392*>
393*> If line 6 was 2:
394*>
395*> line 7: INTEGER array, dimension (4)
396*>
397*> lines 8 and following: The first line contains 'CVX' in columns 1-3
398*> followed by the number of matrix types, possibly with
399*> a second line to specify certain matrix types.
400*> If the number of matrix types = 0, no testing of randomly
401*> generated examples is done, but any precomputed examples
402*> are tested.
403*>
404*> remaining lines : Each matrix is stored on 1+N+N**2 lines, where N is
405*> its dimension. The first line contains the dimension N and
406*> ISRT (two integers). ISRT indicates whether the last N lines
407*> are sorted by increasing real part of the eigenvalue
408*> (ISRT=0) or by increasing imaginary part (ISRT=1). The next
409*> N**2 lines contain the matrix rowwise, one entry per line.
410*> The last N lines correspond to each eigenvalue. Each of
411*> these last N lines contains 4 real values: the real part of
412*> the eigenvalues, the imaginary part of the eigenvalue, the
413*> reciprocal condition number of the eigenvalues, and the
414*> reciprocal condition number of the vector eigenvector. The
415*> end of data is indicated by dimension N=0. Even if no data
416*> is to be tested, there must be at least one line containing
417*> N=0.
418*>
419*>-----------------------------------------------------------------------
420*>
421*> The CSX data is like CVX. The first part is identical to CEV, and the
422*> second part consists of test matrices with precomputed solutions.
423*>
424*> line 1: 'CSX' in columns 1-3.
425*>
426*> line 2: NSIZES, INTEGER
427*> If NSIZES = 0, no testing of randomly generated examples
428*> is done, but any precomputed examples are tested.
429*>
430*> line 3: NN, INTEGER array, dimension(NSIZES)
431*>
432*> line 4: NB, NBMIN, NX, NS, NBCOL, INTEGERs
433*>
434*> line 5: THRESH, REAL
435*>
436*> line 6: NEWSD, INTEGER
437*>
438*> If line 6 was 2:
439*>
440*> line 7: INTEGER array, dimension (4)
441*>
442*> lines 8 and following: The first line contains 'CSX' in columns 1-3
443*> followed by the number of matrix types, possibly with
444*> a second line to specify certain matrix types.
445*> If the number of matrix types = 0, no testing of randomly
446*> generated examples is done, but any precomputed examples
447*> are tested.
448*>
449*> remaining lines : Each matrix is stored on 3+N**2 lines, where N is
450*> its dimension. The first line contains the dimension N, the
451*> dimension M of an invariant subspace, and ISRT. The second
452*> line contains M integers, identifying the eigenvalues in the
453*> invariant subspace (by their position in a list of
454*> eigenvalues ordered by increasing real part (if ISRT=0) or
455*> by increasing imaginary part (if ISRT=1)). The next N**2
456*> lines contain the matrix rowwise. The last line contains the
457*> reciprocal condition number for the average of the selected
458*> eigenvalues, and the reciprocal condition number for the
459*> corresponding right invariant subspace. The end of data in
460*> indicated by a line containing N=0, M=0, and ISRT = 0. Even
461*> if no data is to be tested, there must be at least one line
462*> containing N=0, M=0 and ISRT=0.
463*>
464*>-----------------------------------------------------------------------
465*>
466*> CGG input file:
467*>
468*> line 2: NN, INTEGER
469*> Number of values of N.
470*>
471*> line 3: NVAL, INTEGER array, dimension (NN)
472*> The values for the matrix dimension N.
473*>
474*> line 4: NPARMS, INTEGER
475*> Number of values of the parameters NB, NBMIN, NBCOL, NS, and
476*> MAXB.
477*>
478*> line 5: NBVAL, INTEGER array, dimension (NPARMS)
479*> The values for the blocksize NB.
480*>
481*> line 6: NBMIN, INTEGER array, dimension (NPARMS)
482*> The values for NBMIN, the minimum row dimension for blocks.
483*>
484*> line 7: NSVAL, INTEGER array, dimension (NPARMS)
485*> The values for the number of shifts.
486*>
487*> line 8: MXBVAL, INTEGER array, dimension (NPARMS)
488*> The values for MAXB, used in determining minimum blocksize.
489*>
490*> line 9: IACC22, INTEGER array, dimension (NPARMS)
491*> select structured matrix multiply: 1 or 2)
492*>
493*> line 10: NBCOL, INTEGER array, dimension (NPARMS)
494*> The values for NBCOL, the minimum column dimension for
495*> blocks.
496*>
497*> line 11: THRESH
498*> Threshold value for the test ratios. Information will be
499*> printed about each test for which the test ratio is greater
500*> than or equal to the threshold.
501*>
502*> line 12: TSTCHK, LOGICAL
503*> Flag indicating whether or not to test the LAPACK routines.
504*>
505*> line 13: TSTDRV, LOGICAL
506*> Flag indicating whether or not to test the driver routines.
507*>
508*> line 14: TSTERR, LOGICAL
509*> Flag indicating whether or not to test the error exits for
510*> the LAPACK routines and driver routines.
511*>
512*> line 15: NEWSD, INTEGER
513*> A code indicating how to set the random number seed.
514*> = 0: Set the seed to a default value before each run
515*> = 1: Initialize the seed to a default value only before the
516*> first run
517*> = 2: Like 1, but use the seed values on the next line
518*>
519*> If line 15 was 2:
520*>
521*> line 16: INTEGER array, dimension (4)
522*> Four integer values for the random number seed.
523*>
524*> lines 17-EOF: Lines specifying matrix types, as for NEP.
525*> The 3-character path name is 'CGG' for the generalized
526*> eigenvalue problem routines and driver routines.
527*>
528*>-----------------------------------------------------------------------
529*>
530*> CGS and CGV input files:
531*>
532*> line 1: 'CGS' or 'CGV' in columns 1 to 3.
533*>
534*> line 2: NN, INTEGER
535*> Number of values of N.
536*>
537*> line 3: NVAL, INTEGER array, dimension(NN)
538*> Dimensions of matrices to be tested.
539*>
540*> line 4: NB, NBMIN, NX, NS, NBCOL, INTEGERs
541*> These integer parameters determine how blocking is done
542*> (see ILAENV for details)
543*> NB : block size
544*> NBMIN : minimum block size
545*> NX : minimum dimension for blocking
546*> NS : number of shifts in xHGEQR
547*> NBCOL : minimum column dimension for blocking
548*>
549*> line 5: THRESH, REAL
550*> The test threshold against which computed residuals are
551*> compared. Should generally be in the range from 10. to 20.
552*> If it is 0., all test case data will be printed.
553*>
554*> line 6: TSTERR, LOGICAL
555*> Flag indicating whether or not to test the error exits.
556*>
557*> line 7: NEWSD, INTEGER
558*> A code indicating how to set the random number seed.
559*> = 0: Set the seed to a default value before each run
560*> = 1: Initialize the seed to a default value only before the
561*> first run
562*> = 2: Like 1, but use the seed values on the next line
563*>
564*> If line 17 was 2:
565*>
566*> line 7: INTEGER array, dimension (4)
567*> Four integer values for the random number seed.
568*>
569*> lines 7-EOF: Lines specifying matrix types, as for NEP.
570*> The 3-character path name is 'CGS' for the generalized
571*> eigenvalue problem routines and driver routines.
572*>
573*>-----------------------------------------------------------------------
574*>
575*> CGX input file:
576*> line 1: 'CGX' in columns 1 to 3.
577*>
578*> line 2: N, INTEGER
579*> Value of N.
580*>
581*> line 3: NB, NBMIN, NX, NS, NBCOL, INTEGERs
582*> These integer parameters determine how blocking is done
583*> (see ILAENV for details)
584*> NB : block size
585*> NBMIN : minimum block size
586*> NX : minimum dimension for blocking
587*> NS : number of shifts in xHGEQR
588*> NBCOL : minimum column dimension for blocking
589*>
590*> line 4: THRESH, REAL
591*> The test threshold against which computed residuals are
592*> compared. Should generally be in the range from 10. to 20.
593*> Information will be printed about each test for which the
594*> test ratio is greater than or equal to the threshold.
595*>
596*> line 5: TSTERR, LOGICAL
597*> Flag indicating whether or not to test the error exits for
598*> the LAPACK routines and driver routines.
599*>
600*> line 6: NEWSD, INTEGER
601*> A code indicating how to set the random number seed.
602*> = 0: Set the seed to a default value before each run
603*> = 1: Initialize the seed to a default value only before the
604*> first run
605*> = 2: Like 1, but use the seed values on the next line
606*>
607*> If line 6 was 2:
608*>
609*> line 7: INTEGER array, dimension (4)
610*> Four integer values for the random number seed.
611*>
612*> If line 2 was 0:
613*>
614*> line 7-EOF: Precomputed examples are tested.
615*>
616*> remaining lines : Each example is stored on 3+2*N*N lines, where N is
617*> its dimension. The first line contains the dimension (a
618*> single integer). The next line contains an integer k such
619*> that only the last k eigenvalues will be selected and appear
620*> in the leading diagonal blocks of $A$ and $B$. The next N*N
621*> lines contain the matrix A, one element per line. The next N*N
622*> lines contain the matrix B. The last line contains the
623*> reciprocal of the eigenvalue cluster condition number and the
624*> reciprocal of the deflating subspace (associated with the
625*> selected eigencluster) condition number. The end of data is
626*> indicated by dimension N=0. Even if no data is to be tested,
627*> there must be at least one line containing N=0.
628*>
629*>-----------------------------------------------------------------------
630*>
631*> CXV input files:
632*> line 1: 'CXV' in columns 1 to 3.
633*>
634*> line 2: N, INTEGER
635*> Value of N.
636*>
637*> line 3: NB, NBMIN, NX, NS, NBCOL, INTEGERs
638*> These integer parameters determine how blocking is done
639*> (see ILAENV for details)
640*> NB : block size
641*> NBMIN : minimum block size
642*> NX : minimum dimension for blocking
643*> NS : number of shifts in xHGEQR
644*> NBCOL : minimum column dimension for blocking
645*>
646*> line 4: THRESH, REAL
647*> The test threshold against which computed residuals are
648*> compared. Should generally be in the range from 10. to 20.
649*> Information will be printed about each test for which the
650*> test ratio is greater than or equal to the threshold.
651*>
652*> line 5: TSTERR, LOGICAL
653*> Flag indicating whether or not to test the error exits for
654*> the LAPACK routines and driver routines.
655*>
656*> line 6: NEWSD, INTEGER
657*> A code indicating how to set the random number seed.
658*> = 0: Set the seed to a default value before each run
659*> = 1: Initialize the seed to a default value only before the
660*> first run
661*> = 2: Like 1, but use the seed values on the next line
662*>
663*> If line 6 was 2:
664*>
665*> line 7: INTEGER array, dimension (4)
666*> Four integer values for the random number seed.
667*>
668*> If line 2 was 0:
669*>
670*> line 7-EOF: Precomputed examples are tested.
671*>
672*> remaining lines : Each example is stored on 3+2*N*N lines, where N is
673*> its dimension. The first line contains the dimension (a
674*> single integer). The next N*N lines contain the matrix A, one
675*> element per line. The next N*N lines contain the matrix B.
676*> The next line contains the reciprocals of the eigenvalue
677*> condition numbers. The last line contains the reciprocals of
678*> the eigenvector condition numbers. The end of data is
679*> indicated by dimension N=0. Even if no data is to be tested,
680*> there must be at least one line containing N=0.
681*>
682*>-----------------------------------------------------------------------
683*>
684*> CHB input file:
685*>
686*> line 2: NN, INTEGER
687*> Number of values of N.
688*>
689*> line 3: NVAL, INTEGER array, dimension (NN)
690*> The values for the matrix dimension N.
691*>
692*> line 4: NK, INTEGER
693*> Number of values of K.
694*>
695*> line 5: KVAL, INTEGER array, dimension (NK)
696*> The values for the matrix dimension K.
697*>
698*> line 6: THRESH
699*> Threshold value for the test ratios. Information will be
700*> printed about each test for which the test ratio is greater
701*> than or equal to the threshold.
702*>
703*> line 7: NEWSD, INTEGER
704*> A code indicating how to set the random number seed.
705*> = 0: Set the seed to a default value before each run
706*> = 1: Initialize the seed to a default value only before the
707*> first run
708*> = 2: Like 1, but use the seed values on the next line
709*>
710*> If line 7 was 2:
711*>
712*> line 8: INTEGER array, dimension (4)
713*> Four integer values for the random number seed.
714*>
715*> lines 8-EOF: Lines specifying matrix types, as for NEP.
716*> The 3-character path name is 'CHB'.
717*>
718*>-----------------------------------------------------------------------
719*>
720*> CBB input file:
721*>
722*> line 2: NN, INTEGER
723*> Number of values of M and N.
724*>
725*> line 3: MVAL, INTEGER array, dimension (NN)
726*> The values for the matrix row dimension M.
727*>
728*> line 4: NVAL, INTEGER array, dimension (NN)
729*> The values for the matrix column dimension N.
730*>
731*> line 4: NK, INTEGER
732*> Number of values of K.
733*>
734*> line 5: KVAL, INTEGER array, dimension (NK)
735*> The values for the matrix bandwidth K.
736*>
737*> line 6: NPARMS, INTEGER
738*> Number of values of the parameter NRHS
739*>
740*> line 7: NSVAL, INTEGER array, dimension (NPARMS)
741*> The values for the number of right hand sides NRHS.
742*>
743*> line 8: THRESH
744*> Threshold value for the test ratios. Information will be
745*> printed about each test for which the test ratio is greater
746*> than or equal to the threshold.
747*>
748*> line 9: NEWSD, INTEGER
749*> A code indicating how to set the random number seed.
750*> = 0: Set the seed to a default value before each run
751*> = 1: Initialize the seed to a default value only before the
752*> first run
753*> = 2: Like 1, but use the seed values on the next line
754*>
755*> If line 9 was 2:
756*>
757*> line 10: INTEGER array, dimension (4)
758*> Four integer values for the random number seed.
759*>
760*> lines 10-EOF: Lines specifying matrix types, as for SVD.
761*> The 3-character path name is 'CBB'.
762*>
763*>-----------------------------------------------------------------------
764*>
765*> CEC input file:
766*>
767*> line 2: THRESH, REAL
768*> Threshold value for the test ratios. Information will be
769*> printed about each test for which the test ratio is greater
770*> than or equal to the threshold.
771*>
772*> lines 3-EOF:
773*>
774*> Input for testing the eigencondition routines consists of a set of
775*> specially constructed test cases and their solutions. The data
776*> format is not intended to be modified by the user.
777*>
778*>-----------------------------------------------------------------------
779*>
780*> CBL and CBK input files:
781*>
782*> line 1: 'CBL' in columns 1-3 to test CGEBAL, or 'CBK' in
783*> columns 1-3 to test CGEBAK.
784*>
785*> The remaining lines consist of specially constructed test cases.
786*>
787*>-----------------------------------------------------------------------
788*>
789*> CGL and CGK input files:
790*>
791*> line 1: 'CGL' in columns 1-3 to test CGGBAL, or 'CGK' in
792*> columns 1-3 to test CGGBAK.
793*>
794*> The remaining lines consist of specially constructed test cases.
795*>
796*>-----------------------------------------------------------------------
797*>
798*> GLM data file:
799*>
800*> line 1: 'GLM' in columns 1 to 3.
801*>
802*> line 2: NN, INTEGER
803*> Number of values of M, P, and N.
804*>
805*> line 3: MVAL, INTEGER array, dimension(NN)
806*> Values of M (row dimension).
807*>
808*> line 4: PVAL, INTEGER array, dimension(NN)
809*> Values of P (row dimension).
810*>
811*> line 5: NVAL, INTEGER array, dimension(NN)
812*> Values of N (column dimension), note M <= N <= M+P.
813*>
814*> line 6: THRESH, REAL
815*> Threshold value for the test ratios. Information will be
816*> printed about each test for which the test ratio is greater
817*> than or equal to the threshold.
818*>
819*> line 7: TSTERR, LOGICAL
820*> Flag indicating whether or not to test the error exits for
821*> the LAPACK routines and driver routines.
822*>
823*> line 8: NEWSD, INTEGER
824*> A code indicating how to set the random number seed.
825*> = 0: Set the seed to a default value before each run
826*> = 1: Initialize the seed to a default value only before the
827*> first run
828*> = 2: Like 1, but use the seed values on the next line
829*>
830*> If line 8 was 2:
831*>
832*> line 9: INTEGER array, dimension (4)
833*> Four integer values for the random number seed.
834*>
835*> lines 9-EOF: Lines specifying matrix types, as for NEP.
836*> The 3-character path name is 'GLM' for the generalized
837*> linear regression model routines.
838*>
839*>-----------------------------------------------------------------------
840*>
841*> GQR data file:
842*>
843*> line 1: 'GQR' in columns 1 to 3.
844*>
845*> line 2: NN, INTEGER
846*> Number of values of M, P, and N.
847*>
848*> line 3: MVAL, INTEGER array, dimension(NN)
849*> Values of M.
850*>
851*> line 4: PVAL, INTEGER array, dimension(NN)
852*> Values of P.
853*>
854*> line 5: NVAL, INTEGER array, dimension(NN)
855*> Values of N.
856*>
857*> line 6: THRESH, REAL
858*> Threshold value for the test ratios. Information will be
859*> printed about each test for which the test ratio is greater
860*> than or equal to the threshold.
861*>
862*> line 7: TSTERR, LOGICAL
863*> Flag indicating whether or not to test the error exits for
864*> the LAPACK routines and driver routines.
865*>
866*> line 8: NEWSD, INTEGER
867*> A code indicating how to set the random number seed.
868*> = 0: Set the seed to a default value before each run
869*> = 1: Initialize the seed to a default value only before the
870*> first run
871*> = 2: Like 1, but use the seed values on the next line
872*>
873*> If line 8 was 2:
874*>
875*> line 9: INTEGER array, dimension (4)
876*> Four integer values for the random number seed.
877*>
878*> lines 9-EOF: Lines specifying matrix types, as for NEP.
879*> The 3-character path name is 'GQR' for the generalized
880*> QR and RQ routines.
881*>
882*>-----------------------------------------------------------------------
883*>
884*> GSV data file:
885*>
886*> line 1: 'GSV' in columns 1 to 3.
887*>
888*> line 2: NN, INTEGER
889*> Number of values of M, P, and N.
890*>
891*> line 3: MVAL, INTEGER array, dimension(NN)
892*> Values of M (row dimension).
893*>
894*> line 4: PVAL, INTEGER array, dimension(NN)
895*> Values of P (row dimension).
896*>
897*> line 5: NVAL, INTEGER array, dimension(NN)
898*> Values of N (column dimension).
899*>
900*> line 6: THRESH, REAL
901*> Threshold value for the test ratios. Information will be
902*> printed about each test for which the test ratio is greater
903*> than or equal to the threshold.
904*>
905*> line 7: TSTERR, LOGICAL
906*> Flag indicating whether or not to test the error exits for
907*> the LAPACK routines and driver routines.
908*>
909*> line 8: NEWSD, INTEGER
910*> A code indicating how to set the random number seed.
911*> = 0: Set the seed to a default value before each run
912*> = 1: Initialize the seed to a default value only before the
913*> first run
914*> = 2: Like 1, but use the seed values on the next line
915*>
916*> If line 8 was 2:
917*>
918*> line 9: INTEGER array, dimension (4)
919*> Four integer values for the random number seed.
920*>
921*> lines 9-EOF: Lines specifying matrix types, as for NEP.
922*> The 3-character path name is 'GSV' for the generalized
923*> SVD routines.
924*>
925*>-----------------------------------------------------------------------
926*>
927*> CSD data file:
928*>
929*> line 1: 'CSD' in columns 1 to 3.
930*>
931*> line 2: NM, INTEGER
932*> Number of values of M, P, and N.
933*>
934*> line 3: MVAL, INTEGER array, dimension(NM)
935*> Values of M (row and column dimension of orthogonal matrix).
936*>
937*> line 4: PVAL, INTEGER array, dimension(NM)
938*> Values of P (row dimension of top-left block).
939*>
940*> line 5: NVAL, INTEGER array, dimension(NM)
941*> Values of N (column dimension of top-left block).
942*>
943*> line 6: THRESH, REAL
944*> Threshold value for the test ratios. Information will be
945*> printed about each test for which the test ratio is greater
946*> than or equal to the threshold.
947*>
948*> line 7: TSTERR, LOGICAL
949*> Flag indicating whether or not to test the error exits for
950*> the LAPACK routines and driver routines.
951*>
952*> line 8: NEWSD, INTEGER
953*> A code indicating how to set the random number seed.
954*> = 0: Set the seed to a default value before each run
955*> = 1: Initialize the seed to a default value only before the
956*> first run
957*> = 2: Like 1, but use the seed values on the next line
958*>
959*> If line 8 was 2:
960*>
961*> line 9: INTEGER array, dimension (4)
962*> Four integer values for the random number seed.
963*>
964*> lines 9-EOF: Lines specifying matrix types, as for NEP.
965*> The 3-character path name is 'CSD' for the CSD routine.
966*>
967*>-----------------------------------------------------------------------
968*>
969*> LSE data file:
970*>
971*> line 1: 'LSE' in columns 1 to 3.
972*>
973*> line 2: NN, INTEGER
974*> Number of values of M, P, and N.
975*>
976*> line 3: MVAL, INTEGER array, dimension(NN)
977*> Values of M.
978*>
979*> line 4: PVAL, INTEGER array, dimension(NN)
980*> Values of P.
981*>
982*> line 5: NVAL, INTEGER array, dimension(NN)
983*> Values of N, note P <= N <= P+M.
984*>
985*> line 6: THRESH, REAL
986*> Threshold value for the test ratios. Information will be
987*> printed about each test for which the test ratio is greater
988*> than or equal to the threshold.
989*>
990*> line 7: TSTERR, LOGICAL
991*> Flag indicating whether or not to test the error exits for
992*> the LAPACK routines and driver routines.
993*>
994*> line 8: NEWSD, INTEGER
995*> A code indicating how to set the random number seed.
996*> = 0: Set the seed to a default value before each run
997*> = 1: Initialize the seed to a default value only before the
998*> first run
999*> = 2: Like 1, but use the seed values on the next line
1000*>
1001*> If line 8 was 2:
1002*>
1003*> line 9: INTEGER array, dimension (4)
1004*> Four integer values for the random number seed.
1005*>
1006*> lines 9-EOF: Lines specifying matrix types, as for NEP.
1007*> The 3-character path name is 'GSV' for the generalized
1008*> SVD routines.
1009*>
1010*>-----------------------------------------------------------------------
1011*>
1012*> NMAX is currently set to 132 and must be at least 12 for some of the
1013*> precomputed examples, and LWORK = NMAX*(5*NMAX+20) in the parameter
1014*> statements below. For SVD, we assume NRHS may be as big as N. The
1015*> parameter NEED is set to 14 to allow for 14 N-by-N matrices for CGG.
1016*> \endverbatim
1017*
1018* Arguments:
1019* ==========
1020*
1021*
1022* Authors:
1023* ========
1024*
1025*> \author Univ. of Tennessee
1026*> \author Univ. of California Berkeley
1027*> \author Univ. of Colorado Denver
1028*> \author NAG Ltd.
1029*
1030*> \ingroup complex_eig
1031*
1032* =====================================================================
1033 PROGRAM cchkee
1034*
1035#if defined(_OPENMP)
1036 use omp_lib
1037#endif
1038*
1039* -- LAPACK test routine --
1040* -- LAPACK is a software package provided by Univ. of Tennessee, --
1041* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
1042*
1043* =====================================================================
1044*
1045* .. Parameters ..
1046 INTEGER nmax
1047 parameter( nmax = 132 )
1048 INTEGER ncmax
1049 parameter( ncmax = 20 )
1050 INTEGER need
1051 parameter( need = 14 )
1052 INTEGER lwork
1053 parameter( lwork = nmax*( 5*nmax+20 ) )
1054 INTEGER liwork
1055 parameter( liwork = nmax*( nmax+20 ) )
1056 INTEGER maxin
1057 parameter( maxin = 20 )
1058 INTEGER maxt
1059 parameter( maxt = 30 )
1060 INTEGER nin, nout
1061 parameter( nin = 5, nout = 6 )
1062* ..
1063* .. Local Scalars ..
1064 LOGICAL cbb, cbk, cbl, ces, cev, cgg, cgk, cgl, cgs,
1065 $ cgv, cgx, chb, csd, csx, cvx, cxv, fatal, glm,
1066 $ gqr, gsv, lse, nep, sep, svd, tstchk, tstdif,
1067 $ tstdrv, tsterr
1068 CHARACTER c1
1069 CHARACTER*3 c3, path
1070 CHARACTER*32 vname
1071 CHARACTER*10 intstr
1072 CHARACTER*80 line
1073 INTEGER i, i1, ic, info, itmp, k, lenp, maxtyp, newsd,
1074 $ nk, nn, nparms, nrhs, ntypes,
1075 $ vers_major, vers_minor, vers_patch
1076 INTEGER*4 n_threads, one_thread
1077 REAL eps, s1, s2, thresh, thrshn
1078* ..
1079* .. Local Arrays ..
1080 LOGICAL dotype( maxt ), logwrk( nmax )
1081 INTEGER ioldsd( 4 ), iseed( 4 ), iwork( liwork ),
1082 $ kval( maxin ), mval( maxin ), mxbval( maxin ),
1083 $ nbcol( maxin ), nbmin( maxin ), nbval( maxin ),
1084 $ nsval( maxin ), nval( maxin ), nxval( maxin ),
1085 $ pval( maxin )
1086 INTEGER inmin( maxin ), inwin( maxin ), inibl( maxin ),
1087 $ ishfts( maxin ), iacc22( maxin )
1088 REAL alpha( nmax ), beta( nmax ), dr( nmax, 12 ),
1089 $ result( 500 )
1090 COMPLEX dc( nmax, 6 ), taua( nmax ), taub( nmax ),
1091 $ x( 5*nmax )
1092* ..
1093* .. Allocatable Arrays ..
1094 INTEGER allocatestatus
1095 REAL, DIMENSION(:), ALLOCATABLE :: rwork, s
1096 COMPLEX, DIMENSION(:), ALLOCATABLE :: work
1097 COMPLEX, DIMENSION(:,:), ALLOCATABLE :: a, b, c
1098* ..
1099* .. External Functions ..
1100 LOGICAL lsamen
1101 REAL second, slamch
1102 EXTERNAL lsamen, second, slamch
1103* ..
1104* .. External Subroutines ..
1105 EXTERNAL alareq, cchkbb, cchkbd, cchkbk, cchkbl, cchkec,
1111 $ cdrges3, cdrgev3,
1113* ..
1114* .. Intrinsic Functions ..
1115 INTRINSIC len, min
1116* ..
1117* .. Scalars in Common ..
1118 LOGICAL lerr, ok
1119 CHARACTER*32 srnamt
1120 INTEGER infot, maxb, nproc, nshift, nunit, seldim,
1121 $ selopt
1122* ..
1123* .. Arrays in Common ..
1124 LOGICAL selval( 20 )
1125 INTEGER iparms( 100 )
1126 REAL selwi( 20 ), selwr( 20 )
1127* ..
1128* .. Common blocks ..
1129 COMMON / cenvir / nproc, nshift, maxb
1130 COMMON / claenv / iparms
1131 COMMON / infoc / infot, nunit, ok, lerr
1132 COMMON / srnamc / srnamt
1133 COMMON / sslct / selopt, seldim, selval, selwr, selwi
1134* ..
1135* .. Data statements ..
1136 DATA intstr / '0123456789' /
1137 DATA ioldsd / 0, 0, 0, 1 /
1138* ..
1139* .. Allocate memory dynamically ..
1140*
1141 ALLOCATE ( s(nmax*nmax), stat = allocatestatus )
1142 IF (allocatestatus /= 0) stop "*** Not enough memory ***"
1143 ALLOCATE ( a(nmax*nmax,need), stat = allocatestatus )
1144 IF (allocatestatus /= 0) stop "*** Not enough memory ***"
1145 ALLOCATE ( b(nmax*nmax,5), stat = allocatestatus )
1146 IF (allocatestatus /= 0) stop "*** Not enough memory ***"
1147 ALLOCATE ( c(ncmax*ncmax,ncmax*ncmax), stat = allocatestatus )
1148 IF (allocatestatus /= 0) stop "*** Not enough memory ***"
1149 ALLOCATE ( rwork(lwork), stat = allocatestatus )
1150 IF (allocatestatus /= 0) stop "*** Not enough memory ***"
1151 ALLOCATE ( work(lwork), stat = allocatestatus )
1152 IF (allocatestatus /= 0) stop "*** Not enough memory ***"
1153* ..
1154* .. Executable Statements ..
1155*
1156 a = 0.0
1157 b = 0.0
1158 c = 0.0
1159 dc = 0.0
1160 s1 = second( )
1161 fatal = .false.
1162 nunit = nout
1163*
1164* Return to here to read multiple sets of data
1165*
1166 10 CONTINUE
1167*
1168* Read the first line and set the 3-character test path
1169*
1170 READ( nin, fmt = '(A80)', END = 380 )line
1171 path = line( 1: 3 )
1172 nep = lsamen( 3, path, 'NEP' ) .OR. lsamen( 3, path, 'CHS' )
1173 sep = lsamen( 3, path, 'SEP' ) .OR. lsamen( 3, path, 'CST' ) .OR.
1174 $ lsamen( 3, path, 'CSG' ) .OR. lsamen( 3, path, 'SE2' )
1175 svd = lsamen( 3, path, 'SVD' ) .OR. lsamen( 3, path, 'CBD' )
1176 cev = lsamen( 3, path, 'CEV' )
1177 ces = lsamen( 3, path, 'CES' )
1178 cvx = lsamen( 3, path, 'CVX' )
1179 csx = lsamen( 3, path, 'CSX' )
1180 cgg = lsamen( 3, path, 'CGG' )
1181 cgs = lsamen( 3, path, 'CGS' )
1182 cgx = lsamen( 3, path, 'CGX' )
1183 cgv = lsamen( 3, path, 'CGV' )
1184 cxv = lsamen( 3, path, 'CXV' )
1185 chb = lsamen( 3, path, 'CHB' )
1186 cbb = lsamen( 3, path, 'CBB' )
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 cbl = lsamen( 3, path, 'CBL' )
1193 cbk = lsamen( 3, path, 'CBK' )
1194 cgl = lsamen( 3, path, 'CGL' )
1195 cgk = lsamen( 3, path, 'CGK' )
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( cev ) THEN
1208 WRITE( nout, fmt = 9979 )
1209 ELSE IF( ces ) THEN
1210 WRITE( nout, fmt = 9978 )
1211 ELSE IF( cvx ) THEN
1212 WRITE( nout, fmt = 9977 )
1213 ELSE IF( csx ) THEN
1214 WRITE( nout, fmt = 9976 )
1215 ELSE IF( cgg ) THEN
1216 WRITE( nout, fmt = 9975 )
1217 ELSE IF( cgs ) THEN
1218 WRITE( nout, fmt = 9964 )
1219 ELSE IF( cgx ) THEN
1220 WRITE( nout, fmt = 9965 )
1221 ELSE IF( cgv ) THEN
1222 WRITE( nout, fmt = 9963 )
1223 ELSE IF( cxv ) THEN
1224 WRITE( nout, fmt = 9962 )
1225 ELSE IF( chb ) THEN
1226 WRITE( nout, fmt = 9974 )
1227 ELSE IF( cbb ) 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( cbl ) THEN
1240*
1241* CGEBAL: Balancing
1242*
1243 CALL cchkbl( nin, nout )
1244 GO TO 380
1245 ELSE IF( cbk ) THEN
1246*
1247* CGEBAK: Back transformation
1248*
1249 CALL cchkbk( nin, nout )
1250 GO TO 380
1251 ELSE IF( cgl ) THEN
1252*
1253* CGGBAL: Balancing
1254*
1255 CALL cchkgl( nin, nout )
1256 GO TO 380
1257 ELSE IF( cgk ) THEN
1258*
1259* CGGBAK: Back transformation
1260*
1261 CALL cchkgk( nin, nout )
1262 GO TO 380
1263 ELSE IF( lsamen( 3, path, 'CEC' ) ) THEN
1264*
1265* CEC: Eigencondition estimation
1266*
1267 READ( nin, fmt = * )thresh
1268 CALL xlaenv( 1, 1 )
1269 CALL xlaenv( 12, 1 )
1270 tsterr = .true.
1271 CALL cchkec( thresh, tsterr, nin, nout )
1272 GO TO 380
1273 ELSE
1274 WRITE( nout, fmt = 9992 )path
1275 GO TO 380
1276 END IF
1277 CALL ilaver( vers_major, vers_minor, vers_patch )
1278 WRITE( nout, fmt = 9972 ) vers_major, vers_minor, vers_patch
1279 WRITE( nout, fmt = 9984 )
1280*
1281* Read the number of values of M, P, and N.
1282*
1283 READ( nin, fmt = * )nn
1284 IF( nn.LT.0 ) THEN
1285 WRITE( nout, fmt = 9989 )' NN ', nn, 1
1286 nn = 0
1287 fatal = .true.
1288 ELSE IF( nn.GT.maxin ) THEN
1289 WRITE( nout, fmt = 9988 )' NN ', nn, maxin
1290 nn = 0
1291 fatal = .true.
1292 END IF
1293*
1294* Read the values of M
1295*
1296 IF( .NOT.( cgx .OR. cxv ) ) THEN
1297 READ( nin, fmt = * )( mval( i ), i = 1, nn )
1298 IF( svd ) THEN
1299 vname = ' M '
1300 ELSE
1301 vname = ' N '
1302 END IF
1303 DO 20 i = 1, nn
1304 IF( mval( i ).LT.0 ) THEN
1305 WRITE( nout, fmt = 9989 )vname, mval( i ), 0
1306 fatal = .true.
1307 ELSE IF( mval( i ).GT.nmax ) THEN
1308 WRITE( nout, fmt = 9988 )vname, mval( i ), nmax
1309 fatal = .true.
1310 END IF
1311 20 CONTINUE
1312 WRITE( nout, fmt = 9983 )'M: ', ( mval( i ), i = 1, nn )
1313 END IF
1314*
1315* Read the values of P
1316*
1317 IF( glm .OR. gqr .OR. gsv .OR. csd .OR. lse ) THEN
1318 READ( nin, fmt = * )( pval( i ), i = 1, nn )
1319 DO 30 i = 1, nn
1320 IF( pval( i ).LT.0 ) THEN
1321 WRITE( nout, fmt = 9989 )' P ', pval( i ), 0
1322 fatal = .true.
1323 ELSE IF( pval( i ).GT.nmax ) THEN
1324 WRITE( nout, fmt = 9988 )' P ', pval( i ), nmax
1325 fatal = .true.
1326 END IF
1327 30 CONTINUE
1328 WRITE( nout, fmt = 9983 )'P: ', ( pval( i ), i = 1, nn )
1329 END IF
1330*
1331* Read the values of N
1332*
1333 IF( svd .OR. cbb .OR. glm .OR. gqr .OR. gsv .OR. csd .OR.
1334 $ lse ) THEN
1335 READ( nin, fmt = * )( nval( i ), i = 1, nn )
1336 DO 40 i = 1, nn
1337 IF( nval( i ).LT.0 ) THEN
1338 WRITE( nout, fmt = 9989 )' N ', nval( i ), 0
1339 fatal = .true.
1340 ELSE IF( nval( i ).GT.nmax ) THEN
1341 WRITE( nout, fmt = 9988 )' N ', nval( i ), nmax
1342 fatal = .true.
1343 END IF
1344 40 CONTINUE
1345 ELSE
1346 DO 50 i = 1, nn
1347 nval( i ) = mval( i )
1348 50 CONTINUE
1349 END IF
1350 IF( .NOT.( cgx .OR. cxv ) ) THEN
1351 WRITE( nout, fmt = 9983 )'N: ', ( nval( i ), i = 1, nn )
1352 ELSE
1353 WRITE( nout, fmt = 9983 )'N: ', nn
1354 END IF
1355*
1356* Read the number of values of K, followed by the values of K
1357*
1358 IF( chb .OR. cbb ) THEN
1359 READ( nin, fmt = * )nk
1360 READ( nin, fmt = * )( kval( i ), i = 1, nk )
1361 DO 60 i = 1, nk
1362 IF( kval( i ).LT.0 ) THEN
1363 WRITE( nout, fmt = 9989 )' K ', kval( i ), 0
1364 fatal = .true.
1365 ELSE IF( kval( i ).GT.nmax ) THEN
1366 WRITE( nout, fmt = 9988 )' K ', kval( i ), nmax
1367 fatal = .true.
1368 END IF
1369 60 CONTINUE
1370 WRITE( nout, fmt = 9983 )'K: ', ( kval( i ), i = 1, nk )
1371 END IF
1372*
1373 IF( cev .OR. ces .OR. cvx .OR. csx ) THEN
1374*
1375* For the nonsymmetric QR driver routines, only one set of
1376* parameters is allowed.
1377*
1378 READ( nin, fmt = * )nbval( 1 ), nbmin( 1 ), nxval( 1 ),
1379 $ inmin( 1 ), inwin( 1 ), inibl(1), ishfts(1), iacc22(1)
1380 IF( nbval( 1 ).LT.1 ) THEN
1381 WRITE( nout, fmt = 9989 )' NB ', nbval( 1 ), 1
1382 fatal = .true.
1383 ELSE IF( nbmin( 1 ).LT.1 ) THEN
1384 WRITE( nout, fmt = 9989 )'NBMIN ', nbmin( 1 ), 1
1385 fatal = .true.
1386 ELSE IF( nxval( 1 ).LT.1 ) THEN
1387 WRITE( nout, fmt = 9989 )' NX ', nxval( 1 ), 1
1388 fatal = .true.
1389 ELSE IF( inmin( 1 ).LT.1 ) THEN
1390 WRITE( nout, fmt = 9989 )' INMIN ', inmin( 1 ), 1
1391 fatal = .true.
1392 ELSE IF( inwin( 1 ).LT.1 ) THEN
1393 WRITE( nout, fmt = 9989 )' INWIN ', inwin( 1 ), 1
1394 fatal = .true.
1395 ELSE IF( inibl( 1 ).LT.1 ) THEN
1396 WRITE( nout, fmt = 9989 )' INIBL ', inibl( 1 ), 1
1397 fatal = .true.
1398 ELSE IF( ishfts( 1 ).LT.1 ) THEN
1399 WRITE( nout, fmt = 9989 )' ISHFTS ', ishfts( 1 ), 1
1400 fatal = .true.
1401 ELSE IF( iacc22( 1 ).LT.0 ) THEN
1402 WRITE( nout, fmt = 9989 )' IACC22 ', iacc22( 1 ), 0
1403 fatal = .true.
1404 END IF
1405 CALL xlaenv( 1, nbval( 1 ) )
1406 CALL xlaenv( 2, nbmin( 1 ) )
1407 CALL xlaenv( 3, nxval( 1 ) )
1408 CALL xlaenv(12, max( 11, inmin( 1 ) ) )
1409 CALL xlaenv(13, inwin( 1 ) )
1410 CALL xlaenv(14, inibl( 1 ) )
1411 CALL xlaenv(15, ishfts( 1 ) )
1412 CALL xlaenv(16, iacc22( 1 ) )
1413 WRITE( nout, fmt = 9983 )'NB: ', nbval( 1 )
1414 WRITE( nout, fmt = 9983 )'NBMIN:', nbmin( 1 )
1415 WRITE( nout, fmt = 9983 )'NX: ', nxval( 1 )
1416 WRITE( nout, fmt = 9983 )'INMIN: ', inmin( 1 )
1417 WRITE( nout, fmt = 9983 )'INWIN: ', inwin( 1 )
1418 WRITE( nout, fmt = 9983 )'INIBL: ', inibl( 1 )
1419 WRITE( nout, fmt = 9983 )'ISHFTS: ', ishfts( 1 )
1420 WRITE( nout, fmt = 9983 )'IACC22: ', iacc22( 1 )
1421*
1422 ELSE IF( cgs .OR. cgx .OR. cgv .OR. cxv ) THEN
1423*
1424* For the nonsymmetric generalized driver routines, only one set of
1425* parameters is allowed.
1426*
1427 READ( nin, fmt = * )nbval( 1 ), nbmin( 1 ), nxval( 1 ),
1428 $ nsval( 1 ), mxbval( 1 )
1429 IF( nbval( 1 ).LT.1 ) THEN
1430 WRITE( nout, fmt = 9989 )' NB ', nbval( 1 ), 1
1431 fatal = .true.
1432 ELSE IF( nbmin( 1 ).LT.1 ) THEN
1433 WRITE( nout, fmt = 9989 )'NBMIN ', nbmin( 1 ), 1
1434 fatal = .true.
1435 ELSE IF( nxval( 1 ).LT.1 ) THEN
1436 WRITE( nout, fmt = 9989 )' NX ', nxval( 1 ), 1
1437 fatal = .true.
1438 ELSE IF( nsval( 1 ).LT.2 ) THEN
1439 WRITE( nout, fmt = 9989 )' NS ', nsval( 1 ), 2
1440 fatal = .true.
1441 ELSE IF( mxbval( 1 ).LT.1 ) THEN
1442 WRITE( nout, fmt = 9989 )' MAXB ', mxbval( 1 ), 1
1443 fatal = .true.
1444 END IF
1445 CALL xlaenv( 1, nbval( 1 ) )
1446 CALL xlaenv( 2, nbmin( 1 ) )
1447 CALL xlaenv( 3, nxval( 1 ) )
1448 CALL xlaenv( 4, nsval( 1 ) )
1449 CALL xlaenv( 8, mxbval( 1 ) )
1450 WRITE( nout, fmt = 9983 )'NB: ', nbval( 1 )
1451 WRITE( nout, fmt = 9983 )'NBMIN:', nbmin( 1 )
1452 WRITE( nout, fmt = 9983 )'NX: ', nxval( 1 )
1453 WRITE( nout, fmt = 9983 )'NS: ', nsval( 1 )
1454 WRITE( nout, fmt = 9983 )'MAXB: ', mxbval( 1 )
1455 ELSE IF( .NOT.chb .AND. .NOT.glm .AND. .NOT.gqr .AND. .NOT.
1456 $ gsv .AND. .NOT.csd .AND. .NOT.lse ) THEN
1457*
1458* For the other paths, the number of parameters can be varied
1459* from the input file. Read the number of parameter values.
1460*
1461 READ( nin, fmt = * )nparms
1462 IF( nparms.LT.1 ) THEN
1463 WRITE( nout, fmt = 9989 )'NPARMS', nparms, 1
1464 nparms = 0
1465 fatal = .true.
1466 ELSE IF( nparms.GT.maxin ) THEN
1467 WRITE( nout, fmt = 9988 )'NPARMS', nparms, maxin
1468 nparms = 0
1469 fatal = .true.
1470 END IF
1471*
1472* Read the values of NB
1473*
1474 IF( .NOT.cbb ) THEN
1475 READ( nin, fmt = * )( nbval( i ), i = 1, nparms )
1476 DO 70 i = 1, nparms
1477 IF( nbval( i ).LT.0 ) THEN
1478 WRITE( nout, fmt = 9989 )' NB ', nbval( i ), 0
1479 fatal = .true.
1480 ELSE IF( nbval( i ).GT.nmax ) THEN
1481 WRITE( nout, fmt = 9988 )' NB ', nbval( i ), nmax
1482 fatal = .true.
1483 END IF
1484 70 CONTINUE
1485 WRITE( nout, fmt = 9983 )'NB: ',
1486 $ ( nbval( i ), i = 1, nparms )
1487 END IF
1488*
1489* Read the values of NBMIN
1490*
1491 IF( nep .OR. sep .OR. svd .OR. cgg ) THEN
1492 READ( nin, fmt = * )( nbmin( i ), i = 1, nparms )
1493 DO 80 i = 1, nparms
1494 IF( nbmin( i ).LT.0 ) THEN
1495 WRITE( nout, fmt = 9989 )'NBMIN ', nbmin( i ), 0
1496 fatal = .true.
1497 ELSE IF( nbmin( i ).GT.nmax ) THEN
1498 WRITE( nout, fmt = 9988 )'NBMIN ', nbmin( i ), nmax
1499 fatal = .true.
1500 END IF
1501 80 CONTINUE
1502 WRITE( nout, fmt = 9983 )'NBMIN:',
1503 $ ( nbmin( i ), i = 1, nparms )
1504 ELSE
1505 DO 90 i = 1, nparms
1506 nbmin( i ) = 1
1507 90 CONTINUE
1508 END IF
1509*
1510* Read the values of NX
1511*
1512 IF( nep .OR. sep .OR. svd ) THEN
1513 READ( nin, fmt = * )( nxval( i ), i = 1, nparms )
1514 DO 100 i = 1, nparms
1515 IF( nxval( i ).LT.0 ) THEN
1516 WRITE( nout, fmt = 9989 )' NX ', nxval( i ), 0
1517 fatal = .true.
1518 ELSE IF( nxval( i ).GT.nmax ) THEN
1519 WRITE( nout, fmt = 9988 )' NX ', nxval( i ), nmax
1520 fatal = .true.
1521 END IF
1522 100 CONTINUE
1523 WRITE( nout, fmt = 9983 )'NX: ',
1524 $ ( nxval( i ), i = 1, nparms )
1525 ELSE
1526 DO 110 i = 1, nparms
1527 nxval( i ) = 1
1528 110 CONTINUE
1529 END IF
1530*
1531* Read the values of NSHIFT (if CGG) or NRHS (if SVD
1532* or CBB).
1533*
1534 IF( svd .OR. cbb .OR. cgg ) THEN
1535 READ( nin, fmt = * )( nsval( i ), i = 1, nparms )
1536 DO 120 i = 1, nparms
1537 IF( nsval( i ).LT.0 ) THEN
1538 WRITE( nout, fmt = 9989 )' NS ', nsval( i ), 0
1539 fatal = .true.
1540 ELSE IF( nsval( i ).GT.nmax ) THEN
1541 WRITE( nout, fmt = 9988 )' NS ', nsval( i ), nmax
1542 fatal = .true.
1543 END IF
1544 120 CONTINUE
1545 WRITE( nout, fmt = 9983 )'NS: ',
1546 $ ( nsval( i ), i = 1, nparms )
1547 ELSE
1548 DO 130 i = 1, nparms
1549 nsval( i ) = 1
1550 130 CONTINUE
1551 END IF
1552*
1553* Read the values for MAXB.
1554*
1555 IF( cgg ) THEN
1556 READ( nin, fmt = * )( mxbval( i ), i = 1, nparms )
1557 DO 140 i = 1, nparms
1558 IF( mxbval( i ).LT.0 ) THEN
1559 WRITE( nout, fmt = 9989 )' MAXB ', mxbval( i ), 0
1560 fatal = .true.
1561 ELSE IF( mxbval( i ).GT.nmax ) THEN
1562 WRITE( nout, fmt = 9988 )' MAXB ', mxbval( i ), nmax
1563 fatal = .true.
1564 END IF
1565 140 CONTINUE
1566 WRITE( nout, fmt = 9983 )'MAXB: ',
1567 $ ( mxbval( i ), i = 1, nparms )
1568 ELSE
1569 DO 150 i = 1, nparms
1570 mxbval( i ) = 1
1571 150 CONTINUE
1572 END IF
1573*
1574* Read the values for INMIN.
1575*
1576 IF( nep ) THEN
1577 READ( nin, fmt = * )( inmin( i ), i = 1, nparms )
1578 DO 540 i = 1, nparms
1579 IF( inmin( i ).LT.0 ) THEN
1580 WRITE( nout, fmt = 9989 )' INMIN ', inmin( i ), 0
1581 fatal = .true.
1582 END IF
1583 540 CONTINUE
1584 WRITE( nout, fmt = 9983 )'INMIN: ',
1585 $ ( inmin( i ), i = 1, nparms )
1586 ELSE
1587 DO 550 i = 1, nparms
1588 inmin( i ) = 1
1589 550 CONTINUE
1590 END IF
1591*
1592* Read the values for INWIN.
1593*
1594 IF( nep ) THEN
1595 READ( nin, fmt = * )( inwin( i ), i = 1, nparms )
1596 DO 560 i = 1, nparms
1597 IF( inwin( i ).LT.0 ) THEN
1598 WRITE( nout, fmt = 9989 )' INWIN ', inwin( i ), 0
1599 fatal = .true.
1600 END IF
1601 560 CONTINUE
1602 WRITE( nout, fmt = 9983 )'INWIN: ',
1603 $ ( inwin( i ), i = 1, nparms )
1604 ELSE
1605 DO 570 i = 1, nparms
1606 inwin( i ) = 1
1607 570 CONTINUE
1608 END IF
1609*
1610* Read the values for INIBL.
1611*
1612 IF( nep ) THEN
1613 READ( nin, fmt = * )( inibl( i ), i = 1, nparms )
1614 DO 580 i = 1, nparms
1615 IF( inibl( i ).LT.0 ) THEN
1616 WRITE( nout, fmt = 9989 )' INIBL ', inibl( i ), 0
1617 fatal = .true.
1618 END IF
1619 580 CONTINUE
1620 WRITE( nout, fmt = 9983 )'INIBL: ',
1621 $ ( inibl( i ), i = 1, nparms )
1622 ELSE
1623 DO 590 i = 1, nparms
1624 inibl( i ) = 1
1625 590 CONTINUE
1626 END IF
1627*
1628* Read the values for ISHFTS.
1629*
1630 IF( nep ) THEN
1631 READ( nin, fmt = * )( ishfts( i ), i = 1, nparms )
1632 DO 600 i = 1, nparms
1633 IF( ishfts( i ).LT.0 ) THEN
1634 WRITE( nout, fmt = 9989 )' ISHFTS ', ishfts( i ), 0
1635 fatal = .true.
1636 END IF
1637 600 CONTINUE
1638 WRITE( nout, fmt = 9983 )'ISHFTS: ',
1639 $ ( ishfts( i ), i = 1, nparms )
1640 ELSE
1641 DO 610 i = 1, nparms
1642 ishfts( i ) = 1
1643 610 CONTINUE
1644 END IF
1645*
1646* Read the values for IACC22.
1647*
1648 IF( nep .OR. cgg ) THEN
1649 READ( nin, fmt = * )( iacc22( i ), i = 1, nparms )
1650 DO 620 i = 1, nparms
1651 IF( iacc22( i ).LT.0 ) THEN
1652 WRITE( nout, fmt = 9989 )' IACC22 ', iacc22( i ), 0
1653 fatal = .true.
1654 END IF
1655 620 CONTINUE
1656 WRITE( nout, fmt = 9983 )'IACC22: ',
1657 $ ( iacc22( i ), i = 1, nparms )
1658 ELSE
1659 DO 630 i = 1, nparms
1660 iacc22( i ) = 1
1661 630 CONTINUE
1662 END IF
1663*
1664* Read the values for NBCOL.
1665*
1666 IF( cgg ) THEN
1667 READ( nin, fmt = * )( nbcol( i ), i = 1, nparms )
1668 DO 160 i = 1, nparms
1669 IF( nbcol( i ).LT.0 ) THEN
1670 WRITE( nout, fmt = 9989 )'NBCOL ', nbcol( i ), 0
1671 fatal = .true.
1672 ELSE IF( nbcol( i ).GT.nmax ) THEN
1673 WRITE( nout, fmt = 9988 )'NBCOL ', nbcol( i ), nmax
1674 fatal = .true.
1675 END IF
1676 160 CONTINUE
1677 WRITE( nout, fmt = 9983 )'NBCOL:',
1678 $ ( nbcol( i ), i = 1, nparms )
1679 ELSE
1680 DO 170 i = 1, nparms
1681 nbcol( i ) = 1
1682 170 CONTINUE
1683 END IF
1684 END IF
1685*
1686* Calculate and print the machine dependent constants.
1687*
1688 WRITE( nout, fmt = * )
1689 eps = slamch( 'Underflow threshold' )
1690 WRITE( nout, fmt = 9981 )'underflow', eps
1691 eps = slamch( 'Overflow threshold' )
1692 WRITE( nout, fmt = 9981 )'overflow ', eps
1693 eps = slamch( 'Epsilon' )
1694 WRITE( nout, fmt = 9981 )'precision', eps
1695*
1696* Read the threshold value for the test ratios.
1697*
1698 READ( nin, fmt = * )thresh
1699 WRITE( nout, fmt = 9982 )thresh
1700 IF( sep .OR. svd .OR. cgg ) THEN
1701*
1702* Read the flag that indicates whether to test LAPACK routines.
1703*
1704 READ( nin, fmt = * )tstchk
1705*
1706* Read the flag that indicates whether to test driver routines.
1707*
1708 READ( nin, fmt = * )tstdrv
1709 END IF
1710*
1711* Read the flag that indicates whether to test the error exits.
1712*
1713 READ( nin, fmt = * )tsterr
1714*
1715* Read the code describing how to set the random number seed.
1716*
1717 READ( nin, fmt = * )newsd
1718*
1719* If NEWSD = 2, read another line with 4 integers for the seed.
1720*
1721 IF( newsd.EQ.2 )
1722 $ READ( nin, fmt = * )( ioldsd( i ), i = 1, 4 )
1723*
1724 DO 180 i = 1, 4
1725 iseed( i ) = ioldsd( i )
1726 180 CONTINUE
1727*
1728 IF( fatal ) THEN
1729 WRITE( nout, fmt = 9999 )
1730 stop
1731 END IF
1732*
1733* Read the input lines indicating the test path and its parameters.
1734* The first three characters indicate the test path, and the number
1735* of test matrix types must be the first nonblank item in columns
1736* 4-80.
1737*
1738 190 CONTINUE
1739*
1740 IF( .NOT.( cgx .OR. cxv ) ) THEN
1741*
1742 200 CONTINUE
1743 READ( nin, fmt = '(A80)', END = 380 )line
1744 c3 = line( 1: 3 )
1745 lenp = len( line )
1746 i = 3
1747 itmp = 0
1748 i1 = 0
1749 210 CONTINUE
1750 i = i + 1
1751 IF( i.GT.lenp ) THEN
1752 IF( i1.GT.0 ) THEN
1753 GO TO 240
1754 ELSE
1755 ntypes = maxt
1756 GO TO 240
1757 END IF
1758 END IF
1759 IF( line( i: i ).NE.' ' .AND. line( i: i ).NE.',' ) THEN
1760 i1 = i
1761 c1 = line( i1: i1 )
1762*
1763* Check that a valid integer was read
1764*
1765 DO 220 k = 1, 10
1766 IF( c1.EQ.intstr( k: k ) ) THEN
1767 ic = k - 1
1768 GO TO 230
1769 END IF
1770 220 CONTINUE
1771 WRITE( nout, fmt = 9991 )i, line
1772 GO TO 200
1773 230 CONTINUE
1774 itmp = 10*itmp + ic
1775 GO TO 210
1776 ELSE IF( i1.GT.0 ) THEN
1777 GO TO 240
1778 ELSE
1779 GO TO 210
1780 END IF
1781 240 CONTINUE
1782 ntypes = itmp
1783*
1784* Skip the tests if NTYPES is <= 0.
1785*
1786 IF( .NOT.( cev .OR. ces .OR. cvx .OR. csx .OR. cgv .OR.
1787 $ cgs ) .AND. ntypes.LE.0 ) THEN
1788 WRITE( nout, fmt = 9990 )c3
1789 GO TO 200
1790 END IF
1791*
1792 ELSE
1793 IF( cgx )
1794 $ c3 = 'CGX'
1795 IF( cxv )
1796 $ c3 = 'CXV'
1797 END IF
1798*
1799* Reset the random number seed.
1800*
1801 IF( newsd.EQ.0 ) THEN
1802 DO 250 k = 1, 4
1803 iseed( k ) = ioldsd( k )
1804 250 CONTINUE
1805 END IF
1806*
1807 IF( lsamen( 3, c3, 'CHS' ) .OR. lsamen( 3, c3, 'NEP' ) ) THEN
1808*
1809* -------------------------------------
1810* NEP: Nonsymmetric Eigenvalue Problem
1811* -------------------------------------
1812* Vary the parameters
1813* NB = block size
1814* NBMIN = minimum block size
1815* NX = crossover point
1816* NS = number of shifts
1817* MAXB = minimum submatrix size
1818*
1819 maxtyp = 21
1820 ntypes = min( maxtyp, ntypes )
1821 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
1822 CALL xlaenv( 1, 1 )
1823 IF( tsterr )
1824 $ CALL cerrhs( 'CHSEQR', nout )
1825 DO 270 i = 1, nparms
1826 CALL xlaenv( 1, nbval( i ) )
1827 CALL xlaenv( 2, nbmin( i ) )
1828 CALL xlaenv( 3, nxval( i ) )
1829 CALL xlaenv(12, max( 11, inmin( i ) ) )
1830 CALL xlaenv(13, inwin( i ) )
1831 CALL xlaenv(14, inibl( i ) )
1832 CALL xlaenv(15, ishfts( i ) )
1833 CALL xlaenv(16, iacc22( i ) )
1834*
1835 IF( newsd.EQ.0 ) THEN
1836 DO 260 k = 1, 4
1837 iseed( k ) = ioldsd( k )
1838 260 CONTINUE
1839 END IF
1840 WRITE( nout, fmt = 9961 )c3, nbval( i ), nbmin( i ),
1841 $ nxval( i ), max( 11, inmin(i)),
1842 $ inwin( i ), inibl( i ), ishfts( i ), iacc22( i )
1843 CALL cchkhs( nn, nval, maxtyp, dotype, iseed, thresh, nout,
1844 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
1845 $ a( 1, 4 ), a( 1, 5 ), nmax, a( 1, 6 ),
1846 $ a( 1, 7 ), dc( 1, 1 ), dc( 1, 2 ), a( 1, 8 ),
1847 $ a( 1, 9 ), a( 1, 10 ), a( 1, 11 ), a( 1, 12 ),
1848 $ dc( 1, 3 ), work, lwork, rwork, iwork, logwrk,
1849 $ result, info )
1850 IF( info.NE.0 )
1851 $ WRITE( nout, fmt = 9980 )'CCHKHS', info
1852 270 CONTINUE
1853*
1854 ELSE IF( lsamen( 3, c3, 'CST' ) .OR. lsamen( 3, c3, 'SEP' )
1855 $ .OR. lsamen( 3, c3, 'SE2' ) ) THEN
1856*
1857* ----------------------------------
1858* SEP: Symmetric Eigenvalue Problem
1859* ----------------------------------
1860* Vary the parameters
1861* NB = block size
1862* NBMIN = minimum block size
1863* NX = crossover point
1864*
1865 maxtyp = 21
1866 ntypes = min( maxtyp, ntypes )
1867 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
1868 CALL xlaenv( 1, 1 )
1869 CALL xlaenv( 9, 25 )
1870 IF( tsterr ) THEN
1871#if defined(_OPENMP)
1872 n_threads = omp_get_max_threads()
1873 one_thread = 1
1874 CALL omp_set_num_threads(one_thread)
1875#endif
1876 CALL cerrst( 'CST', nout )
1877#if defined(_OPENMP)
1878 CALL omp_set_num_threads(n_threads)
1879#endif
1880 END IF
1881 DO 290 i = 1, nparms
1882 CALL xlaenv( 1, nbval( i ) )
1883 CALL xlaenv( 2, nbmin( i ) )
1884 CALL xlaenv( 3, nxval( i ) )
1885*
1886 IF( newsd.EQ.0 ) THEN
1887 DO 280 k = 1, 4
1888 iseed( k ) = ioldsd( k )
1889 280 CONTINUE
1890 END IF
1891 WRITE( nout, fmt = 9997 )c3, nbval( i ), nbmin( i ),
1892 $ nxval( i )
1893 IF( tstchk ) THEN
1894 IF( lsamen( 3, c3, 'SE2' ) ) THEN
1895 CALL cchkst2stg( nn, nval, maxtyp, dotype, iseed, thresh,
1896 $ nout, a( 1, 1 ), nmax, a( 1, 2 ),
1897 $ dr( 1, 1 ), dr( 1, 2 ), dr( 1, 3 ),
1898 $ dr( 1, 4 ), dr( 1, 5 ), dr( 1, 6 ),
1899 $ dr( 1, 7 ), dr( 1, 8 ), dr( 1, 9 ),
1900 $ dr( 1, 10 ), dr( 1, 11 ), a( 1, 3 ), nmax,
1901 $ a( 1, 4 ), a( 1, 5 ), dc( 1, 1 ), a( 1, 6 ),
1902 $ work, lwork, rwork, lwork, iwork, liwork,
1903 $ result, info )
1904 ELSE
1905 CALL cchkst( nn, nval, maxtyp, dotype, iseed, thresh,
1906 $ nout, a( 1, 1 ), nmax, a( 1, 2 ),
1907 $ dr( 1, 1 ), dr( 1, 2 ), dr( 1, 3 ),
1908 $ dr( 1, 4 ), dr( 1, 5 ), dr( 1, 6 ),
1909 $ dr( 1, 7 ), dr( 1, 8 ), dr( 1, 9 ),
1910 $ dr( 1, 10 ), dr( 1, 11 ), a( 1, 3 ), nmax,
1911 $ a( 1, 4 ), a( 1, 5 ), dc( 1, 1 ), a( 1, 6 ),
1912 $ work, lwork, rwork, lwork, iwork, liwork,
1913 $ result, info )
1914 ENDIF
1915 IF( info.NE.0 )
1916 $ WRITE( nout, fmt = 9980 )'CCHKST', info
1917 END IF
1918 IF( tstdrv ) THEN
1919 IF( lsamen( 3, c3, 'SE2' ) ) THEN
1920 CALL cdrvst2stg( nn, nval, 18, dotype, iseed, thresh,
1921 $ nout, a( 1, 1 ), nmax, dr( 1, 3 ), dr( 1, 4 ),
1922 $ dr( 1, 5 ), dr( 1, 8 ), dr( 1, 9 ),
1923 $ dr( 1, 10 ), a( 1, 2 ), nmax, a( 1, 3 ),
1924 $ dc( 1, 1 ), a( 1, 4 ), work, lwork, rwork,
1925 $ lwork, iwork, liwork, result, info )
1926 ELSE
1927 CALL cdrvst( nn, nval, 18, dotype, iseed, thresh, nout,
1928 $ a( 1, 1 ), nmax, dr( 1, 3 ), dr( 1, 4 ),
1929 $ dr( 1, 5 ), dr( 1, 8 ), dr( 1, 9 ),
1930 $ dr( 1, 10 ), a( 1, 2 ), nmax, a( 1, 3 ),
1931 $ dc( 1, 1 ), a( 1, 4 ), work, lwork, rwork,
1932 $ lwork, iwork, liwork, result, info )
1933 ENDIF
1934 IF( info.NE.0 )
1935 $ WRITE( nout, fmt = 9980 )'CDRVST', info
1936 END IF
1937 290 CONTINUE
1938*
1939 ELSE IF( lsamen( 3, c3, 'CSG' ) ) THEN
1940*
1941* ----------------------------------------------
1942* CSG: Hermitian Generalized Eigenvalue Problem
1943* ----------------------------------------------
1944* Vary the parameters
1945* NB = block size
1946* NBMIN = minimum block size
1947* NX = crossover point
1948*
1949 maxtyp = 21
1950 ntypes = min( maxtyp, ntypes )
1951 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
1952 CALL xlaenv( 9, 25 )
1953 DO 310 i = 1, nparms
1954 CALL xlaenv( 1, nbval( i ) )
1955 CALL xlaenv( 2, nbmin( i ) )
1956 CALL xlaenv( 3, nxval( i ) )
1957*
1958 IF( newsd.EQ.0 ) THEN
1959 DO 300 k = 1, 4
1960 iseed( k ) = ioldsd( k )
1961 300 CONTINUE
1962 END IF
1963 WRITE( nout, fmt = 9997 )c3, nbval( i ), nbmin( i ),
1964 $ nxval( i )
1965 IF( tstchk ) THEN
1966* CALL CDRVSG( NN, NVAL, MAXTYP, DOTYPE, ISEED, THRESH,
1967* $ NOUT, A( 1, 1 ), NMAX, A( 1, 2 ), NMAX,
1968* $ DR( 1, 3 ), A( 1, 3 ), NMAX, A( 1, 4 ),
1969* $ A( 1, 5 ), A( 1, 6 ), A( 1, 7 ), WORK,
1970* $ LWORK, RWORK, LWORK, IWORK, LIWORK, RESULT,
1971* $ INFO )
1972 CALL cdrvsg2stg( nn, nval, maxtyp, dotype, iseed, thresh,
1973 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), nmax,
1974 $ dr( 1, 3 ), dr( 1, 4 ), a( 1, 3 ), nmax,
1975 $ a( 1, 4 ), a( 1, 5 ), a( 1, 6 ),
1976 $ a( 1, 7 ), work, lwork, rwork, lwork,
1977 $ iwork, liwork, result, info )
1978 IF( info.NE.0 )
1979 $ WRITE( nout, fmt = 9980 )'CDRVSG', info
1980 END IF
1981 310 CONTINUE
1982*
1983 ELSE IF( lsamen( 3, c3, 'CBD' ) .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( 9, 25 )
1998*
1999* Test the error exits
2000*
2001 CALL xlaenv( 1, 1 )
2002 IF( tsterr .AND. tstchk )
2003 $ CALL cerrbd( 'CBD', nout )
2004 IF( tsterr .AND. tstdrv )
2005 $ CALL cerred( 'CBD', 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 cchkbd( nn, mval, nval, maxtyp, dotype, nrhs, iseed,
2021 $ thresh, a( 1, 1 ), nmax, dr( 1, 1 ),
2022 $ dr( 1, 2 ), dr( 1, 3 ), dr( 1, 4 ),
2023 $ a( 1, 2 ), nmax, a( 1, 3 ), a( 1, 4 ),
2024 $ a( 1, 5 ), nmax, a( 1, 6 ), nmax, a( 1, 7 ),
2025 $ a( 1, 8 ), work, lwork, rwork, nout, info )
2026 IF( info.NE.0 )
2027 $ WRITE( nout, fmt = 9980 )'CCHKBD', info
2028 END IF
2029 IF( tstdrv )
2030 $ CALL cdrvbd( 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 ), dr( 1, 1 ), dr( 1, 2 ),
2034 $ dr( 1, 3 ), work, lwork, rwork, iwork, nout,
2035 $ info )
2036 330 CONTINUE
2037*
2038 ELSE IF( lsamen( 3, c3, 'CEV' ) ) THEN
2039*
2040* --------------------------------------------
2041* CEV: Nonsymmetric Eigenvalue Problem Driver
2042* CGEEV (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 cerred( c3, nout )
2052 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2053 CALL cdrvev( nn, nval, ntypes, dotype, iseed, thresh, nout,
2054 $ a( 1, 1 ), nmax, a( 1, 2 ), dc( 1, 1 ),
2055 $ dc( 1, 2 ), a( 1, 3 ), nmax, a( 1, 4 ), nmax,
2056 $ a( 1, 5 ), nmax, result, work, lwork, rwork,
2057 $ iwork, info )
2058 IF( info.NE.0 )
2059 $ WRITE( nout, fmt = 9980 )'CGEEV', info
2060 END IF
2061 WRITE( nout, fmt = 9973 )
2062 GO TO 10
2063*
2064 ELSE IF( lsamen( 3, c3, 'CES' ) ) THEN
2065*
2066* --------------------------------------------
2067* CES: Nonsymmetric Eigenvalue Problem Driver
2068* CGEES (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 cerred( c3, nout )
2078 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2079 CALL cdrves( nn, nval, ntypes, dotype, iseed, thresh, nout,
2080 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2081 $ dc( 1, 1 ), dc( 1, 2 ), a( 1, 4 ), nmax,
2082 $ result, work, lwork, rwork, iwork, logwrk,
2083 $ info )
2084 IF( info.NE.0 )
2085 $ WRITE( nout, fmt = 9980 )'CGEES', info
2086 END IF
2087 WRITE( nout, fmt = 9973 )
2088 GO TO 10
2089*
2090 ELSE IF( lsamen( 3, c3, 'CVX' ) ) THEN
2091*
2092* --------------------------------------------------------------
2093* CVX: Nonsymmetric Eigenvalue Problem Expert Driver
2094* CGEEVX (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 cerred( c3, nout )
2104 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2105 CALL cdrvvx( nn, nval, ntypes, dotype, iseed, thresh, nin,
2106 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), dc( 1, 1 ),
2107 $ dc( 1, 2 ), a( 1, 3 ), nmax, a( 1, 4 ), nmax,
2108 $ a( 1, 5 ), nmax, dr( 1, 1 ), dr( 1, 2 ),
2109 $ dr( 1, 3 ), dr( 1, 4 ), dr( 1, 5 ), dr( 1, 6 ),
2110 $ dr( 1, 7 ), dr( 1, 8 ), result, work, lwork,
2111 $ rwork, info )
2112 IF( info.NE.0 )
2113 $ WRITE( nout, fmt = 9980 )'CGEEVX', info
2114 END IF
2115 WRITE( nout, fmt = 9973 )
2116 GO TO 10
2117*
2118 ELSE IF( lsamen( 3, c3, 'CSX' ) ) THEN
2119*
2120* ---------------------------------------------------
2121* CSX: Nonsymmetric Eigenvalue Problem Expert Driver
2122* CGEESX (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 cerred( c3, nout )
2132 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2133 CALL cdrvsx( nn, nval, ntypes, dotype, iseed, thresh, nin,
2134 $ nout, a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2135 $ dc( 1, 1 ), dc( 1, 2 ), dc( 1, 3 ), a( 1, 4 ),
2136 $ nmax, a( 1, 5 ), result, work, lwork, rwork,
2137 $ logwrk, info )
2138 IF( info.NE.0 )
2139 $ WRITE( nout, fmt = 9980 )'CGEESX', info
2140 END IF
2141 WRITE( nout, fmt = 9973 )
2142 GO TO 10
2143*
2144 ELSE IF( lsamen( 3, c3, 'CGG' ) ) THEN
2145*
2146* -------------------------------------------------
2147* CGG: 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 cerrgg( 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.
2180 IF( tstchk ) THEN
2181 CALL cchkgg( 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 $ dc( 1, 1 ), dc( 1, 2 ), dc( 1, 3 ),
2187 $ dc( 1, 4 ), a( 1, 13 ), a( 1, 14 ), work,
2188 $ lwork, rwork, logwrk, result, info )
2189 IF( info.NE.0 )
2190 $ WRITE( nout, fmt = 9980 )'CCHKGG', info
2191 END IF
2192 350 CONTINUE
2193*
2194 ELSE IF( lsamen( 3, c3, 'CGS' ) ) THEN
2195*
2196* -------------------------------------------------
2197* CGS: Generalized Nonsymmetric Eigenvalue Problem
2198* CGGES (Schur form)
2199* -------------------------------------------------
2200*
2201 maxtyp = 26
2202 ntypes = min( maxtyp, ntypes )
2203 IF( ntypes.LE.0 ) THEN
2204 WRITE( nout, fmt = 9990 )c3
2205 ELSE
2206 IF( tsterr )
2207 $ CALL cerrgg( c3, nout )
2208 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2209 CALL cdrges( nn, nval, maxtyp, dotype, iseed, thresh, nout,
2210 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2211 $ a( 1, 4 ), a( 1, 7 ), nmax, a( 1, 8 ),
2212 $ dc( 1, 1 ), dc( 1, 2 ), work, lwork, rwork,
2213 $ result, logwrk, info )
2214*
2215 IF( info.NE.0 )
2216 $ WRITE( nout, fmt = 9980 )'CDRGES', info
2217*
2218* Blocked version
2219*
2220 CALL xlaenv(16,2)
2221 CALL cdrges3( 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 $ dc( 1, 1 ), dc( 1, 2 ), work, lwork, rwork,
2225 $ result, logwrk, info )
2226*
2227 IF( info.NE.0 )
2228 $ WRITE( nout, fmt = 9980 )'CDRGES3', info
2229 END IF
2230 WRITE( nout, fmt = 9973 )
2231
2232 GO TO 10
2233*
2234 ELSE IF( cgx ) THEN
2235*
2236* -------------------------------------------------
2237* CGX Generalized Nonsymmetric Eigenvalue Problem
2238* CGGESX (Schur form and condition numbers)
2239* -------------------------------------------------
2240*
2241 maxtyp = 5
2242 ntypes = maxtyp
2243 IF( nn.LT.0 ) THEN
2244 WRITE( nout, fmt = 9990 )c3
2245 ELSE
2246 IF( tsterr )
2247 $ CALL cerrgg( c3, nout )
2248 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2249 CALL xlaenv( 5, 2 )
2250 CALL cdrgsx( nn, ncmax, thresh, nin, nout, a( 1, 1 ), nmax,
2251 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), a( 1, 5 ),
2252 $ a( 1, 6 ), dc( 1, 1 ), dc( 1, 2 ), c,
2253 $ ncmax*ncmax, s, work, lwork, rwork, iwork,
2254 $ liwork, logwrk, info )
2255 IF( info.NE.0 )
2256 $ WRITE( nout, fmt = 9980 )'CDRGSX', info
2257 END IF
2258 WRITE( nout, fmt = 9973 )
2259 GO TO 10
2260*
2261 ELSE IF( lsamen( 3, c3, 'CGV' ) ) THEN
2262*
2263* -------------------------------------------------
2264* CGV: Generalized Nonsymmetric Eigenvalue Problem
2265* CGGEV (Eigenvalue/vector form)
2266* -------------------------------------------------
2267*
2268 maxtyp = 26
2269 ntypes = min( maxtyp, ntypes )
2270 IF( ntypes.LE.0 ) THEN
2271 WRITE( nout, fmt = 9990 )c3
2272 ELSE
2273 IF( tsterr )
2274 $ CALL cerrgg( c3, nout )
2275 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2276 CALL cdrgev( nn, nval, maxtyp, dotype, iseed, thresh, nout,
2277 $ a( 1, 1 ), nmax, a( 1, 2 ), a( 1, 3 ),
2278 $ a( 1, 4 ), a( 1, 7 ), nmax, a( 1, 8 ),
2279 $ a( 1, 9 ), nmax, dc( 1, 1 ), dc( 1, 2 ),
2280 $ dc( 1, 3 ), dc( 1, 4 ), work, lwork, rwork,
2281 $ result, info )
2282 IF( info.NE.0 )
2283 $ WRITE( nout, fmt = 9980 )'CDRGEV', info
2284*
2285* Blocked version
2286*
2287 CALL xlaenv(16,2)
2288 CALL cdrgev3( 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, dc( 1, 1 ), dc( 1, 2 ),
2292 $ dc( 1, 3 ), dc( 1, 4 ), work, lwork, rwork,
2293 $ result, info )
2294 IF( info.NE.0 )
2295 $ WRITE( nout, fmt = 9980 )'CDRGEV3', info
2296 END IF
2297 WRITE( nout, fmt = 9973 )
2298 GO TO 10
2299*
2300 ELSE IF( cxv ) THEN
2301*
2302* -------------------------------------------------
2303* CXV: Generalized Nonsymmetric Eigenvalue Problem
2304* CGGEVX (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 cerrgg( c3, nout )
2314 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2315 CALL cdrgvx( nn, thresh, nin, nout, a( 1, 1 ), nmax,
2316 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), dc( 1, 1 ),
2317 $ dc( 1, 2 ), a( 1, 5 ), a( 1, 6 ), iwork( 1 ),
2318 $ iwork( 2 ), dr( 1, 1 ), dr( 1, 2 ), dr( 1, 3 ),
2319 $ dr( 1, 4 ), dr( 1, 5 ), dr( 1, 6 ), work,
2320 $ lwork, rwork, iwork( 3 ), liwork-2, result,
2321 $ logwrk, info )
2322*
2323 IF( info.NE.0 )
2324 $ WRITE( nout, fmt = 9980 )'CDRGVX', info
2325 END IF
2326 WRITE( nout, fmt = 9973 )
2327 GO TO 10
2328*
2329 ELSE IF( lsamen( 3, c3, 'CHB' ) ) THEN
2330*
2331* ------------------------------
2332* CHB: Hermitian Band Reduction
2333* ------------------------------
2334*
2335 maxtyp = 15
2336 ntypes = min( maxtyp, ntypes )
2337 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2338 IF( tsterr ) THEN
2339#if defined(_OPENMP)
2340 n_threads = omp_get_max_threads()
2341 one_thread = 1
2342 CALL omp_set_num_threads(one_thread)
2343#endif
2344 CALL cerrst( 'CHB', nout )
2345#if defined(_OPENMP)
2346 CALL omp_set_num_threads(n_threads)
2347#endif
2348 END IF
2349* CALL CCHKHB( NN, NVAL, NK, KVAL, MAXTYP, DOTYPE, ISEED, THRESH,
2350* $ NOUT, A( 1, 1 ), NMAX, DR( 1, 1 ), DR( 1, 2 ),
2351* $ A( 1, 2 ), NMAX, WORK, LWORK, RWORK, RESULT,
2352* $ INFO )
2353 CALL cchkhb2stg( nn, nval, nk, kval, maxtyp, dotype, iseed,
2354 $ thresh, nout, a( 1, 1 ), nmax, dr( 1, 1 ),
2355 $ dr( 1, 2 ), dr( 1, 3 ), dr( 1, 4 ), dr( 1, 5 ),
2356 $ a( 1, 2 ), nmax, work, lwork, rwork, result,
2357 $ info )
2358 IF( info.NE.0 )
2359 $ WRITE( nout, fmt = 9980 )'CCHKHB', info
2360*
2361 ELSE IF( lsamen( 3, c3, 'CBB' ) ) THEN
2362*
2363* ------------------------------
2364* CBB: General Band Reduction
2365* ------------------------------
2366*
2367 maxtyp = 15
2368 ntypes = min( maxtyp, ntypes )
2369 CALL alareq( c3, ntypes, dotype, maxtyp, nin, nout )
2370 DO 370 i = 1, nparms
2371 nrhs = nsval( i )
2372*
2373 IF( newsd.EQ.0 ) THEN
2374 DO 360 k = 1, 4
2375 iseed( k ) = ioldsd( k )
2376 360 CONTINUE
2377 END IF
2378 WRITE( nout, fmt = 9966 )c3, nrhs
2379 CALL cchkbb( nn, mval, nval, nk, kval, maxtyp, dotype, nrhs,
2380 $ iseed, thresh, nout, a( 1, 1 ), nmax,
2381 $ a( 1, 2 ), 2*nmax, dr( 1, 1 ), dr( 1, 2 ),
2382 $ a( 1, 4 ), nmax, a( 1, 5 ), nmax, a( 1, 6 ),
2383 $ nmax, a( 1, 7 ), work, lwork, rwork, result,
2384 $ info )
2385 IF( info.NE.0 )
2386 $ WRITE( nout, fmt = 9980 )'CCHKBB', info
2387 370 CONTINUE
2388*
2389 ELSE IF( lsamen( 3, c3, 'GLM' ) ) THEN
2390*
2391* -----------------------------------------
2392* GLM: Generalized Linear Regression Model
2393* -----------------------------------------
2394*
2395 CALL xlaenv( 1, 1 )
2396 IF( tsterr )
2397 $ CALL cerrgg( 'GLM', nout )
2398 CALL cckglm( nn, nval, mval, pval, ntypes, iseed, thresh, nmax,
2399 $ a( 1, 1 ), a( 1, 2 ), b( 1, 1 ), b( 1, 2 ), x,
2400 $ work, dr( 1, 1 ), nin, nout, info )
2401 IF( info.NE.0 )
2402 $ WRITE( nout, fmt = 9980 )'CCKGLM', info
2403*
2404 ELSE IF( lsamen( 3, c3, 'GQR' ) ) THEN
2405*
2406* ------------------------------------------
2407* GQR: Generalized QR and RQ factorizations
2408* ------------------------------------------
2409*
2410 CALL xlaenv( 1, 1 )
2411 IF( tsterr )
2412 $ CALL cerrgg( 'GQR', nout )
2413 CALL cckgqr( nn, mval, nn, pval, nn, nval, ntypes, iseed,
2414 $ thresh, nmax, a( 1, 1 ), a( 1, 2 ), a( 1, 3 ),
2415 $ a( 1, 4 ), taua, b( 1, 1 ), b( 1, 2 ), b( 1, 3 ),
2416 $ b( 1, 4 ), b( 1, 5 ), taub, work, dr( 1, 1 ), nin,
2417 $ nout, info )
2418 IF( info.NE.0 )
2419 $ WRITE( nout, fmt = 9980 )'CCKGQR', info
2420*
2421 ELSE IF( lsamen( 3, c3, 'GSV' ) ) THEN
2422*
2423* ----------------------------------------------
2424* GSV: Generalized Singular Value Decomposition
2425* ----------------------------------------------
2426*
2427 CALL xlaenv(1,1)
2428 IF( tsterr )
2429 $ CALL cerrgg( 'GSV', nout )
2430 CALL cckgsv( nn, mval, pval, nval, ntypes, iseed, thresh, nmax,
2431 $ a( 1, 1 ), a( 1, 2 ), b( 1, 1 ), b( 1, 2 ),
2432 $ a( 1, 3 ), b( 1, 3 ), a( 1, 4 ), alpha, beta,
2433 $ b( 1, 4 ), iwork, work, dr( 1, 1 ), nin, nout,
2434 $ info )
2435 IF( info.NE.0 )
2436 $ WRITE( nout, fmt = 9980 )'CCKGSV', info
2437*
2438 ELSE IF( lsamen( 3, c3, 'CSD' ) ) THEN
2439*
2440* ----------------------------------------------
2441* CSD: CS Decomposition
2442* ----------------------------------------------
2443*
2444 CALL xlaenv(1,1)
2445 IF( tsterr )
2446 $ CALL cerrgg( 'CSD', nout )
2447 CALL cckcsd( nn, mval, pval, nval, ntypes, iseed, thresh, nmax,
2448 $ a( 1, 1 ), a( 1, 2 ), a( 1, 3 ), a( 1, 4 ),
2449 $ a( 1, 5 ), a( 1, 6 ), rwork, iwork, work,
2450 $ dr( 1, 1 ), nin, nout, info )
2451 IF( info.NE.0 )
2452 $ WRITE( nout, fmt = 9980 )'CCKCSD', info
2453*
2454 ELSE IF( lsamen( 3, c3, 'LSE' ) ) THEN
2455*
2456* --------------------------------------
2457* LSE: Constrained Linear Least Squares
2458* --------------------------------------
2459*
2460 CALL xlaenv( 1, 1 )
2461 IF( tsterr )
2462 $ CALL cerrgg( 'LSE', nout )
2463 CALL ccklse( nn, mval, pval, nval, ntypes, iseed, thresh, nmax,
2464 $ a( 1, 1 ), a( 1, 2 ), b( 1, 1 ), b( 1, 2 ), x,
2465 $ work, dr( 1, 1 ), nin, nout, info )
2466 IF( info.NE.0 )
2467 $ WRITE( nout, fmt = 9980 )'CCKLSE', info
2468 ELSE
2469 WRITE( nout, fmt = * )
2470 WRITE( nout, fmt = * )
2471 WRITE( nout, fmt = 9992 )c3
2472 END IF
2473 IF( .NOT.( cgx .OR. cxv ) )
2474 $ GO TO 190
2475 380 CONTINUE
2476 WRITE( nout, fmt = 9994 )
2477 s2 = second( )
2478 WRITE( nout, fmt = 9993 )s2 - s1
2479*
2480 DEALLOCATE (s, stat = allocatestatus)
2481 DEALLOCATE (a, stat = allocatestatus)
2482 DEALLOCATE (b, stat = allocatestatus)
2483 DEALLOCATE (c, stat = allocatestatus)
2484 DEALLOCATE (rwork, stat = allocatestatus)
2485 DEALLOCATE (work, stat = allocatestatus)
2486*
2487 9999 FORMAT( / ' Execution not attempted due to input errors' )
2488 9997 FORMAT( / / 1x, a3, ': NB =', i4, ', NBMIN =', i4, ', NX =', i4 )
2489 9996 FORMAT( / / 1x, a3, ': NB =', i4, ', NBMIN =', i4, ', NS =', i4,
2490 $ ', MAXB =', i4, ', IACC22 =', i4, ', NBCOL =', i4 )
2491 9995 FORMAT( / / 1x, a3, ': NB =', i4, ', NBMIN =', i4, ', NX =', i4,
2492 $ ', NRHS =', i4 )
2493 9994 FORMAT( / / ' End of tests' )
2494 9993 FORMAT( ' Total time used = ', f12.2, ' seconds', / )
2495 9992 FORMAT( 1x, a3, ': Unrecognized path name' )
2496 9991 FORMAT( / / ' *** Invalid integer value in column ', i2,
2497 $ ' of input', ' line:', / a79 )
2498 9990 FORMAT( / / 1x, a3, ' routines were not tested' )
2499 9989 FORMAT( ' Invalid input value: ', a, '=', i6, '; must be >=',
2500 $ i6 )
2501 9988 FORMAT( ' Invalid input value: ', a, '=', i6, '; must be <=',
2502 $ i6 )
2503 9987 FORMAT( ' Tests of the Nonsymmetric Eigenvalue Problem routines' )
2504 9986 FORMAT( ' Tests of the Hermitian Eigenvalue Problem routines' )
2505 9985 FORMAT( ' Tests of the Singular Value Decomposition routines' )
2506 9984 FORMAT( / ' The following parameter values will be used:' )
2507 9983 FORMAT( 4x, a, 10i6, / 10x, 10i6 )
2508 9982 FORMAT( / ' Routines pass computational tests if test ratio is ',
2509 $ 'less than', f8.2, / )
2510 9981 FORMAT( ' Relative machine ', a, ' is taken to be', e16.6 )
2511 9980 FORMAT( ' *** Error code from ', a, ' = ', i4 )
2512 9979 FORMAT( / ' Tests of the Nonsymmetric Eigenvalue Problem Driver',
2513 $ / ' CGEEV (eigenvalues and eigevectors)' )
2514 9978 FORMAT( / ' Tests of the Nonsymmetric Eigenvalue Problem Driver',
2515 $ / ' CGEES (Schur form)' )
2516 9977 FORMAT( / ' Tests of the Nonsymmetric Eigenvalue Problem Expert',
2517 $ ' Driver', / ' CGEEVX (eigenvalues, eigenvectors and',
2518 $ ' condition numbers)' )
2519 9976 FORMAT( / ' Tests of the Nonsymmetric Eigenvalue Problem Expert',
2520 $ ' Driver', / ' CGEESX (Schur form and condition',
2521 $ ' numbers)' )
2522 9975 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2523 $ 'Problem routines' )
2524 9974 FORMAT( ' Tests of CHBTRD', / ' (reduction of a Hermitian band ',
2525 $ 'matrix to real tridiagonal form)' )
2526 9973 FORMAT( / 1x, 71( '-' ) )
2527 9972 FORMAT( / ' LAPACK VERSION ', i1, '.', i1, '.', i1 )
2528 9971 FORMAT( / ' Tests of the Generalized Linear Regression Model ',
2529 $ 'routines' )
2530 9970 FORMAT( / ' Tests of the Generalized QR and RQ routines' )
2531 9969 FORMAT( / ' Tests of the Generalized Singular Value',
2532 $ ' Decomposition routines' )
2533 9968 FORMAT( / ' Tests of the Linear Least Squares routines' )
2534 9967 FORMAT( ' Tests of CGBBRD', / ' (reduction of a general band ',
2535 $ 'matrix to real bidiagonal form)' )
2536 9966 FORMAT( / / 1x, a3, ': NRHS =', i4 )
2537 9965 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2538 $ 'Problem Expert Driver CGGESX' )
2539 9964 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2540 $ 'Problem Driver CGGES' )
2541 9963 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2542 $ 'Problem Driver CGGEV' )
2543 9962 FORMAT( / ' Tests of the Generalized Nonsymmetric Eigenvalue ',
2544 $ 'Problem Expert Driver CGGEVX' )
2545 9961 FORMAT( / / 1x, a3, ': NB =', i4, ', NBMIN =', i4, ', NX =', i4,
2546 $ ', INMIN=', i4,
2547 $ ', INWIN =', i4, ', INIBL =', i4, ', ISHFTS =', i4,
2548 $ ', IACC22 =', i4)
2549 9960 FORMAT( / ' Tests of the CS Decomposition routines' )
2550*
2551* End of CCHKEE
2552*
2553 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 cdrvsg(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, B, LDB, D, Z, LDZ, AB, BB, AP, BP, WORK, NWORK, RWORK, LRWORK, IWORK, LIWORK, RESULT, INFO)
CDRVSG
Definition: cdrvsg.f:370
subroutine cckglm(NN, NVAL, MVAL, PVAL, NMATS, ISEED, THRESH, NMAX, A, AF, B, BF, X, WORK, RWORK, NIN, NOUT, INFO)
CCKGLM
Definition: cckglm.f:168
subroutine cdrvst2stg(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, D1, D2, D3, WA1, WA2, WA3, U, LDU, V, TAU, Z, WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, RESULT, INFO)
CDRVST2STG
Definition: cdrvst2stg.f:338
subroutine cchkbl(NIN, NOUT)
CCHKBL
Definition: cchkbl.f:54
subroutine cdrgsx(NSIZE, NCMAX, THRESH, NIN, NOUT, A, LDA, B, AI, BI, Z, Q, ALPHA, BETA, C, LDC, S, WORK, LWORK, RWORK, IWORK, LIWORK, BWORK, INFO)
CDRGSX
Definition: cdrgsx.f:349
subroutine cdrvbd(NSIZES, MM, NN, NTYPES, DOTYPE, ISEED, THRESH, A, LDA, U, LDU, VT, LDVT, ASAV, USAV, VTSAV, S, SSAV, E, WORK, LWORK, RWORK, IWORK, NOUNIT, INFO)
CDRVBD
Definition: cdrvbd.f:401
subroutine cdrvvx(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NIUNIT, NOUNIT, A, LDA, H, W, W1, VL, LDVL, VR, LDVR, LRE, LDLRE, RCONDV, RCNDV1, RCDVIN, RCONDE, RCNDE1, RCDEIN, SCALE, SCALE1, RESULT, WORK, NWORK, RWORK, INFO)
CDRVVX
Definition: cdrvvx.f:496
subroutine cchkec(THRESH, TSTERR, NIN, NOUT)
CCHKEC
Definition: cchkec.f:75
subroutine cchkgl(NIN, NOUT)
CCHKGL
Definition: cchkgl.f:53
subroutine cchkgk(NIN, NOUT)
CCHKGK
Definition: cchkgk.f:54
subroutine cchkhb(NSIZES, NN, NWDTHS, KK, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, SD, SE, U, LDU, WORK, LWORK, RWORK, RESULT, INFO)
CCHKHB
Definition: cchkhb.f:298
subroutine cerred(PATH, NUNIT)
CERRED
Definition: cerred.f:70
subroutine cchkbb(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, RWORK, RESULT, INFO)
CCHKBB
Definition: cchkbb.f:361
subroutine cchkbd(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, RWORK, NOUT, INFO)
CCHKBD
Definition: cchkbd.f:415
subroutine cerrbd(PATH, NUNIT)
CERRBD
Definition: cerrbd.f:55
subroutine cerrgg(PATH, NUNIT)
CERRGG
Definition: cerrgg.f:57
subroutine cchkst(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, RWORK, LRWORK, IWORK, LIWORK, RESULT, INFO)
CCHKST
Definition: cchkst.f:604
program cchkee
CCHKEE
Definition: cchkee.F:1033
subroutine ccklse(NN, MVAL, PVAL, NVAL, NMATS, ISEED, THRESH, NMAX, A, AF, B, BF, X, WORK, RWORK, NIN, NOUT, INFO)
CCKLSE
Definition: ccklse.f:168
subroutine cchkgg(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, TSTDIF, THRSHN, NOUNIT, A, LDA, B, H, T, S1, S2, P1, P2, U, LDU, V, Q, Z, ALPHA1, BETA1, ALPHA3, BETA3, EVECTL, EVECTR, WORK, LWORK, RWORK, LLWORK, RESULT, INFO)
CCHKGG
Definition: cchkgg.f:503
subroutine cdrvsx(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NIUNIT, NOUNIT, A, LDA, H, HT, W, WT, WTMP, VS, LDVS, VS1, RESULT, WORK, LWORK, RWORK, BWORK, INFO)
CDRVSX
Definition: cdrvsx.f:435
subroutine cdrves(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, H, HT, W, WT, VS, LDVS, RESULT, WORK, NWORK, RWORK, IWORK, BWORK, INFO)
CDRVES
Definition: cdrves.f:378
subroutine cdrvev(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, H, W, W1, VL, LDVL, VR, LDVR, LRE, LDLRE, RESULT, WORK, NWORK, RWORK, IWORK, INFO)
CDRVEV
Definition: cdrvev.f:391
subroutine cdrges3(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, B, S, T, Q, LDQ, Z, ALPHA, BETA, WORK, LWORK, RWORK, RESULT, BWORK, INFO)
CDRGES3
Definition: cdrges3.f:382
subroutine cdrges(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, B, S, T, Q, LDQ, Z, ALPHA, BETA, WORK, LWORK, RWORK, RESULT, BWORK, INFO)
CDRGES
Definition: cdrges.f:381
subroutine cckgsv(NM, MVAL, PVAL, NVAL, NMATS, ISEED, THRESH, NMAX, A, AF, B, BF, U, V, Q, ALPHA, BETA, R, IWORK, WORK, RWORK, NIN, NOUT, INFO)
CCKGSV
Definition: cckgsv.f:198
subroutine cckcsd(NM, MVAL, PVAL, QVAL, NMATS, ISEED, THRESH, MMAX, X, XF, U1, U2, V1T, V2T, THETA, IWORK, WORK, RWORK, NIN, NOUT, INFO)
CCKCSD
Definition: cckcsd.f:184
subroutine cdrvsg2stg(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, B, LDB, D, D2, Z, LDZ, AB, BB, AP, BP, WORK, NWORK, RWORK, LRWORK, IWORK, LIWORK, RESULT, INFO)
CDRVSG2STG
Definition: cdrvsg2stg.f:376
subroutine cckgqr(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)
CCKGQR
Definition: cckgqr.f:211
subroutine cdrgev(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, B, S, T, Q, LDQ, Z, QE, LDQE, ALPHA, BETA, ALPHA1, BETA1, WORK, LWORK, RWORK, RESULT, INFO)
CDRGEV
Definition: cdrgev.f:399
subroutine cdrgvx(NSIZE, THRESH, NIN, NOUT, A, LDA, B, AI, BI, ALPHA, BETA, VL, VR, ILO, IHI, LSCALE, RSCALE, S, STRU, DIF, DIFTRU, WORK, LWORK, RWORK, IWORK, LIWORK, RESULT, BWORK, INFO)
CDRGVX
Definition: cdrgvx.f:298
subroutine cdrvst(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, D1, D2, D3, WA1, WA2, WA3, U, LDU, V, TAU, Z, WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, RESULT, INFO)
CDRVST
Definition: cdrvst.f:338
subroutine cdrgev3(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, B, S, T, Q, LDQ, Z, QE, LDQE, ALPHA, BETA, ALPHA1, BETA1, WORK, LWORK, RWORK, RESULT, INFO)
CDRGEV3
Definition: cdrgev3.f:399
subroutine cerrhs(PATH, NUNIT)
CERRHS
Definition: cerrhs.f:55
subroutine cchkbk(NIN, NOUT)
CCHKBK
Definition: cchkbk.f:55
subroutine cchkst2stg(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, RWORK, LRWORK, IWORK, LIWORK, RESULT, INFO)
CCHKST2STG
Definition: cchkst2stg.f:625
subroutine cchkhb2stg(NSIZES, NN, NWDTHS, KK, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, SD, SE, D1, D2, D3, U, LDU, WORK, LWORK, RWORK, RESULT, INFO)
CCHKHB2STG
Definition: cchkhb2stg.f:341
subroutine cerrst(PATH, NUNIT)
CERRST
Definition: cerrst.f:61
subroutine cchkhs(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, H, T1, T2, U, LDU, Z, UZ, W1, W3, EVECTL, EVECTR, EVECTY, EVECTX, UU, TAU, WORK, NWORK, RWORK, IWORK, SELECT, RESULT, INFO)
CCHKHS
Definition: cchkhs.f:412
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
real function second()
SECOND Using ETIME
real function slamch(CMACH)
SLAMCH
Definition: slamch.f:68