Fix Compile error with ifort -warn all - Contributed by Orion Poplawski
authorJulie <julie@cs.utk.edu>
Mon, 13 Jun 2016 06:27:02 +0000 (23:27 -0700)
committerJulie <julie@cs.utk.edu>
Mon, 13 Jun 2016 06:27:02 +0000 (23:27 -0700)
Compiling current lapack svn trunk with ifort -warn all results in
errors like:

ifort -O3 -fp-model strict -warn all -c sorcsd2by1.f -o sorcsd2by1.o
sorcsd2by1.f(350): error #6633: The type of the actual argument differs
from
the type of the dummy argument.   [0]
           CALL SORBDB1( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
------------------------------------------------------------------^
sorcsd2by1.f(350): error #6633: The type of the actual argument differs
from
the type of the dummy argument.   [0]
           CALL SORBDB1( M, P, Q, X11, LDX11, X21, LDX21, THETA, 0, 0,
---------------------------------------------------------------------^
sorcsd2by1.f(351): error #6633: The type of the actual argument differs
from
the type of the dummy argument.   [0]
    $                    0, 0, WORK, -1, CHILDINFO )
--------------------------^
sorcsd2by1.f(351): error #6633: The type of the actual argument differs
from
the type of the dummy argument.   [0]
    $                    0, 0, WORK, -1, CHILDINFO )
-----------------------------^

ifort -O3 -fp-model strict -warn all -c cgesdd.f -o cgesdd.o
cgesdd.f(343): error #6633: The type of the actual argument differs
from the
type of the dummy argument.   [CDUM]
           CALL CGEBRD( M, N, CDUM(1), M, CDUM(1), DUM(1), CDUM(1),
-------------------------------------------^

SRC/cgesdd.f
SRC/cuncsd2by1.f
SRC/dorcsd2by1.f
SRC/sorcsd2by1.f
SRC/zgesdd.f
SRC/zuncsd2by1.f

index 370acd94c9292e43919c488c0dd60e1b11a4761a..323f606a9db3db2719e9e424cf8e8df51ab8cd3e 100644 (file)
 *           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) )
 *
index f431b337d3f39135f5764bc5bb3f6c696bde8ac7..96af777ff313b3881155bcc43911d779893e919c 100644 (file)
      $                   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
index 33a9b16dc8ccbbcb8c742b259903c97661c47195..809997d0edd0d35b2bbb1a3255a7dc5775fcfb74 100644 (file)
      $                   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
index 1bc71cdaee9bdc5464cf36dc259374911cd31b39..71b547d73912462c997fda55b88cd8b2911e6c1e 100644 (file)
      $                   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 )
index 5e086a2ab10d6bbbbad0ea0669690789ae5f071b..0acbcba77b62cec598223b7d280c330093f6a1d1 100644 (file)
 *           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) )
 *
index dc0be07aae22e9b32a43d338acbe39f2c7ea4172..8c0a2c07e907dd3c454603d2bd53a5428ca6aa68 100644 (file)
      $                   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