📄 dopla.f
字号:
IF( LSAMEN( 3, C3, 'TRF' ) ) THEN DO 10 I = MIN( M, N ), 1, -1 WL = MAX( 0, MIN( KL, M-I ) ) WU = MAX( 0, MIN( KL+KU, N-I ) ) MULTS = MULTS + WL*( 1.D0+WU ) ADDS = ADDS + WL*WU 10 CONTINUE** xGBTRS: N, NRHS, KL, KU => M, N, KL, KU* ELSE IF( LSAMEN( 3, C3, 'TRS' ) ) THEN WL = MAX( 0, MIN( KL, M-1 ) ) WU = MAX( 0, MIN( KL+KU, M-1 ) ) MULTS = EN*( EM*( WL+1.D0+WU )-0.5D0* $ ( WL*( WL+1.D0 )+WU*( WU+1.D0 ) ) ) ADDS = EN*( EM*( WL+WU )-0.5D0* $ ( WL*( WL+1.D0 )+WU*( WU+1.D0 ) ) )* END IF** --------------------------------------* PO: POsitive definite matrices* PP: Positive definite Packed matrices* --------------------------------------* ELSE IF( LSAMEN( 2, C2, 'PO' ) .OR. LSAMEN( 2, C2, 'PP' ) ) THEN** xPOTRF: N => M* IF( LSAMEN( 3, C3, 'TRF' ) ) THEN MULTS = EM*( 1.D0 / 3.D0+EM*( 1.D0 / 2.D0+EM*( 1.D0 / $ 6.D0 ) ) ) ADDS = ( 1.D0 / 6.D0 )*EM*( -1.D0+EM*EM )** xPOTRS: N, NRHS => M, N* ELSE IF( LSAMEN( 3, C3, 'TRS' ) ) THEN MULTS = EN*( EM*( EM+1.D0 ) ) ADDS = EN*( EM*( EM-1.D0 ) )** xPOTRI: N => M* ELSE IF( LSAMEN( 3, C3, 'TRI' ) ) THEN MULTS = EM*( 2.D0 / 3.D0+EM*( 1.D0+EM*( 1.D0 / 3.D0 ) ) ) ADDS = EM*( 1.D0 / 6.D0+EM*( -1.D0 / 2.D0+EM*( 1.D0 / $ 3.D0 ) ) )* END IF** ------------------------------------* PB: Positive definite Band matrices* ------------------------------------* ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN** xPBTRF: N, K => M, KL* IF( LSAMEN( 3, C3, 'TRF' ) ) THEN MULTS = EK*( -2.D0 / 3.D0+EK*( -1.D0+EK*( -1.D0 / 3.D0 ) ) ) $ + EM*( 1.D0+EK*( 3.D0 / 2.D0+EK*( 1.D0 / 2.D0 ) ) ) ADDS = EK*( -1.D0 / 6.D0+EK*( -1.D0 / 2.D0+EK*( -1.D0 / $ 3.D0 ) ) ) + EM*( EK / 2.D0*( 1.D0+EK ) )** xPBTRS: N, NRHS, K => M, N, KL* ELSE IF( LSAMEN( 3, C3, 'TRS' ) ) THEN MULTS = EN*( ( 2*EM-EK )*( EK+1.D0 ) ) ADDS = EN*( EK*( 2*EM-( EK+1.D0 ) ) )* END IF** ----------------------------------* PT: Positive definite Tridiagonal* ----------------------------------* ELSE IF( LSAMEN( 2, C2, 'PT' ) ) THEN** xPTTRF: N => M* IF( LSAMEN( 3, C3, 'TRF' ) ) THEN MULTS = 2*( EM-1 ) ADDS = EM - 1** xPTTRS: N, NRHS => M, N* ELSE IF( LSAMEN( 3, C3, 'TRS' ) ) THEN MULTS = EN*( 3*EM-2 ) ADDS = EN*( 2*( EM-1 ) )** xPTSV: N, NRHS => M, N* ELSE IF( LSAMEN( 3, C3, 'SV ' ) ) THEN MULTS = 2*( EM-1 ) + EN*( 3*EM-2 ) ADDS = EM - 1 + EN*( 2*( EM-1 ) ) END IF** --------------------------------------------------------* SY: SYmmetric indefinite matrices* SP: Symmetric indefinite Packed matrices* HE: HErmitian indefinite matrices (complex only)* HP: Hermitian indefinite Packed matrices (complex only)* --------------------------------------------------------* ELSE IF( LSAMEN( 2, C2, 'SY' ) .OR. LSAMEN( 2, C2, 'SP' ) .OR. $ LSAMEN( 3, SUBNAM, 'CHE' ) .OR. $ LSAMEN( 3, SUBNAM, 'ZHE' ) .OR. $ LSAMEN( 3, SUBNAM, 'CHP' ) .OR. $ LSAMEN( 3, SUBNAM, 'ZHP' ) ) THEN** xSYTRF: N => M* IF( LSAMEN( 3, C3, 'TRF' ) ) THEN MULTS = EM*( 10.D0 / 3.D0+EM* $ ( 1.D0 / 2.D0+EM*( 1.D0 / 6.D0 ) ) ) ADDS = EM / 6.D0*( -1.D0+EM*EM )** xSYTRS: N, NRHS => M, N* ELSE IF( LSAMEN( 3, C3, 'TRS' ) ) THEN MULTS = EN*EM*EM ADDS = EN*( EM*( EM-1.D0 ) )** xSYTRI: N => M* ELSE IF( LSAMEN( 3, C3, 'TRI' ) ) THEN MULTS = EM*( 2.D0 / 3.D0+EM*EM*( 1.D0 / 3.D0 ) ) ADDS = EM*( -1.D0 / 3.D0+EM*EM*( 1.D0 / 3.D0 ) )** xSYTRD, xSYTD2: N => M* ELSE IF( LSAMEN( 3, C3, 'TRD' ) .OR. LSAMEN( 3, C3, 'TD2' ) ) $ THEN IF( M.EQ.1 ) THEN MULTS = 0.D0 ADDS = 0.D0 ELSE MULTS = -15.D0 + EM*( -1.D0 / 6.D0+EM* $ ( 5.D0 / 2.D0+EM*( 2.D0 / 3.D0 ) ) ) ADDS = -4.D0 + EM*( -8.D0 / 3.D0+EM* $ ( 1.D0+EM*( 2.D0 / 3.D0 ) ) ) END IF END IF** -------------------* Triangular matrices* -------------------* ELSE IF( LSAMEN( 2, C2, 'TR' ) .OR. LSAMEN( 2, C2, 'TP' ) ) THEN** xTRTRS: N, NRHS => M, N* IF( LSAMEN( 3, C3, 'TRS' ) ) THEN MULTS = EN*EM*( EM+1.D0 ) / 2.D0 ADDS = EN*EM*( EM-1.D0 ) / 2.D0** xTRTRI: N => M* ELSE IF( LSAMEN( 3, C3, 'TRI' ) ) THEN MULTS = EM*( 1.D0 / 3.D0+EM*( 1.D0 / 2.D0+EM*( 1.D0 / $ 6.D0 ) ) ) ADDS = EM*( 1.D0 / 3.D0+EM*( -1.D0 / 2.D0+EM*( 1.D0 / $ 6.D0 ) ) )* END IF* ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN** xTBTRS: N, NRHS, K => M, N, KL* IF( LSAMEN( 3, C3, 'TRS' ) ) THEN MULTS = EN*( EM*( EM+1.D0 ) / 2.D0-( EM-EK-1.D0 )* $ ( EM-EK ) / 2.D0 ) ADDS = EN*( EM*( EM-1.D0 ) / 2.D0-( EM-EK-1.D0 )*( EM-EK ) / $ 2.D0 ) END IF** --------------------* Trapezoidal matrices* --------------------* ELSE IF( LSAMEN( 2, C2, 'TZ' ) ) THEN** xTZRQF: M, N => M, N* IF( LSAMEN( 3, C3, 'RQF' ) ) THEN EMN = MIN( M, N ) MULTS = 3*EM*( EN-EM+1 ) + ( 2*EN-2*EM+3 )* $ ( EM*EM-EMN*( EMN+1 ) / 2 ) ADDS = ( EN-EM+1 )*( EM+2*EM*EM-EMN*( EMN+1 ) ) END IF** -------------------* Orthogonal matrices* -------------------* ELSE IF( ( SORD .AND. LSAMEN( 2, C2, 'OR' ) ) .OR. $ ( CORZ .AND. LSAMEN( 2, C2, 'UN' ) ) ) THEN** -MQR, -MLQ, -MQL, or -MRQ: M, N, K, SIDE => M, N, KL, KU* where KU<= 0 indicates SIDE = 'L'* and KU> 0 indicates SIDE = 'R'* IF( LSAMEN( 3, C3, 'MQR' ) .OR. LSAMEN( 3, C3, 'MLQ' ) .OR. $ LSAMEN( 3, C3, 'MQL' ) .OR. LSAMEN( 3, C3, 'MRQ' ) ) THEN IF( KU.LE.0 ) THEN MULTS = EK*EN*( 2.D0*EM+2.D0-EK ) ADDS = EK*EN*( 2.D0*EM+1.D0-EK ) ELSE MULTS = EK*( EM*( 2.D0*EN-EK )+ $ ( EM+EN+( 1.D0-EK ) / 2.D0 ) ) ADDS = EK*EM*( 2.D0*EN+1.D0-EK ) END IF** -GQR or -GQL: M, N, K => M, N, KL* ELSE IF( LSAMEN( 3, C3, 'GQR' ) .OR. LSAMEN( 3, C3, 'GQL' ) ) $ THEN MULTS = EK*( -5.D0 / 3.D0+( 2.D0*EN-EK )+ $ ( 2.D0*EM*EN+EK*( ( 2.D0 / 3.D0 )*EK-EM-EN ) ) ) ADDS = EK*( 1.D0 / 3.D0+( EN-EM )+ $ ( 2.D0*EM*EN+EK*( ( 2.D0 / 3.D0 )*EK-EM-EN ) ) )** -GLQ or -GRQ: M, N, K => M, N, KL* ELSE IF( LSAMEN( 3, C3, 'GLQ' ) .OR. LSAMEN( 3, C3, 'GRQ' ) ) $ THEN MULTS = EK*( -2.D0 / 3.D0+( EM+EN-EK )+ $ ( 2.D0*EM*EN+EK*( ( 2.D0 / 3.D0 )*EK-EM-EN ) ) ) ADDS = EK*( 1.D0 / 3.D0+( EM-EN )+ $ ( 2.D0*EM*EN+EK*( ( 2.D0 / 3.D0 )*EK-EM-EN ) ) )* END IF* END IF* DOPLA = MULFAC*MULTS + ADDFAC*ADDS* RETURN** End of DOPLA* END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -