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

📄 zlalsa.f

📁 计算矩阵的经典开源库.全世界都在用它.相信你也不能例外.
💻 F
📖 第 1 页 / 共 2 页
字号:
         DO 40 JCOL = 1, NRHS            DO 30 JROW = NLF, NLF + NL - 1               J = J + 1               RWORK( J ) = DIMAG( B( JROW, JCOL ) )   30       CONTINUE   40    CONTINUE         OPS = OPS + DOPBL3( 'DGEMM ', NL, NRHS, NL )          CALL DGEMM( 'T', 'N', NL, NRHS, NL, ONE, U( NLF, 1 ), LDU,     $               RWORK( 1+NL*NRHS*2 ), NL, ZERO, RWORK( 1+NL*NRHS ),     $               NL )         JREAL = 0         JIMAG = NL*NRHS         DO 60 JCOL = 1, NRHS            DO 50 JROW = NLF, NLF + NL - 1               JREAL = JREAL + 1               JIMAG = JIMAG + 1               BX( JROW, JCOL ) = DCMPLX( RWORK( JREAL ),     $                            RWORK( JIMAG ) )   50       CONTINUE   60    CONTINUE**        Since B and BX are complex, the following call to DGEMM*        is performed in two steps (real and imaginary parts).**        CALL DGEMM( 'T', 'N', NR, NRHS, NR, ONE, U( NRF, 1 ), LDU,*    $               B( NRF, 1 ), LDB, ZERO, BX( NRF, 1 ), LDBX )*         J = NR*NRHS*2         DO 80 JCOL = 1, NRHS            DO 70 JROW = NRF, NRF + NR - 1               J = J + 1               RWORK( J ) = DBLE( B( JROW, JCOL ) )   70       CONTINUE   80    CONTINUE         OPS = OPS + DOPBL3( 'DGEMM ', NR, NRHS, NR )          CALL DGEMM( 'T', 'N', NR, NRHS, NR, ONE, U( NRF, 1 ), LDU,     $               RWORK( 1+NR*NRHS*2 ), NR, ZERO, RWORK( 1 ), NR )         J = NR*NRHS*2         DO 100 JCOL = 1, NRHS            DO 90 JROW = NRF, NRF + NR - 1               J = J + 1               RWORK( J ) = DIMAG( B( JROW, JCOL ) )   90       CONTINUE  100    CONTINUE         OPS = OPS + DOPBL3( 'DGEMM ', NR, NRHS, NR )          CALL DGEMM( 'T', 'N', NR, NRHS, NR, ONE, U( NRF, 1 ), LDU,     $               RWORK( 1+NR*NRHS*2 ), NR, ZERO, RWORK( 1+NR*NRHS ),     $               NR )         JREAL = 0         JIMAG = NR*NRHS         DO 120 JCOL = 1, NRHS            DO 110 JROW = NRF, NRF + NR - 1               JREAL = JREAL + 1               JIMAG = JIMAG + 1               BX( JROW, JCOL ) = DCMPLX( RWORK( JREAL ),     $                            RWORK( JIMAG ) )  110       CONTINUE  120    CONTINUE*  130 CONTINUE**     Next copy the rows of B that correspond to unchanged rows*     in the bidiagonal matrix to BX.*      DO 140 I = 1, ND         IC = IWORK( INODE+I-1 )         CALL ZCOPY( NRHS, B( IC, 1 ), LDB, BX( IC, 1 ), LDBX )  140 CONTINUE**     Finally go through the left singular vector matrices of all*     the other subproblems bottom-up on the tree.*      J = 2**NLVL      SQRE = 0*      DO 160 LVL = NLVL, 1, -1         LVL2 = 2*LVL - 1**        find the first node LF and last node LL on*        the current level LVL*         IF( LVL.EQ.1 ) THEN            LF = 1            LL = 1         ELSE            LF = 2**( LVL-1 )            LL = 2*LF - 1         END IF         DO 150 I = LF, LL            IM1 = I - 1            IC = IWORK( INODE+IM1 )            NL = IWORK( NDIML+IM1 )            NR = IWORK( NDIMR+IM1 )            NLF = IC - NL            NRF = IC + 1            J = J - 1            CALL ZLALS0( ICOMPQ, NL, NR, SQRE, NRHS, BX( NLF, 1 ), LDBX,     $                   B( NLF, 1 ), LDB, PERM( NLF, LVL ),     $                   GIVPTR( J ), GIVCOL( NLF, LVL2 ), LDGCOL,     $                   GIVNUM( NLF, LVL2 ), LDU, POLES( NLF, LVL2 ),     $                   DIFL( NLF, LVL ), DIFR( NLF, LVL2 ),     $                   Z( NLF, LVL ), K( J ), C( J ), S( J ), RWORK,     $                   INFO )  150    CONTINUE  160 CONTINUE      GO TO 330**     ICOMPQ = 1: applying back the right singular vector factors.*  170 CONTINUE**     First now go through the right singular vector matrices of all*     the tree nodes top-down.*      J = 0      DO 190 LVL = 1, NLVL         LVL2 = 2*LVL - 1**        Find the first node LF and last node LL on*        the current level LVL.*         IF( LVL.EQ.1 ) THEN            LF = 1            LL = 1         ELSE            LF = 2**( LVL-1 )            LL = 2*LF - 1         END IF         DO 180 I = LL, LF, -1            IM1 = I - 1            IC = IWORK( INODE+IM1 )            NL = IWORK( NDIML+IM1 )            NR = IWORK( NDIMR+IM1 )            NLF = IC - NL            NRF = IC + 1            IF( I.EQ.LL ) THEN               SQRE = 0            ELSE               SQRE = 1            END IF            J = J + 1            CALL ZLALS0( ICOMPQ, NL, NR, SQRE, NRHS, B( NLF, 1 ), LDB,     $                   BX( NLF, 1 ), LDBX, PERM( NLF, LVL ),     $                   GIVPTR( J ), GIVCOL( NLF, LVL2 ), LDGCOL,     $                   GIVNUM( NLF, LVL2 ), LDU, POLES( NLF, LVL2 ),     $                   DIFL( NLF, LVL ), DIFR( NLF, LVL2 ),     $                   Z( NLF, LVL ), K( J ), C( J ), S( J ), RWORK,     $                   INFO )  180    CONTINUE  190 CONTINUE**     The nodes on the bottom level of the tree were solved*     by DLASDQ. The corresponding right singular vector*     matrices are in explicit form. Apply them back.*      NDB1 = ( ND+1 ) / 2      DO 320 I = NDB1, ND         I1 = I - 1         IC = IWORK( INODE+I1 )         NL = IWORK( NDIML+I1 )         NR = IWORK( NDIMR+I1 )         NLP1 = NL + 1         IF( I.EQ.ND ) THEN            NRP1 = NR         ELSE            NRP1 = NR + 1         END IF         NLF = IC - NL         NRF = IC + 1**        Since B and BX are complex, the following call to DGEMM is*        performed in two steps (real and imaginary parts).**        CALL DGEMM( 'T', 'N', NLP1, NRHS, NLP1, ONE, VT( NLF, 1 ), LDU,*    $               B( NLF, 1 ), LDB, ZERO, BX( NLF, 1 ), LDBX )*         J = NLP1*NRHS*2         DO 210 JCOL = 1, NRHS            DO 200 JROW = NLF, NLF + NLP1 - 1               J = J + 1               RWORK( J ) = DBLE( B( JROW, JCOL ) )  200       CONTINUE  210    CONTINUE         OPS = OPS + DOPBL3( 'DGEMM ', NLP1, NRHS, NLP1 )          CALL DGEMM( 'T', 'N', NLP1, NRHS, NLP1, ONE, VT( NLF, 1 ), LDU,     $               RWORK( 1+NLP1*NRHS*2 ), NLP1, ZERO, RWORK( 1 ),     $               NLP1 )         J = NLP1*NRHS*2         DO 230 JCOL = 1, NRHS            DO 220 JROW = NLF, NLF + NLP1 - 1               J = J + 1               RWORK( J ) = DIMAG( B( JROW, JCOL ) )  220       CONTINUE  230    CONTINUE         OPS = OPS + DOPBL3( 'DGEMM ', NLP1, NRHS, NLP1 )          CALL DGEMM( 'T', 'N', NLP1, NRHS, NLP1, ONE, VT( NLF, 1 ), LDU,     $               RWORK( 1+NLP1*NRHS*2 ), NLP1, ZERO,     $               RWORK( 1+NLP1*NRHS ), NLP1 )         JREAL = 0         JIMAG = NLP1*NRHS         DO 250 JCOL = 1, NRHS            DO 240 JROW = NLF, NLF + NLP1 - 1               JREAL = JREAL + 1               JIMAG = JIMAG + 1               BX( JROW, JCOL ) = DCMPLX( RWORK( JREAL ),     $                            RWORK( JIMAG ) )  240       CONTINUE  250    CONTINUE**        Since B and BX are complex, the following call to DGEMM is*        performed in two steps (real and imaginary parts).**        CALL DGEMM( 'T', 'N', NRP1, NRHS, NRP1, ONE, VT( NRF, 1 ), LDU,*    $               B( NRF, 1 ), LDB, ZERO, BX( NRF, 1 ), LDBX )*         J = NRP1*NRHS*2         DO 270 JCOL = 1, NRHS            DO 260 JROW = NRF, NRF + NRP1 - 1               J = J + 1               RWORK( J ) = DBLE( B( JROW, JCOL ) )  260       CONTINUE  270    CONTINUE         OPS = OPS + DOPBL3( 'DGEMM ', NRP1, NRHS, NRP1 )          CALL DGEMM( 'T', 'N', NRP1, NRHS, NRP1, ONE, VT( NRF, 1 ), LDU,     $               RWORK( 1+NRP1*NRHS*2 ), NRP1, ZERO, RWORK( 1 ),     $               NRP1 )         J = NRP1*NRHS*2         DO 290 JCOL = 1, NRHS            DO 280 JROW = NRF, NRF + NRP1 - 1               J = J + 1               RWORK( J ) = DIMAG( B( JROW, JCOL ) )  280       CONTINUE  290    CONTINUE         OPS = OPS + DOPBL3( 'DGEMM ', NRP1, NRHS, NRP1 )          CALL DGEMM( 'T', 'N', NRP1, NRHS, NRP1, ONE, VT( NRF, 1 ), LDU,     $               RWORK( 1+NRP1*NRHS*2 ), NRP1, ZERO,     $               RWORK( 1+NRP1*NRHS ), NRP1 )         JREAL = 0         JIMAG = NRP1*NRHS         DO 310 JCOL = 1, NRHS            DO 300 JROW = NRF, NRF + NRP1 - 1               JREAL = JREAL + 1               JIMAG = JIMAG + 1               BX( JROW, JCOL ) = DCMPLX( RWORK( JREAL ),     $                            RWORK( JIMAG ) )  300       CONTINUE  310    CONTINUE*  320 CONTINUE*  330 CONTINUE*      RETURN**     End of ZLALSA*      END

⌨️ 快捷键说明

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