⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slasq5.f

📁 计算矩阵的经典开源库.全世界都在用它.相信你也不能例外.
💻 F
字号:
      SUBROUTINE SLASQ5( I0, N0, Z, PP, TAU, DMIN, DMIN1, DMIN2, DN,     $                   DNM1, DNM2, IEEE )**  -- LAPACK auxiliary routine (instrumented to count ops, version 3.0) --*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,*     Courant Institute, Argonne National Lab, and Rice University*     May 17, 2000**     .. Scalar Arguments ..      LOGICAL            IEEE      INTEGER            I0, N0, PP      REAL               DMIN, DMIN1, DMIN2, DN, DNM1, DNM2, TAU*     ..*     .. Array Arguments ..      REAL               Z( * )*     ..*     .. Common block to return operation count ..      COMMON             / LATIME / OPS, ITCNT*     ..*     .. Scalars in Common ..      REAL               ITCNT, OPS*     ..**  Purpose*  =======**  SLASQ5 computes one dqds transform in ping-pong form, one*  version for IEEE machines another for non IEEE machines.**  Arguments*  =========**  I0    (input) INTEGER*        First index.**  N0    (input) INTEGER*        Last index.**  Z     (input) REAL array, dimension ( 4*N )*        Z holds the qd array. EMIN is stored in Z(4*N0) to avoid*        an extra argument.**  PP    (input) INTEGER*        PP=0 for ping, PP=1 for pong.**  TAU   (input) REAL*        This is the shift.**  DMIN  (output) REAL*        Minimum value of d.**  DMIN1 (output) REAL*        Minimum value of d, excluding D( N0 ).**  DMIN2 (output) REAL*        Minimum value of d, excluding D( N0 ) and D( N0-1 ).**  DN    (output) REAL*        d(N0), the last value of d.**  DNM1  (output) REAL*        d(N0-1).**  DNM2  (output) REAL*        d(N0-2).**  IEEE  (input) LOGICAL*        Flag for IEEE or non IEEE arithmetic.**  =====================================================================**     .. Parameter ..      REAL               ZERO      PARAMETER          ( ZERO = 0.0E0 )*     ..*     .. Local Scalars ..      INTEGER            J4, J4P2      REAL               D, EMIN, TEMP*     ..*     .. Intrinsic Functions ..      INTRINSIC          MIN, REAL*     ..*     .. Executable Statements ..*      IF( ( N0-I0-1 ).LE.0 )     $   RETURN*      OPS = OPS + REAL( 1 )      J4 = 4*I0 + PP - 3      EMIN = Z( J4+4 )      D = Z( J4 ) - TAU      DMIN = D      DMIN1 = -Z( J4 )*      IF( IEEE ) THEN**        Code for IEEE arithmetic.*         IF( PP.EQ.0 ) THEN            DO 10 J4 = 4*I0, 4*( N0-3 ), 4               OPS = OPS + REAL( 5 )               Z( J4-2 ) = D + Z( J4-1 )               TEMP = Z( J4+1 ) / Z( J4-2 )               D = D*TEMP - TAU               DMIN = MIN( DMIN, D )               Z( J4 ) = Z( J4-1 )*TEMP               EMIN = MIN( Z( J4 ), EMIN )   10       CONTINUE         ELSE            DO 20 J4 = 4*I0, 4*( N0-3 ), 4               OPS = OPS + REAL( 5 )               Z( J4-3 ) = D + Z( J4 )               TEMP = Z( J4+2 ) / Z( J4-3 )               D = D*TEMP - TAU               DMIN = MIN( DMIN, D )               Z( J4-1 ) = Z( J4 )*TEMP               EMIN = MIN( Z( J4-1 ), EMIN )   20       CONTINUE         END IF**        Unroll last two steps.*         OPS = OPS + REAL( 6 )         DNM2 = D         DMIN2 = DMIN         J4 = 4*( N0-2 ) - PP         J4P2 = J4 + 2*PP - 1         Z( J4-2 ) = DNM2 + Z( J4P2 )         Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) )         DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU         DMIN = MIN( DMIN, DNM1 )*         OPS = OPS + REAL( 6 )         DMIN1 = DMIN         J4 = J4 + 4         J4P2 = J4 + 2*PP - 1         Z( J4-2 ) = DNM1 + Z( J4P2 )         Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) )         DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU         DMIN = MIN( DMIN, DN )*      ELSE**        Code for non IEEE arithmetic.*         IF( PP.EQ.0 ) THEN            DO 30 J4 = 4*I0, 4*( N0-3 ), 4               Z( J4-2 ) = D + Z( J4-1 )               IF( D.LT.ZERO ) THEN                  RETURN               ELSE                  OPS = OPS + REAL( 5 )                  Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) )                  D = Z( J4+1 )*( D / Z( J4-2 ) ) - TAU               END IF               DMIN = MIN( DMIN, D )               EMIN = MIN( EMIN, Z( J4 ) )   30       CONTINUE         ELSE            DO 40 J4 = 4*I0, 4*( N0-3 ), 4               Z( J4-3 ) = D + Z( J4 )               IF( D.LT.ZERO ) THEN                  RETURN               ELSE                  OPS = OPS + REAL( 5 )                  Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) )                  D = Z( J4+2 )*( D / Z( J4-3 ) ) - TAU               END IF               DMIN = MIN( DMIN, D )               EMIN = MIN( EMIN, Z( J4-1 ) )   40       CONTINUE         END IF**        Unroll last two steps.*         OPS = OPS + REAL( 1 )         DNM2 = D         DMIN2 = DMIN         J4 = 4*( N0-2 ) - PP         J4P2 = J4 + 2*PP - 1         Z( J4-2 ) = DNM2 + Z( J4P2 )         IF( DNM2.LT.ZERO ) THEN            RETURN         ELSE            OPS = OPS + REAL( 5 )            Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) )            DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU         END IF         DMIN = MIN( DMIN, DNM1 )*         OPS = OPS + REAL( 1 )         DMIN1 = DMIN         J4 = J4 + 4         J4P2 = J4 + 2*PP - 1         Z( J4-2 ) = DNM1 + Z( J4P2 )         IF( DNM1.LT.ZERO ) THEN            RETURN         ELSE            OPS = OPS + REAL( 5 )            Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) )            DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU         END IF         DMIN = MIN( DMIN, DN )*      END IF*      Z( J4+2 ) = DN      Z( 4*N0-PP ) = EMIN      RETURN**     End of SLASQ5*      END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -