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

version 1.13, 2014/01/27 09:28:18 version 1.14, 2015/11/26 11:44:17
Line 37 Line 37
 *>  *>
 *> \verbatim  *> \verbatim
 *>  *>
 *> DGSVJ1 is called from SGESVJ as a pre-processor and that is its main  *> DGSVJ1 is called from DGESVJ as a pre-processor and that is its main
 *> purpose. It applies Jacobi rotations in the same way as SGESVJ does, but  *> purpose. It applies Jacobi rotations in the same way as DGESVJ does, but
 *> it targets only particular pivots and it does not check convergence  *> it targets only particular pivots and it does not check convergence
 *> (stopping criterion). Few tunning parameters (marked by [TP]) are  *> (stopping criterion). Few tunning parameters (marked by [TP]) are
 *> available for the implementer.  *> available for the implementer.
Line 223 Line 223
 *> \author Univ. of Colorado Denver   *> \author Univ. of Colorado Denver 
 *> \author NAG Ltd.   *> \author NAG Ltd. 
 *  *
 *> \date September 2012  *> \date November 2015
 *  *
 *> \ingroup doubleOTHERcomputational  *> \ingroup doubleOTHERcomputational
 *  *
Line 236 Line 236
       SUBROUTINE DGSVJ1( JOBV, M, N, N1, A, LDA, D, SVA, MV, V, LDV,        SUBROUTINE DGSVJ1( JOBV, M, N, N1, A, LDA, D, SVA, MV, V, LDV,
      $                   EPS, SFMIN, TOL, NSWEEP, WORK, LWORK, INFO )       $                   EPS, SFMIN, TOL, NSWEEP, WORK, LWORK, INFO )
 *  *
 *  -- LAPACK computational routine (version 3.4.2) --  *  -- 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..--
 *     September 2012  *     November 2015
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       DOUBLE PRECISION   EPS, SFMIN, TOL        DOUBLE PRECISION   EPS, SFMIN, TOL
Line 271 Line 271
       DOUBLE PRECISION   FASTR( 5 )        DOUBLE PRECISION   FASTR( 5 )
 *     ..  *     ..
 *     .. Intrinsic Functions ..  *     .. Intrinsic Functions ..
       INTRINSIC          DABS, DMAX1, DBLE, MIN0, DSIGN, DSQRT        INTRINSIC          DABS, MAX, DBLE, MIN, DSIGN, DSQRT
 *     ..  *     ..
 *     .. External Functions ..  *     .. External Functions ..
       DOUBLE PRECISION   DDOT, DNRM2        DOUBLE PRECISION   DDOT, DNRM2
Line 345 Line 345
 *  *
 *     .. Row-cyclic pivot strategy with de Rijk's pivoting ..  *     .. Row-cyclic pivot strategy with de Rijk's pivoting ..
 *  *
       KBL = MIN0( 8, N )        KBL = MIN( 8, N )
       NBLR = N1 / KBL        NBLR = N1 / KBL
       IF( ( NBLR*KBL ).NE.N1 )NBLR = NBLR + 1        IF( ( NBLR*KBL ).NE.N1 )NBLR = NBLR + 1
   
Line 356 Line 356
       BLSKIP = ( KBL**2 ) + 1        BLSKIP = ( KBL**2 ) + 1
 *[TP] BLKSKIP is a tuning parameter that depends on SWBAND and KBL.  *[TP] BLKSKIP is a tuning parameter that depends on SWBAND and KBL.
   
       ROWSKIP = MIN0( 5, KBL )        ROWSKIP = MIN( 5, KBL )
 *[TP] ROWSKIP is a tuning parameter.  *[TP] ROWSKIP is a tuning parameter.
       SWBAND = 0        SWBAND = 0
 *[TP] SWBAND is a tuning parameter. It is meaningful and effective  *[TP] SWBAND is a tuning parameter. It is meaningful and effective
Line 399 Line 399
 *        doing the block at ( ibr, jbc )  *        doing the block at ( ibr, jbc )
   
                IJBLSK = 0                 IJBLSK = 0
                DO 2100 p = igl, MIN0( igl+KBL-1, N1 )                 DO 2100 p = igl, MIN( igl+KBL-1, N1 )
   
                   AAPP = SVA( p )                    AAPP = SVA( p )
   
Line 407 Line 407
   
                      PSKIPPED = 0                       PSKIPPED = 0
   
                      DO 2200 q = jgl, MIN0( jgl+KBL-1, N )                       DO 2200 q = jgl, MIN( jgl+KBL-1, N )
 *  *
                         AAQQ = SVA( q )                          AAQQ = SVA( q )
   
Line 454 Line 454
                               END IF                                END IF
                            END IF                             END IF
   
                            MXAAPQ = DMAX1( MXAAPQ, DABS( AAPQ ) )                             MXAAPQ = MAX( MXAAPQ, DABS( AAPQ ) )
   
 *        TO rotate or NOT to rotate, THAT is the question ...  *        TO rotate or NOT to rotate, THAT is the question ...
 *  *
Line 481 Line 481
      $                                              V( 1, p ), 1,       $                                              V( 1, p ), 1,
      $                                              V( 1, q ), 1,       $                                              V( 1, q ), 1,
      $                                              FASTR )       $                                              FASTR )
                                     SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO,                                      SVA( q ) = AAQQ*DSQRT( MAX( ZERO,
      $                                         ONE+T*APOAQ*AAPQ ) )       $                                         ONE+T*APOAQ*AAPQ ) )
                                     AAPP = AAPP*DSQRT( DMAX1( ZERO,                                      AAPP = AAPP*DSQRT( MAX( ZERO,
      $                                     ONE-T*AQOAP*AAPQ ) )       $                                     ONE-T*AQOAP*AAPQ ) )
                                     MXSINJ = DMAX1( MXSINJ, DABS( T ) )                                      MXSINJ = MAX( MXSINJ, DABS( T ) )
                                  ELSE                                   ELSE
 *  *
 *                 .. choose correct signum for THETA and rotate  *                 .. choose correct signum for THETA and rotate
Line 496 Line 496
      $                                  DSQRT( ONE+THETA*THETA ) )       $                                  DSQRT( ONE+THETA*THETA ) )
                                     CS = DSQRT( ONE / ( ONE+T*T ) )                                      CS = DSQRT( ONE / ( ONE+T*T ) )
                                     SN = T*CS                                      SN = T*CS
                                     MXSINJ = DMAX1( MXSINJ, DABS( SN ) )                                      MXSINJ = MAX( MXSINJ, DABS( SN ) )
                                     SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO,                                      SVA( q ) = AAQQ*DSQRT( MAX( ZERO,
      $                                         ONE+T*APOAQ*AAPQ ) )       $                                         ONE+T*APOAQ*AAPQ ) )
                                     AAPP = AAPP*DSQRT( DMAX1( ZERO,                                       AAPP = AAPP*DSQRT( MAX( ZERO, 
      $                                    ONE-T*AQOAP*AAPQ ) )       $                                    ONE-T*AQOAP*AAPQ ) )
   
                                     APOAQ = D( p ) / D( q )                                      APOAQ = D( p ) / D( q )
Line 614 Line 614
                                     CALL DLASCL( 'G', 0, 0, ONE, AAQQ,                                      CALL DLASCL( 'G', 0, 0, ONE, AAQQ,
      $                                           M, 1, A( 1, q ), LDA,       $                                           M, 1, A( 1, q ), LDA,
      $                                           IERR )       $                                           IERR )
                                     SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO,                                      SVA( q ) = AAQQ*DSQRT( MAX( ZERO,
      $                                         ONE-AAPQ*AAPQ ) )       $                                         ONE-AAPQ*AAPQ ) )
                                     MXSINJ = DMAX1( MXSINJ, SFMIN )                                      MXSINJ = MAX( MXSINJ, SFMIN )
                                  ELSE                                   ELSE
                                     CALL DCOPY( M, A( 1, q ), 1, WORK,                                      CALL DCOPY( M, A( 1, q ), 1, WORK,
      $                                          1 )       $                                          1 )
Line 631 Line 631
                                     CALL DLASCL( 'G', 0, 0, ONE, AAPP,                                      CALL DLASCL( 'G', 0, 0, ONE, AAPP,
      $                                           M, 1, A( 1, p ), LDA,       $                                           M, 1, A( 1, p ), LDA,
      $                                           IERR )       $                                           IERR )
                                     SVA( p ) = AAPP*DSQRT( DMAX1( ZERO,                                      SVA( p ) = AAPP*DSQRT( MAX( ZERO,
      $                                         ONE-AAPQ*AAPQ ) )       $                                         ONE-AAPQ*AAPQ ) )
                                     MXSINJ = DMAX1( MXSINJ, SFMIN )                                      MXSINJ = MAX( MXSINJ, SFMIN )
                                  END IF                                   END IF
                               END IF                                END IF
 *           END IF ROTOK THEN ... ELSE  *           END IF ROTOK THEN ... ELSE
Line 704 Line 704
 *  *
                   ELSE                    ELSE
                      IF( AAPP.EQ.ZERO )NOTROT = NOTROT +                       IF( AAPP.EQ.ZERO )NOTROT = NOTROT +
      $                   MIN0( jgl+KBL-1, N ) - jgl + 1       $                   MIN( jgl+KBL-1, N ) - jgl + 1
                      IF( AAPP.LT.ZERO )NOTROT = 0                       IF( AAPP.LT.ZERO )NOTROT = 0
 ***      IF ( NOTROT .GE. EMPTSW )  GO TO 2011  ***      IF ( NOTROT .GE. EMPTSW )  GO TO 2011
                   END IF                    END IF
Line 715 Line 715
 *     end of the jbc-loop  *     end of the jbc-loop
  2011       CONTINUE   2011       CONTINUE
 *2011 bailed out of the jbc-loop  *2011 bailed out of the jbc-loop
             DO 2012 p = igl, MIN0( igl+KBL-1, N )              DO 2012 p = igl, MIN( igl+KBL-1, N )
                SVA( p ) = DABS( SVA( p ) )                 SVA( p ) = DABS( SVA( p ) )
  2012       CONTINUE   2012       CONTINUE
 ***   IF ( NOTROT .GE. EMPTSW ) GO TO 1994  ***   IF ( NOTROT .GE. EMPTSW ) GO TO 1994

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


CVSweb interface <joel.bertrand@systella.fr>