slaqr5.f.html
来自「famous linear algebra library (LAPACK) p」· HTML 代码 · 共 837 行 · 第 1/5 页
HTML
837 行
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== KZS and KNZ deal with the band of zeros
</span><span class="comment">*</span><span class="comment"> . along the diagonal of one of the triangular
</span><span class="comment">*</span><span class="comment"> . blocks. ====
</span><span class="comment">*</span><span class="comment">
</span> KZS = ( J4-J2 ) - ( NS+1 )
KNZ = NS + 1
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Horizontal multiply ====
</span><span class="comment">*</span><span class="comment">
</span> DO 190 JCOL = MIN( NDCOL, KBOT ) + 1, JBOT, NH
JLEN = MIN( NH, JBOT-JCOL+1 )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Copy bottom of H to top+KZS of scratch ====
</span><span class="comment">*</span><span class="comment"> (The first KZS rows get multiplied by zero.) ====
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SLACPY.670"></a><a href="slacpy.f.html#SLACPY.1">SLACPY</a>( <span class="string">'ALL'</span>, KNZ, JLEN, H( INCOL+1+J2, JCOL ),
$ LDH, WH( KZS+1, 1 ), LDWH )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply by U21' ====
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SLASET.675"></a><a href="slaset.f.html#SLASET.1">SLASET</a>( <span class="string">'ALL'</span>, KZS, JLEN, ZERO, ZERO, WH, LDWH )
CALL STRMM( <span class="string">'L'</span>, <span class="string">'U'</span>, <span class="string">'C'</span>, <span class="string">'N'</span>, KNZ, JLEN, ONE,
$ U( J2+1, 1+KZS ), LDU, WH( KZS+1, 1 ),
$ LDWH )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply top of H by U11' ====
</span><span class="comment">*</span><span class="comment">
</span> CALL SGEMM( <span class="string">'C'</span>, <span class="string">'N'</span>, I2, JLEN, J2, ONE, U, LDU,
$ H( INCOL+1, JCOL ), LDH, ONE, WH, LDWH )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Copy top of H bottom of WH ====
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SLACPY.687"></a><a href="slacpy.f.html#SLACPY.1">SLACPY</a>( <span class="string">'ALL'</span>, J2, JLEN, H( INCOL+1, JCOL ), LDH,
$ WH( I2+1, 1 ), LDWH )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply by U21' ====
</span><span class="comment">*</span><span class="comment">
</span> CALL STRMM( <span class="string">'L'</span>, <span class="string">'L'</span>, <span class="string">'C'</span>, <span class="string">'N'</span>, J2, JLEN, ONE,
$ U( 1, I2+1 ), LDU, WH( I2+1, 1 ), LDWH )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply by U22 ====
</span><span class="comment">*</span><span class="comment">
</span> CALL SGEMM( <span class="string">'C'</span>, <span class="string">'N'</span>, I4-I2, JLEN, J4-J2, ONE,
$ U( J2+1, I2+1 ), LDU,
$ H( INCOL+1+J2, JCOL ), LDH, ONE,
$ WH( I2+1, 1 ), LDWH )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Copy it back ====
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SLACPY.704"></a><a href="slacpy.f.html#SLACPY.1">SLACPY</a>( <span class="string">'ALL'</span>, KDU, JLEN, WH, LDWH,
$ H( INCOL+1, JCOL ), LDH )
190 CONTINUE
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Vertical multiply ====
</span><span class="comment">*</span><span class="comment">
</span> DO 200 JROW = JTOP, MAX( INCOL, KTOP ) - 1, NV
JLEN = MIN( NV, MAX( INCOL, KTOP )-JROW )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Copy right of H to scratch (the first KZS
</span><span class="comment">*</span><span class="comment"> . columns get multiplied by zero) ====
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SLACPY.716"></a><a href="slacpy.f.html#SLACPY.1">SLACPY</a>( <span class="string">'ALL'</span>, JLEN, KNZ, H( JROW, INCOL+1+J2 ),
$ LDH, WV( 1, 1+KZS ), LDWV )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply by U21 ====
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SLASET.721"></a><a href="slaset.f.html#SLASET.1">SLASET</a>( <span class="string">'ALL'</span>, JLEN, KZS, ZERO, ZERO, WV, LDWV )
CALL STRMM( <span class="string">'R'</span>, <span class="string">'U'</span>, <span class="string">'N'</span>, <span class="string">'N'</span>, JLEN, KNZ, ONE,
$ U( J2+1, 1+KZS ), LDU, WV( 1, 1+KZS ),
$ LDWV )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply by U11 ====
</span><span class="comment">*</span><span class="comment">
</span> CALL SGEMM( <span class="string">'N'</span>, <span class="string">'N'</span>, JLEN, I2, J2, ONE,
$ H( JROW, INCOL+1 ), LDH, U, LDU, ONE, WV,
$ LDWV )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Copy left of H to right of scratch ====
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SLACPY.734"></a><a href="slacpy.f.html#SLACPY.1">SLACPY</a>( <span class="string">'ALL'</span>, JLEN, J2, H( JROW, INCOL+1 ), LDH,
$ WV( 1, 1+I2 ), LDWV )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply by U21 ====
</span><span class="comment">*</span><span class="comment">
</span> CALL STRMM( <span class="string">'R'</span>, <span class="string">'L'</span>, <span class="string">'N'</span>, <span class="string">'N'</span>, JLEN, I4-I2, ONE,
$ U( 1, I2+1 ), LDU, WV( 1, 1+I2 ), LDWV )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply by U22 ====
</span><span class="comment">*</span><span class="comment">
</span> CALL SGEMM( <span class="string">'N'</span>, <span class="string">'N'</span>, JLEN, I4-I2, J4-J2, ONE,
$ H( JROW, INCOL+1+J2 ), LDH,
$ U( J2+1, I2+1 ), LDU, ONE, WV( 1, 1+I2 ),
$ LDWV )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Copy it back ====
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SLACPY.751"></a><a href="slacpy.f.html#SLACPY.1">SLACPY</a>( <span class="string">'ALL'</span>, JLEN, KDU, WV, LDWV,
$ H( JROW, INCOL+1 ), LDH )
200 CONTINUE
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply Z (also vertical) ====
</span><span class="comment">*</span><span class="comment">
</span> IF( WANTZ ) THEN
DO 210 JROW = ILOZ, IHIZ, NV
JLEN = MIN( NV, IHIZ-JROW+1 )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Copy right of Z to left of scratch (first
</span><span class="comment">*</span><span class="comment"> . KZS columns get multiplied by zero) ====
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SLACPY.764"></a><a href="slacpy.f.html#SLACPY.1">SLACPY</a>( <span class="string">'ALL'</span>, JLEN, KNZ,
$ Z( JROW, INCOL+1+J2 ), LDZ,
$ WV( 1, 1+KZS ), LDWV )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply by U12 ====
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SLASET.770"></a><a href="slaset.f.html#SLASET.1">SLASET</a>( <span class="string">'ALL'</span>, JLEN, KZS, ZERO, ZERO, WV,
$ LDWV )
CALL STRMM( <span class="string">'R'</span>, <span class="string">'U'</span>, <span class="string">'N'</span>, <span class="string">'N'</span>, JLEN, KNZ, ONE,
$ U( J2+1, 1+KZS ), LDU, WV( 1, 1+KZS ),
$ LDWV )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply by U11 ====
</span><span class="comment">*</span><span class="comment">
</span> CALL SGEMM( <span class="string">'N'</span>, <span class="string">'N'</span>, JLEN, I2, J2, ONE,
$ Z( JROW, INCOL+1 ), LDZ, U, LDU, ONE,
$ WV, LDWV )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Copy left of Z to right of scratch ====
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SLACPY.784"></a><a href="slacpy.f.html#SLACPY.1">SLACPY</a>( <span class="string">'ALL'</span>, JLEN, J2, Z( JROW, INCOL+1 ),
$ LDZ, WV( 1, 1+I2 ), LDWV )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply by U21 ====
</span><span class="comment">*</span><span class="comment">
</span> CALL STRMM( <span class="string">'R'</span>, <span class="string">'L'</span>, <span class="string">'N'</span>, <span class="string">'N'</span>, JLEN, I4-I2, ONE,
$ U( 1, I2+1 ), LDU, WV( 1, 1+I2 ),
$ LDWV )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Multiply by U22 ====
</span><span class="comment">*</span><span class="comment">
</span> CALL SGEMM( <span class="string">'N'</span>, <span class="string">'N'</span>, JLEN, I4-I2, J4-J2, ONE,
$ Z( JROW, INCOL+1+J2 ), LDZ,
$ U( J2+1, I2+1 ), LDU, ONE,
$ WV( 1, 1+I2 ), LDWV )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== Copy the result back to Z ====
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SLACPY.802"></a><a href="slacpy.f.html#SLACPY.1">SLACPY</a>( <span class="string">'ALL'</span>, JLEN, KDU, WV, LDWV,
$ Z( JROW, INCOL+1 ), LDZ )
210 CONTINUE
END IF
END IF
END IF
220 CONTINUE
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ==== End of <a name="SLAQR5.810"></a><a href="slaqr5.f.html#SLAQR5.1">SLAQR5</a> ====
</span><span class="comment">*</span><span class="comment">
</span> END
</pre>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?