* not including e, RU, and RVT matrices.
*
* Compute space preferred for each routine
- CALL CGEBRD( M, N, CDUM(1), M, CDUM(1), DUM(1), CDUM(1),
+ CALL CGEBRD( M, N, CDUM(1), M, DUM(1), DUM(1), CDUM(1),
$ CDUM(1), CDUM(1), -1, IERR )
LWORK_CGEBRD_MN = INT( CDUM(1) )
*
- CALL CGEBRD( N, N, CDUM(1), N, CDUM(1), DUM(1), CDUM(1),
+ CALL CGEBRD( N, N, CDUM(1), N, DUM(1), DUM(1), CDUM(1),
$ CDUM(1), CDUM(1), -1, IERR )
LWORK_CGEBRD_NN = INT( CDUM(1) )
*
* not including e, RU, and RVT matrices.
*
* Compute space preferred for each routine
- CALL CGEBRD( M, N, CDUM(1), M, CDUM(1), DUM(1), CDUM(1),
+ CALL CGEBRD( M, N, CDUM(1), M, DUM(1), DUM(1), CDUM(1),
$ CDUM(1), CDUM(1), -1, IERR )
LWORK_CGEBRD_MN = INT( CDUM(1) )
*
- CALL CGEBRD( M, M, CDUM(1), M, CDUM(1), DUM(1), CDUM(1),
+ CALL CGEBRD( M, M, CDUM(1), M, DUM(1), DUM(1), CDUM(1),
$ CDUM(1), CDUM(1), -1, IERR )
LWORK_CGEBRD_MM = INT( CDUM(1) )
*
$ LWORKMIN, LWORKOPT, R
LOGICAL LQUERY, WANTU1, WANTU2, WANTV1T
* ..
+* .. Local Arrays ..
+ REAL DUM( 1 )
+ COMPLEX CDUM( 1 )
+* ..
* .. External Subroutines ..
EXTERNAL CBBCSD, CCOPY, CLACPY, CLAPMR, CLAPMT, CUNBDB1,
$ CUNBDB2, CUNBDB3, CUNBDB4, CUNGLQ, CUNGQR,
LORGLQMIN = 1
LORGLQOPT = 1
IF( R .EQ. Q ) THEN
- CALL CUNBDB1( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, WORK, -1, CHILDINFO )
+ CALL CUNBDB1( M, P, Q, X11, LDX11, X21, LDX21, THETA,
+ $ DUM, CDUM, CDUM, CDUM, WORK, -1,
+ $ CHILDINFO )
LORBDB = INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL CUNGQR( P, P, Q, U1, LDU1, 0, WORK(1), -1,
+ CALL CUNGQR( P, P, Q, U1, LDU1, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
ENDIF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL CUNGQR( M-P, M-P, Q, U2, LDU2, 0, WORK(1), -1,
+ CALL CUNGQR( M-P, M-P, Q, U2, LDU2, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
CALL CUNGLQ( Q-1, Q-1, Q-1, V1T, LDV1T,
- $ 0, WORK(1), -1, CHILDINFO )
+ $ CDUM, WORK(1), -1, CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q-1 )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL CBBCSD( JOBU1, JOBU2, JOBV1T, 'N', 'N', M, P, Q, THETA,
- $ 0, U1, LDU1, U2, LDU2, V1T, LDV1T, 0, 1, 0, 0,
- $ 0, 0, 0, 0, 0, 0, RWORK(1), -1, CHILDINFO )
+ $ DUM(1), U1, LDU1, U2, LDU2, V1T, LDV1T, CDUM,
+ $ 1, DUM, DUM, DUM, DUM, DUM, DUM, DUM, DUM,
+ $ RWORK(1), -1, CHILDINFO )
LBBCSD = INT( RWORK(1) )
ELSE IF( R .EQ. P ) THEN
- CALL CUNBDB2( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, WORK(1), -1, CHILDINFO )
+ CALL CUNBDB2( M, P, Q, X11, LDX11, X21, LDX21, THETA, DUM,
+ $ CDUM, CDUM, CDUM, WORK(1), -1, CHILDINFO )
LORBDB = INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL CUNGQR( P-1, P-1, P-1, U1(2,2), LDU1, 0, WORK(1),
+ CALL CUNGQR( P-1, P-1, P-1, U1(2,2), LDU1, CDUM, WORK(1),
$ -1, CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P-1 )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL CUNGQR( M-P, M-P, Q, U2, LDU2, 0, WORK(1), -1,
+ CALL CUNGQR( M-P, M-P, Q, U2, LDU2, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
- CALL CUNGLQ( Q, Q, R, V1T, LDV1T, 0, WORK(1), -1,
+ CALL CUNGLQ( Q, Q, R, V1T, LDV1T, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL CBBCSD( JOBV1T, 'N', JOBU1, JOBU2, 'T', M, Q, P, THETA,
- $ 0, V1T, LDV1T, 0, 1, U1, LDU1, U2, LDU2, 0, 0,
- $ 0, 0, 0, 0, 0, 0, RWORK(1), -1, CHILDINFO )
+ $ DUM, V1T, LDV1T, CDUM, 1, U1, LDU1, U2, LDU2,
+ $ DUM, DUM, DUM, DUM, DUM, DUM, DUM, DUM,
+ $ RWORK(1), -1, CHILDINFO )
LBBCSD = INT( RWORK(1) )
ELSE IF( R .EQ. M-P ) THEN
- CALL CUNBDB3( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, WORK(1), -1, CHILDINFO )
+ CALL CUNBDB3( M, P, Q, X11, LDX11, X21, LDX21, THETA, DUM,
+ $ CDUM, CDUM, CDUM, WORK(1), -1, CHILDINFO )
LORBDB = INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL CUNGQR( P, P, Q, U1, LDU1, 0, WORK(1), -1,
+ CALL CUNGQR( P, P, Q, U1, LDU1, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL CUNGQR( M-P-1, M-P-1, M-P-1, U2(2,2), LDU2, 0,
+ CALL CUNGQR( M-P-1, M-P-1, M-P-1, U2(2,2), LDU2, CDUM,
$ WORK(1), -1, CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P-1 )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
- CALL CUNGLQ( Q, Q, R, V1T, LDV1T, 0, WORK(1), -1,
+ CALL CUNGLQ( Q, Q, R, V1T, LDV1T, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL CBBCSD( 'N', JOBV1T, JOBU2, JOBU1, 'T', M, M-Q, M-P,
- $ THETA, 0, 0, 1, V1T, LDV1T, U2, LDU2, U1, LDU1,
- $ 0, 0, 0, 0, 0, 0, 0, 0, RWORK(1), -1,
- $ CHILDINFO )
+ $ THETA, DUM, CDUM, 1, V1T, LDV1T, U2, LDU2, U1,
+ $ LDU1, DUM, DUM, DUM, DUM, DUM, DUM, DUM, DUM,
+ $ RWORK(1), -1, CHILDINFO )
LBBCSD = INT( RWORK(1) )
ELSE
- CALL CUNBDB4( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, 0, WORK(1), -1, CHILDINFO )
+ CALL CUNBDB4( M, P, Q, X11, LDX11, X21, LDX21, THETA, DUM,
+ $ CDUM, CDUM, CDUM, CDUM, WORK(1), -1, CHILDINFO
+ $ )
LORBDB = M + INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL CUNGQR( P, P, M-Q, U1, LDU1, 0, WORK(1), -1,
+ CALL CUNGQR( P, P, M-Q, U1, LDU1, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL CUNGQR( M-P, M-P, M-Q, U2, LDU2, 0, WORK(1), -1,
+ CALL CUNGQR( M-P, M-P, M-Q, U2, LDU2, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
- CALL CUNGLQ( Q, Q, Q, V1T, LDV1T, 0, WORK(1), -1,
+ CALL CUNGLQ( Q, Q, Q, V1T, LDV1T, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL CBBCSD( JOBU2, JOBU1, 'N', JOBV1T, 'N', M, M-P, M-Q,
- $ THETA, 0, U2, LDU2, U1, LDU1, 0, 1, V1T, LDV1T,
- $ 0, 0, 0, 0, 0, 0, 0, 0, RWORK(1), -1,
- $ CHILDINFO )
+ $ THETA, DUM, U2, LDU2, U1, LDU1, CDUM, 1, V1T,
+ $ LDV1T, DUM, DUM, DUM, DUM, DUM, DUM, DUM, DUM,
+ $ RWORK(1), -1, CHILDINFO )
LBBCSD = INT( RWORK(1) )
END IF
LRWORKMIN = IBBCSD+LBBCSD-1
* Simultaneously diagonalize X11 and X21.
*
CALL CBBCSD( JOBU1, JOBU2, JOBV1T, 'N', 'N', M, P, Q, THETA,
- $ RWORK(IPHI), U1, LDU1, U2, LDU2, V1T, LDV1T, 0, 1,
- $ RWORK(IB11D), RWORK(IB11E), RWORK(IB12D),
+ $ RWORK(IPHI), U1, LDU1, U2, LDU2, V1T, LDV1T, CDUM,
+ $ 1, RWORK(IB11D), RWORK(IB11E), RWORK(IB12D),
$ RWORK(IB12E), RWORK(IB21D), RWORK(IB21E),
$ RWORK(IB22D), RWORK(IB22E), RWORK(IBBCSD), LBBCSD,
$ CHILDINFO )
* Simultaneously diagonalize X11 and X21.
*
CALL CBBCSD( JOBV1T, 'N', JOBU1, JOBU2, 'T', M, Q, P, THETA,
- $ RWORK(IPHI), V1T, LDV1T, 0, 1, U1, LDU1, U2, LDU2,
- $ RWORK(IB11D), RWORK(IB11E), RWORK(IB12D),
+ $ RWORK(IPHI), V1T, LDV1T, CDUM, 1, U1, LDU1, U2,
+ $ LDU2, RWORK(IB11D), RWORK(IB11E), RWORK(IB12D),
$ RWORK(IB12E), RWORK(IB21D), RWORK(IB21E),
$ RWORK(IB22D), RWORK(IB22E), RWORK(IBBCSD), LBBCSD,
$ CHILDINFO )
* Simultaneously diagonalize X11 and X21.
*
CALL CBBCSD( 'N', JOBV1T, JOBU2, JOBU1, 'T', M, M-Q, M-P,
- $ THETA, RWORK(IPHI), 0, 1, V1T, LDV1T, U2, LDU2,
+ $ THETA, RWORK(IPHI), CDUM, 1, V1T, LDV1T, U2, LDU2,
$ U1, LDU1, RWORK(IB11D), RWORK(IB11E),
$ RWORK(IB12D), RWORK(IB12E), RWORK(IB21D),
$ RWORK(IB21E), RWORK(IB22D), RWORK(IB22E),
* Simultaneously diagonalize X11 and X21.
*
CALL CBBCSD( JOBU2, JOBU1, 'N', JOBV1T, 'N', M, M-P, M-Q,
- $ THETA, RWORK(IPHI), U2, LDU2, U1, LDU1, 0, 1, V1T,
- $ LDV1T, RWORK(IB11D), RWORK(IB11E), RWORK(IB12D),
- $ RWORK(IB12E), RWORK(IB21D), RWORK(IB21E),
- $ RWORK(IB22D), RWORK(IB22E), RWORK(IBBCSD), LBBCSD,
- $ CHILDINFO )
+ $ THETA, RWORK(IPHI), U2, LDU2, U1, LDU1, CDUM, 1,
+ $ V1T, LDV1T, RWORK(IB11D), RWORK(IB11E),
+ $ RWORK(IB12D), RWORK(IB12E), RWORK(IB21D),
+ $ RWORK(IB21E), RWORK(IB22D), RWORK(IB22E),
+ $ RWORK(IBBCSD), LBBCSD, CHILDINFO )
*
* Permute rows and columns to place identity submatrices in
* preferred positions
$ LWORKMIN, LWORKOPT, R
LOGICAL LQUERY, WANTU1, WANTU2, WANTV1T
* ..
+* .. Local Arrays ..
+ DOUBLE PRECISION DUM( 1 )
+* ..
* .. External Subroutines ..
EXTERNAL DBBCSD, DCOPY, DLACPY, DLAPMR, DLAPMT, DORBDB1,
$ DORBDB2, DORBDB3, DORBDB4, DORGLQ, DORGQR,
LORGLQMIN = 1
LORGLQOPT = 1
IF( R .EQ. Q ) THEN
- CALL DORBDB1( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, WORK, -1, CHILDINFO )
+ CALL DORBDB1( M, P, Q, X11, LDX11, X21, LDX21, THETA,
+ $ DUM, DUM, DUM, DUM, WORK,
+ $ -1, CHILDINFO )
LORBDB = INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL DORGQR( P, P, Q, U1, LDU1, 0, WORK(1), -1,
+ CALL DORGQR( P, P, Q, U1, LDU1, DUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
ENDIF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL DORGQR( M-P, M-P, Q, U2, LDU2, 0, WORK(1), -1,
- $ CHILDINFO )
+ CALL DORGQR( M-P, M-P, Q, U2, LDU2, DUM, WORK(1),
+ $ -1, CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
CALL DORGLQ( Q-1, Q-1, Q-1, V1T, LDV1T,
- $ 0, WORK(1), -1, CHILDINFO )
+ $ DUM, WORK(1), -1, CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q-1 )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL DBBCSD( JOBU1, JOBU2, JOBV1T, 'N', 'N', M, P, Q, THETA,
- $ 0, U1, LDU1, U2, LDU2, V1T, LDV1T, 0, 1, 0, 0,
- $ 0, 0, 0, 0, 0, 0, WORK(1), -1, CHILDINFO )
+ $ DUM, U1, LDU1, U2, LDU2, V1T, LDV1T,
+ $ DUM, 1, DUM, DUM, DUM,
+ $ DUM, DUM, DUM, DUM,
+ $ DUM, WORK(1), -1, CHILDINFO )
LBBCSD = INT( WORK(1) )
ELSE IF( R .EQ. P ) THEN
- CALL DORBDB2( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, WORK(1), -1, CHILDINFO )
+ CALL DORBDB2( M, P, Q, X11, LDX11, X21, LDX21, THETA,
+ $ DUM, DUM, DUM, DUM,
+ $ WORK(1), -1, CHILDINFO )
LORBDB = INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL DORGQR( P-1, P-1, P-1, U1(2,2), LDU1, 0, WORK(1),
- $ -1, CHILDINFO )
+ CALL DORGQR( P-1, P-1, P-1, U1(2,2), LDU1, DUM,
+ $ WORK(1), -1, CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P-1 )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL DORGQR( M-P, M-P, Q, U2, LDU2, 0, WORK(1), -1,
- $ CHILDINFO )
+ CALL DORGQR( M-P, M-P, Q, U2, LDU2, DUM, WORK(1),
+ $ -1, CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
- CALL DORGLQ( Q, Q, R, V1T, LDV1T, 0, WORK(1), -1,
+ CALL DORGLQ( Q, Q, R, V1T, LDV1T, DUM, WORK(1), -1,
$ CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL DBBCSD( JOBV1T, 'N', JOBU1, JOBU2, 'T', M, Q, P, THETA,
- $ 0, V1T, LDV1T, 0, 1, U1, LDU1, U2, LDU2, 0, 0,
- $ 0, 0, 0, 0, 0, 0, WORK(1), -1, CHILDINFO )
+ $ DUM, V1T, LDV1T, DUM, 1, U1, LDU1,
+ $ U2, LDU2, DUM, DUM, DUM,
+ $ DUM, DUM, DUM, DUM,
+ $ DUM, WORK(1), -1, CHILDINFO )
LBBCSD = INT( WORK(1) )
ELSE IF( R .EQ. M-P ) THEN
- CALL DORBDB3( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, WORK(1), -1, CHILDINFO )
+ CALL DORBDB3( M, P, Q, X11, LDX11, X21, LDX21, THETA,
+ $ DUM, DUM, DUM, DUM,
+ $ WORK(1), -1, CHILDINFO )
LORBDB = INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL DORGQR( P, P, Q, U1, LDU1, 0, WORK(1), -1,
+ CALL DORGQR( P, P, Q, U1, LDU1, DUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL DORGQR( M-P-1, M-P-1, M-P-1, U2(2,2), LDU2, 0,
- $ WORK(1), -1, CHILDINFO )
+ CALL DORGQR( M-P-1, M-P-1, M-P-1, U2(2,2), LDU2,
+ $ DUM, WORK(1), -1, CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P-1 )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
- CALL DORGLQ( Q, Q, R, V1T, LDV1T, 0, WORK(1), -1,
+ CALL DORGLQ( Q, Q, R, V1T, LDV1T, DUM, WORK(1), -1,
$ CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL DBBCSD( 'N', JOBV1T, JOBU2, JOBU1, 'T', M, M-Q, M-P,
- $ THETA, 0, 0, 1, V1T, LDV1T, U2, LDU2, U1, LDU1,
- $ 0, 0, 0, 0, 0, 0, 0, 0, WORK(1), -1,
- $ CHILDINFO )
+ $ THETA, DUM, DUM, 1, V1T, LDV1T, U2,
+ $ LDU2, U1, LDU1, DUM, DUM, DUM,
+ $ DUM, DUM, DUM, DUM,
+ $ DUM, WORK(1), -1, CHILDINFO )
LBBCSD = INT( WORK(1) )
ELSE
- CALL DORBDB4( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, 0, WORK(1), -1, CHILDINFO )
+ CALL DORBDB4( M, P, Q, X11, LDX11, X21, LDX21, THETA,
+ $ DUM, DUM, DUM, DUM,
+ $ DUM, WORK(1), -1, CHILDINFO )
LORBDB = M + INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL DORGQR( P, P, M-Q, U1, LDU1, 0, WORK(1), -1,
+ CALL DORGQR( P, P, M-Q, U1, LDU1, DUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL DORGQR( M-P, M-P, M-Q, U2, LDU2, 0, WORK(1), -1,
- $ CHILDINFO )
+ CALL DORGQR( M-P, M-P, M-Q, U2, LDU2, DUM, WORK(1),
+ $ -1, CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
- CALL DORGLQ( Q, Q, Q, V1T, LDV1T, 0, WORK(1), -1,
+ CALL DORGLQ( Q, Q, Q, V1T, LDV1T, DUM, WORK(1), -1,
$ CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL DBBCSD( JOBU2, JOBU1, 'N', JOBV1T, 'N', M, M-P, M-Q,
- $ THETA, 0, U2, LDU2, U1, LDU1, 0, 1, V1T, LDV1T,
- $ 0, 0, 0, 0, 0, 0, 0, 0, WORK(1), -1,
- $ CHILDINFO )
+ $ THETA, DUM, U2, LDU2, U1, LDU1, DUM,
+ $ 1, V1T, LDV1T, DUM, DUM, DUM,
+ $ DUM, DUM, DUM, DUM,
+ $ DUM, WORK(1), -1, CHILDINFO )
LBBCSD = INT( WORK(1) )
END IF
LWORKMIN = MAX( IORBDB+LORBDB-1,
* Simultaneously diagonalize X11 and X21.
*
CALL DBBCSD( JOBU1, JOBU2, JOBV1T, 'N', 'N', M, P, Q, THETA,
- $ WORK(IPHI), U1, LDU1, U2, LDU2, V1T, LDV1T, 0, 1,
- $ WORK(IB11D), WORK(IB11E), WORK(IB12D),
- $ WORK(IB12E), WORK(IB21D), WORK(IB21E),
- $ WORK(IB22D), WORK(IB22E), WORK(IBBCSD), LBBCSD,
- $ CHILDINFO )
+ $ WORK(IPHI), U1, LDU1, U2, LDU2, V1T, LDV1T,
+ $ DUM, 1, WORK(IB11D), WORK(IB11E),
+ $ WORK(IB12D), WORK(IB12E), WORK(IB21D),
+ $ WORK(IB21E), WORK(IB22D), WORK(IB22E),
+ $ WORK(IBBCSD), LBBCSD, CHILDINFO )
*
* Permute rows and columns to place zero submatrices in
* preferred positions
* Simultaneously diagonalize X11 and X21.
*
CALL DBBCSD( JOBV1T, 'N', JOBU1, JOBU2, 'T', M, Q, P, THETA,
- $ WORK(IPHI), V1T, LDV1T, 0, 1, U1, LDU1, U2, LDU2,
- $ WORK(IB11D), WORK(IB11E), WORK(IB12D),
+ $ WORK(IPHI), V1T, LDV1T, DUM, 1, U1, LDU1, U2,
+ $ LDU2, WORK(IB11D), WORK(IB11E), WORK(IB12D),
$ WORK(IB12E), WORK(IB21D), WORK(IB21E),
$ WORK(IB22D), WORK(IB22E), WORK(IBBCSD), LBBCSD,
$ CHILDINFO )
* Simultaneously diagonalize X11 and X21.
*
CALL DBBCSD( 'N', JOBV1T, JOBU2, JOBU1, 'T', M, M-Q, M-P,
- $ THETA, WORK(IPHI), 0, 1, V1T, LDV1T, U2, LDU2, U1,
- $ LDU1, WORK(IB11D), WORK(IB11E), WORK(IB12D),
- $ WORK(IB12E), WORK(IB21D), WORK(IB21E),
- $ WORK(IB22D), WORK(IB22E), WORK(IBBCSD), LBBCSD,
- $ CHILDINFO )
+ $ THETA, WORK(IPHI), DUM, 1, V1T, LDV1T, U2,
+ $ LDU2, U1, LDU1, WORK(IB11D), WORK(IB11E),
+ $ WORK(IB12D), WORK(IB12E), WORK(IB21D),
+ $ WORK(IB21E), WORK(IB22D), WORK(IB22E),
+ $ WORK(IBBCSD), LBBCSD, CHILDINFO )
*
* Permute rows and columns to place identity submatrices in
* preferred positions
* Simultaneously diagonalize X11 and X21.
*
CALL DBBCSD( JOBU2, JOBU1, 'N', JOBV1T, 'N', M, M-P, M-Q,
- $ THETA, WORK(IPHI), U2, LDU2, U1, LDU1, 0, 1, V1T,
- $ LDV1T, WORK(IB11D), WORK(IB11E), WORK(IB12D),
- $ WORK(IB12E), WORK(IB21D), WORK(IB21E),
- $ WORK(IB22D), WORK(IB22E), WORK(IBBCSD), LBBCSD,
- $ CHILDINFO )
+ $ THETA, WORK(IPHI), U2, LDU2, U1, LDU1, DUM,
+ $ 1, V1T, LDV1T, WORK(IB11D), WORK(IB11E),
+ $ WORK(IB12D), WORK(IB12E), WORK(IB21D),
+ $ WORK(IB21E), WORK(IB22D), WORK(IB22E),
+ $ WORK(IBBCSD), LBBCSD, CHILDINFO )
*
* Permute rows and columns to place identity submatrices in
* preferred positions
$ LWORKMIN, LWORKOPT, R
LOGICAL LQUERY, WANTU1, WANTU2, WANTV1T
* ..
+* .. Local Arrays ..
+ REAL DUM( 1 )
+* ..
* .. External Subroutines ..
EXTERNAL SBBCSD, SCOPY, SLACPY, SLAPMR, SLAPMT, SORBDB1,
$ SORBDB2, SORBDB3, SORBDB4, SORGLQ, SORGQR,
LORGLQMIN = 1
LORGLQOPT = 1
IF( R .EQ. Q ) THEN
- CALL SORBDB1( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, WORK, -1, CHILDINFO )
+ CALL SORBDB1( M, P, Q, X11, LDX11, X21, LDX21, THETA,
+ $ DUM, DUM, DUM, DUM, WORK, -1,
+ $ CHILDINFO )
LORBDB = INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL SORGQR( P, P, Q, U1, LDU1, 0, WORK(1), -1,
+ CALL SORGQR( P, P, Q, U1, LDU1, DUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
ENDIF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL SORGQR( M-P, M-P, Q, U2, LDU2, 0, WORK(1), -1,
+ CALL SORGQR( M-P, M-P, Q, U2, LDU2, DUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
CALL SORGLQ( Q-1, Q-1, Q-1, V1T, LDV1T,
- $ 0, WORK(1), -1, CHILDINFO )
+ $ DUM, WORK(1), -1, CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q-1 )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL SBBCSD( JOBU1, JOBU2, JOBV1T, 'N', 'N', M, P, Q, THETA,
- $ 0, U1, LDU1, U2, LDU2, V1T, LDV1T, 0, 1, 0, 0,
- $ 0, 0, 0, 0, 0, 0, WORK(1), -1, CHILDINFO )
+ $ DUM, U1, LDU1, U2, LDU2, V1T, LDV1T, DUM,
+ $ 1, DUM, DUM, DUM, DUM, DUM,
+ $ DUM, DUM, DUM, WORK(1), -1, CHILDINFO
+ $ )
LBBCSD = INT( WORK(1) )
ELSE IF( R .EQ. P ) THEN
- CALL SORBDB2( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, WORK(1), -1, CHILDINFO )
+ CALL SORBDB2( M, P, Q, X11, LDX11, X21, LDX21, THETA,
+ $ DUM, DUM, DUM, DUM, WORK(1), -1,
+ $ CHILDINFO )
LORBDB = INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL SORGQR( P-1, P-1, P-1, U1(2,2), LDU1, 0, WORK(1),
- $ -1, CHILDINFO )
+ CALL SORGQR( P-1, P-1, P-1, U1(2,2), LDU1, DUM,
+ $ WORK(1), -1, CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P-1 )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL SORGQR( M-P, M-P, Q, U2, LDU2, 0, WORK(1), -1,
+ CALL SORGQR( M-P, M-P, Q, U2, LDU2, DUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
- CALL SORGLQ( Q, Q, R, V1T, LDV1T, 0, WORK(1), -1,
+ CALL SORGLQ( Q, Q, R, V1T, LDV1T, DUM, WORK(1), -1,
$ CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL SBBCSD( JOBV1T, 'N', JOBU1, JOBU2, 'T', M, Q, P, THETA,
- $ 0, V1T, LDV1T, 0, 1, U1, LDU1, U2, LDU2, 0, 0,
- $ 0, 0, 0, 0, 0, 0, WORK(1), -1, CHILDINFO )
+ $ DUM, V1T, LDV1T, DUM, 1, U1, LDU1, U2,
+ $ LDU2, DUM, DUM, DUM, DUM, DUM,
+ $ DUM, DUM, DUM, WORK(1), -1, CHILDINFO
+ $ )
LBBCSD = INT( WORK(1) )
ELSE IF( R .EQ. M-P ) THEN
- CALL SORBDB3( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, WORK(1), -1, CHILDINFO )
+ CALL SORBDB3( M, P, Q, X11, LDX11, X21, LDX21, THETA,
+ $ DUM, DUM, DUM, DUM, WORK(1), -1,
+ $ CHILDINFO )
LORBDB = INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL SORGQR( P, P, Q, U1, LDU1, 0, WORK(1), -1,
+ CALL SORGQR( P, P, Q, U1, LDU1, DUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL SORGQR( M-P-1, M-P-1, M-P-1, U2(2,2), LDU2, 0,
+ CALL SORGQR( M-P-1, M-P-1, M-P-1, U2(2,2), LDU2, DUM,
$ WORK(1), -1, CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P-1 )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
- CALL SORGLQ( Q, Q, R, V1T, LDV1T, 0, WORK(1), -1,
+ CALL SORGLQ( Q, Q, R, V1T, LDV1T, DUM, WORK(1), -1,
$ CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL SBBCSD( 'N', JOBV1T, JOBU2, JOBU1, 'T', M, M-Q, M-P,
- $ THETA, 0, 0, 1, V1T, LDV1T, U2, LDU2, U1, LDU1,
- $ 0, 0, 0, 0, 0, 0, 0, 0, WORK(1), -1,
+ $ THETA, DUM, DUM, 1, V1T, LDV1T, U2, LDU2,
+ $ U1, LDU1, DUM, DUM, DUM, DUM,
+ $ DUM, DUM, DUM, DUM, WORK(1), -1,
$ CHILDINFO )
LBBCSD = INT( WORK(1) )
ELSE
- CALL SORBDB4( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, 0, WORK(1), -1, CHILDINFO )
+ CALL SORBDB4( M, P, Q, X11, LDX11, X21, LDX21, THETA,
+ $ DUM, DUM, DUM, DUM, DUM,
+ $ WORK(1), -1, CHILDINFO )
LORBDB = M + INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL SORGQR( P, P, M-Q, U1, LDU1, 0, WORK(1), -1,
+ CALL SORGQR( P, P, M-Q, U1, LDU1, DUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL SORGQR( M-P, M-P, M-Q, U2, LDU2, 0, WORK(1), -1,
- $ CHILDINFO )
+ CALL SORGQR( M-P, M-P, M-Q, U2, LDU2, DUM, WORK(1),
+ $ -1, CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
- CALL SORGLQ( Q, Q, Q, V1T, LDV1T, 0, WORK(1), -1,
+ CALL SORGLQ( Q, Q, Q, V1T, LDV1T, DUM, WORK(1), -1,
$ CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL SBBCSD( JOBU2, JOBU1, 'N', JOBV1T, 'N', M, M-P, M-Q,
- $ THETA, 0, U2, LDU2, U1, LDU1, 0, 1, V1T, LDV1T,
- $ 0, 0, 0, 0, 0, 0, 0, 0, WORK(1), -1,
+ $ THETA, DUM, U2, LDU2, U1, LDU1, DUM, 1,
+ $ V1T, LDV1T, DUM, DUM, DUM, DUM,
+ $ DUM, DUM, DUM, DUM, WORK(1), -1,
$ CHILDINFO )
LBBCSD = INT( WORK(1) )
END IF
* Simultaneously diagonalize X11 and X21.
*
CALL SBBCSD( JOBU1, JOBU2, JOBV1T, 'N', 'N', M, P, Q, THETA,
- $ WORK(IPHI), U1, LDU1, U2, LDU2, V1T, LDV1T, 0, 1,
- $ WORK(IB11D), WORK(IB11E), WORK(IB12D),
+ $ WORK(IPHI), U1, LDU1, U2, LDU2, V1T, LDV1T,
+ $ DUM, 1, WORK(IB11D), WORK(IB11E), WORK(IB12D),
$ WORK(IB12E), WORK(IB21D), WORK(IB21E),
$ WORK(IB22D), WORK(IB22E), WORK(IBBCSD), LBBCSD,
$ CHILDINFO )
* Simultaneously diagonalize X11 and X21.
*
CALL SBBCSD( JOBV1T, 'N', JOBU1, JOBU2, 'T', M, Q, P, THETA,
- $ WORK(IPHI), V1T, LDV1T, 0, 1, U1, LDU1, U2, LDU2,
- $ WORK(IB11D), WORK(IB11E), WORK(IB12D),
+ $ WORK(IPHI), V1T, LDV1T, DUM, 1, U1, LDU1, U2,
+ $ LDU2, WORK(IB11D), WORK(IB11E), WORK(IB12D),
$ WORK(IB12E), WORK(IB21D), WORK(IB21E),
$ WORK(IB22D), WORK(IB22E), WORK(IBBCSD), LBBCSD,
$ CHILDINFO )
* Simultaneously diagonalize X11 and X21.
*
CALL SBBCSD( 'N', JOBV1T, JOBU2, JOBU1, 'T', M, M-Q, M-P,
- $ THETA, WORK(IPHI), 0, 1, V1T, LDV1T, U2, LDU2, U1,
- $ LDU1, WORK(IB11D), WORK(IB11E), WORK(IB12D),
- $ WORK(IB12E), WORK(IB21D), WORK(IB21E),
- $ WORK(IB22D), WORK(IB22E), WORK(IBBCSD), LBBCSD,
- $ CHILDINFO )
+ $ THETA, WORK(IPHI), DUM, 1, V1T, LDV1T, U2,
+ $ LDU2, U1, LDU1, WORK(IB11D), WORK(IB11E),
+ $ WORK(IB12D), WORK(IB12E), WORK(IB21D),
+ $ WORK(IB21E), WORK(IB22D), WORK(IB22E),
+ $ WORK(IBBCSD), LBBCSD, CHILDINFO )
*
* Permute rows and columns to place identity submatrices in
* preferred positions
* Simultaneously diagonalize X11 and X21.
*
CALL SBBCSD( JOBU2, JOBU1, 'N', JOBV1T, 'N', M, M-P, M-Q,
- $ THETA, WORK(IPHI), U2, LDU2, U1, LDU1, 0, 1, V1T,
- $ LDV1T, WORK(IB11D), WORK(IB11E), WORK(IB12D),
+ $ THETA, WORK(IPHI), U2, LDU2, U1, LDU1, DUM, 1,
+ $ V1T, LDV1T, WORK(IB11D), WORK(IB11E), WORK(IB12D),
$ WORK(IB12E), WORK(IB21D), WORK(IB21E),
$ WORK(IB22D), WORK(IB22E), WORK(IBBCSD), LBBCSD,
$ CHILDINFO )
* not including e, RU, and RVT matrices.
*
* Compute space preferred for each routine
- CALL ZGEBRD( M, N, CDUM(1), M, CDUM(1), DUM(1), CDUM(1),
+ CALL ZGEBRD( M, N, CDUM(1), M, DUM(1), DUM(1), CDUM(1),
$ CDUM(1), CDUM(1), -1, IERR )
LWORK_ZGEBRD_MN = INT( CDUM(1) )
*
- CALL ZGEBRD( N, N, CDUM(1), N, CDUM(1), DUM(1), CDUM(1),
+ CALL ZGEBRD( N, N, CDUM(1), N, DUM(1), DUM(1), CDUM(1),
$ CDUM(1), CDUM(1), -1, IERR )
LWORK_ZGEBRD_NN = INT( CDUM(1) )
*
* not including e, RU, and RVT matrices.
*
* Compute space preferred for each routine
- CALL ZGEBRD( M, N, CDUM(1), M, CDUM(1), DUM(1), CDUM(1),
+ CALL ZGEBRD( M, N, CDUM(1), M, DUM(1), DUM(1), CDUM(1),
$ CDUM(1), CDUM(1), -1, IERR )
LWORK_ZGEBRD_MN = INT( CDUM(1) )
*
- CALL ZGEBRD( M, M, CDUM(1), M, CDUM(1), DUM(1), CDUM(1),
+ CALL ZGEBRD( M, M, CDUM(1), M, DUM(1), DUM(1), CDUM(1),
$ CDUM(1), CDUM(1), -1, IERR )
LWORK_ZGEBRD_MM = INT( CDUM(1) )
*
$ LWORKMIN, LWORKOPT, R
LOGICAL LQUERY, WANTU1, WANTU2, WANTV1T
* ..
+* .. Local Arrays ..
+ DOUBLE PRECISION DUM( 1 )
+ COMPLEX*16 CDUM( 1 )
+* ..
* .. External Subroutines ..
EXTERNAL ZBBCSD, ZCOPY, ZLACPY, ZLAPMR, ZLAPMT, ZUNBDB1,
$ ZUNBDB2, ZUNBDB3, ZUNBDB4, ZUNGLQ, ZUNGQR,
LORGLQMIN = 1
LORGLQOPT = 1
IF( R .EQ. Q ) THEN
- CALL ZUNBDB1( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, WORK, -1, CHILDINFO )
+ CALL ZUNBDB1( M, P, Q, X11, LDX11, X21, LDX21, THETA, DUM,
+ $ CDUM, CDUM, CDUM, WORK, -1, CHILDINFO )
LORBDB = INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL ZUNGQR( P, P, Q, U1, LDU1, 0, WORK(1), -1,
+ CALL ZUNGQR( P, P, Q, U1, LDU1, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
ENDIF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL ZUNGQR( M-P, M-P, Q, U2, LDU2, 0, WORK(1), -1,
+ CALL ZUNGQR( M-P, M-P, Q, U2, LDU2, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
CALL ZUNGLQ( Q-1, Q-1, Q-1, V1T, LDV1T,
- $ 0, WORK(1), -1, CHILDINFO )
+ $ CDUM, WORK(1), -1, CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q-1 )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL ZBBCSD( JOBU1, JOBU2, JOBV1T, 'N', 'N', M, P, Q, THETA,
- $ 0, U1, LDU1, U2, LDU2, V1T, LDV1T, 0, 1, 0, 0,
- $ 0, 0, 0, 0, 0, 0, RWORK(1), -1, CHILDINFO )
+ $ DUM, U1, LDU1, U2, LDU2, V1T, LDV1T, CDUM, 1,
+ $ DUM, DUM, DUM, DUM, DUM, DUM, DUM, DUM,
+ $ RWORK(1), -1, CHILDINFO )
LBBCSD = INT( RWORK(1) )
ELSE IF( R .EQ. P ) THEN
- CALL ZUNBDB2( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, WORK(1), -1, CHILDINFO )
+ CALL ZUNBDB2( M, P, Q, X11, LDX11, X21, LDX21, THETA, DUM,
+ $ CDUM, CDUM, CDUM, WORK(1), -1, CHILDINFO )
LORBDB = INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL ZUNGQR( P-1, P-1, P-1, U1(2,2), LDU1, 0, WORK(1),
+ CALL ZUNGQR( P-1, P-1, P-1, U1(2,2), LDU1, CDUM, WORK(1),
$ -1, CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P-1 )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL ZUNGQR( M-P, M-P, Q, U2, LDU2, 0, WORK(1), -1,
+ CALL ZUNGQR( M-P, M-P, Q, U2, LDU2, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
- CALL ZUNGLQ( Q, Q, R, V1T, LDV1T, 0, WORK(1), -1,
+ CALL ZUNGLQ( Q, Q, R, V1T, LDV1T, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL ZBBCSD( JOBV1T, 'N', JOBU1, JOBU2, 'T', M, Q, P, THETA,
- $ 0, V1T, LDV1T, 0, 1, U1, LDU1, U2, LDU2, 0, 0,
- $ 0, 0, 0, 0, 0, 0, RWORK(1), -1, CHILDINFO )
+ $ DUM, V1T, LDV1T, CDUM, 1, U1, LDU1, U2, LDU2,
+ $ DUM, DUM, DUM, DUM, DUM, DUM, DUM, DUM,
+ $ RWORK(1), -1, CHILDINFO )
LBBCSD = INT( RWORK(1) )
ELSE IF( R .EQ. M-P ) THEN
- CALL ZUNBDB3( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, WORK(1), -1, CHILDINFO )
+ CALL ZUNBDB3( M, P, Q, X11, LDX11, X21, LDX21, THETA, DUM,
+ $ CDUM, CDUM, CDUM, WORK(1), -1, CHILDINFO )
LORBDB = INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL ZUNGQR( P, P, Q, U1, LDU1, 0, WORK(1), -1,
+ CALL ZUNGQR( P, P, Q, U1, LDU1, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL ZUNGQR( M-P-1, M-P-1, M-P-1, U2(2,2), LDU2, 0,
+ CALL ZUNGQR( M-P-1, M-P-1, M-P-1, U2(2,2), LDU2, CDUM,
$ WORK(1), -1, CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P-1 )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
- CALL ZUNGLQ( Q, Q, R, V1T, LDV1T, 0, WORK(1), -1,
+ CALL ZUNGLQ( Q, Q, R, V1T, LDV1T, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL ZBBCSD( 'N', JOBV1T, JOBU2, JOBU1, 'T', M, M-Q, M-P,
- $ THETA, 0, 0, 1, V1T, LDV1T, U2, LDU2, U1, LDU1,
- $ 0, 0, 0, 0, 0, 0, 0, 0, RWORK(1), -1,
- $ CHILDINFO )
+ $ THETA, DUM, CDUM, 1, V1T, LDV1T, U2, LDU2, U1,
+ $ LDU1, DUM, DUM, DUM, DUM, DUM, DUM, DUM, DUM,
+ $ RWORK(1), -1, CHILDINFO )
LBBCSD = INT( RWORK(1) )
ELSE
- CALL ZUNBDB4( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
- $ 0, 0, 0, WORK(1), -1, CHILDINFO )
+ CALL ZUNBDB4( M, P, Q, X11, LDX11, X21, LDX21, THETA, DUM,
+ $ CDUM, CDUM, CDUM, CDUM, WORK(1), -1, CHILDINFO
+ $ )
LORBDB = M + INT( WORK(1) )
IF( WANTU1 .AND. P .GT. 0 ) THEN
- CALL ZUNGQR( P, P, M-Q, U1, LDU1, 0, WORK(1), -1,
+ CALL ZUNGQR( P, P, M-Q, U1, LDU1, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
- CALL ZUNGQR( M-P, M-P, M-Q, U2, LDU2, 0, WORK(1), -1,
+ CALL ZUNGQR( M-P, M-P, M-Q, U2, LDU2, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGQRMIN = MAX( LORGQRMIN, M-P )
LORGQROPT = MAX( LORGQROPT, INT( WORK(1) ) )
END IF
IF( WANTV1T .AND. Q .GT. 0 ) THEN
- CALL ZUNGLQ( Q, Q, Q, V1T, LDV1T, 0, WORK(1), -1,
+ CALL ZUNGLQ( Q, Q, Q, V1T, LDV1T, CDUM, WORK(1), -1,
$ CHILDINFO )
LORGLQMIN = MAX( LORGLQMIN, Q )
LORGLQOPT = MAX( LORGLQOPT, INT( WORK(1) ) )
END IF
CALL ZBBCSD( JOBU2, JOBU1, 'N', JOBV1T, 'N', M, M-P, M-Q,
- $ THETA, 0, U2, LDU2, U1, LDU1, 0, 1, V1T, LDV1T,
- $ 0, 0, 0, 0, 0, 0, 0, 0, RWORK(1), -1,
- $ CHILDINFO )
+ $ THETA, DUM, U2, LDU2, U1, LDU1, CDUM, 1, V1T,
+ $ LDV1T, DUM, DUM, DUM, DUM, DUM, DUM, DUM, DUM,
+ $ RWORK(1), -1, CHILDINFO )
LBBCSD = INT( RWORK(1) )
END IF
LRWORKMIN = IBBCSD+LBBCSD-1
* Simultaneously diagonalize X11 and X21.
*
CALL ZBBCSD( JOBU1, JOBU2, JOBV1T, 'N', 'N', M, P, Q, THETA,
- $ RWORK(IPHI), U1, LDU1, U2, LDU2, V1T, LDV1T, 0, 1,
- $ RWORK(IB11D), RWORK(IB11E), RWORK(IB12D),
+ $ RWORK(IPHI), U1, LDU1, U2, LDU2, V1T, LDV1T, CDUM,
+ $ 1, RWORK(IB11D), RWORK(IB11E), RWORK(IB12D),
$ RWORK(IB12E), RWORK(IB21D), RWORK(IB21E),
$ RWORK(IB22D), RWORK(IB22E), RWORK(IBBCSD), LBBCSD,
$ CHILDINFO )
* Simultaneously diagonalize X11 and X21.
*
CALL ZBBCSD( JOBV1T, 'N', JOBU1, JOBU2, 'T', M, Q, P, THETA,
- $ RWORK(IPHI), V1T, LDV1T, 0, 1, U1, LDU1, U2, LDU2,
- $ RWORK(IB11D), RWORK(IB11E), RWORK(IB12D),
+ $ RWORK(IPHI), V1T, LDV1T, CDUM, 1, U1, LDU1, U2,
+ $ LDU2, RWORK(IB11D), RWORK(IB11E), RWORK(IB12D),
$ RWORK(IB12E), RWORK(IB21D), RWORK(IB21E),
$ RWORK(IB22D), RWORK(IB22E), RWORK(IBBCSD), LBBCSD,
$ CHILDINFO )
* Simultaneously diagonalize X11 and X21.
*
CALL ZBBCSD( 'N', JOBV1T, JOBU2, JOBU1, 'T', M, M-Q, M-P,
- $ THETA, RWORK(IPHI), 0, 1, V1T, LDV1T, U2, LDU2,
+ $ THETA, RWORK(IPHI), CDUM, 1, V1T, LDV1T, U2, LDU2,
$ U1, LDU1, RWORK(IB11D), RWORK(IB11E),
$ RWORK(IB12D), RWORK(IB12E), RWORK(IB21D),
$ RWORK(IB21E), RWORK(IB22D), RWORK(IB22E),
* Simultaneously diagonalize X11 and X21.
*
CALL ZBBCSD( JOBU2, JOBU1, 'N', JOBV1T, 'N', M, M-P, M-Q,
- $ THETA, RWORK(IPHI), U2, LDU2, U1, LDU1, 0, 1, V1T,
- $ LDV1T, RWORK(IB11D), RWORK(IB11E), RWORK(IB12D),
- $ RWORK(IB12E), RWORK(IB21D), RWORK(IB21E),
- $ RWORK(IB22D), RWORK(IB22E), RWORK(IBBCSD), LBBCSD,
- $ CHILDINFO )
+ $ THETA, RWORK(IPHI), U2, LDU2, U1, LDU1, CDUM, 1,
+ $ V1T, LDV1T, RWORK(IB11D), RWORK(IB11E),
+ $ RWORK(IB12D), RWORK(IB12E), RWORK(IB21D),
+ $ RWORK(IB21E), RWORK(IB22D), RWORK(IB22E),
+ $ RWORK(IBBCSD), LBBCSD, CHILDINFO )
*
* Permute rows and columns to place identity submatrices in
* preferred positions