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

📄 matrix.f

📁 CLM集合卡曼滤波数据同化算法
💻 F
📖 第 1 页 / 共 5 页
字号:
         ELSE IF( C3.EQ.'TRI' ) THEN            IF( SNAME ) THEN               NB = 64            ELSE               NB = 64            END IF         END IF      ELSE IF( C2.EQ.'PO' ) THEN         IF( C3.EQ.'TRF' ) THEN            IF( SNAME ) THEN               NB = 64            ELSE               NB = 64            END IF         END IF      ELSE IF( C2.EQ.'SY' ) THEN         IF( C3.EQ.'TRF' ) THEN            IF( SNAME ) THEN               NB = 64            ELSE               NB = 64            END IF         ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN            NB = 32         ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN            NB = 64         END IF      ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN         IF( C3.EQ.'TRF' ) THEN            NB = 64         ELSE IF( C3.EQ.'TRD' ) THEN            NB = 32         ELSE IF( C3.EQ.'GST' ) THEN            NB = 64         END IF      ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN         IF( C3( 1:1 ).EQ.'G' ) THEN            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.     $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.     $          C4.EQ.'BR' ) THEN               NB = 32            END IF         ELSE IF( C3( 1:1 ).EQ.'M' ) THEN            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.     $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.     $          C4.EQ.'BR' ) THEN               NB = 32            END IF         END IF      ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN         IF( C3( 1:1 ).EQ.'G' ) THEN            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.     $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.     $          C4.EQ.'BR' ) THEN               NB = 32            END IF         ELSE IF( C3( 1:1 ).EQ.'M' ) THEN            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.     $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.     $          C4.EQ.'BR' ) THEN               NB = 32            END IF         END IF      ELSE IF( C2.EQ.'GB' ) THEN         IF( C3.EQ.'TRF' ) THEN            IF( SNAME ) THEN               IF( N4.LE.64 ) THEN                  NB = 1               ELSE                  NB = 32               END IF            ELSE               IF( N4.LE.64 ) THEN                  NB = 1               ELSE                  NB = 32               END IF            END IF         END IF      ELSE IF( C2.EQ.'PB' ) THEN         IF( C3.EQ.'TRF' ) THEN            IF( SNAME ) THEN               IF( N2.LE.64 ) THEN                  NB = 1               ELSE                  NB = 32               END IF            ELSE               IF( N2.LE.64 ) THEN                  NB = 1               ELSE                  NB = 32               END IF            END IF         END IF      ELSE IF( C2.EQ.'TR' ) THEN         IF( C3.EQ.'TRI' ) THEN            IF( SNAME ) THEN               NB = 64            ELSE               NB = 64            END IF         END IF      ELSE IF( C2.EQ.'LA' ) THEN         IF( C3.EQ.'UUM' ) THEN            IF( SNAME ) THEN               NB = 64            ELSE               NB = 64            END IF         END IF      ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN         IF( C3.EQ.'EBZ' ) THEN            NB = 1         END IF      END IF      ILAENV = NB      RETURN*  200 CONTINUE**     ISPEC = 2:  minimum block size*      NBMIN = 2      IF( C2.EQ.'GE' ) THEN         IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.     $       C3.EQ.'QLF' ) THEN            IF( SNAME ) THEN               NBMIN = 2            ELSE               NBMIN = 2            END IF         ELSE IF( C3.EQ.'HRD' ) THEN            IF( SNAME ) THEN               NBMIN = 2            ELSE               NBMIN = 2            END IF         ELSE IF( C3.EQ.'BRD' ) THEN            IF( SNAME ) THEN               NBMIN = 2            ELSE               NBMIN = 2            END IF         ELSE IF( C3.EQ.'TRI' ) THEN            IF( SNAME ) THEN               NBMIN = 2            ELSE               NBMIN = 2            END IF         END IF      ELSE IF( C2.EQ.'SY' ) THEN         IF( C3.EQ.'TRF' ) THEN            IF( SNAME ) THEN               NBMIN = 8            ELSE               NBMIN = 8            END IF         ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN            NBMIN = 2         END IF      ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN         IF( C3.EQ.'TRD' ) THEN            NBMIN = 2         END IF      ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN         IF( C3( 1:1 ).EQ.'G' ) THEN            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.     $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.     $          C4.EQ.'BR' ) THEN               NBMIN = 2            END IF         ELSE IF( C3( 1:1 ).EQ.'M' ) THEN            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.     $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.     $          C4.EQ.'BR' ) THEN               NBMIN = 2            END IF         END IF      ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN         IF( C3( 1:1 ).EQ.'G' ) THEN            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.     $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.     $          C4.EQ.'BR' ) THEN               NBMIN = 2            END IF         ELSE IF( C3( 1:1 ).EQ.'M' ) THEN            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.     $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.     $          C4.EQ.'BR' ) THEN               NBMIN = 2            END IF         END IF      END IF      ILAENV = NBMIN      RETURN*  300 CONTINUE**     ISPEC = 3:  crossover point*      NX = 0      IF( C2.EQ.'GE' ) THEN         IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.     $       C3.EQ.'QLF' ) THEN            IF( SNAME ) THEN               NX = 128            ELSE               NX = 128            END IF         ELSE IF( C3.EQ.'HRD' ) THEN            IF( SNAME ) THEN               NX = 128            ELSE               NX = 128            END IF         ELSE IF( C3.EQ.'BRD' ) THEN            IF( SNAME ) THEN               NX = 128            ELSE               NX = 128            END IF         END IF      ELSE IF( C2.EQ.'SY' ) THEN         IF( SNAME .AND. C3.EQ.'TRD' ) THEN            NX = 32         END IF      ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN         IF( C3.EQ.'TRD' ) THEN            NX = 32         END IF      ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN         IF( C3( 1:1 ).EQ.'G' ) THEN            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.     &          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.     $          C4.EQ.'BR' ) THEN               NX = 128            END IF         END IF      ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN         IF( C3( 1:1 ).EQ.'G' ) THEN            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.     $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.     $          C4.EQ.'BR' ) THEN               NX = 128            END IF         END IF      END IF      ILAENV = NX      RETURN*  400 CONTINUE**     ISPEC = 4:  number of shifts (used by xHSEQR)*      ILAENV = 6      RETURN*  500 CONTINUE**     ISPEC = 5:  minimum column dimension (not used)*      ILAENV = 2      RETURN*  600 CONTINUE **     ISPEC = 6:  crossover point for SVD (used by xGELSS and xGESVD)*      ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )      RETURN*  700 CONTINUE**     ISPEC = 7:  number of processors (not used)*      ILAENV = 1      RETURN*  800 CONTINUE**     ISPEC = 8:  crossover point for multishift (used by xHSEQR)*      ILAENV = 50      RETURN*  900 CONTINUE**     ISPEC = 9:  maximum size of the subproblems at the bottom of the*                 computation tree in the divide-and-conquer algorithm*                 (used by xGELSD and xGESDD)*      ILAENV = 25      RETURN* 1000 CONTINUE**     ISPEC = 10: ieee NaN arithmetic can be trusted not to trap*      ILAENV = 0      RETURN* 1100 CONTINUE**     ISPEC = 11: infinity arithmetic can be trusted not to trap*      ILAENV = 0      RETURN**     End of ILAENV*      END!==========================================================================      LOGICAL          FUNCTION LSAME( CA, CB )**  -- LAPACK auxiliary routine (version 3.0) --*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,*     Courant Institute, Argonne National Lab, and Rice University*     September 30, 1994**     .. Scalar Arguments ..      CHARACTER          CA, CB*     ..**  Purpose*  =======**  LSAME returns .TRUE. if CA is the same letter as CB regardless of*  case.**  Arguments*  =========**  CA      (input) CHARACTER*1*  CB      (input) CHARACTER*1*          CA and CB specify the single characters to be compared.** =====================================================================**     .. Intrinsic Functions ..      INTRINSIC          ICHAR*     ..*     .. Local Scalars ..      INTEGER            INTA, INTB, ZCODE*     ..*     .. Executable Statements ..**     Test if the characters are equal*      LSAME = CA.EQ.CB      IF( LSAME )     $   RETURN**     Now test for equivalence if both characters are alphabetic.*      ZCODE = ICHAR( 'Z' )**     Use 'Z' rather than 'A' so that ASCII can be detected on Prime*     machines, on which ICHAR returns a value with bit 8 set.*     ICHAR('A') on Prime machines returns 193 which is the same as*     ICHAR('A') on an EBCDIC machine.*      INTA = ICHAR( CA )      INTB = ICHAR( CB )*      IF( ZCODE.EQ.90 .OR. ZCODE.EQ.122 ) THEN**        ASCII is assumed - ZCODE is the ASCII code of either lower or*        upper case 'Z'.*         IF( INTA.GE.97 .AND. INTA.LE.122 ) INTA = INTA - 32         IF( INTB.GE.97 .AND. INTB.LE.122 ) INTB = INTB - 32*      ELSE IF( ZCODE.EQ.233 .OR. ZCODE.EQ.169 ) THEN**        EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or*        upper case 'Z'.*         IF( INTA.GE.129 .AND. INTA.LE.137 .OR.     $       INTA.GE.145 .AND. INTA.LE.153 .OR.     $       INTA.GE.162 .AND. INTA.LE.169 ) INTA = INTA + 64         IF( INTB.GE.129 .AND. INTB.LE.137 .OR.     $       INTB.GE.145 .AND. INTB.LE.153 .OR.     $       INTB.GE.162 .AND. INTB.LE.169 ) INTB = INTB + 64*      ELSE IF( ZCODE.EQ.218 .OR. ZCODE.EQ.250 ) THEN**        ASCII is assumed, on Prime machines - ZCODE is the ASCII code*        plus 128 of either lower or upper case 'Z'.*         IF( INTA.GE.225 .AND. INTA.LE.250 ) INTA = INTA - 32         IF( INTB.GE.225 .AND. INTB.LE.250 ) INTB = INTB - 32      END IF      LSAME = INTA.EQ.INTB**     RETURN**     End of LSAME*      END!==========================================================================      subroutine saxpy(n,sa,sx,incx,sy,incy)cc     constant times a vector plus a vector.c     uses unrolled loop for increments equal to one.c     jack dongarra, linpack, 3/11/78.c     modified 12/3/93, array(1) declarations changed to array(*)c      real sx(*),sy(*),sa      integer i,incx,incy,ix,iy,m,mp1,nc      if(n.le.0)return      if (sa .eq. 0.0) return      if(incx.eq.1.and.incy.eq.1)go to 20cc        code for unequal increments or equal incrementsc          not equal to 1c      ix = 1      iy = 1

⌨️ 快捷键说明

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