Diff for /rpl/lapack/lapack/dgsvj1.f between versions 1.5 and 1.6

version 1.5, 2010/12/21 13:53:27 version 1.6, 2011/07/22 07:38:05
Line 1 Line 1
       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 routine (version 3.3.0)                                    --  *  -- LAPACK routine (version 3.3.1)                                  --
 *  *
 *  -- Contributed by Zlatko Drmac of the University of Zagreb and     --  *  -- Contributed by Zlatko Drmac of the University of Zagreb and     --
 *  -- Kresimir Veselic of the Fernuniversitaet Hagen                  --  *  -- Kresimir Veselic of the Fernuniversitaet Hagen                  --
 *     November 2010  *  -- April 2011                                                      --
 *  *
 *  -- 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..--
Line 24 Line 24
 *     ..  *     ..
 *     .. Array Arguments ..  *     .. Array Arguments ..
       DOUBLE PRECISION   A( LDA, * ), D( N ), SVA( N ), V( LDV, * ),        DOUBLE PRECISION   A( LDA, * ), D( N ), SVA( N ), V( LDV, * ),
      +                   WORK( LWORK )       $                   WORK( LWORK )
 *     ..  *     ..
 *  *
 *  Purpose  *  Purpose
Line 162 Line 162
 *     .. Local Parameters ..  *     .. Local Parameters ..
       DOUBLE PRECISION   ZERO, HALF, ONE, TWO        DOUBLE PRECISION   ZERO, HALF, ONE, TWO
       PARAMETER          ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0,        PARAMETER          ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0,
      +                   TWO = 2.0D0 )       $                   TWO = 2.0D0 )
 *     ..  *     ..
 *     .. Local Scalars ..  *     .. Local Scalars ..
       DOUBLE PRECISION   AAPP, AAPP0, AAPQ, AAQQ, APOAQ, AQOAP, BIG,        DOUBLE PRECISION   AAPP, AAPP0, AAPQ, AAQQ, APOAQ, AQOAP, BIG,
      +                   BIGTHETA, CS, LARGE, MXAAPQ, MXSINJ, ROOTBIG,       $                   BIGTHETA, CS, LARGE, MXAAPQ, MXSINJ, ROOTBIG,
      +                   ROOTEPS, ROOTSFMIN, ROOTTOL, SMALL, SN, T,       $                   ROOTEPS, ROOTSFMIN, ROOTTOL, SMALL, SN, T,
      +                   TEMP1, THETA, THSIGN       $                   TEMP1, THETA, THSIGN
       INTEGER            BLSKIP, EMPTSW, i, ibr, igl, IERR, IJBLSK,        INTEGER            BLSKIP, EMPTSW, i, ibr, igl, IERR, IJBLSK,
      +                   ISWROT, jbc, jgl, KBL, MVL, NOTROT, nblc, nblr,       $                   ISWROT, jbc, jgl, KBL, MVL, NOTROT, nblc, nblr,
      +                   p, PSKIPPED, q, ROWSKIP, SWBAND       $                   p, PSKIPPED, q, ROWSKIP, SWBAND
       LOGICAL            APPLV, ROTOK, RSVEC        LOGICAL            APPLV, ROTOK, RSVEC
 *     ..  *     ..
 *     .. Local Arrays ..  *     .. Local Arrays ..
Line 208 Line 208
       ELSE IF( ( RSVEC.OR.APPLV ) .AND. ( MV.LT.0 ) ) THEN        ELSE IF( ( RSVEC.OR.APPLV ) .AND. ( MV.LT.0 ) ) THEN
          INFO = -9           INFO = -9
       ELSE IF( ( RSVEC.AND.( LDV.LT.N ) ).OR.         ELSE IF( ( RSVEC.AND.( LDV.LT.N ) ).OR. 
      &         ( APPLV.AND.( LDV.LT.MV ) )  ) THEN       $         ( APPLV.AND.( LDV.LT.MV ) )  ) THEN
          INFO = -11           INFO = -11
       ELSE IF( TOL.LE.EPS ) THEN        ELSE IF( TOL.LE.EPS ) THEN
          INFO = -14           INFO = -14
Line 333 Line 333
                               END IF                                END IF
                               IF( AAPP.LT.( BIG / AAQQ ) ) THEN                                IF( AAPP.LT.( BIG / AAQQ ) ) THEN
                                  AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1,                                   AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1,
      +                                  q ), 1 )*D( p )*D( q ) / AAQQ )       $                                  q ), 1 )*D( p )*D( q ) / AAQQ )
      +                                  / AAPP       $                                  / AAPP
                               ELSE                                ELSE
                                  CALL DCOPY( M, A( 1, p ), 1, WORK, 1 )                                   CALL DCOPY( M, A( 1, p ), 1, WORK, 1 )
                                  CALL DLASCL( 'G', 0, 0, AAPP, D( p ),                                   CALL DLASCL( 'G', 0, 0, AAPP, D( p ),
      +                                        M, 1, WORK, LDA, IERR )       $                                        M, 1, WORK, LDA, IERR )
                                  AAPQ = DDOT( M, WORK, 1, A( 1, q ),                                   AAPQ = DDOT( M, WORK, 1, A( 1, q ),
      +                                  1 )*D( q ) / AAQQ       $                                  1 )*D( q ) / AAQQ
                               END IF                                END IF
                            ELSE                             ELSE
                               IF( AAPP.GE.AAQQ ) THEN                                IF( AAPP.GE.AAQQ ) THEN
Line 350 Line 350
                               END IF                                END IF
                               IF( AAPP.GT.( SMALL / AAQQ ) ) THEN                                IF( AAPP.GT.( SMALL / AAQQ ) ) THEN
                                  AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1,                                   AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1,
      +                                  q ), 1 )*D( p )*D( q ) / AAQQ )       $                                  q ), 1 )*D( p )*D( q ) / AAQQ )
      +                                  / AAPP       $                                  / AAPP
                               ELSE                                ELSE
                                  CALL DCOPY( M, A( 1, q ), 1, WORK, 1 )                                   CALL DCOPY( M, A( 1, q ), 1, WORK, 1 )
                                  CALL DLASCL( 'G', 0, 0, AAQQ, D( q ),                                   CALL DLASCL( 'G', 0, 0, AAQQ, D( q ),
      +                                        M, 1, WORK, LDA, IERR )       $                                        M, 1, WORK, LDA, IERR )
                                  AAPQ = DDOT( M, WORK, 1, A( 1, p ),                                   AAPQ = DDOT( M, WORK, 1, A( 1, p ),
      +                                  1 )*D( p ) / AAPP       $                                  1 )*D( p ) / AAPP
                               END IF                                END IF
                            END IF                             END IF
   
Line 375 Line 375
 *  *
                                  AQOAP = AAQQ / AAPP                                   AQOAP = AAQQ / AAPP
                                  APOAQ = AAPP / AAQQ                                   APOAQ = AAPP / AAQQ
                                  THETA = -HALF*DABS( AQOAP-APOAQ ) /                                   THETA = -HALF*DABS(AQOAP-APOAQ) / AAPQ
      +                                   AAPQ  
                                  IF( AAQQ.GT.AAPP0 )THETA = -THETA                                   IF( AAQQ.GT.AAPP0 )THETA = -THETA
   
                                  IF( DABS( THETA ).GT.BIGTHETA ) THEN                                   IF( DABS( THETA ).GT.BIGTHETA ) THEN
Line 384 Line 383
                                     FASTR( 3 ) = T*D( p ) / D( q )                                      FASTR( 3 ) = T*D( p ) / D( q )
                                     FASTR( 4 ) = -T*D( q ) / D( p )                                      FASTR( 4 ) = -T*D( q ) / D( p )
                                     CALL DROTM( M, A( 1, p ), 1,                                      CALL DROTM( M, A( 1, p ), 1,
      +                                          A( 1, q ), 1, FASTR )       $                                          A( 1, q ), 1, FASTR )
                                     IF( RSVEC )CALL DROTM( MVL,                                      IF( RSVEC )CALL DROTM( MVL,
      +                                              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( DMAX1( ZERO,
      +                                         ONE+T*APOAQ*AAPQ ) )       $                                         ONE+T*APOAQ*AAPQ ) )
                                     AAPP = AAPP*DSQRT( DMAX1( ZERO,                                      AAPP = AAPP*DSQRT( DMAX1( ZERO,
      +                                     ONE-T*AQOAP*AAPQ ) )       $                                     ONE-T*AQOAP*AAPQ ) )
                                     MXSINJ = DMAX1( MXSINJ, DABS( T ) )                                      MXSINJ = DMAX1( MXSINJ, DABS( T ) )
                                  ELSE                                   ELSE
 *  *
Line 401 Line 400
                                     THSIGN = -DSIGN( ONE, AAPQ )                                      THSIGN = -DSIGN( ONE, AAPQ )
                                     IF( AAQQ.GT.AAPP0 )THSIGN = -THSIGN                                      IF( AAQQ.GT.AAPP0 )THSIGN = -THSIGN
                                     T = ONE / ( THETA+THSIGN*                                      T = ONE / ( THETA+THSIGN*
      +                                  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 = DMAX1( MXSINJ, DABS( SN ) )
                                     SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO,                                      SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO,
      +                                         ONE+T*APOAQ*AAPQ ) )       $                                         ONE+T*APOAQ*AAPQ ) )
                                     AAPP = AAPP*DSQRT( DMAX1( ZERO,                                       AAPP = AAPP*DSQRT( DMAX1( ZERO, 
      +                                    ONE-T*AQOAP*AAPQ ) )       $                                    ONE-T*AQOAP*AAPQ ) )
   
                                     APOAQ = D( p ) / D( q )                                      APOAQ = D( p ) / D( q )
                                     AQOAP = D( q ) / D( p )                                      AQOAP = D( q ) / D( p )
Line 420 Line 419
                                           D( p ) = D( p )*CS                                            D( p ) = D( p )*CS
                                           D( q ) = D( q )*CS                                            D( q ) = D( q )*CS
                                           CALL DROTM( M, A( 1, p ), 1,                                            CALL DROTM( M, A( 1, p ), 1,
      +                                                A( 1, q ), 1,       $                                                A( 1, q ), 1,
      +                                                FASTR )       $                                                FASTR )
                                           IF( RSVEC )CALL DROTM( MVL,                                            IF( RSVEC )CALL DROTM( MVL,
      +                                        V( 1, p ), 1, V( 1, q ),       $                                        V( 1, p ), 1, V( 1, q ),
      +                                        1, FASTR )       $                                        1, FASTR )
                                        ELSE                                         ELSE
                                           CALL DAXPY( M, -T*AQOAP,                                            CALL DAXPY( M, -T*AQOAP,
      +                                                A( 1, q ), 1,       $                                                A( 1, q ), 1,
      +                                                A( 1, p ), 1 )       $                                                A( 1, p ), 1 )
                                           CALL DAXPY( M, CS*SN*APOAQ,                                            CALL DAXPY( M, CS*SN*APOAQ,
      +                                                A( 1, p ), 1,       $                                                A( 1, p ), 1,
      +                                                A( 1, q ), 1 )       $                                                A( 1, q ), 1 )
                                           IF( RSVEC ) THEN                                            IF( RSVEC ) THEN
                                              CALL DAXPY( MVL, -T*AQOAP,                                               CALL DAXPY( MVL, -T*AQOAP,
      +                                                   V( 1, q ), 1,       $                                                   V( 1, q ), 1,
      +                                                   V( 1, p ), 1 )       $                                                   V( 1, p ), 1 )
                                              CALL DAXPY( MVL,                                               CALL DAXPY( MVL,
      +                                                   CS*SN*APOAQ,       $                                                   CS*SN*APOAQ,
      +                                                   V( 1, p ), 1,       $                                                   V( 1, p ), 1,
      +                                                   V( 1, q ), 1 )       $                                                   V( 1, q ), 1 )
                                           END IF                                            END IF
                                           D( p ) = D( p )*CS                                            D( p ) = D( p )*CS
                                           D( q ) = D( q ) / CS                                            D( q ) = D( q ) / CS
Line 447 Line 446
                                     ELSE                                      ELSE
                                        IF( D( q ).GE.ONE ) THEN                                         IF( D( q ).GE.ONE ) THEN
                                           CALL DAXPY( M, T*APOAQ,                                            CALL DAXPY( M, T*APOAQ,
      +                                                A( 1, p ), 1,       $                                                A( 1, p ), 1,
      +                                                A( 1, q ), 1 )       $                                                A( 1, q ), 1 )
                                           CALL DAXPY( M, -CS*SN*AQOAP,                                            CALL DAXPY( M, -CS*SN*AQOAP,
      +                                                A( 1, q ), 1,       $                                                A( 1, q ), 1,
      +                                                A( 1, p ), 1 )       $                                                A( 1, p ), 1 )
                                           IF( RSVEC ) THEN                                            IF( RSVEC ) THEN
                                              CALL DAXPY( MVL, T*APOAQ,                                               CALL DAXPY( MVL, T*APOAQ,
      +                                                   V( 1, p ), 1,       $                                                   V( 1, p ), 1,
      +                                                   V( 1, q ), 1 )       $                                                   V( 1, q ), 1 )
                                              CALL DAXPY( MVL,                                               CALL DAXPY( MVL,
      +                                                   -CS*SN*AQOAP,       $                                                   -CS*SN*AQOAP,
      +                                                   V( 1, q ), 1,       $                                                   V( 1, q ), 1,
      +                                                   V( 1, p ), 1 )       $                                                   V( 1, p ), 1 )
                                           END IF                                            END IF
                                           D( p ) = D( p ) / CS                                            D( p ) = D( p ) / CS
                                           D( q ) = D( q )*CS                                            D( q ) = D( q )*CS
                                        ELSE                                         ELSE
                                           IF( D( p ).GE.D( q ) ) THEN                                            IF( D( p ).GE.D( q ) ) THEN
                                              CALL DAXPY( M, -T*AQOAP,                                               CALL DAXPY( M, -T*AQOAP,
      +                                                   A( 1, q ), 1,       $                                                   A( 1, q ), 1,
      +                                                   A( 1, p ), 1 )       $                                                   A( 1, p ), 1 )
                                              CALL DAXPY( M, CS*SN*APOAQ,                                               CALL DAXPY( M, CS*SN*APOAQ,
      +                                                   A( 1, p ), 1,       $                                                   A( 1, p ), 1,
      +                                                   A( 1, q ), 1 )       $                                                   A( 1, q ), 1 )
                                              D( p ) = D( p )*CS                                               D( p ) = D( p )*CS
                                              D( q ) = D( q ) / CS                                               D( q ) = D( q ) / CS
                                              IF( RSVEC ) THEN                                               IF( RSVEC ) THEN
                                                 CALL DAXPY( MVL,                                                  CALL DAXPY( MVL,
      +                                               -T*AQOAP,       $                                               -T*AQOAP,
      +                                               V( 1, q ), 1,       $                                               V( 1, q ), 1,
      +                                               V( 1, p ), 1 )       $                                               V( 1, p ), 1 )
                                                 CALL DAXPY( MVL,                                                  CALL DAXPY( MVL,
      +                                               CS*SN*APOAQ,       $                                               CS*SN*APOAQ,
      +                                               V( 1, p ), 1,       $                                               V( 1, p ), 1,
      +                                               V( 1, q ), 1 )       $                                               V( 1, q ), 1 )
                                              END IF                                               END IF
                                           ELSE                                            ELSE
                                              CALL DAXPY( M, T*APOAQ,                                               CALL DAXPY( M, T*APOAQ,
      +                                                   A( 1, p ), 1,       $                                                   A( 1, p ), 1,
      +                                                   A( 1, q ), 1 )       $                                                   A( 1, q ), 1 )
                                              CALL DAXPY( M,                                               CALL DAXPY( M,
      +                                                   -CS*SN*AQOAP,       $                                                   -CS*SN*AQOAP,
      +                                                   A( 1, q ), 1,       $                                                   A( 1, q ), 1,
      +                                                   A( 1, p ), 1 )       $                                                   A( 1, p ), 1 )
                                              D( p ) = D( p ) / CS                                               D( p ) = D( p ) / CS
                                              D( q ) = D( q )*CS                                               D( q ) = D( q )*CS
                                              IF( RSVEC ) THEN                                               IF( RSVEC ) THEN
                                                 CALL DAXPY( MVL,                                                  CALL DAXPY( MVL,
      +                                               T*APOAQ, V( 1, p ),       $                                               T*APOAQ, V( 1, p ),
      +                                               1, V( 1, q ), 1 )       $                                               1, V( 1, q ), 1 )
                                                 CALL DAXPY( MVL,                                                  CALL DAXPY( MVL,
      +                                               -CS*SN*AQOAP,       $                                               -CS*SN*AQOAP,
      +                                               V( 1, q ), 1,       $                                               V( 1, q ), 1,
      +                                               V( 1, p ), 1 )       $                                               V( 1, p ), 1 )
                                              END IF                                               END IF
                                           END IF                                            END IF
                                        END IF                                         END IF
Line 510 Line 509
                               ELSE                                ELSE
                                  IF( AAPP.GT.AAQQ ) THEN                                   IF( AAPP.GT.AAQQ ) THEN
                                     CALL DCOPY( M, A( 1, p ), 1, WORK,                                      CALL DCOPY( M, A( 1, p ), 1, WORK,
      +                                          1 )       $                                          1 )
                                     CALL DLASCL( 'G', 0, 0, AAPP, ONE,                                      CALL DLASCL( 'G', 0, 0, AAPP, ONE,
      +                                           M, 1, WORK, LDA, IERR )       $                                           M, 1, WORK, LDA, IERR )
                                     CALL DLASCL( 'G', 0, 0, AAQQ, ONE,                                      CALL DLASCL( 'G', 0, 0, AAQQ, ONE,
      +                                           M, 1, A( 1, q ), LDA,       $                                           M, 1, A( 1, q ), LDA,
      +                                           IERR )       $                                           IERR )
                                     TEMP1 = -AAPQ*D( p ) / D( q )                                      TEMP1 = -AAPQ*D( p ) / D( q )
                                     CALL DAXPY( M, TEMP1, WORK, 1,                                      CALL DAXPY( M, TEMP1, WORK, 1,
      +                                          A( 1, q ), 1 )       $                                          A( 1, q ), 1 )
                                     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( DMAX1( ZERO,
      +                                         ONE-AAPQ*AAPQ ) )       $                                         ONE-AAPQ*AAPQ ) )
                                     MXSINJ = DMAX1( MXSINJ, SFMIN )                                      MXSINJ = DMAX1( MXSINJ, SFMIN )
                                  ELSE                                   ELSE
                                     CALL DCOPY( M, A( 1, q ), 1, WORK,                                      CALL DCOPY( M, A( 1, q ), 1, WORK,
      +                                          1 )       $                                          1 )
                                     CALL DLASCL( 'G', 0, 0, AAQQ, ONE,                                      CALL DLASCL( 'G', 0, 0, AAQQ, ONE,
      +                                           M, 1, WORK, LDA, IERR )       $                                           M, 1, WORK, LDA, IERR )
                                     CALL DLASCL( 'G', 0, 0, AAPP, ONE,                                      CALL DLASCL( 'G', 0, 0, AAPP, ONE,
      +                                           M, 1, A( 1, p ), LDA,       $                                           M, 1, A( 1, p ), LDA,
      +                                           IERR )       $                                           IERR )
                                     TEMP1 = -AAPQ*D( q ) / D( p )                                      TEMP1 = -AAPQ*D( q ) / D( p )
                                     CALL DAXPY( M, TEMP1, WORK, 1,                                      CALL DAXPY( M, TEMP1, WORK, 1,
      +                                          A( 1, p ), 1 )       $                                          A( 1, p ), 1 )
                                     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( DMAX1( ZERO,
      +                                         ONE-AAPQ*AAPQ ) )       $                                         ONE-AAPQ*AAPQ ) )
                                     MXSINJ = DMAX1( MXSINJ, SFMIN )                                      MXSINJ = DMAX1( MXSINJ, SFMIN )
                                  END IF                                   END IF
                               END IF                                END IF
Line 549 Line 548
 *           In the case of cancellation in updating SVA(q)  *           In the case of cancellation in updating SVA(q)
 *           .. recompute SVA(q)  *           .. recompute SVA(q)
                               IF( ( SVA( q ) / AAQQ )**2.LE.ROOTEPS )                                IF( ( SVA( q ) / AAQQ )**2.LE.ROOTEPS )
      +                            THEN       $                            THEN
                                  IF( ( AAQQ.LT.ROOTBIG ) .AND.                                   IF( ( AAQQ.LT.ROOTBIG ) .AND.
      +                               ( AAQQ.GT.ROOTSFMIN ) ) THEN       $                               ( AAQQ.GT.ROOTSFMIN ) ) THEN
                                     SVA( q ) = DNRM2( M, A( 1, q ), 1 )*                                      SVA( q ) = DNRM2( M, A( 1, q ), 1 )*
      +                                         D( q )       $                                         D( q )
                                  ELSE                                   ELSE
                                     T = ZERO                                      T = ZERO
                                     AAQQ = ONE                                      AAQQ = ONE
                                     CALL DLASSQ( M, A( 1, q ), 1, T,                                      CALL DLASSQ( M, A( 1, q ), 1, T,
      +                                           AAQQ )       $                                           AAQQ )
                                     SVA( q ) = T*DSQRT( AAQQ )*D( q )                                      SVA( q ) = T*DSQRT( AAQQ )*D( q )
                                  END IF                                   END IF
                               END IF                                END IF
                               IF( ( AAPP / AAPP0 )**2.LE.ROOTEPS ) THEN                                IF( ( AAPP / AAPP0 )**2.LE.ROOTEPS ) THEN
                                  IF( ( AAPP.LT.ROOTBIG ) .AND.                                   IF( ( AAPP.LT.ROOTBIG ) .AND.
      +                               ( AAPP.GT.ROOTSFMIN ) ) THEN       $                               ( AAPP.GT.ROOTSFMIN ) ) THEN
                                     AAPP = DNRM2( M, A( 1, p ), 1 )*                                      AAPP = DNRM2( M, A( 1, p ), 1 )*
      +                                     D( p )       $                                     D( p )
                                  ELSE                                   ELSE
                                     T = ZERO                                      T = ZERO
                                     AAPP = ONE                                      AAPP = ONE
                                     CALL DLASSQ( M, A( 1, p ), 1, T,                                      CALL DLASSQ( M, A( 1, p ), 1, T,
      +                                           AAPP )       $                                           AAPP )
                                     AAPP = T*DSQRT( AAPP )*D( p )                                      AAPP = T*DSQRT( AAPP )*D( p )
                                  END IF                                   END IF
                                  SVA( p ) = AAPP                                   SVA( p ) = AAPP
Line 591 Line 590
   
 *      IF ( NOTROT .GE. EMPTSW )  GO TO 2011  *      IF ( NOTROT .GE. EMPTSW )  GO TO 2011
                         IF( ( i.LE.SWBAND ) .AND. ( IJBLSK.GE.BLSKIP ) )                          IF( ( i.LE.SWBAND ) .AND. ( IJBLSK.GE.BLSKIP ) )
      +                      THEN       $                      THEN
                            SVA( p ) = AAPP                             SVA( p ) = AAPP
                            NOTROT = 0                             NOTROT = 0
                            GO TO 2011                             GO TO 2011
                         END IF                          END IF
                         IF( ( i.LE.SWBAND ) .AND.                          IF( ( i.LE.SWBAND ) .AND.
      +                      ( PSKIPPED.GT.ROWSKIP ) ) THEN       $                      ( PSKIPPED.GT.ROWSKIP ) ) THEN
                            AAPP = -AAPP                             AAPP = -AAPP
                            NOTROT = 0                             NOTROT = 0
                            GO TO 2203                             GO TO 2203
Line 612 Line 611
 *  *
                   ELSE                    ELSE
                      IF( AAPP.EQ.ZERO )NOTROT = NOTROT +                       IF( AAPP.EQ.ZERO )NOTROT = NOTROT +
      +                   MIN0( jgl+KBL-1, N ) - jgl + 1       $                   MIN0( 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 632 Line 631
 *  *
 *     .. update SVA(N)  *     .. update SVA(N)
          IF( ( SVA( N ).LT.ROOTBIG ) .AND. ( SVA( N ).GT.ROOTSFMIN ) )           IF( ( SVA( N ).LT.ROOTBIG ) .AND. ( SVA( N ).GT.ROOTSFMIN ) )
      +       THEN       $       THEN
             SVA( N ) = DNRM2( M, A( 1, N ), 1 )*D( N )              SVA( N ) = DNRM2( M, A( 1, N ), 1 )*D( N )
          ELSE           ELSE
             T = ZERO              T = ZERO
Line 644 Line 643
 *     Additional steering devices  *     Additional steering devices
 *  *
          IF( ( i.LT.SWBAND ) .AND. ( ( MXAAPQ.LE.ROOTTOL ) .OR.           IF( ( i.LT.SWBAND ) .AND. ( ( MXAAPQ.LE.ROOTTOL ) .OR.
      +       ( ISWROT.LE.N ) ) )SWBAND = i       $       ( ISWROT.LE.N ) ) )SWBAND = i
   
          IF( ( i.GT.SWBAND+1 ) .AND. ( MXAAPQ.LT.DBLE( N )*TOL ) .AND.           IF( ( i.GT.SWBAND+1 ) .AND. ( MXAAPQ.LT.DBLE( N )*TOL ) .AND.
      +       ( DBLE( N )*MXAAPQ*MXSINJ.LT.TOL ) ) THEN       $       ( DBLE( N )*MXAAPQ*MXSINJ.LT.TOL ) ) THEN
             GO TO 1994              GO TO 1994
          END IF           END IF
   

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


CVSweb interface <joel.bertrand@systella.fr>