Diff for /rpl/lapack/lapack/dormrz.f between versions 1.13 and 1.14

version 1.13, 2014/01/27 09:28:25 version 1.14, 2015/11/26 11:44:19
Line 145 Line 145
 *>          The dimension of the array WORK.  *>          The dimension of the array WORK.
 *>          If SIDE = 'L', LWORK >= max(1,N);  *>          If SIDE = 'L', LWORK >= max(1,N);
 *>          if SIDE = 'R', LWORK >= max(1,M).  *>          if SIDE = 'R', LWORK >= max(1,M).
 *>          For optimum performance LWORK >= N*NB if SIDE = 'L', and  *>          For good performance, LWORK should generally be larger.
 *>          LWORK >= M*NB if SIDE = 'R', where NB is the optimal  
 *>          blocksize.  
 *>  *>
 *>          If LWORK = -1, then a workspace query is assumed; the routine  *>          If LWORK = -1, then a workspace query is assumed; the routine
 *>          only calculates the optimal size of the WORK array, returns  *>          only calculates the optimal size of the WORK array, returns
Line 170 Line 168
 *> \author Univ. of Colorado Denver   *> \author Univ. of Colorado Denver 
 *> \author NAG Ltd.   *> \author NAG Ltd. 
 *  *
 *> \date November 2011  *> \date November 2015
 *  *
 *> \ingroup doubleOTHERcomputational  *> \ingroup doubleOTHERcomputational
 *  *
Line 189 Line 187
       SUBROUTINE DORMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,        SUBROUTINE DORMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,
      $                   WORK, LWORK, INFO )       $                   WORK, LWORK, INFO )
 *  *
 *  -- LAPACK computational routine (version 3.4.0) --  *  -- LAPACK computational routine (version 3.6.0) --
 *  -- 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  *     November 2015
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       CHARACTER          SIDE, TRANS        CHARACTER          SIDE, TRANS
Line 205 Line 203
 *  =====================================================================  *  =====================================================================
 *  *
 *     .. Parameters ..  *     .. Parameters ..
       INTEGER            NBMAX, LDT        INTEGER            NBMAX, LDT, TSIZE
       PARAMETER          ( NBMAX = 64, LDT = NBMAX+1 )        PARAMETER          ( NBMAX = 64, LDT = NBMAX+1,
        $                     TSIZE = LDT*NBMAX )
 *     ..  *     ..
 *     .. Local Scalars ..  *     .. Local Scalars ..
       LOGICAL            LEFT, LQUERY, NOTRAN        LOGICAL            LEFT, LQUERY, NOTRAN
       CHARACTER          TRANST        CHARACTER          TRANST
       INTEGER            I, I1, I2, I3, IB, IC, IINFO, IWS, JA, JC,        INTEGER            I, I1, I2, I3, IB, IC, IINFO, IWT, JA, JC,
      $                   LDWORK, LWKOPT, MI, NB, NBMIN, NI, NQ, NW       $                   LDWORK, LWKOPT, MI, NB, NBMIN, NI, NQ, NW
 *     ..  *     ..
 *     .. Local Arrays ..  
       DOUBLE PRECISION   T( LDT, NBMAX )  
 *     ..  
 *     .. External Functions ..  *     .. External Functions ..
       LOGICAL            LSAME        LOGICAL            LSAME
       INTEGER            ILAENV        INTEGER            ILAENV
Line 263 Line 259
          INFO = -8           INFO = -8
       ELSE IF( LDC.LT.MAX( 1, M ) ) THEN        ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
          INFO = -11           INFO = -11
         ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
            INFO = -13
       END IF        END IF
 *  *
       IF( INFO.EQ.0 ) THEN        IF( INFO.EQ.0 ) THEN
   *
   *        Compute the workspace requirements
   *         
          IF( M.EQ.0 .OR. N.EQ.0 ) THEN           IF( M.EQ.0 .OR. N.EQ.0 ) THEN
             LWKOPT = 1              LWKOPT = 1
          ELSE           ELSE
 *  
 *           Determine the block size.  NB may be at most NBMAX, where  
 *           NBMAX is used to define the local array T.  
 *  
             NB = MIN( NBMAX, ILAENV( 1, 'DORMRQ', SIDE // TRANS, M, N,              NB = MIN( NBMAX, ILAENV( 1, 'DORMRQ', SIDE // TRANS, M, N,
      $                               K, -1 ) )       $                               K, -1 ) )
             LWKOPT = NW*NB              LWKOPT = NW*NB + TSIZE
          END IF           END IF
          WORK( 1 ) = LWKOPT           WORK( 1 ) = LWKOPT
 *  
          IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN  
             INFO = -13  
          END IF  
       END IF        END IF
 *  *
       IF( INFO.NE.0 ) THEN        IF( INFO.NE.0 ) THEN
Line 301 Line 294
       NBMIN = 2        NBMIN = 2
       LDWORK = NW        LDWORK = NW
       IF( NB.GT.1 .AND. NB.LT.K ) THEN        IF( NB.GT.1 .AND. NB.LT.K ) THEN
          IWS = NW*NB           IF( LWORK.LT.NW*NB+TSIZE ) THEN
          IF( LWORK.LT.IWS ) THEN              NB = (LWORK-TSIZE) / LDWORK
             NB = LWORK / LDWORK  
             NBMIN = MAX( 2, ILAENV( 2, 'DORMRQ', SIDE // TRANS, M, N, K,              NBMIN = MAX( 2, ILAENV( 2, 'DORMRQ', SIDE // TRANS, M, N, K,
      $              -1 ) )       $              -1 ) )
          END IF           END IF
       ELSE  
          IWS = NW  
       END IF        END IF
 *  *
       IF( NB.LT.NBMIN .OR. NB.GE.K ) THEN        IF( NB.LT.NBMIN .OR. NB.GE.K ) THEN
Line 321 Line 311
 *  *
 *        Use blocked code  *        Use blocked code
 *  *
            IWT = 1 + NW*NB
          IF( ( LEFT .AND. .NOT.NOTRAN ) .OR.           IF( ( LEFT .AND. .NOT.NOTRAN ) .OR.
      $       ( .NOT.LEFT .AND. NOTRAN ) ) THEN       $       ( .NOT.LEFT .AND. NOTRAN ) ) THEN
             I1 = 1              I1 = 1
Line 355 Line 346
 *           H = H(i+ib-1) . . . H(i+1) H(i)  *           H = H(i+ib-1) . . . H(i+1) H(i)
 *  *
             CALL DLARZT( 'Backward', 'Rowwise', L, IB, A( I, JA ), LDA,              CALL DLARZT( 'Backward', 'Rowwise', L, IB, A( I, JA ), LDA,
      $                   TAU( I ), T, LDT )       $                   TAU( I ), WORK( IWT ), LDT )
 *  *
             IF( LEFT ) THEN              IF( LEFT ) THEN
 *  *
Line 374 Line 365
 *           Apply H or H**T  *           Apply H or H**T
 *  *
             CALL DLARZB( SIDE, TRANST, 'Backward', 'Rowwise', MI, NI,              CALL DLARZB( SIDE, TRANST, 'Backward', 'Rowwise', MI, NI,
      $                   IB, L, A( I, JA ), LDA, T, LDT, C( IC, JC ),       $                   IB, L, A( I, JA ), LDA, WORK( IWT ), LDT,
      $                   LDC, WORK, LDWORK )       $                   C( IC, JC ), LDC, WORK, LDWORK )
    10    CONTINUE     10    CONTINUE
 *  *
       END IF        END IF

Removed from v.1.13  
changed lines
  Added in v.1.14


CVSweb interface <joel.bertrand@systella.fr>