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

📄 dopla2.f

📁 计算矩阵的经典开源库.全世界都在用它.相信你也不能例外.
💻 F
字号:
      DOUBLE PRECISION FUNCTION DOPLA2( SUBNAM, OPTS, M, N, K, L, NB )**  -- LAPACK timing routine (version 3.0) --*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,*     Courant Institute, Argonne National Lab, and Rice University*     February 29, 1992**     .. Scalar Arguments ..      CHARACTER*6        SUBNAM      CHARACTER*( * )    OPTS      INTEGER            K, L, M, N, NB*     ..**  Purpose*  =======**  DOPLA2 computes an approximation of the number of floating point*  operations used by the subroutine SUBNAM with character options*  OPTS and parameters M, N, K, L, and NB.**  This version counts operations for the LAPACK subroutines that*  call other LAPACK routines.**  Arguments*  =========**  SUBNAM  (input) CHARACTER*6*          The name of the subroutine.**  OPTS    (input) CHRACTER*(*)*          A string of character options to subroutine SUBNAM.**  M       (input) INTEGER*          The number of rows of the coefficient matrix.**  N       (input) INTEGER*          The number of columns of the coefficient matrix.**  K       (input) INTEGER*          A third problem dimension, if needed.**  L       (input) INTEGER*          A fourth problem dimension, if needed.**  NB      (input) INTEGER*          The block size.  If needed, NB >= 1.**  Notes*  =====**  In the comments below, the association is given between arguments*  in the requested subroutine and local arguments.  For example,**  xORMBR:  VECT // SIDE // TRANS, M, N, K   =>  OPTS, M, N, K**  means that the character string VECT // SIDE // TRANS is passed to*  the argument OPTS, and the integer parameters M, N, and K are passed*  to the arguments M, N, and K,**  =====================================================================**     .. Local Scalars ..      LOGICAL            CORZ, SORD      CHARACTER          C1, SIDE, UPLO, VECT      CHARACTER*2        C2      CHARACTER*3        C3      CHARACTER*6        SUB2      INTEGER            IHI, ILO, ISIDE, MI, NI, NQ*     ..*     .. External Functions ..      LOGICAL            LSAME, LSAMEN      DOUBLE PRECISION   DOPLA      EXTERNAL           LSAME, LSAMEN, DOPLA*     ..*     .. Executable Statements ..**     ---------------------------------------------------------*     Initialize DOPLA2 to 0 and do a quick return if possible.*     ---------------------------------------------------------*      DOPLA2 = 0      C1 = SUBNAM( 1: 1 )      C2 = SUBNAM( 2: 3 )      C3 = SUBNAM( 4: 6 )      SORD = LSAME( C1, 'S' ) .OR. LSAME( C1, 'D' )      CORZ = LSAME( C1, 'C' ) .OR. LSAME( C1, 'Z' )      IF( M.LE.0 .OR. .NOT.( SORD .OR. CORZ ) )     $   RETURN**     -------------------*     Orthogonal matrices*     -------------------*      IF( ( SORD .AND. LSAMEN( 2, C2, 'OR' ) ) .OR.     $    ( CORZ .AND. LSAMEN( 2, C2, 'UN' ) ) ) THEN*         IF( LSAMEN( 3, C3, 'GBR' ) ) THEN**           -GBR:  VECT, M, N, K  =>  OPTS, M, N, K*            VECT = OPTS( 1: 1 )            IF( LSAME( VECT, 'Q' ) ) THEN               SUB2 = SUBNAM( 1: 3 ) // 'GQR'               IF( M.GE.K ) THEN                  DOPLA2 = DOPLA( SUB2, M, N, K, 0, NB )               ELSE                  DOPLA2 = DOPLA( SUB2, M-1, M-1, M-1, 0, NB )               END IF            ELSE               SUB2 = SUBNAM( 1: 3 ) // 'GLQ'               IF( K.LT.N ) THEN                  DOPLA2 = DOPLA( SUB2, M, N, K, 0, NB )               ELSE                  DOPLA2 = DOPLA( SUB2, N-1, N-1, N-1, 0, NB )               END IF            END IF*         ELSE IF( LSAMEN( 3, C3, 'MBR' ) ) THEN**           -MBR:  VECT // SIDE // TRANS, M, N, K  =>  OPTS, M, N, K*            VECT = OPTS( 1: 1 )            SIDE = OPTS( 2: 2 )            IF( LSAME( SIDE, 'L' ) ) THEN               NQ = M               ISIDE = 0            ELSE               NQ = N               ISIDE = 1            END IF            IF( LSAME( VECT, 'Q' ) ) THEN               SUB2 = SUBNAM( 1: 3 ) // 'MQR'               IF( NQ.GE.K ) THEN                  DOPLA2 = DOPLA( SUB2, M, N, K, ISIDE, NB )               ELSE IF( ISIDE.EQ.0 ) THEN                  DOPLA2 = DOPLA( SUB2, M-1, N, NQ-1, ISIDE, NB )               ELSE                  DOPLA2 = DOPLA( SUB2, M, N-1, NQ-1, ISIDE, NB )               END IF            ELSE               SUB2 = SUBNAM( 1: 3 ) // 'MLQ'               IF( NQ.GT.K ) THEN                  DOPLA2 = DOPLA( SUB2, M, N, K, ISIDE, NB )               ELSE IF( ISIDE.EQ.0 ) THEN                  DOPLA2 = DOPLA( SUB2, M-1, N, NQ-1, ISIDE, NB )               ELSE                  DOPLA2 = DOPLA( SUB2, M, N-1, NQ-1, ISIDE, NB )               END IF            END IF*         ELSE IF( LSAMEN( 3, C3, 'GHR' ) ) THEN**           -GHR:  N, ILO, IHI  =>  M, N, K*            ILO = N            IHI = K            SUB2 = SUBNAM( 1: 3 ) // 'GQR'            DOPLA2 = DOPLA( SUB2, IHI-ILO, IHI-ILO, IHI-ILO, 0, NB )*         ELSE IF( LSAMEN( 3, C3, 'MHR' ) ) THEN**           -MHR:  SIDE // TRANS, M, N, ILO, IHI  =>  OPTS, M, N, K, L*            SIDE = OPTS( 1: 1 )            ILO = K            IHI = L            IF( LSAME( SIDE, 'L' ) ) THEN               MI = IHI - ILO               NI = N               ISIDE = -1            ELSE               MI = M               NI = IHI - ILO               ISIDE = 1            END IF            SUB2 = SUBNAM( 1: 3 ) // 'MQR'            DOPLA2 = DOPLA( SUB2, MI, NI, IHI-ILO, ISIDE, NB )*         ELSE IF( LSAMEN( 3, C3, 'GTR' ) ) THEN**           -GTR:  UPLO, N  =>  OPTS, M*            UPLO = OPTS( 1: 1 )            IF( LSAME( UPLO, 'U' ) ) THEN               SUB2 = SUBNAM( 1: 3 ) // 'GQL'               DOPLA2 = DOPLA( SUB2, M-1, M-1, M-1, 0, NB )            ELSE               SUB2 = SUBNAM( 1: 3 ) // 'GQR'               DOPLA2 = DOPLA( SUB2, M-1, M-1, M-1, 0, NB )            END IF*         ELSE IF( LSAMEN( 3, C3, 'MTR' ) ) THEN**           -MTR:  SIDE // UPLO // TRANS, M, N  =>  OPTS, M, N*            SIDE = OPTS( 1: 1 )            UPLO = OPTS( 2: 2 )            IF( LSAME( SIDE, 'L' ) ) THEN               MI = M - 1               NI = N               NQ = M               ISIDE = -1            ELSE               MI = M               NI = N - 1               NQ = N               ISIDE = 1            END IF*            IF( LSAME( UPLO, 'U' ) ) THEN               SUB2 = SUBNAM( 1: 3 ) // 'MQL'               DOPLA2 = DOPLA( SUB2, MI, NI, NQ-1, ISIDE, NB )            ELSE               SUB2 = SUBNAM( 1: 3 ) // 'MQR'               DOPLA2 = DOPLA( SUB2, MI, NI, NQ-1, ISIDE, NB )            END IF*         END IF      END IF*      RETURN**     End of DOPLA2*      END

⌨️ 快捷键说明

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