Merge pull request #3827 from martin-frbg/lapack703-2
Define type conversions in LAPACK explicitly (Reference-LAPACK PR 703)
This commit is contained in:
commit
4ab4d6ff82
|
@ -238,7 +238,7 @@
|
||||||
$ GO TO 40
|
$ GO TO 40
|
||||||
IF( I.LT.ILO )
|
IF( I.LT.ILO )
|
||||||
$ I = ILO - II
|
$ I = ILO - II
|
||||||
K = SCALE( I )
|
K = INT( SCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 40
|
$ GO TO 40
|
||||||
CALL CSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL CSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
@ -252,7 +252,7 @@
|
||||||
$ GO TO 50
|
$ GO TO 50
|
||||||
IF( I.LT.ILO )
|
IF( I.LT.ILO )
|
||||||
$ I = ILO - II
|
$ I = ILO - II
|
||||||
K = SCALE( I )
|
K = INT( SCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 50
|
$ GO TO 50
|
||||||
CALL CSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL CSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
|
|
@ -282,7 +282,7 @@
|
||||||
*
|
*
|
||||||
CALL CHSEQR( 'S', JOBVS, N, 1, N, A, LDA, W, VS, LDVS,
|
CALL CHSEQR( 'S', JOBVS, N, 1, N, A, LDA, W, VS, LDVS,
|
||||||
$ WORK, -1, IEVAL )
|
$ WORK, -1, IEVAL )
|
||||||
HSWORK = REAL( WORK( 1 ) )
|
HSWORK = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
IF( .NOT.WANTVS ) THEN
|
IF( .NOT.WANTVS ) THEN
|
||||||
MAXWRK = MAX( MAXWRK, HSWORK )
|
MAXWRK = MAX( MAXWRK, HSWORK )
|
||||||
|
|
|
@ -337,7 +337,7 @@
|
||||||
*
|
*
|
||||||
CALL CHSEQR( 'S', JOBVS, N, 1, N, A, LDA, W, VS, LDVS,
|
CALL CHSEQR( 'S', JOBVS, N, 1, N, A, LDA, W, VS, LDVS,
|
||||||
$ WORK, -1, IEVAL )
|
$ WORK, -1, IEVAL )
|
||||||
HSWORK = REAL( WORK( 1 ) )
|
HSWORK = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
IF( .NOT.WANTVS ) THEN
|
IF( .NOT.WANTVS ) THEN
|
||||||
MAXWRK = MAX( MAXWRK, HSWORK )
|
MAXWRK = MAX( MAXWRK, HSWORK )
|
||||||
|
|
|
@ -704,11 +704,11 @@
|
||||||
IF ( LQUERY ) THEN
|
IF ( LQUERY ) THEN
|
||||||
CALL CGEQP3( M, N, A, LDA, IWORK, CDUMMY, CDUMMY, -1,
|
CALL CGEQP3( M, N, A, LDA, IWORK, CDUMMY, CDUMMY, -1,
|
||||||
$ RDUMMY, IERR )
|
$ RDUMMY, IERR )
|
||||||
LWRK_CGEQP3 = REAL( CDUMMY(1) )
|
LWRK_CGEQP3 = INT( CDUMMY(1) )
|
||||||
CALL CGEQRF( N, N, A, LDA, CDUMMY, CDUMMY,-1, IERR )
|
CALL CGEQRF( N, N, A, LDA, CDUMMY, CDUMMY,-1, IERR )
|
||||||
LWRK_CGEQRF = REAL( CDUMMY(1) )
|
LWRK_CGEQRF = INT( CDUMMY(1) )
|
||||||
CALL CGELQF( N, N, A, LDA, CDUMMY, CDUMMY,-1, IERR )
|
CALL CGELQF( N, N, A, LDA, CDUMMY, CDUMMY,-1, IERR )
|
||||||
LWRK_CGELQF = REAL( CDUMMY(1) )
|
LWRK_CGELQF = INT( CDUMMY(1) )
|
||||||
END IF
|
END IF
|
||||||
MINWRK = 2
|
MINWRK = 2
|
||||||
OPTWRK = 2
|
OPTWRK = 2
|
||||||
|
@ -724,7 +724,7 @@
|
||||||
IF ( LQUERY ) THEN
|
IF ( LQUERY ) THEN
|
||||||
CALL CGESVJ( 'L', 'N', 'N', N, N, A, LDA, SVA, N, V,
|
CALL CGESVJ( 'L', 'N', 'N', N, N, A, LDA, SVA, N, V,
|
||||||
$ LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_CGESVJ = REAL( CDUMMY(1) )
|
LWRK_CGESVJ = INT( CDUMMY(1) )
|
||||||
IF ( ERREST ) THEN
|
IF ( ERREST ) THEN
|
||||||
OPTWRK = MAX( N+LWRK_CGEQP3, N**2+LWCON,
|
OPTWRK = MAX( N+LWRK_CGEQP3, N**2+LWCON,
|
||||||
$ N+LWRK_CGEQRF, LWRK_CGESVJ )
|
$ N+LWRK_CGEQRF, LWRK_CGESVJ )
|
||||||
|
@ -760,10 +760,10 @@
|
||||||
IF ( LQUERY ) THEN
|
IF ( LQUERY ) THEN
|
||||||
CALL CGESVJ( 'L', 'U', 'N', N,N, U, LDU, SVA, N, A,
|
CALL CGESVJ( 'L', 'U', 'N', N,N, U, LDU, SVA, N, A,
|
||||||
$ LDA, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ LDA, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_CGESVJ = REAL( CDUMMY(1) )
|
LWRK_CGESVJ = INT( CDUMMY(1) )
|
||||||
CALL CUNMLQ( 'L', 'C', N, N, N, A, LDA, CDUMMY,
|
CALL CUNMLQ( 'L', 'C', N, N, N, A, LDA, CDUMMY,
|
||||||
$ V, LDV, CDUMMY, -1, IERR )
|
$ V, LDV, CDUMMY, -1, IERR )
|
||||||
LWRK_CUNMLQ = REAL( CDUMMY(1) )
|
LWRK_CUNMLQ = INT( CDUMMY(1) )
|
||||||
IF ( ERREST ) THEN
|
IF ( ERREST ) THEN
|
||||||
OPTWRK = MAX( N+LWRK_CGEQP3, LWCON, LWRK_CGESVJ,
|
OPTWRK = MAX( N+LWRK_CGEQP3, LWCON, LWRK_CGESVJ,
|
||||||
$ N+LWRK_CGELQF, 2*N+LWRK_CGEQRF,
|
$ N+LWRK_CGELQF, 2*N+LWRK_CGEQRF,
|
||||||
|
@ -799,10 +799,10 @@
|
||||||
IF ( LQUERY ) THEN
|
IF ( LQUERY ) THEN
|
||||||
CALL CGESVJ( 'L', 'U', 'N', N,N, U, LDU, SVA, N, A,
|
CALL CGESVJ( 'L', 'U', 'N', N,N, U, LDU, SVA, N, A,
|
||||||
$ LDA, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ LDA, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_CGESVJ = REAL( CDUMMY(1) )
|
LWRK_CGESVJ = INT( CDUMMY(1) )
|
||||||
CALL CUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U,
|
CALL CUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U,
|
||||||
$ LDU, CDUMMY, -1, IERR )
|
$ LDU, CDUMMY, -1, IERR )
|
||||||
LWRK_CUNMQRM = REAL( CDUMMY(1) )
|
LWRK_CUNMQRM = INT( CDUMMY(1) )
|
||||||
IF ( ERREST ) THEN
|
IF ( ERREST ) THEN
|
||||||
OPTWRK = N + MAX( LWRK_CGEQP3, LWCON, N+LWRK_CGEQRF,
|
OPTWRK = N + MAX( LWRK_CGEQP3, LWCON, N+LWRK_CGEQRF,
|
||||||
$ LWRK_CGESVJ, LWRK_CUNMQRM )
|
$ LWRK_CGESVJ, LWRK_CUNMQRM )
|
||||||
|
@ -861,26 +861,26 @@
|
||||||
IF ( LQUERY ) THEN
|
IF ( LQUERY ) THEN
|
||||||
CALL CUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U,
|
CALL CUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U,
|
||||||
$ LDU, CDUMMY, -1, IERR )
|
$ LDU, CDUMMY, -1, IERR )
|
||||||
LWRK_CUNMQRM = REAL( CDUMMY(1) )
|
LWRK_CUNMQRM = INT( CDUMMY(1) )
|
||||||
CALL CUNMQR( 'L', 'N', N, N, N, A, LDA, CDUMMY, U,
|
CALL CUNMQR( 'L', 'N', N, N, N, A, LDA, CDUMMY, U,
|
||||||
$ LDU, CDUMMY, -1, IERR )
|
$ LDU, CDUMMY, -1, IERR )
|
||||||
LWRK_CUNMQR = REAL( CDUMMY(1) )
|
LWRK_CUNMQR = INT( CDUMMY(1) )
|
||||||
IF ( .NOT. JRACC ) THEN
|
IF ( .NOT. JRACC ) THEN
|
||||||
CALL CGEQP3( N,N, A, LDA, IWORK, CDUMMY,CDUMMY, -1,
|
CALL CGEQP3( N,N, A, LDA, IWORK, CDUMMY,CDUMMY, -1,
|
||||||
$ RDUMMY, IERR )
|
$ RDUMMY, IERR )
|
||||||
LWRK_CGEQP3N = REAL( CDUMMY(1) )
|
LWRK_CGEQP3N = INT( CDUMMY(1) )
|
||||||
CALL CGESVJ( 'L', 'U', 'N', N, N, U, LDU, SVA,
|
CALL CGESVJ( 'L', 'U', 'N', N, N, U, LDU, SVA,
|
||||||
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_CGESVJ = REAL( CDUMMY(1) )
|
LWRK_CGESVJ = INT( CDUMMY(1) )
|
||||||
CALL CGESVJ( 'U', 'U', 'N', N, N, U, LDU, SVA,
|
CALL CGESVJ( 'U', 'U', 'N', N, N, U, LDU, SVA,
|
||||||
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_CGESVJU = REAL( CDUMMY(1) )
|
LWRK_CGESVJU = INT( CDUMMY(1) )
|
||||||
CALL CGESVJ( 'L', 'U', 'V', N, N, U, LDU, SVA,
|
CALL CGESVJ( 'L', 'U', 'V', N, N, U, LDU, SVA,
|
||||||
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_CGESVJV = REAL( CDUMMY(1) )
|
LWRK_CGESVJV = INT( CDUMMY(1) )
|
||||||
CALL CUNMLQ( 'L', 'C', N, N, N, A, LDA, CDUMMY,
|
CALL CUNMLQ( 'L', 'C', N, N, N, A, LDA, CDUMMY,
|
||||||
$ V, LDV, CDUMMY, -1, IERR )
|
$ V, LDV, CDUMMY, -1, IERR )
|
||||||
LWRK_CUNMLQ = REAL( CDUMMY(1) )
|
LWRK_CUNMLQ = INT( CDUMMY(1) )
|
||||||
IF ( ERREST ) THEN
|
IF ( ERREST ) THEN
|
||||||
OPTWRK = MAX( N+LWRK_CGEQP3, N+LWCON,
|
OPTWRK = MAX( N+LWRK_CGEQP3, N+LWCON,
|
||||||
$ 2*N+N**2+LWCON, 2*N+LWRK_CGEQRF,
|
$ 2*N+N**2+LWCON, 2*N+LWRK_CGEQRF,
|
||||||
|
@ -909,13 +909,13 @@
|
||||||
ELSE
|
ELSE
|
||||||
CALL CGESVJ( 'L', 'U', 'V', N, N, U, LDU, SVA,
|
CALL CGESVJ( 'L', 'U', 'V', N, N, U, LDU, SVA,
|
||||||
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_CGESVJV = REAL( CDUMMY(1) )
|
LWRK_CGESVJV = INT( CDUMMY(1) )
|
||||||
CALL CUNMQR( 'L', 'N', N, N, N, CDUMMY, N, CDUMMY,
|
CALL CUNMQR( 'L', 'N', N, N, N, CDUMMY, N, CDUMMY,
|
||||||
$ V, LDV, CDUMMY, -1, IERR )
|
$ V, LDV, CDUMMY, -1, IERR )
|
||||||
LWRK_CUNMQR = REAL( CDUMMY(1) )
|
LWRK_CUNMQR = INT( CDUMMY(1) )
|
||||||
CALL CUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U,
|
CALL CUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U,
|
||||||
$ LDU, CDUMMY, -1, IERR )
|
$ LDU, CDUMMY, -1, IERR )
|
||||||
LWRK_CUNMQRM = REAL( CDUMMY(1) )
|
LWRK_CUNMQRM = INT( CDUMMY(1) )
|
||||||
IF ( ERREST ) THEN
|
IF ( ERREST ) THEN
|
||||||
OPTWRK = MAX( N+LWRK_CGEQP3, N+LWCON,
|
OPTWRK = MAX( N+LWRK_CGEQP3, N+LWCON,
|
||||||
$ 2*N+LWRK_CGEQRF, 2*N+N**2,
|
$ 2*N+LWRK_CGEQRF, 2*N+N**2,
|
||||||
|
|
|
@ -253,7 +253,7 @@
|
||||||
IF( ILO.EQ.1 )
|
IF( ILO.EQ.1 )
|
||||||
$ GO TO 50
|
$ GO TO 50
|
||||||
DO 40 I = ILO - 1, 1, -1
|
DO 40 I = ILO - 1, 1, -1
|
||||||
K = RSCALE( I )
|
K = INT( RSCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 40
|
$ GO TO 40
|
||||||
CALL CSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL CSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
@ -263,7 +263,7 @@
|
||||||
IF( IHI.EQ.N )
|
IF( IHI.EQ.N )
|
||||||
$ GO TO 70
|
$ GO TO 70
|
||||||
DO 60 I = IHI + 1, N
|
DO 60 I = IHI + 1, N
|
||||||
K = RSCALE( I )
|
K = INT( RSCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 60
|
$ GO TO 60
|
||||||
CALL CSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL CSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
@ -277,7 +277,7 @@
|
||||||
IF( ILO.EQ.1 )
|
IF( ILO.EQ.1 )
|
||||||
$ GO TO 90
|
$ GO TO 90
|
||||||
DO 80 I = ILO - 1, 1, -1
|
DO 80 I = ILO - 1, 1, -1
|
||||||
K = LSCALE( I )
|
K = INT( LSCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 80
|
$ GO TO 80
|
||||||
CALL CSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL CSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
@ -287,7 +287,7 @@
|
||||||
IF( IHI.EQ.N )
|
IF( IHI.EQ.N )
|
||||||
$ GO TO 110
|
$ GO TO 110
|
||||||
DO 100 I = IHI + 1, N
|
DO 100 I = IHI + 1, N
|
||||||
K = LSCALE( I )
|
K = INT( LSCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 100
|
$ GO TO 100
|
||||||
CALL CSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL CSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
|
|
@ -535,7 +535,7 @@
|
||||||
IRAB = ICAMAX( N-ILO+1, B( I, ILO ), LDB )
|
IRAB = ICAMAX( N-ILO+1, B( I, ILO ), LDB )
|
||||||
RAB = MAX( RAB, ABS( B( I, IRAB+ILO-1 ) ) )
|
RAB = MAX( RAB, ABS( B( I, IRAB+ILO-1 ) ) )
|
||||||
LRAB = INT( LOG10( RAB+SFMIN ) / BASL+ONE )
|
LRAB = INT( LOG10( RAB+SFMIN ) / BASL+ONE )
|
||||||
IR = LSCALE( I ) + SIGN( HALF, LSCALE( I ) )
|
IR = INT( LSCALE( I ) + SIGN( HALF, LSCALE( I ) ) )
|
||||||
IR = MIN( MAX( IR, LSFMIN ), LSFMAX, LSFMAX-LRAB )
|
IR = MIN( MAX( IR, LSFMIN ), LSFMAX, LSFMAX-LRAB )
|
||||||
LSCALE( I ) = SCLFAC**IR
|
LSCALE( I ) = SCLFAC**IR
|
||||||
ICAB = ICAMAX( IHI, A( 1, I ), 1 )
|
ICAB = ICAMAX( IHI, A( 1, I ), 1 )
|
||||||
|
@ -543,7 +543,7 @@
|
||||||
ICAB = ICAMAX( IHI, B( 1, I ), 1 )
|
ICAB = ICAMAX( IHI, B( 1, I ), 1 )
|
||||||
CAB = MAX( CAB, ABS( B( ICAB, I ) ) )
|
CAB = MAX( CAB, ABS( B( ICAB, I ) ) )
|
||||||
LCAB = INT( LOG10( CAB+SFMIN ) / BASL+ONE )
|
LCAB = INT( LOG10( CAB+SFMIN ) / BASL+ONE )
|
||||||
JC = RSCALE( I ) + SIGN( HALF, RSCALE( I ) )
|
JC = INT( RSCALE( I ) + SIGN( HALF, RSCALE( I ) ) )
|
||||||
JC = MIN( MAX( JC, LSFMIN ), LSFMAX, LSFMAX-LCAB )
|
JC = MIN( MAX( JC, LSFMIN ), LSFMAX, LSFMAX-LCAB )
|
||||||
RSCALE( I ) = SCLFAC**JC
|
RSCALE( I ) = SCLFAC**JC
|
||||||
360 CONTINUE
|
360 CONTINUE
|
||||||
|
|
|
@ -289,7 +289,7 @@
|
||||||
*
|
*
|
||||||
CALL CGGQRF( N, M, P, A, LDA, WORK, B, LDB, WORK( M+1 ),
|
CALL CGGQRF( N, M, P, A, LDA, WORK, B, LDB, WORK( M+1 ),
|
||||||
$ WORK( M+NP+1 ), LWORK-M-NP, INFO )
|
$ WORK( M+NP+1 ), LWORK-M-NP, INFO )
|
||||||
LOPT = REAL( WORK( M+NP+1 ) )
|
LOPT = INT( WORK( M+NP+1 ) )
|
||||||
*
|
*
|
||||||
* Update left-hand-side vector d = Q**H*d = ( d1 ) M
|
* Update left-hand-side vector d = Q**H*d = ( d1 ) M
|
||||||
* ( d2 ) N-M
|
* ( d2 ) N-M
|
||||||
|
|
|
@ -511,7 +511,7 @@
|
||||||
*
|
*
|
||||||
IF( JJ.GT.0 ) THEN
|
IF( JJ.GT.0 ) THEN
|
||||||
DO I = JJ, 1, -1
|
DO I = JJ, 1, -1
|
||||||
C = DBLE( A( J+1+I, J ) )
|
C = REAL( A( J+1+I, J ) )
|
||||||
CALL CROT( IHI-TOP, A( TOP+1, J+I+1 ), 1,
|
CALL CROT( IHI-TOP, A( TOP+1, J+I+1 ), 1,
|
||||||
$ A( TOP+1, J+I ), 1, C,
|
$ A( TOP+1, J+I ), 1, C,
|
||||||
$ -CONJG( B( J+1+I, J ) ) )
|
$ -CONJG( B( J+1+I, J ) ) )
|
||||||
|
|
|
@ -276,7 +276,7 @@
|
||||||
*
|
*
|
||||||
CALL CGGRQF( P, M, N, B, LDB, WORK, A, LDA, WORK( P+1 ),
|
CALL CGGRQF( P, M, N, B, LDB, WORK, A, LDA, WORK( P+1 ),
|
||||||
$ WORK( P+MN+1 ), LWORK-P-MN, INFO )
|
$ WORK( P+MN+1 ), LWORK-P-MN, INFO )
|
||||||
LOPT = REAL( WORK( P+MN+1 ) )
|
LOPT = INT( WORK( P+MN+1 ) )
|
||||||
*
|
*
|
||||||
* Update c = Z**H *c = ( c1 ) N-P
|
* Update c = Z**H *c = ( c1 ) N-P
|
||||||
* ( c2 ) M+P-N
|
* ( c2 ) M+P-N
|
||||||
|
|
|
@ -276,7 +276,7 @@
|
||||||
* QR factorization of N-by-M matrix A: A = Q*R
|
* QR factorization of N-by-M matrix A: A = Q*R
|
||||||
*
|
*
|
||||||
CALL CGEQRF( N, M, A, LDA, TAUA, WORK, LWORK, INFO )
|
CALL CGEQRF( N, M, A, LDA, TAUA, WORK, LWORK, INFO )
|
||||||
LOPT = REAL( WORK( 1 ) )
|
LOPT = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
* Update B := Q**H*B.
|
* Update B := Q**H*B.
|
||||||
*
|
*
|
||||||
|
|
|
@ -360,9 +360,9 @@
|
||||||
CALL CHEGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
|
CALL CHEGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
|
||||||
CALL CHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, LRWORK,
|
CALL CHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, LRWORK,
|
||||||
$ IWORK, LIWORK, INFO )
|
$ IWORK, LIWORK, INFO )
|
||||||
LOPT = MAX( REAL( LOPT ), REAL( WORK( 1 ) ) )
|
LOPT = INT( MAX( REAL( LOPT ), REAL( WORK( 1 ) ) ) )
|
||||||
LROPT = MAX( REAL( LROPT ), REAL( RWORK( 1 ) ) )
|
LROPT = INT( MAX( REAL( LROPT ), REAL( RWORK( 1 ) ) ) )
|
||||||
LIOPT = MAX( REAL( LIOPT ), REAL( IWORK( 1 ) ) )
|
LIOPT = INT( MAX( REAL( LIOPT ), REAL( IWORK( 1 ) ) ) )
|
||||||
*
|
*
|
||||||
IF( WANTZ .AND. INFO.EQ.0 ) THEN
|
IF( WANTZ .AND. INFO.EQ.0 ) THEN
|
||||||
*
|
*
|
||||||
|
|
|
@ -280,7 +280,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL CHETRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
|
CALL CHETRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = REAL( WORK(1) )
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -335,9 +335,9 @@
|
||||||
CALL CHPGST( ITYPE, UPLO, N, AP, BP, INFO )
|
CALL CHPGST( ITYPE, UPLO, N, AP, BP, INFO )
|
||||||
CALL CHPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, RWORK,
|
CALL CHPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, RWORK,
|
||||||
$ LRWORK, IWORK, LIWORK, INFO )
|
$ LRWORK, IWORK, LIWORK, INFO )
|
||||||
LWMIN = MAX( REAL( LWMIN ), REAL( WORK( 1 ) ) )
|
LWMIN = INT( MAX( REAL( LWMIN ), REAL( WORK( 1 ) ) ) )
|
||||||
LRWMIN = MAX( REAL( LRWMIN ), REAL( RWORK( 1 ) ) )
|
LRWMIN = INT( MAX( REAL( LRWMIN ), REAL( RWORK( 1 ) ) ) )
|
||||||
LIWMIN = MAX( REAL( LIWMIN ), REAL( IWORK( 1 ) ) )
|
LIWMIN = INT( MAX( REAL( LIWMIN ), REAL( IWORK( 1 ) ) ) )
|
||||||
*
|
*
|
||||||
IF( WANTZ ) THEN
|
IF( WANTZ ) THEN
|
||||||
*
|
*
|
||||||
|
|
|
@ -223,7 +223,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL CSYTRF( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
CALL CSYTRF( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = REAL( WORK(1) )
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -280,7 +280,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL CSYTRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
|
CALL CSYTRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = REAL( WORK(1) )
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -256,7 +256,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL CSYTRF_ROOK( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
CALL CSYTRF_ROOK( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = REAL( WORK(1) )
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -233,7 +233,7 @@
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
LWKOPT = REAL( WORK( 1 ) )
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
LWKOPT = MAX (LWKOPT, MN)
|
LWKOPT = MAX (LWKOPT, MN)
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
|
|
|
@ -236,7 +236,7 @@
|
||||||
$ GO TO 40
|
$ GO TO 40
|
||||||
IF( I.LT.ILO )
|
IF( I.LT.ILO )
|
||||||
$ I = ILO - II
|
$ I = ILO - II
|
||||||
K = SCALE( I )
|
K = INT( SCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 40
|
$ GO TO 40
|
||||||
CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
@ -250,7 +250,7 @@
|
||||||
$ GO TO 50
|
$ GO TO 50
|
||||||
IF( I.LT.ILO )
|
IF( I.LT.ILO )
|
||||||
$ I = ILO - II
|
$ I = ILO - II
|
||||||
K = SCALE( I )
|
K = INT( SCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 50
|
$ GO TO 50
|
||||||
CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
|
|
@ -302,7 +302,7 @@
|
||||||
*
|
*
|
||||||
CALL DHSEQR( 'S', JOBVS, N, 1, N, A, LDA, WR, WI, VS, LDVS,
|
CALL DHSEQR( 'S', JOBVS, N, 1, N, A, LDA, WR, WI, VS, LDVS,
|
||||||
$ WORK, -1, IEVAL )
|
$ WORK, -1, IEVAL )
|
||||||
HSWORK = WORK( 1 )
|
HSWORK = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
IF( .NOT.WANTVS ) THEN
|
IF( .NOT.WANTVS ) THEN
|
||||||
MAXWRK = MAX( MAXWRK, N + HSWORK )
|
MAXWRK = MAX( MAXWRK, N + HSWORK )
|
||||||
|
|
|
@ -382,7 +382,7 @@
|
||||||
*
|
*
|
||||||
CALL DHSEQR( 'S', JOBVS, N, 1, N, A, LDA, WR, WI, VS, LDVS,
|
CALL DHSEQR( 'S', JOBVS, N, 1, N, A, LDA, WR, WI, VS, LDVS,
|
||||||
$ WORK, -1, IEVAL )
|
$ WORK, -1, IEVAL )
|
||||||
HSWORK = WORK( 1 )
|
HSWORK = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
IF( .NOT.WANTVS ) THEN
|
IF( .NOT.WANTVS ) THEN
|
||||||
MAXWRK = MAX( MAXWRK, N + HSWORK )
|
MAXWRK = MAX( MAXWRK, N + HSWORK )
|
||||||
|
|
|
@ -254,11 +254,11 @@
|
||||||
*
|
*
|
||||||
* Compute space needed for DGEQRF
|
* Compute space needed for DGEQRF
|
||||||
CALL DGEQRF( M, N, A, LDA, DUM(1), DUM(1), -1, INFO )
|
CALL DGEQRF( M, N, A, LDA, DUM(1), DUM(1), -1, INFO )
|
||||||
LWORK_DGEQRF=DUM(1)
|
LWORK_DGEQRF = INT( DUM(1) )
|
||||||
* Compute space needed for DORMQR
|
* Compute space needed for DORMQR
|
||||||
CALL DORMQR( 'L', 'T', M, NRHS, N, A, LDA, DUM(1), B,
|
CALL DORMQR( 'L', 'T', M, NRHS, N, A, LDA, DUM(1), B,
|
||||||
$ LDB, DUM(1), -1, INFO )
|
$ LDB, DUM(1), -1, INFO )
|
||||||
LWORK_DORMQR=DUM(1)
|
LWORK_DORMQR = INT( DUM(1) )
|
||||||
MM = N
|
MM = N
|
||||||
MAXWRK = MAX( MAXWRK, N + LWORK_DGEQRF )
|
MAXWRK = MAX( MAXWRK, N + LWORK_DGEQRF )
|
||||||
MAXWRK = MAX( MAXWRK, N + LWORK_DORMQR )
|
MAXWRK = MAX( MAXWRK, N + LWORK_DORMQR )
|
||||||
|
@ -273,15 +273,15 @@
|
||||||
* Compute space needed for DGEBRD
|
* Compute space needed for DGEBRD
|
||||||
CALL DGEBRD( MM, N, A, LDA, S, DUM(1), DUM(1),
|
CALL DGEBRD( MM, N, A, LDA, S, DUM(1), DUM(1),
|
||||||
$ DUM(1), DUM(1), -1, INFO )
|
$ DUM(1), DUM(1), -1, INFO )
|
||||||
LWORK_DGEBRD=DUM(1)
|
LWORK_DGEBRD = INT( DUM(1) )
|
||||||
* Compute space needed for DORMBR
|
* Compute space needed for DORMBR
|
||||||
CALL DORMBR( 'Q', 'L', 'T', MM, NRHS, N, A, LDA, DUM(1),
|
CALL DORMBR( 'Q', 'L', 'T', MM, NRHS, N, A, LDA, DUM(1),
|
||||||
$ B, LDB, DUM(1), -1, INFO )
|
$ B, LDB, DUM(1), -1, INFO )
|
||||||
LWORK_DORMBR=DUM(1)
|
LWORK_DORMBR = INT( DUM(1) )
|
||||||
* Compute space needed for DORGBR
|
* Compute space needed for DORGBR
|
||||||
CALL DORGBR( 'P', N, N, N, A, LDA, DUM(1),
|
CALL DORGBR( 'P', N, N, N, A, LDA, DUM(1),
|
||||||
$ DUM(1), -1, INFO )
|
$ DUM(1), -1, INFO )
|
||||||
LWORK_DORGBR=DUM(1)
|
LWORK_DORGBR = INT( DUM(1) )
|
||||||
* Compute total workspace needed
|
* Compute total workspace needed
|
||||||
MAXWRK = MAX( MAXWRK, 3*N + LWORK_DGEBRD )
|
MAXWRK = MAX( MAXWRK, 3*N + LWORK_DGEBRD )
|
||||||
MAXWRK = MAX( MAXWRK, 3*N + LWORK_DORMBR )
|
MAXWRK = MAX( MAXWRK, 3*N + LWORK_DORMBR )
|
||||||
|
@ -305,23 +305,23 @@
|
||||||
* Compute space needed for DGELQF
|
* Compute space needed for DGELQF
|
||||||
CALL DGELQF( M, N, A, LDA, DUM(1), DUM(1),
|
CALL DGELQF( M, N, A, LDA, DUM(1), DUM(1),
|
||||||
$ -1, INFO )
|
$ -1, INFO )
|
||||||
LWORK_DGELQF=DUM(1)
|
LWORK_DGELQF = INT( DUM(1) )
|
||||||
* Compute space needed for DGEBRD
|
* Compute space needed for DGEBRD
|
||||||
CALL DGEBRD( M, M, A, LDA, S, DUM(1), DUM(1),
|
CALL DGEBRD( M, M, A, LDA, S, DUM(1), DUM(1),
|
||||||
$ DUM(1), DUM(1), -1, INFO )
|
$ DUM(1), DUM(1), -1, INFO )
|
||||||
LWORK_DGEBRD=DUM(1)
|
LWORK_DGEBRD = INT( DUM(1) )
|
||||||
* Compute space needed for DORMBR
|
* Compute space needed for DORMBR
|
||||||
CALL DORMBR( 'Q', 'L', 'T', M, NRHS, N, A, LDA,
|
CALL DORMBR( 'Q', 'L', 'T', M, NRHS, N, A, LDA,
|
||||||
$ DUM(1), B, LDB, DUM(1), -1, INFO )
|
$ DUM(1), B, LDB, DUM(1), -1, INFO )
|
||||||
LWORK_DORMBR=DUM(1)
|
LWORK_DORMBR = INT( DUM(1) )
|
||||||
* Compute space needed for DORGBR
|
* Compute space needed for DORGBR
|
||||||
CALL DORGBR( 'P', M, M, M, A, LDA, DUM(1),
|
CALL DORGBR( 'P', M, M, M, A, LDA, DUM(1),
|
||||||
$ DUM(1), -1, INFO )
|
$ DUM(1), -1, INFO )
|
||||||
LWORK_DORGBR=DUM(1)
|
LWORK_DORGBR = INT( DUM(1) )
|
||||||
* Compute space needed for DORMLQ
|
* Compute space needed for DORMLQ
|
||||||
CALL DORMLQ( 'L', 'T', N, NRHS, M, A, LDA, DUM(1),
|
CALL DORMLQ( 'L', 'T', N, NRHS, M, A, LDA, DUM(1),
|
||||||
$ B, LDB, DUM(1), -1, INFO )
|
$ B, LDB, DUM(1), -1, INFO )
|
||||||
LWORK_DORMLQ=DUM(1)
|
LWORK_DORMLQ = INT( DUM(1) )
|
||||||
* Compute total workspace needed
|
* Compute total workspace needed
|
||||||
MAXWRK = M + LWORK_DGELQF
|
MAXWRK = M + LWORK_DGELQF
|
||||||
MAXWRK = MAX( MAXWRK, M*M + 4*M + LWORK_DGEBRD )
|
MAXWRK = MAX( MAXWRK, M*M + 4*M + LWORK_DGEBRD )
|
||||||
|
@ -341,15 +341,15 @@
|
||||||
* Compute space needed for DGEBRD
|
* Compute space needed for DGEBRD
|
||||||
CALL DGEBRD( M, N, A, LDA, S, DUM(1), DUM(1),
|
CALL DGEBRD( M, N, A, LDA, S, DUM(1), DUM(1),
|
||||||
$ DUM(1), DUM(1), -1, INFO )
|
$ DUM(1), DUM(1), -1, INFO )
|
||||||
LWORK_DGEBRD=DUM(1)
|
LWORK_DGEBRD = INT( DUM(1) )
|
||||||
* Compute space needed for DORMBR
|
* Compute space needed for DORMBR
|
||||||
CALL DORMBR( 'Q', 'L', 'T', M, NRHS, M, A, LDA,
|
CALL DORMBR( 'Q', 'L', 'T', M, NRHS, M, A, LDA,
|
||||||
$ DUM(1), B, LDB, DUM(1), -1, INFO )
|
$ DUM(1), B, LDB, DUM(1), -1, INFO )
|
||||||
LWORK_DORMBR=DUM(1)
|
LWORK_DORMBR = INT( DUM(1) )
|
||||||
* Compute space needed for DORGBR
|
* Compute space needed for DORGBR
|
||||||
CALL DORGBR( 'P', M, N, M, A, LDA, DUM(1),
|
CALL DORGBR( 'P', M, N, M, A, LDA, DUM(1),
|
||||||
$ DUM(1), -1, INFO )
|
$ DUM(1), -1, INFO )
|
||||||
LWORK_DORGBR=DUM(1)
|
LWORK_DORGBR = INT( DUM(1) )
|
||||||
MAXWRK = 3*M + LWORK_DGEBRD
|
MAXWRK = 3*M + LWORK_DGEBRD
|
||||||
MAXWRK = MAX( MAXWRK, 3*M + LWORK_DORMBR )
|
MAXWRK = MAX( MAXWRK, 3*M + LWORK_DORMBR )
|
||||||
MAXWRK = MAX( MAXWRK, 3*M + LWORK_DORGBR )
|
MAXWRK = MAX( MAXWRK, 3*M + LWORK_DORGBR )
|
||||||
|
|
|
@ -288,7 +288,7 @@
|
||||||
*
|
*
|
||||||
CALL DGGQRF( N, M, P, A, LDA, WORK, B, LDB, WORK( M+1 ),
|
CALL DGGQRF( N, M, P, A, LDA, WORK, B, LDB, WORK( M+1 ),
|
||||||
$ WORK( M+NP+1 ), LWORK-M-NP, INFO )
|
$ WORK( M+NP+1 ), LWORK-M-NP, INFO )
|
||||||
LOPT = WORK( M+NP+1 )
|
LOPT = INT( WORK( M+NP+1 ) )
|
||||||
*
|
*
|
||||||
* Update left-hand-side vector d = Q**T*d = ( d1 ) M
|
* Update left-hand-side vector d = Q**T*d = ( d1 ) M
|
||||||
* ( d2 ) N-M
|
* ( d2 ) N-M
|
||||||
|
|
|
@ -276,7 +276,7 @@
|
||||||
*
|
*
|
||||||
CALL DGGRQF( P, M, N, B, LDB, WORK, A, LDA, WORK( P+1 ),
|
CALL DGGRQF( P, M, N, B, LDB, WORK, A, LDA, WORK( P+1 ),
|
||||||
$ WORK( P+MN+1 ), LWORK-P-MN, INFO )
|
$ WORK( P+MN+1 ), LWORK-P-MN, INFO )
|
||||||
LOPT = WORK( P+MN+1 )
|
LOPT = INT( WORK( P+MN+1 ) )
|
||||||
*
|
*
|
||||||
* Update c = Z**T *c = ( c1 ) N-P
|
* Update c = Z**T *c = ( c1 ) N-P
|
||||||
* ( c2 ) M+P-N
|
* ( c2 ) M+P-N
|
||||||
|
|
|
@ -276,7 +276,7 @@
|
||||||
* QR factorization of N-by-M matrix A: A = Q*R
|
* QR factorization of N-by-M matrix A: A = Q*R
|
||||||
*
|
*
|
||||||
CALL DGEQRF( N, M, A, LDA, TAUA, WORK, LWORK, INFO )
|
CALL DGEQRF( N, M, A, LDA, TAUA, WORK, LWORK, INFO )
|
||||||
LOPT = WORK( 1 )
|
LOPT = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
* Update B := Q**T*B.
|
* Update B := Q**T*B.
|
||||||
*
|
*
|
||||||
|
|
|
@ -275,7 +275,7 @@
|
||||||
* RQ factorization of M-by-N matrix A: A = R*Q
|
* RQ factorization of M-by-N matrix A: A = R*Q
|
||||||
*
|
*
|
||||||
CALL DGERQF( M, N, A, LDA, TAUA, WORK, LWORK, INFO )
|
CALL DGERQF( M, N, A, LDA, TAUA, WORK, LWORK, INFO )
|
||||||
LOPT = WORK( 1 )
|
LOPT = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
* Update B := B*Q**T
|
* Update B := B*Q**T
|
||||||
*
|
*
|
||||||
|
|
|
@ -34,8 +34,8 @@
|
||||||
*>
|
*>
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*>
|
*>
|
||||||
*> DLAG2S converts a DOUBLE PRECISION matrix, SA, to a SINGLE
|
*> DLAG2S converts a DOUBLE PRECISION matrix, A, to a SINGLE
|
||||||
*> PRECISION matrix, A.
|
*> PRECISION matrix, SA.
|
||||||
*>
|
*>
|
||||||
*> RMAX is the overflow for the SINGLE PRECISION arithmetic
|
*> RMAX is the overflow for the SINGLE PRECISION arithmetic
|
||||||
*> DLAG2S checks that all the entries of A are between -RMAX and
|
*> DLAG2S checks that all the entries of A are between -RMAX and
|
||||||
|
@ -128,6 +128,9 @@
|
||||||
REAL SLAMCH
|
REAL SLAMCH
|
||||||
EXTERNAL SLAMCH
|
EXTERNAL SLAMCH
|
||||||
* ..
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC REAL
|
||||||
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
RMAX = SLAMCH( 'O' )
|
RMAX = SLAMCH( 'O' )
|
||||||
|
@ -137,7 +140,7 @@
|
||||||
INFO = 1
|
INFO = 1
|
||||||
GO TO 30
|
GO TO 30
|
||||||
END IF
|
END IF
|
||||||
SA( I, J ) = A( I, J )
|
SA( I, J ) = REAL( A( I, J ) )
|
||||||
10 CONTINUE
|
10 CONTINUE
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
INFO = 0
|
INFO = 0
|
||||||
|
|
|
@ -134,6 +134,9 @@
|
||||||
LOGICAL LSAME
|
LOGICAL LSAME
|
||||||
EXTERNAL SLAMCH, LSAME
|
EXTERNAL SLAMCH, LSAME
|
||||||
* ..
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC REAL
|
||||||
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
RMAX = SLAMCH( 'O' )
|
RMAX = SLAMCH( 'O' )
|
||||||
|
@ -146,7 +149,7 @@
|
||||||
INFO = 1
|
INFO = 1
|
||||||
GO TO 50
|
GO TO 50
|
||||||
END IF
|
END IF
|
||||||
SA( I, J ) = A( I, J )
|
SA( I, J ) = REAL( A( I, J ) )
|
||||||
10 CONTINUE
|
10 CONTINUE
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
|
@ -157,7 +160,7 @@
|
||||||
INFO = 1
|
INFO = 1
|
||||||
GO TO 50
|
GO TO 50
|
||||||
END IF
|
END IF
|
||||||
SA( I, J ) = A( I, J )
|
SA( I, J ) = REAL( A( I, J ) )
|
||||||
30 CONTINUE
|
30 CONTINUE
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -232,7 +232,7 @@
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
LWKOPT = WORK( 1 )
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
LWKOPT = MAX (LWKOPT, MN)
|
LWKOPT = MAX (LWKOPT, MN)
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
|
|
|
@ -307,8 +307,8 @@
|
||||||
CALL DSPGST( ITYPE, UPLO, N, AP, BP, INFO )
|
CALL DSPGST( ITYPE, UPLO, N, AP, BP, INFO )
|
||||||
CALL DSPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, IWORK,
|
CALL DSPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, IWORK,
|
||||||
$ LIWORK, INFO )
|
$ LIWORK, INFO )
|
||||||
LWMIN = MAX( DBLE( LWMIN ), DBLE( WORK( 1 ) ) )
|
LWMIN = INT( MAX( DBLE( LWMIN ), DBLE( WORK( 1 ) ) ) )
|
||||||
LIWMIN = MAX( DBLE( LIWMIN ), DBLE( IWORK( 1 ) ) )
|
LIWMIN = INT( MAX( DBLE( LIWMIN ), DBLE( IWORK( 1 ) ) ) )
|
||||||
*
|
*
|
||||||
IF( WANTZ ) THEN
|
IF( WANTZ ) THEN
|
||||||
*
|
*
|
||||||
|
|
|
@ -330,8 +330,8 @@
|
||||||
CALL DSYGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
|
CALL DSYGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
|
||||||
CALL DSYEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, IWORK, LIWORK,
|
CALL DSYEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, IWORK, LIWORK,
|
||||||
$ INFO )
|
$ INFO )
|
||||||
LOPT = MAX( DBLE( LOPT ), DBLE( WORK( 1 ) ) )
|
LOPT = INT( MAX( DBLE( LOPT ), DBLE( WORK( 1 ) ) ) )
|
||||||
LIOPT = MAX( DBLE( LIOPT ), DBLE( IWORK( 1 ) ) )
|
LIOPT = INT( MAX( DBLE( LIOPT ), DBLE( IWORK( 1 ) ) ) )
|
||||||
*
|
*
|
||||||
IF( WANTZ .AND. INFO.EQ.0 ) THEN
|
IF( WANTZ .AND. INFO.EQ.0 ) THEN
|
||||||
*
|
*
|
||||||
|
|
|
@ -223,7 +223,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL DSYTRF( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
CALL DSYTRF( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = WORK(1)
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -280,7 +280,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL DSYTRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
|
CALL DSYTRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = WORK(1)
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -256,7 +256,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL DSYTRF_ROOK( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
CALL DSYTRF_ROOK( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = WORK(1)
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -236,7 +236,7 @@
|
||||||
$ GO TO 40
|
$ GO TO 40
|
||||||
IF( I.LT.ILO )
|
IF( I.LT.ILO )
|
||||||
$ I = ILO - II
|
$ I = ILO - II
|
||||||
K = SCALE( I )
|
K = INT( SCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 40
|
$ GO TO 40
|
||||||
CALL SSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL SSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
@ -250,7 +250,7 @@
|
||||||
$ GO TO 50
|
$ GO TO 50
|
||||||
IF( I.LT.ILO )
|
IF( I.LT.ILO )
|
||||||
$ I = ILO - II
|
$ I = ILO - II
|
||||||
K = SCALE( I )
|
K = INT( SCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 50
|
$ GO TO 50
|
||||||
CALL SSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL SSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
|
|
@ -302,7 +302,7 @@
|
||||||
*
|
*
|
||||||
CALL SHSEQR( 'S', JOBVS, N, 1, N, A, LDA, WR, WI, VS, LDVS,
|
CALL SHSEQR( 'S', JOBVS, N, 1, N, A, LDA, WR, WI, VS, LDVS,
|
||||||
$ WORK, -1, IEVAL )
|
$ WORK, -1, IEVAL )
|
||||||
HSWORK = WORK( 1 )
|
HSWORK = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
IF( .NOT.WANTVS ) THEN
|
IF( .NOT.WANTVS ) THEN
|
||||||
MAXWRK = MAX( MAXWRK, N + HSWORK )
|
MAXWRK = MAX( MAXWRK, N + HSWORK )
|
||||||
|
|
|
@ -382,7 +382,7 @@
|
||||||
*
|
*
|
||||||
CALL SHSEQR( 'S', JOBVS, N, 1, N, A, LDA, WR, WI, VS, LDVS,
|
CALL SHSEQR( 'S', JOBVS, N, 1, N, A, LDA, WR, WI, VS, LDVS,
|
||||||
$ WORK, -1, IEVAL )
|
$ WORK, -1, IEVAL )
|
||||||
HSWORK = WORK( 1 )
|
HSWORK = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
IF( .NOT.WANTVS ) THEN
|
IF( .NOT.WANTVS ) THEN
|
||||||
MAXWRK = MAX( MAXWRK, N + HSWORK )
|
MAXWRK = MAX( MAXWRK, N + HSWORK )
|
||||||
|
|
|
@ -252,7 +252,7 @@
|
||||||
$ GO TO 50
|
$ GO TO 50
|
||||||
*
|
*
|
||||||
DO 40 I = ILO - 1, 1, -1
|
DO 40 I = ILO - 1, 1, -1
|
||||||
K = RSCALE( I )
|
K = INT( RSCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 40
|
$ GO TO 40
|
||||||
CALL SSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL SSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
@ -262,7 +262,7 @@
|
||||||
IF( IHI.EQ.N )
|
IF( IHI.EQ.N )
|
||||||
$ GO TO 70
|
$ GO TO 70
|
||||||
DO 60 I = IHI + 1, N
|
DO 60 I = IHI + 1, N
|
||||||
K = RSCALE( I )
|
K = INT( RSCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 60
|
$ GO TO 60
|
||||||
CALL SSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL SSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
@ -276,7 +276,7 @@
|
||||||
IF( ILO.EQ.1 )
|
IF( ILO.EQ.1 )
|
||||||
$ GO TO 90
|
$ GO TO 90
|
||||||
DO 80 I = ILO - 1, 1, -1
|
DO 80 I = ILO - 1, 1, -1
|
||||||
K = LSCALE( I )
|
K = INT( LSCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 80
|
$ GO TO 80
|
||||||
CALL SSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL SSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
@ -286,7 +286,7 @@
|
||||||
IF( IHI.EQ.N )
|
IF( IHI.EQ.N )
|
||||||
$ GO TO 110
|
$ GO TO 110
|
||||||
DO 100 I = IHI + 1, N
|
DO 100 I = IHI + 1, N
|
||||||
K = LSCALE( I )
|
K = INT( LSCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 100
|
$ GO TO 100
|
||||||
CALL SSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL SSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
|
|
@ -522,7 +522,7 @@
|
||||||
IRAB = ISAMAX( N-ILO+1, B( I, ILO ), LDB )
|
IRAB = ISAMAX( N-ILO+1, B( I, ILO ), LDB )
|
||||||
RAB = MAX( RAB, ABS( B( I, IRAB+ILO-1 ) ) )
|
RAB = MAX( RAB, ABS( B( I, IRAB+ILO-1 ) ) )
|
||||||
LRAB = INT( LOG10( RAB+SFMIN ) / BASL+ONE )
|
LRAB = INT( LOG10( RAB+SFMIN ) / BASL+ONE )
|
||||||
IR = LSCALE( I ) + SIGN( HALF, LSCALE( I ) )
|
IR = INT( LSCALE( I ) + SIGN( HALF, LSCALE( I ) ) )
|
||||||
IR = MIN( MAX( IR, LSFMIN ), LSFMAX, LSFMAX-LRAB )
|
IR = MIN( MAX( IR, LSFMIN ), LSFMAX, LSFMAX-LRAB )
|
||||||
LSCALE( I ) = SCLFAC**IR
|
LSCALE( I ) = SCLFAC**IR
|
||||||
ICAB = ISAMAX( IHI, A( 1, I ), 1 )
|
ICAB = ISAMAX( IHI, A( 1, I ), 1 )
|
||||||
|
@ -530,7 +530,7 @@
|
||||||
ICAB = ISAMAX( IHI, B( 1, I ), 1 )
|
ICAB = ISAMAX( IHI, B( 1, I ), 1 )
|
||||||
CAB = MAX( CAB, ABS( B( ICAB, I ) ) )
|
CAB = MAX( CAB, ABS( B( ICAB, I ) ) )
|
||||||
LCAB = INT( LOG10( CAB+SFMIN ) / BASL+ONE )
|
LCAB = INT( LOG10( CAB+SFMIN ) / BASL+ONE )
|
||||||
JC = RSCALE( I ) + SIGN( HALF, RSCALE( I ) )
|
JC = INT( RSCALE( I ) + SIGN( HALF, RSCALE( I ) ) )
|
||||||
JC = MIN( MAX( JC, LSFMIN ), LSFMAX, LSFMAX-LCAB )
|
JC = MIN( MAX( JC, LSFMIN ), LSFMAX, LSFMAX-LCAB )
|
||||||
RSCALE( I ) = SCLFAC**JC
|
RSCALE( I ) = SCLFAC**JC
|
||||||
360 CONTINUE
|
360 CONTINUE
|
||||||
|
|
|
@ -288,7 +288,7 @@
|
||||||
*
|
*
|
||||||
CALL SGGQRF( N, M, P, A, LDA, WORK, B, LDB, WORK( M+1 ),
|
CALL SGGQRF( N, M, P, A, LDA, WORK, B, LDB, WORK( M+1 ),
|
||||||
$ WORK( M+NP+1 ), LWORK-M-NP, INFO )
|
$ WORK( M+NP+1 ), LWORK-M-NP, INFO )
|
||||||
LOPT = WORK( M+NP+1 )
|
LOPT = INT( WORK( M+NP+1 ) )
|
||||||
*
|
*
|
||||||
* Update left-hand-side vector d = Q**T*d = ( d1 ) M
|
* Update left-hand-side vector d = Q**T*d = ( d1 ) M
|
||||||
* ( d2 ) N-M
|
* ( d2 ) N-M
|
||||||
|
|
|
@ -276,7 +276,7 @@
|
||||||
*
|
*
|
||||||
CALL SGGRQF( P, M, N, B, LDB, WORK, A, LDA, WORK( P+1 ),
|
CALL SGGRQF( P, M, N, B, LDB, WORK, A, LDA, WORK( P+1 ),
|
||||||
$ WORK( P+MN+1 ), LWORK-P-MN, INFO )
|
$ WORK( P+MN+1 ), LWORK-P-MN, INFO )
|
||||||
LOPT = WORK( P+MN+1 )
|
LOPT = INT( WORK( P+MN+1 ) )
|
||||||
*
|
*
|
||||||
* Update c = Z**T *c = ( c1 ) N-P
|
* Update c = Z**T *c = ( c1 ) N-P
|
||||||
* ( c2 ) M+P-N
|
* ( c2 ) M+P-N
|
||||||
|
|
|
@ -276,7 +276,7 @@
|
||||||
* QR factorization of N-by-M matrix A: A = Q*R
|
* QR factorization of N-by-M matrix A: A = Q*R
|
||||||
*
|
*
|
||||||
CALL SGEQRF( N, M, A, LDA, TAUA, WORK, LWORK, INFO )
|
CALL SGEQRF( N, M, A, LDA, TAUA, WORK, LWORK, INFO )
|
||||||
LOPT = WORK( 1 )
|
LOPT = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
* Update B := Q**T*B.
|
* Update B := Q**T*B.
|
||||||
*
|
*
|
||||||
|
|
|
@ -275,7 +275,7 @@
|
||||||
* RQ factorization of M-by-N matrix A: A = R*Q
|
* RQ factorization of M-by-N matrix A: A = R*Q
|
||||||
*
|
*
|
||||||
CALL SGERQF( M, N, A, LDA, TAUA, WORK, LWORK, INFO )
|
CALL SGERQF( M, N, A, LDA, TAUA, WORK, LWORK, INFO )
|
||||||
LOPT = WORK( 1 )
|
LOPT = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
* Update B := B*Q**T
|
* Update B := B*Q**T
|
||||||
*
|
*
|
||||||
|
|
|
@ -232,7 +232,7 @@
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
LWKOPT = WORK( 1 )
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
LWKOPT = MAX (LWKOPT, MN)
|
LWKOPT = MAX (LWKOPT, MN)
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
|
|
|
@ -307,8 +307,8 @@
|
||||||
CALL SSPGST( ITYPE, UPLO, N, AP, BP, INFO )
|
CALL SSPGST( ITYPE, UPLO, N, AP, BP, INFO )
|
||||||
CALL SSPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, IWORK,
|
CALL SSPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, IWORK,
|
||||||
$ LIWORK, INFO )
|
$ LIWORK, INFO )
|
||||||
LWMIN = MAX( REAL( LWMIN ), REAL( WORK( 1 ) ) )
|
LWMIN = INT( MAX( REAL( LWMIN ), REAL( WORK( 1 ) ) ) )
|
||||||
LIWMIN = MAX( REAL( LIWMIN ), REAL( IWORK( 1 ) ) )
|
LIWMIN = INT( MAX( REAL( LIWMIN ), REAL( IWORK( 1 ) ) ) )
|
||||||
*
|
*
|
||||||
IF( WANTZ ) THEN
|
IF( WANTZ ) THEN
|
||||||
*
|
*
|
||||||
|
|
|
@ -330,8 +330,8 @@
|
||||||
CALL SSYGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
|
CALL SSYGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
|
||||||
CALL SSYEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, IWORK, LIWORK,
|
CALL SSYEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, IWORK, LIWORK,
|
||||||
$ INFO )
|
$ INFO )
|
||||||
LOPT = MAX( REAL( LOPT ), REAL( WORK( 1 ) ) )
|
LOPT = INT( MAX( REAL( LOPT ), REAL( WORK( 1 ) ) ) )
|
||||||
LIOPT = MAX( REAL( LIOPT ), REAL( IWORK( 1 ) ) )
|
LIOPT = INT( MAX( REAL( LIOPT ), REAL( IWORK( 1 ) ) ) )
|
||||||
*
|
*
|
||||||
IF( WANTZ .AND. INFO.EQ.0 ) THEN
|
IF( WANTZ .AND. INFO.EQ.0 ) THEN
|
||||||
*
|
*
|
||||||
|
|
|
@ -223,7 +223,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL SSYTRF( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
CALL SSYTRF( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = WORK(1)
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -280,7 +280,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL SSYTRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
|
CALL SSYTRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = WORK(1)
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -256,7 +256,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL SSYTRF_ROOK( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
CALL SSYTRF_ROOK( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = WORK(1)
|
LWKOPT = INT( WORK( 1 ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -238,7 +238,7 @@
|
||||||
$ GO TO 40
|
$ GO TO 40
|
||||||
IF( I.LT.ILO )
|
IF( I.LT.ILO )
|
||||||
$ I = ILO - II
|
$ I = ILO - II
|
||||||
K = SCALE( I )
|
K = INT( SCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 40
|
$ GO TO 40
|
||||||
CALL ZSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL ZSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
@ -252,7 +252,7 @@
|
||||||
$ GO TO 50
|
$ GO TO 50
|
||||||
IF( I.LT.ILO )
|
IF( I.LT.ILO )
|
||||||
$ I = ILO - II
|
$ I = ILO - II
|
||||||
K = SCALE( I )
|
K = INT( SCALE( I ) )
|
||||||
IF( K.EQ.I )
|
IF( K.EQ.I )
|
||||||
$ GO TO 50
|
$ GO TO 50
|
||||||
CALL ZSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
CALL ZSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )
|
||||||
|
|
|
@ -282,7 +282,7 @@
|
||||||
*
|
*
|
||||||
CALL ZHSEQR( 'S', JOBVS, N, 1, N, A, LDA, W, VS, LDVS,
|
CALL ZHSEQR( 'S', JOBVS, N, 1, N, A, LDA, W, VS, LDVS,
|
||||||
$ WORK, -1, IEVAL )
|
$ WORK, -1, IEVAL )
|
||||||
HSWORK = DBLE( WORK( 1 ) )
|
HSWORK = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
IF( .NOT.WANTVS ) THEN
|
IF( .NOT.WANTVS ) THEN
|
||||||
MAXWRK = MAX( MAXWRK, HSWORK )
|
MAXWRK = MAX( MAXWRK, HSWORK )
|
||||||
|
|
|
@ -337,7 +337,7 @@
|
||||||
*
|
*
|
||||||
CALL ZHSEQR( 'S', JOBVS, N, 1, N, A, LDA, W, VS, LDVS,
|
CALL ZHSEQR( 'S', JOBVS, N, 1, N, A, LDA, W, VS, LDVS,
|
||||||
$ WORK, -1, IEVAL )
|
$ WORK, -1, IEVAL )
|
||||||
HSWORK = DBLE( WORK( 1 ) )
|
HSWORK = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
IF( .NOT.WANTVS ) THEN
|
IF( .NOT.WANTVS ) THEN
|
||||||
MAXWRK = MAX( MAXWRK, HSWORK )
|
MAXWRK = MAX( MAXWRK, HSWORK )
|
||||||
|
|
|
@ -707,11 +707,11 @@
|
||||||
IF ( LQUERY ) THEN
|
IF ( LQUERY ) THEN
|
||||||
CALL ZGEQP3( M, N, A, LDA, IWORK, CDUMMY, CDUMMY, -1,
|
CALL ZGEQP3( M, N, A, LDA, IWORK, CDUMMY, CDUMMY, -1,
|
||||||
$ RDUMMY, IERR )
|
$ RDUMMY, IERR )
|
||||||
LWRK_ZGEQP3 = DBLE( CDUMMY(1) )
|
LWRK_ZGEQP3 = INT( CDUMMY(1) )
|
||||||
CALL ZGEQRF( N, N, A, LDA, CDUMMY, CDUMMY,-1, IERR )
|
CALL ZGEQRF( N, N, A, LDA, CDUMMY, CDUMMY,-1, IERR )
|
||||||
LWRK_ZGEQRF = DBLE( CDUMMY(1) )
|
LWRK_ZGEQRF = INT( CDUMMY(1) )
|
||||||
CALL ZGELQF( N, N, A, LDA, CDUMMY, CDUMMY,-1, IERR )
|
CALL ZGELQF( N, N, A, LDA, CDUMMY, CDUMMY,-1, IERR )
|
||||||
LWRK_ZGELQF = DBLE( CDUMMY(1) )
|
LWRK_ZGELQF = INT( CDUMMY(1) )
|
||||||
END IF
|
END IF
|
||||||
MINWRK = 2
|
MINWRK = 2
|
||||||
OPTWRK = 2
|
OPTWRK = 2
|
||||||
|
@ -727,7 +727,7 @@
|
||||||
IF ( LQUERY ) THEN
|
IF ( LQUERY ) THEN
|
||||||
CALL ZGESVJ( 'L', 'N', 'N', N, N, A, LDA, SVA, N, V,
|
CALL ZGESVJ( 'L', 'N', 'N', N, N, A, LDA, SVA, N, V,
|
||||||
$ LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_ZGESVJ = DBLE( CDUMMY(1) )
|
LWRK_ZGESVJ = INT( CDUMMY(1) )
|
||||||
IF ( ERREST ) THEN
|
IF ( ERREST ) THEN
|
||||||
OPTWRK = MAX( N+LWRK_ZGEQP3, N**2+LWCON,
|
OPTWRK = MAX( N+LWRK_ZGEQP3, N**2+LWCON,
|
||||||
$ N+LWRK_ZGEQRF, LWRK_ZGESVJ )
|
$ N+LWRK_ZGEQRF, LWRK_ZGESVJ )
|
||||||
|
@ -763,10 +763,10 @@
|
||||||
IF ( LQUERY ) THEN
|
IF ( LQUERY ) THEN
|
||||||
CALL ZGESVJ( 'L', 'U', 'N', N,N, U, LDU, SVA, N, A,
|
CALL ZGESVJ( 'L', 'U', 'N', N,N, U, LDU, SVA, N, A,
|
||||||
$ LDA, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ LDA, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_ZGESVJ = DBLE( CDUMMY(1) )
|
LWRK_ZGESVJ = INT( CDUMMY(1) )
|
||||||
CALL ZUNMLQ( 'L', 'C', N, N, N, A, LDA, CDUMMY,
|
CALL ZUNMLQ( 'L', 'C', N, N, N, A, LDA, CDUMMY,
|
||||||
$ V, LDV, CDUMMY, -1, IERR )
|
$ V, LDV, CDUMMY, -1, IERR )
|
||||||
LWRK_ZUNMLQ = DBLE( CDUMMY(1) )
|
LWRK_ZUNMLQ = INT( CDUMMY(1) )
|
||||||
IF ( ERREST ) THEN
|
IF ( ERREST ) THEN
|
||||||
OPTWRK = MAX( N+LWRK_ZGEQP3, LWCON, LWRK_ZGESVJ,
|
OPTWRK = MAX( N+LWRK_ZGEQP3, LWCON, LWRK_ZGESVJ,
|
||||||
$ N+LWRK_ZGELQF, 2*N+LWRK_ZGEQRF,
|
$ N+LWRK_ZGELQF, 2*N+LWRK_ZGEQRF,
|
||||||
|
@ -802,10 +802,10 @@
|
||||||
IF ( LQUERY ) THEN
|
IF ( LQUERY ) THEN
|
||||||
CALL ZGESVJ( 'L', 'U', 'N', N,N, U, LDU, SVA, N, A,
|
CALL ZGESVJ( 'L', 'U', 'N', N,N, U, LDU, SVA, N, A,
|
||||||
$ LDA, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ LDA, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_ZGESVJ = DBLE( CDUMMY(1) )
|
LWRK_ZGESVJ = INT( CDUMMY(1) )
|
||||||
CALL ZUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U,
|
CALL ZUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U,
|
||||||
$ LDU, CDUMMY, -1, IERR )
|
$ LDU, CDUMMY, -1, IERR )
|
||||||
LWRK_ZUNMQRM = DBLE( CDUMMY(1) )
|
LWRK_ZUNMQRM = INT( CDUMMY(1) )
|
||||||
IF ( ERREST ) THEN
|
IF ( ERREST ) THEN
|
||||||
OPTWRK = N + MAX( LWRK_ZGEQP3, LWCON, N+LWRK_ZGEQRF,
|
OPTWRK = N + MAX( LWRK_ZGEQP3, LWCON, N+LWRK_ZGEQRF,
|
||||||
$ LWRK_ZGESVJ, LWRK_ZUNMQRM )
|
$ LWRK_ZGESVJ, LWRK_ZUNMQRM )
|
||||||
|
@ -864,26 +864,26 @@
|
||||||
IF ( LQUERY ) THEN
|
IF ( LQUERY ) THEN
|
||||||
CALL ZUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U,
|
CALL ZUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U,
|
||||||
$ LDU, CDUMMY, -1, IERR )
|
$ LDU, CDUMMY, -1, IERR )
|
||||||
LWRK_ZUNMQRM = DBLE( CDUMMY(1) )
|
LWRK_ZUNMQRM = INT( CDUMMY(1) )
|
||||||
CALL ZUNMQR( 'L', 'N', N, N, N, A, LDA, CDUMMY, U,
|
CALL ZUNMQR( 'L', 'N', N, N, N, A, LDA, CDUMMY, U,
|
||||||
$ LDU, CDUMMY, -1, IERR )
|
$ LDU, CDUMMY, -1, IERR )
|
||||||
LWRK_ZUNMQR = DBLE( CDUMMY(1) )
|
LWRK_ZUNMQR = INT( CDUMMY(1) )
|
||||||
IF ( .NOT. JRACC ) THEN
|
IF ( .NOT. JRACC ) THEN
|
||||||
CALL ZGEQP3( N,N, A, LDA, IWORK, CDUMMY,CDUMMY, -1,
|
CALL ZGEQP3( N,N, A, LDA, IWORK, CDUMMY,CDUMMY, -1,
|
||||||
$ RDUMMY, IERR )
|
$ RDUMMY, IERR )
|
||||||
LWRK_ZGEQP3N = DBLE( CDUMMY(1) )
|
LWRK_ZGEQP3N = INT( CDUMMY(1) )
|
||||||
CALL ZGESVJ( 'L', 'U', 'N', N, N, U, LDU, SVA,
|
CALL ZGESVJ( 'L', 'U', 'N', N, N, U, LDU, SVA,
|
||||||
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_ZGESVJ = DBLE( CDUMMY(1) )
|
LWRK_ZGESVJ = INT( CDUMMY(1) )
|
||||||
CALL ZGESVJ( 'U', 'U', 'N', N, N, U, LDU, SVA,
|
CALL ZGESVJ( 'U', 'U', 'N', N, N, U, LDU, SVA,
|
||||||
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_ZGESVJU = DBLE( CDUMMY(1) )
|
LWRK_ZGESVJU = INT( CDUMMY(1) )
|
||||||
CALL ZGESVJ( 'L', 'U', 'V', N, N, U, LDU, SVA,
|
CALL ZGESVJ( 'L', 'U', 'V', N, N, U, LDU, SVA,
|
||||||
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_ZGESVJV = DBLE( CDUMMY(1) )
|
LWRK_ZGESVJV = INT( CDUMMY(1) )
|
||||||
CALL ZUNMLQ( 'L', 'C', N, N, N, A, LDA, CDUMMY,
|
CALL ZUNMLQ( 'L', 'C', N, N, N, A, LDA, CDUMMY,
|
||||||
$ V, LDV, CDUMMY, -1, IERR )
|
$ V, LDV, CDUMMY, -1, IERR )
|
||||||
LWRK_ZUNMLQ = DBLE( CDUMMY(1) )
|
LWRK_ZUNMLQ = INT( CDUMMY(1) )
|
||||||
IF ( ERREST ) THEN
|
IF ( ERREST ) THEN
|
||||||
OPTWRK = MAX( N+LWRK_ZGEQP3, N+LWCON,
|
OPTWRK = MAX( N+LWRK_ZGEQP3, N+LWCON,
|
||||||
$ 2*N+N**2+LWCON, 2*N+LWRK_ZGEQRF,
|
$ 2*N+N**2+LWCON, 2*N+LWRK_ZGEQRF,
|
||||||
|
@ -912,13 +912,13 @@
|
||||||
ELSE
|
ELSE
|
||||||
CALL ZGESVJ( 'L', 'U', 'V', N, N, U, LDU, SVA,
|
CALL ZGESVJ( 'L', 'U', 'V', N, N, U, LDU, SVA,
|
||||||
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR )
|
||||||
LWRK_ZGESVJV = DBLE( CDUMMY(1) )
|
LWRK_ZGESVJV = INT( CDUMMY(1) )
|
||||||
CALL ZUNMQR( 'L', 'N', N, N, N, CDUMMY, N, CDUMMY,
|
CALL ZUNMQR( 'L', 'N', N, N, N, CDUMMY, N, CDUMMY,
|
||||||
$ V, LDV, CDUMMY, -1, IERR )
|
$ V, LDV, CDUMMY, -1, IERR )
|
||||||
LWRK_ZUNMQR = DBLE( CDUMMY(1) )
|
LWRK_ZUNMQR = INT( CDUMMY(1) )
|
||||||
CALL ZUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U,
|
CALL ZUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U,
|
||||||
$ LDU, CDUMMY, -1, IERR )
|
$ LDU, CDUMMY, -1, IERR )
|
||||||
LWRK_ZUNMQRM = DBLE( CDUMMY(1) )
|
LWRK_ZUNMQRM = INT( CDUMMY(1) )
|
||||||
IF ( ERREST ) THEN
|
IF ( ERREST ) THEN
|
||||||
OPTWRK = MAX( N+LWRK_ZGEQP3, N+LWCON,
|
OPTWRK = MAX( N+LWRK_ZGEQP3, N+LWCON,
|
||||||
$ 2*N+LWRK_ZGEQRF, 2*N+N**2,
|
$ 2*N+LWRK_ZGEQRF, 2*N+N**2,
|
||||||
|
|
|
@ -289,7 +289,7 @@
|
||||||
*
|
*
|
||||||
CALL ZGGQRF( N, M, P, A, LDA, WORK, B, LDB, WORK( M+1 ),
|
CALL ZGGQRF( N, M, P, A, LDA, WORK, B, LDB, WORK( M+1 ),
|
||||||
$ WORK( M+NP+1 ), LWORK-M-NP, INFO )
|
$ WORK( M+NP+1 ), LWORK-M-NP, INFO )
|
||||||
LOPT = DBLE( WORK( M+NP+1 ) )
|
LOPT = INT( WORK( M+NP+1 ) )
|
||||||
*
|
*
|
||||||
* Update left-hand-side vector d = Q**H*d = ( d1 ) M
|
* Update left-hand-side vector d = Q**H*d = ( d1 ) M
|
||||||
* ( d2 ) N-M
|
* ( d2 ) N-M
|
||||||
|
|
|
@ -276,7 +276,7 @@
|
||||||
*
|
*
|
||||||
CALL ZGGRQF( P, M, N, B, LDB, WORK, A, LDA, WORK( P+1 ),
|
CALL ZGGRQF( P, M, N, B, LDB, WORK, A, LDA, WORK( P+1 ),
|
||||||
$ WORK( P+MN+1 ), LWORK-P-MN, INFO )
|
$ WORK( P+MN+1 ), LWORK-P-MN, INFO )
|
||||||
LOPT = DBLE( WORK( P+MN+1 ) )
|
LOPT = INT( WORK( P+MN+1 ) )
|
||||||
*
|
*
|
||||||
* Update c = Z**H *c = ( c1 ) N-P
|
* Update c = Z**H *c = ( c1 ) N-P
|
||||||
* ( c2 ) M+P-N
|
* ( c2 ) M+P-N
|
||||||
|
|
|
@ -276,7 +276,7 @@
|
||||||
* QR factorization of N-by-M matrix A: A = Q*R
|
* QR factorization of N-by-M matrix A: A = Q*R
|
||||||
*
|
*
|
||||||
CALL ZGEQRF( N, M, A, LDA, TAUA, WORK, LWORK, INFO )
|
CALL ZGEQRF( N, M, A, LDA, TAUA, WORK, LWORK, INFO )
|
||||||
LOPT = DBLE( WORK( 1 ) )
|
LOPT = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
* Update B := Q**H*B.
|
* Update B := Q**H*B.
|
||||||
*
|
*
|
||||||
|
|
|
@ -275,7 +275,7 @@
|
||||||
* RQ factorization of M-by-N matrix A: A = R*Q
|
* RQ factorization of M-by-N matrix A: A = R*Q
|
||||||
*
|
*
|
||||||
CALL ZGERQF( M, N, A, LDA, TAUA, WORK, LWORK, INFO )
|
CALL ZGERQF( M, N, A, LDA, TAUA, WORK, LWORK, INFO )
|
||||||
LOPT = DBLE( WORK( 1 ) )
|
LOPT = INT( WORK( 1 ) )
|
||||||
*
|
*
|
||||||
* Update B := B*Q**H
|
* Update B := B*Q**H
|
||||||
*
|
*
|
||||||
|
|
|
@ -360,9 +360,9 @@
|
||||||
CALL ZHEGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
|
CALL ZHEGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
|
||||||
CALL ZHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, LRWORK,
|
CALL ZHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, LRWORK,
|
||||||
$ IWORK, LIWORK, INFO )
|
$ IWORK, LIWORK, INFO )
|
||||||
LOPT = MAX( DBLE( LOPT ), DBLE( WORK( 1 ) ) )
|
LOPT = INT( MAX( DBLE( LOPT ), DBLE( WORK( 1 ) ) ) )
|
||||||
LROPT = MAX( DBLE( LROPT ), DBLE( RWORK( 1 ) ) )
|
LROPT = INT( MAX( DBLE( LROPT ), DBLE( RWORK( 1 ) ) ) )
|
||||||
LIOPT = MAX( DBLE( LIOPT ), DBLE( IWORK( 1 ) ) )
|
LIOPT = INT( MAX( DBLE( LIOPT ), DBLE( IWORK( 1 ) ) ) )
|
||||||
*
|
*
|
||||||
IF( WANTZ .AND. INFO.EQ.0 ) THEN
|
IF( WANTZ .AND. INFO.EQ.0 ) THEN
|
||||||
*
|
*
|
||||||
|
|
|
@ -280,7 +280,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL ZHETRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
|
CALL ZHETRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = DBLE( WORK(1) )
|
LWKOPT = INT( DBLE( WORK( 1 ) ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -335,9 +335,9 @@
|
||||||
CALL ZHPGST( ITYPE, UPLO, N, AP, BP, INFO )
|
CALL ZHPGST( ITYPE, UPLO, N, AP, BP, INFO )
|
||||||
CALL ZHPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, RWORK,
|
CALL ZHPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, RWORK,
|
||||||
$ LRWORK, IWORK, LIWORK, INFO )
|
$ LRWORK, IWORK, LIWORK, INFO )
|
||||||
LWMIN = MAX( DBLE( LWMIN ), DBLE( WORK( 1 ) ) )
|
LWMIN = INT( MAX( DBLE( LWMIN ), DBLE( WORK( 1 ) ) ) )
|
||||||
LRWMIN = MAX( DBLE( LRWMIN ), DBLE( RWORK( 1 ) ) )
|
LRWMIN = INT( MAX( DBLE( LRWMIN ), DBLE( RWORK( 1 ) ) ) )
|
||||||
LIWMIN = MAX( DBLE( LIWMIN ), DBLE( IWORK( 1 ) ) )
|
LIWMIN = INT( MAX( DBLE( LIWMIN ), DBLE( IWORK( 1 ) ) ) )
|
||||||
*
|
*
|
||||||
IF( WANTZ ) THEN
|
IF( WANTZ ) THEN
|
||||||
*
|
*
|
||||||
|
|
|
@ -124,7 +124,7 @@
|
||||||
DOUBLE PRECISION RMAX
|
DOUBLE PRECISION RMAX
|
||||||
* ..
|
* ..
|
||||||
* .. Intrinsic Functions ..
|
* .. Intrinsic Functions ..
|
||||||
INTRINSIC DBLE, DIMAG
|
INTRINSIC DBLE, DIMAG, CMPLX
|
||||||
* ..
|
* ..
|
||||||
* .. External Functions ..
|
* .. External Functions ..
|
||||||
REAL SLAMCH
|
REAL SLAMCH
|
||||||
|
@ -142,7 +142,7 @@
|
||||||
INFO = 1
|
INFO = 1
|
||||||
GO TO 30
|
GO TO 30
|
||||||
END IF
|
END IF
|
||||||
SA( I, J ) = A( I, J )
|
SA( I, J ) = CMPLX( A( I, J ) )
|
||||||
10 CONTINUE
|
10 CONTINUE
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
INFO = 0
|
INFO = 0
|
||||||
|
|
|
@ -348,9 +348,9 @@
|
||||||
B = ( ZETA2*ZETA2+ZETA1*ZETA1-ONE )*HALF
|
B = ( ZETA2*ZETA2+ZETA1*ZETA1-ONE )*HALF
|
||||||
C = ZETA1*ZETA1
|
C = ZETA1*ZETA1
|
||||||
IF( B.GE.ZERO ) THEN
|
IF( B.GE.ZERO ) THEN
|
||||||
T = -C / ( B+SQRT( B*B+C ) )
|
T = DBLE( -C / ( B+SQRT( B*B+C ) ) )
|
||||||
ELSE
|
ELSE
|
||||||
T = B - SQRT( B*B+C )
|
T = DBLE( B - SQRT( B*B+C ) )
|
||||||
END IF
|
END IF
|
||||||
SINE = -( ALPHA / ABSEST ) / T
|
SINE = -( ALPHA / ABSEST ) / T
|
||||||
COSINE = -( GAMMA / ABSEST ) / ( ONE+T )
|
COSINE = -( GAMMA / ABSEST ) / ( ONE+T )
|
||||||
|
|
|
@ -130,7 +130,7 @@
|
||||||
LOGICAL UPPER
|
LOGICAL UPPER
|
||||||
* ..
|
* ..
|
||||||
* .. Intrinsic Functions ..
|
* .. Intrinsic Functions ..
|
||||||
INTRINSIC DBLE, DIMAG
|
INTRINSIC DBLE, DIMAG, CMPLX
|
||||||
* ..
|
* ..
|
||||||
* .. External Functions ..
|
* .. External Functions ..
|
||||||
REAL SLAMCH
|
REAL SLAMCH
|
||||||
|
@ -151,7 +151,7 @@
|
||||||
INFO = 1
|
INFO = 1
|
||||||
GO TO 50
|
GO TO 50
|
||||||
END IF
|
END IF
|
||||||
SA( I, J ) = A( I, J )
|
SA( I, J ) = CMPLX( A( I, J ) )
|
||||||
10 CONTINUE
|
10 CONTINUE
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
|
@ -164,7 +164,7 @@
|
||||||
INFO = 1
|
INFO = 1
|
||||||
GO TO 50
|
GO TO 50
|
||||||
END IF
|
END IF
|
||||||
SA( I, J ) = A( I, J )
|
SA( I, J ) = CMPLX( A( I, J ) )
|
||||||
30 CONTINUE
|
30 CONTINUE
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -223,7 +223,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL ZSYTRF( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
CALL ZSYTRF( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = DBLE( WORK(1) )
|
LWKOPT = INT( DBLE( WORK( 1 ) ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -280,7 +280,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL ZSYTRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
|
CALL ZSYTRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = DBLE( WORK(1) )
|
LWKOPT = INT( DBLE( WORK( 1 ) ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -256,7 +256,7 @@
|
||||||
LWKOPT = 1
|
LWKOPT = 1
|
||||||
ELSE
|
ELSE
|
||||||
CALL ZSYTRF_ROOK( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
CALL ZSYTRF_ROOK( UPLO, N, A, LDA, IPIV, WORK, -1, INFO )
|
||||||
LWKOPT = DBLE( WORK(1) )
|
LWKOPT = INT( DBLE( WORK( 1 ) ) )
|
||||||
END IF
|
END IF
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -233,7 +233,7 @@
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
LWKOPT = DBLE( WORK( 1 ) )
|
LWKOPT = INT( DBLE( WORK( 1 ) ) )
|
||||||
LWKOPT = MAX (LWKOPT, MN)
|
LWKOPT = MAX (LWKOPT, MN)
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue