Diff for /rpl/lapack/lapack/dgelss.f between versions 1.16 and 1.18

version 1.16, 2017/06/17 11:06:16 version 1.18, 2023/08/07 08:38:48
Line 164 Line 164
 *> \author Univ. of Colorado Denver  *> \author Univ. of Colorado Denver
 *> \author NAG Ltd.  *> \author NAG Ltd.
 *  *
 *> \date December 2016  
 *  
 *> \ingroup doubleGEsolve  *> \ingroup doubleGEsolve
 *  *
 *  =====================================================================  *  =====================================================================
       SUBROUTINE DGELSS( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK,        SUBROUTINE DGELSS( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK,
      $                   WORK, LWORK, INFO )       $                   WORK, LWORK, INFO )
 *  *
 *  -- LAPACK driver routine (version 3.7.0) --  *  -- LAPACK driver 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..--
 *     December 2016  
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       INTEGER            INFO, LDA, LDB, LWORK, M, N, NRHS, RANK        INTEGER            INFO, LDA, LDB, LWORK, M, N, NRHS, RANK
Line 257 Line 254
 *  *
 *              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 )
Line 276 Line 273
 *              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 )
Line 308 Line 305
 *                 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 )
Line 344 Line 341
 *                 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 )

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


CVSweb interface <joel.bertrand@systella.fr>