Diff for /rpl/lapack/lapack/dorcsd.f between versions 1.6 and 1.16

version 1.6, 2012/07/31 11:06:36 version 1.16, 2023/08/07 08:39:01
Line 2 Line 2
 *  *
 *  =========== DOCUMENTATION ===========  *  =========== DOCUMENTATION ===========
 *  *
 * Online html documentation available at   * Online html documentation available at
 *            http://www.netlib.org/lapack/explore-html/   *            http://www.netlib.org/lapack/explore-html/
 *  *
 *> \htmlonly  *> \htmlonly
 *> Download DORCSD + dependencies   *> Download DORCSD + dependencies
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorcsd.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorcsd.f">
 *> [TGZ]</a>   *> [TGZ]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorcsd.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorcsd.f">
 *> [ZIP]</a>   *> [ZIP]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorcsd.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorcsd.f">
 *> [TXT]</a>  *> [TXT]</a>
 *> \endhtmlonly   *> \endhtmlonly
 *  *
 *  Definition:  *  Definition:
 *  ===========  *  ===========
Line 23 Line 23
 *                                    LDX12, X21, LDX21, X22, LDX22, THETA,  *                                    LDX12, X21, LDX21, X22, LDX22, THETA,
 *                                    U1, LDU1, U2, LDU2, V1T, LDV1T, V2T,  *                                    U1, LDU1, U2, LDU2, V1T, LDV1T, V2T,
 *                                    LDV2T, WORK, LWORK, IWORK, INFO )  *                                    LDV2T, WORK, LWORK, IWORK, INFO )
 *   *
 *       .. Scalar Arguments ..  *       .. Scalar Arguments ..
 *       CHARACTER          JOBU1, JOBU2, JOBV1T, JOBV2T, SIGNS, TRANS  *       CHARACTER          JOBU1, JOBU2, JOBV1T, JOBV2T, SIGNS, TRANS
 *       INTEGER            INFO, LDU1, LDU2, LDV1T, LDV2T, LDX11, LDX12,  *       INTEGER            INFO, LDU1, LDU2, LDV1T, LDV2T, LDX11, LDX12,
Line 37 Line 37
 *      $                   X12( LDX12, * ), X21( LDX21, * ), X22( LDX22,  *      $                   X12( LDX12, * ), X21( LDX21, * ), X22( LDX22,
 *      $                   * )  *      $                   * )
 *       ..  *       ..
 *    *
 *  *
 *> \par Purpose:  *> \par Purpose:
 *  =============  *  =============
Line 186 Line 186
 *>  *>
 *> \param[out] U1  *> \param[out] U1
 *> \verbatim  *> \verbatim
 *>          U1 is DOUBLE PRECISION array, dimension (P)  *>          U1 is DOUBLE PRECISION array, dimension (LDU1,P)
 *>          If JOBU1 = 'Y', U1 contains the P-by-P orthogonal matrix U1.  *>          If JOBU1 = 'Y', U1 contains the P-by-P orthogonal matrix U1.
 *> \endverbatim  *> \endverbatim
 *>  *>
Line 199 Line 199
 *>  *>
 *> \param[out] U2  *> \param[out] U2
 *> \verbatim  *> \verbatim
 *>          U2 is DOUBLE PRECISION array, dimension (M-P)  *>          U2 is DOUBLE PRECISION array, dimension (LDU2,M-P)
 *>          If JOBU2 = 'Y', U2 contains the (M-P)-by-(M-P) orthogonal  *>          If JOBU2 = 'Y', U2 contains the (M-P)-by-(M-P) orthogonal
 *>          matrix U2.  *>          matrix U2.
 *> \endverbatim  *> \endverbatim
Line 213 Line 213
 *>  *>
 *> \param[out] V1T  *> \param[out] V1T
 *> \verbatim  *> \verbatim
 *>          V1T is DOUBLE PRECISION array, dimension (Q)  *>          V1T is DOUBLE PRECISION array, dimension (LDV1T,Q)
 *>          If JOBV1T = 'Y', V1T contains the Q-by-Q matrix orthogonal  *>          If JOBV1T = 'Y', V1T contains the Q-by-Q matrix orthogonal
 *>          matrix V1**T.  *>          matrix V1**T.
 *> \endverbatim  *> \endverbatim
Line 227 Line 227
 *>  *>
 *> \param[out] V2T  *> \param[out] V2T
 *> \verbatim  *> \verbatim
 *>          V2T is DOUBLE PRECISION array, dimension (M-Q)  *>          V2T is DOUBLE PRECISION array, dimension (LDV2T,M-Q)
 *>          If JOBV2T = 'Y', V2T contains the (M-Q)-by-(M-Q) orthogonal  *>          If JOBV2T = 'Y', V2T contains the (M-Q)-by-(M-Q) orthogonal
 *>          matrix V2**T.  *>          matrix V2**T.
 *> \endverbatim  *> \endverbatim
Line 284 Line 284
 *  Authors:  *  Authors:
 *  ========  *  ========
 *  *
 *> \author Univ. of Tennessee   *> \author Univ. of Tennessee
 *> \author Univ. of California Berkeley   *> \author Univ. of California Berkeley
 *> \author Univ. of Colorado Denver   *> \author Univ. of Colorado Denver
 *> \author NAG Ltd.   *> \author NAG Ltd.
 *  
 *> \date November 2011  
 *  *
 *> \ingroup doubleOTHERcomputational  *> \ingroup doubleOTHERcomputational
 *  *
Line 300 Line 298
      $                             U1, LDU1, U2, LDU2, V1T, LDV1T, V2T,       $                             U1, LDU1, U2, LDU2, V1T, LDV1T, V2T,
      $                             LDV2T, WORK, LWORK, IWORK, INFO )       $                             LDV2T, WORK, LWORK, IWORK, INFO )
 *  *
 *  -- LAPACK computational routine (version 3.4.0) --  *  -- LAPACK computational routine --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --  *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--  *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
 *     November 2011  
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       CHARACTER          JOBU1, JOBU2, JOBV1T, JOBV2T, SIGNS, TRANS        CHARACTER          JOBU1, JOBU2, JOBV1T, JOBV2T, SIGNS, TRANS
Line 340 Line 337
      $                   WANTV1T, WANTV2T       $                   WANTV1T, WANTV2T
 *     ..  *     ..
 *     .. External Subroutines ..  *     .. External Subroutines ..
       EXTERNAL           DBBCSD, DLACPY, DLAPMR, DLAPMT, DLASCL, DLASET,        EXTERNAL           DBBCSD, DLACPY, DLAPMR, DLAPMT,
      $                   DORBDB, DORGLQ, DORGQR, XERBLA       $                   DORBDB, DORGLQ, DORGQR, XERBLA
 *     ..  *     ..
 *     .. External Functions ..  *     .. External Functions ..
Line 368 Line 365
          INFO = -8           INFO = -8
       ELSE IF( Q .LT. 0 .OR. Q .GT. M ) THEN        ELSE IF( Q .LT. 0 .OR. Q .GT. M ) THEN
          INFO = -9           INFO = -9
       ELSE IF( ( COLMAJOR .AND. LDX11 .LT. MAX(1,P) ) .OR.        ELSE IF ( COLMAJOR .AND.  LDX11 .LT. MAX( 1, P ) ) THEN
      $         ( .NOT.COLMAJOR .AND. LDX11 .LT. MAX(1,Q) ) ) THEN          INFO = -11
          INFO = -11        ELSE IF (.NOT. COLMAJOR .AND. LDX11 .LT. MAX( 1, Q ) ) THEN
           INFO = -11
         ELSE IF (COLMAJOR .AND. LDX12 .LT. MAX( 1, P ) ) THEN
           INFO = -13
         ELSE IF (.NOT. COLMAJOR .AND. LDX12 .LT. MAX( 1, M-Q ) ) THEN
           INFO = -13
         ELSE IF (COLMAJOR .AND. LDX21 .LT. MAX( 1, M-P ) ) THEN
           INFO = -15
         ELSE IF (.NOT. COLMAJOR .AND. LDX21 .LT. MAX( 1, Q ) ) THEN
           INFO = -15
         ELSE IF (COLMAJOR .AND. LDX22 .LT. MAX( 1, M-P ) ) THEN
           INFO = -17
         ELSE IF (.NOT. COLMAJOR .AND. LDX22 .LT. MAX( 1, M-Q ) ) THEN
           INFO = -17
       ELSE IF( WANTU1 .AND. LDU1 .LT. P ) THEN        ELSE IF( WANTU1 .AND. LDU1 .LT. P ) THEN
          INFO = -20           INFO = -20
       ELSE IF( WANTU2 .AND. LDU2 .LT. M-P ) THEN        ELSE IF( WANTU2 .AND. LDU2 .LT. M-P ) THEN
Line 427 Line 437
          ITAUQ1 = ITAUP2 + MAX( 1, M - P )           ITAUQ1 = ITAUP2 + MAX( 1, M - P )
          ITAUQ2 = ITAUQ1 + MAX( 1, Q )           ITAUQ2 = ITAUQ1 + MAX( 1, Q )
          IORGQR = ITAUQ2 + MAX( 1, M - Q )           IORGQR = ITAUQ2 + MAX( 1, M - Q )
          CALL DORGQR( M-Q, M-Q, M-Q, 0, MAX(1,M-Q), 0, WORK, -1,           CALL DORGQR( M-Q, M-Q, M-Q, U1, MAX(1,M-Q), U1, WORK, -1,
      $                CHILDINFO )       $                CHILDINFO )
          LORGQRWORKOPT = INT( WORK(1) )           LORGQRWORKOPT = INT( WORK(1) )
          LORGQRWORKMIN = MAX( 1, M - Q )           LORGQRWORKMIN = MAX( 1, M - Q )
          IORGLQ = ITAUQ2 + MAX( 1, M - Q )           IORGLQ = ITAUQ2 + MAX( 1, M - Q )
          CALL DORGLQ( M-Q, M-Q, M-Q, 0, MAX(1,M-Q), 0, WORK, -1,           CALL DORGLQ( M-Q, M-Q, M-Q, U1, MAX(1,M-Q), U1, WORK, -1,
      $                CHILDINFO )       $                CHILDINFO )
          LORGLQWORKOPT = INT( WORK(1) )           LORGLQWORKOPT = INT( WORK(1) )
          LORGLQWORKMIN = MAX( 1, M - Q )           LORGLQWORKMIN = MAX( 1, M - Q )
          IORBDB = ITAUQ2 + MAX( 1, M - Q )           IORBDB = ITAUQ2 + MAX( 1, M - Q )
          CALL DORBDB( TRANS, SIGNS, M, P, Q, X11, LDX11, X12, LDX12,           CALL DORBDB( TRANS, SIGNS, M, P, Q, X11, LDX11, X12, LDX12,
      $                X21, LDX21, X22, LDX22, 0, 0, 0, 0, 0, 0, WORK,       $                X21, LDX21, X22, LDX22, THETA, V1T, U1, U2, V1T,
      $                -1, CHILDINFO )       $                V2T, WORK, -1, CHILDINFO )
          LORBDBWORKOPT = INT( WORK(1) )           LORBDBWORKOPT = INT( WORK(1) )
          LORBDBWORKMIN = LORBDBWORKOPT           LORBDBWORKMIN = LORBDBWORKOPT
          IB11D = ITAUQ2 + MAX( 1, M - Q )           IB11D = ITAUQ2 + MAX( 1, M - Q )
Line 451 Line 461
          IB22D = IB21E + MAX( 1, Q - 1 )           IB22D = IB21E + MAX( 1, Q - 1 )
          IB22E = IB22D + MAX( 1, Q )           IB22E = IB22D + MAX( 1, Q )
          IBBCSD = IB22E + MAX( 1, Q - 1 )           IBBCSD = IB22E + MAX( 1, Q - 1 )
          CALL DBBCSD( JOBU1, JOBU2, JOBV1T, JOBV2T, TRANS, M, P, Q, 0,           CALL DBBCSD( JOBU1, JOBU2, JOBV1T, JOBV2T, TRANS, M, P, Q,
      $                0, U1, LDU1, U2, LDU2, V1T, LDV1T, V2T, LDV2T, 0,       $                THETA, THETA, U1, LDU1, U2, LDU2, V1T, LDV1T, V2T,
      $                0, 0, 0, 0, 0, 0, 0, WORK, -1, CHILDINFO )       $                LDV2T, U1, U1, U1, U1, U1, U1, U1, U1, WORK, -1,
        $                CHILDINFO )
          LBBCSDWORKOPT = INT( WORK(1) )           LBBCSDWORKOPT = INT( WORK(1) )
          LBBCSDWORKMIN = LBBCSDWORKOPT           LBBCSDWORKMIN = LBBCSDWORKOPT
          LWORKOPT = MAX( IORGQR + LORGQRWORKOPT, IORGLQ + LORGLQWORKOPT,           LWORKOPT = MAX( IORGQR + LORGQRWORKOPT, IORGLQ + LORGLQWORKOPT,
Line 514 Line 525
          END IF           END IF
          IF( WANTV2T .AND. M-Q .GT. 0 ) THEN           IF( WANTV2T .AND. M-Q .GT. 0 ) THEN
             CALL DLACPY( 'U', P, M-Q, X12, LDX12, V2T, LDV2T )              CALL DLACPY( 'U', P, M-Q, X12, LDX12, V2T, LDV2T )
             CALL DLACPY( 'U', M-P-Q, M-P-Q, X22(Q+1,P+1), LDX22,              IF (M-P .GT. Q) Then
      $                   V2T(P+1,P+1), LDV2T )                 CALL DLACPY( 'U', M-P-Q, M-P-Q, X22(Q+1,P+1), LDX22,
             CALL DORGLQ( M-Q, M-Q, M-Q, V2T, LDV2T, WORK(ITAUQ2),       $                      V2T(P+1,P+1), LDV2T )
      $                   WORK(IORGLQ), LORGLQWORK, INFO )              END IF
               IF (M .GT. Q) THEN
                  CALL DORGLQ( M-Q, M-Q, M-Q, V2T, LDV2T, WORK(ITAUQ2),
        $                      WORK(IORGLQ), LORGLQWORK, INFO )
               END IF
          END IF           END IF
       ELSE        ELSE
          IF( WANTU1 .AND. P .GT. 0 ) THEN           IF( WANTU1 .AND. P .GT. 0 ) THEN
Line 561 Line 576
 *     Permute rows and columns to place identity submatrices in top-  *     Permute rows and columns to place identity submatrices in top-
 *     left corner of (1,1)-block and/or bottom-right corner of (1,2)-  *     left corner of (1,1)-block and/or bottom-right corner of (1,2)-
 *     block and/or bottom-right corner of (2,1)-block and/or top-left  *     block and/or bottom-right corner of (2,1)-block and/or top-left
 *     corner of (2,2)-block   *     corner of (2,2)-block
 *  *
       IF( Q .GT. 0 .AND. WANTU2 ) THEN        IF( Q .GT. 0 .AND. WANTU2 ) THEN
          DO I = 1, Q           DO I = 1, Q

Removed from v.1.6  
changed lines
  Added in v.1.16


CVSweb interface <joel.bertrand@systella.fr>