dchkee.f
来自「famous linear algebra library (LAPACK) p」· F 代码 · 共 1,815 行 · 第 1/5 页
F
1,815 行
DGK = LSAMEN( 3, PATH, 'DGK' )
*
* Report values of parameters.
*
IF( PATH.EQ.' ' ) THEN
GO TO 10
ELSE IF( NEP ) THEN
WRITE( NOUT, FMT = 9987 )
ELSE IF( SEP ) THEN
WRITE( NOUT, FMT = 9986 )
ELSE IF( SVD ) THEN
WRITE( NOUT, FMT = 9985 )
ELSE IF( DEV ) THEN
WRITE( NOUT, FMT = 9979 )
ELSE IF( DES ) THEN
WRITE( NOUT, FMT = 9978 )
ELSE IF( DVX ) THEN
WRITE( NOUT, FMT = 9977 )
ELSE IF( DSX ) THEN
WRITE( NOUT, FMT = 9976 )
ELSE IF( DGG ) THEN
WRITE( NOUT, FMT = 9975 )
ELSE IF( DGS ) THEN
WRITE( NOUT, FMT = 9964 )
ELSE IF( DGX ) THEN
WRITE( NOUT, FMT = 9965 )
ELSE IF( DGV ) THEN
WRITE( NOUT, FMT = 9963 )
ELSE IF( DXV ) THEN
WRITE( NOUT, FMT = 9962 )
ELSE IF( DSB ) THEN
WRITE( NOUT, FMT = 9974 )
ELSE IF( DBB ) THEN
WRITE( NOUT, FMT = 9967 )
ELSE IF( GLM ) THEN
WRITE( NOUT, FMT = 9971 )
ELSE IF( GQR ) THEN
WRITE( NOUT, FMT = 9970 )
ELSE IF( GSV ) THEN
WRITE( NOUT, FMT = 9969 )
ELSE IF( LSE ) THEN
WRITE( NOUT, FMT = 9968 )
ELSE IF( DBL ) THEN
*
* DGEBAL: Balancing
*
CALL DCHKBL( NIN, NOUT )
GO TO 10
ELSE IF( DBK ) THEN
*
* DGEBAK: Back transformation
*
CALL DCHKBK( NIN, NOUT )
GO TO 10
ELSE IF( DGL ) THEN
*
* DGGBAL: Balancing
*
CALL DCHKGL( NIN, NOUT )
GO TO 10
ELSE IF( DGK ) THEN
*
* DGGBAK: Back transformation
*
CALL DCHKGK( NIN, NOUT )
GO TO 10
ELSE IF( LSAMEN( 3, PATH, 'DEC' ) ) THEN
*
* DEC: Eigencondition estimation
*
READ( NIN, FMT = * )THRESH
CALL XLAENV( 1, 1 )
CALL XLAENV( 12, 11 )
CALL XLAENV( 13, 2 )
CALL XLAENV( 14, 0 )
CALL XLAENV( 15, 2 )
CALL XLAENV( 16, 2 )
TSTERR = .TRUE.
CALL DCHKEC( THRESH, TSTERR, NIN, NOUT )
GO TO 10
ELSE
WRITE( NOUT, FMT = 9992 )PATH
GO TO 10
END IF
CALL ILAVER( VERS_MAJOR, VERS_MINOR, VERS_PATCH )
WRITE( NOUT, FMT = 9972 ) VERS_MAJOR, VERS_MINOR, VERS_PATCH
WRITE( NOUT, FMT = 9984 )
*
* Read the number of values of M, P, and N.
*
READ( NIN, FMT = * )NN
IF( NN.LT.0 ) THEN
WRITE( NOUT, FMT = 9989 )' NN ', NN, 1
NN = 0
FATAL = .TRUE.
ELSE IF( NN.GT.MAXIN ) THEN
WRITE( NOUT, FMT = 9988 )' NN ', NN, MAXIN
NN = 0
FATAL = .TRUE.
END IF
*
* Read the values of M
*
IF( .NOT.( DGX .OR. DXV ) ) THEN
READ( NIN, FMT = * )( MVAL( I ), I = 1, NN )
IF( SVD ) THEN
VNAME = ' M '
ELSE
VNAME = ' N '
END IF
DO 20 I = 1, NN
IF( MVAL( I ).LT.0 ) THEN
WRITE( NOUT, FMT = 9989 )VNAME, MVAL( I ), 0
FATAL = .TRUE.
ELSE IF( MVAL( I ).GT.NMAX ) THEN
WRITE( NOUT, FMT = 9988 )VNAME, MVAL( I ), NMAX
FATAL = .TRUE.
END IF
20 CONTINUE
WRITE( NOUT, FMT = 9983 )'M: ', ( MVAL( I ), I = 1, NN )
END IF
*
* Read the values of P
*
IF( GLM .OR. GQR .OR. GSV .OR. LSE ) THEN
READ( NIN, FMT = * )( PVAL( I ), I = 1, NN )
DO 30 I = 1, NN
IF( PVAL( I ).LT.0 ) THEN
WRITE( NOUT, FMT = 9989 )' P ', PVAL( I ), 0
FATAL = .TRUE.
ELSE IF( PVAL( I ).GT.NMAX ) THEN
WRITE( NOUT, FMT = 9988 )' P ', PVAL( I ), NMAX
FATAL = .TRUE.
END IF
30 CONTINUE
WRITE( NOUT, FMT = 9983 )'P: ', ( PVAL( I ), I = 1, NN )
END IF
*
* Read the values of N
*
IF( SVD .OR. DBB .OR. GLM .OR. GQR .OR. GSV .OR. LSE ) THEN
READ( NIN, FMT = * )( NVAL( I ), I = 1, NN )
DO 40 I = 1, NN
IF( NVAL( I ).LT.0 ) THEN
WRITE( NOUT, FMT = 9989 )' N ', NVAL( I ), 0
FATAL = .TRUE.
ELSE IF( NVAL( I ).GT.NMAX ) THEN
WRITE( NOUT, FMT = 9988 )' N ', NVAL( I ), NMAX
FATAL = .TRUE.
END IF
40 CONTINUE
ELSE
DO 50 I = 1, NN
NVAL( I ) = MVAL( I )
50 CONTINUE
END IF
IF( .NOT.( DGX .OR. DXV ) ) THEN
WRITE( NOUT, FMT = 9983 )'N: ', ( NVAL( I ), I = 1, NN )
ELSE
WRITE( NOUT, FMT = 9983 )'N: ', NN
END IF
*
* Read the number of values of K, followed by the values of K
*
IF( DSB .OR. DBB ) THEN
READ( NIN, FMT = * )NK
READ( NIN, FMT = * )( KVAL( I ), I = 1, NK )
DO 60 I = 1, NK
IF( KVAL( I ).LT.0 ) THEN
WRITE( NOUT, FMT = 9989 )' K ', KVAL( I ), 0
FATAL = .TRUE.
ELSE IF( KVAL( I ).GT.NMAX ) THEN
WRITE( NOUT, FMT = 9988 )' K ', KVAL( I ), NMAX
FATAL = .TRUE.
END IF
60 CONTINUE
WRITE( NOUT, FMT = 9983 )'K: ', ( KVAL( I ), I = 1, NK )
END IF
*
IF( DEV .OR. DES .OR. DVX .OR. DSX ) THEN
*
* For the nonsymmetric QR driver routines, only one set of
* parameters is allowed.
*
READ( NIN, FMT = * )NBVAL( 1 ), NBMIN( 1 ), NXVAL( 1 ),
$ INMIN( 1 ), INWIN( 1 ), INIBL(1), ISHFTS(1), IACC22(1)
IF( NBVAL( 1 ).LT.1 ) THEN
WRITE( NOUT, FMT = 9989 )' NB ', NBVAL( 1 ), 1
FATAL = .TRUE.
ELSE IF( NBMIN( 1 ).LT.1 ) THEN
WRITE( NOUT, FMT = 9989 )'NBMIN ', NBMIN( 1 ), 1
FATAL = .TRUE.
ELSE IF( NXVAL( 1 ).LT.1 ) THEN
WRITE( NOUT, FMT = 9989 )' NX ', NXVAL( 1 ), 1
FATAL = .TRUE.
ELSE IF( INMIN( 1 ).LT.1 ) THEN
WRITE( NOUT, FMT = 9989 )' INMIN ', INMIN( 1 ), 1
FATAL = .TRUE.
ELSE IF( INWIN( 1 ).LT.1 ) THEN
WRITE( NOUT, FMT = 9989 )' INWIN ', INWIN( 1 ), 1
FATAL = .TRUE.
ELSE IF( INIBL( 1 ).LT.1 ) THEN
WRITE( NOUT, FMT = 9989 )' INIBL ', INIBL( 1 ), 1
FATAL = .TRUE.
ELSE IF( ISHFTS( 1 ).LT.1 ) THEN
WRITE( NOUT, FMT = 9989 )' ISHFTS ', ISHFTS( 1 ), 1
FATAL = .TRUE.
ELSE IF( IACC22( 1 ).LT.0 ) THEN
WRITE( NOUT, FMT = 9989 )' IACC22 ', IACC22( 1 ), 0
FATAL = .TRUE.
END IF
CALL XLAENV( 1, NBVAL( 1 ) )
CALL XLAENV( 2, NBMIN( 1 ) )
CALL XLAENV( 3, NXVAL( 1 ) )
CALL XLAENV(12, MAX( 11, INMIN( 1 ) ) )
CALL XLAENV(13, INWIN( 1 ) )
CALL XLAENV(14, INIBL( 1 ) )
CALL XLAENV(15, ISHFTS( 1 ) )
CALL XLAENV(16, IACC22( 1 ) )
WRITE( NOUT, FMT = 9983 )'NB: ', NBVAL( 1 )
WRITE( NOUT, FMT = 9983 )'NBMIN:', NBMIN( 1 )
WRITE( NOUT, FMT = 9983 )'NX: ', NXVAL( 1 )
WRITE( NOUT, FMT = 9983 )'INMIN: ', INMIN( 1 )
WRITE( NOUT, FMT = 9983 )'INWIN: ', INWIN( 1 )
WRITE( NOUT, FMT = 9983 )'INIBL: ', INIBL( 1 )
WRITE( NOUT, FMT = 9983 )'ISHFTS: ', ISHFTS( 1 )
WRITE( NOUT, FMT = 9983 )'IACC22: ', IACC22( 1 )
*
ELSEIF( DGS .OR. DGX .OR. DGV .OR. DXV ) THEN
*
* For the nonsymmetric generalized driver routines, only one set
* of parameters is allowed.
*
READ( NIN, FMT = * )NBVAL( 1 ), NBMIN( 1 ), NXVAL( 1 ),
$ NSVAL( 1 ), MXBVAL( 1 )
IF( NBVAL( 1 ).LT.1 ) THEN
WRITE( NOUT, FMT = 9989 )' NB ', NBVAL( 1 ), 1
FATAL = .TRUE.
ELSE IF( NBMIN( 1 ).LT.1 ) THEN
WRITE( NOUT, FMT = 9989 )'NBMIN ', NBMIN( 1 ), 1
FATAL = .TRUE.
ELSE IF( NXVAL( 1 ).LT.1 ) THEN
WRITE( NOUT, FMT = 9989 )' NX ', NXVAL( 1 ), 1
FATAL = .TRUE.
ELSE IF( NSVAL( 1 ).LT.2 ) THEN
WRITE( NOUT, FMT = 9989 )' NS ', NSVAL( 1 ), 2
FATAL = .TRUE.
ELSE IF( MXBVAL( 1 ).LT.1 ) THEN
WRITE( NOUT, FMT = 9989 )' MAXB ', MXBVAL( 1 ), 1
FATAL = .TRUE.
END IF
CALL XLAENV( 1, NBVAL( 1 ) )
CALL XLAENV( 2, NBMIN( 1 ) )
CALL XLAENV( 3, NXVAL( 1 ) )
CALL XLAENV( 4, NSVAL( 1 ) )
CALL XLAENV( 8, MXBVAL( 1 ) )
WRITE( NOUT, FMT = 9983 )'NB: ', NBVAL( 1 )
WRITE( NOUT, FMT = 9983 )'NBMIN:', NBMIN( 1 )
WRITE( NOUT, FMT = 9983 )'NX: ', NXVAL( 1 )
WRITE( NOUT, FMT = 9983 )'NS: ', NSVAL( 1 )
WRITE( NOUT, FMT = 9983 )'MAXB: ', MXBVAL( 1 )
*
ELSE IF( .NOT.DSB .AND. .NOT.GLM .AND. .NOT.GQR .AND. .NOT.
$ GSV .AND. .NOT.LSE ) THEN
*
* For the other paths, the number of parameters can be varied
* from the input file. Read the number of parameter values.
*
READ( NIN, FMT = * )NPARMS
IF( NPARMS.LT.1 ) THEN
WRITE( NOUT, FMT = 9989 )'NPARMS', NPARMS, 1
NPARMS = 0
FATAL = .TRUE.
ELSE IF( NPARMS.GT.MAXIN ) THEN
WRITE( NOUT, FMT = 9988 )'NPARMS', NPARMS, MAXIN
NPARMS = 0
FATAL = .TRUE.
END IF
*
* Read the values of NB
*
IF( .NOT.DBB ) THEN
READ( NIN, FMT = * )( NBVAL( I ), I = 1, NPARMS )
DO 70 I = 1, NPARMS
IF( NBVAL( I ).LT.0 ) THEN
WRITE( NOUT, FMT = 9989 )' NB ', NBVAL( I ), 0
FATAL = .TRUE.
ELSE IF( NBVAL( I ).GT.NMAX ) THEN
WRITE( NOUT, FMT = 9988 )' NB ', NBVAL( I ), NMAX
FATAL = .TRUE.
END IF
70 CONTINUE
WRITE( NOUT, FMT = 9983 )'NB: ',
$ ( NBVAL( I ), I = 1, NPARMS )
END IF
*
* Read the values of NBMIN
*
IF( NEP .OR. SEP .OR. SVD .OR. DGG ) THEN
READ( NIN, FMT = * )( NBMIN( I ), I = 1, NPARMS )
DO 80 I = 1, NPARMS
IF( NBMIN( I ).LT.0 ) THEN
WRITE( NOUT, FMT = 9989 )'NBMIN ', NBMIN( I ), 0
FATAL = .TRUE.
ELSE IF( NBMIN( I ).GT.NMAX ) THEN
WRITE( NOUT, FMT = 9988 )'NBMIN ', NBMIN( I ), NMAX
FATAL = .TRUE.
END IF
80 CONTINUE
WRITE( NOUT, FMT = 9983 )'NBMIN:',
$ ( NBMIN( I ), I = 1, NPARMS )
ELSE
DO 90 I = 1, NPARMS
NBMIN( I ) = 1
90 CONTINUE
END IF
*
* Read the values of NX
*
IF( NEP .OR. SEP .OR. SVD ) THEN
READ( NIN, FMT = * )( NXVAL( I ), I = 1, NPARMS )
DO 100 I = 1, NPARMS
IF( NXVAL( I ).LT.0 ) THEN
WRITE( NOUT, FMT = 9989 )' NX ', NXVAL( I ), 0
FATAL = .TRUE.
ELSE IF( NXVAL( I ).GT.NMAX ) THEN
WRITE( NOUT, FMT = 9988 )' NX ', NXVAL( I ), NMAX
FATAL = .TRUE.
END IF
100 CONTINUE
WRITE( NOUT, FMT = 9983 )'NX: ',
$ ( NXVAL( I ), I = 1, NPARMS )
ELSE
DO 110 I = 1, NPARMS
NXVAL( I ) = 1
110 CONTINUE
END IF
*
* Read the values of NSHIFT (if DGG) or NRHS (if SVD
* or DBB).
*
IF( SVD .OR. DBB .OR. DGG ) THEN
READ( NIN, FMT = * )( NSVAL( I ), I = 1, NPARMS )
DO 120 I = 1, NPARMS
IF( NSVAL( I ).LT.0 ) THEN
WRITE( NOUT, FMT = 9989 )' NS ', NSVAL( I ), 0
FATAL = .TRUE.
ELSE IF( NSVAL( I ).GT.NMAX ) THEN
WRITE( NOUT, FMT = 9988 )' NS ', NSVAL( I ), NMAX
FATAL = .TRUE.
END IF
120 CONTINUE
WRITE( NOUT, FMT = 9983 )'NS: ',
$ ( NSVAL( I ), I = 1, NPARMS )
ELSE
DO 130 I = 1, NPARMS
NSVAL( I ) = 1
130 CONTINUE
END IF
*
* Read the values for MAXB.
*
IF( DGG ) THEN
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?