?? plastic.f90
字號(hào):
! ===============================================================
! | 文件功能:
! | 本文件的各個(gè)子程序?yàn)閷?shí)現(xiàn)彈塑性分析需要的公共模塊
! | 創(chuàng)建者:凌道盛
! | 時(shí) 間:2002/04/13
! | 變量說(shuō)明:
! | sflow — 流動(dòng)矢量(屈服函數(shù)對(duì)應(yīng)力矢量的偏導(dǎo)數(shù))
! | pflow — 塑性流動(dòng)矢量(屈服函數(shù)對(duì)塑性應(yīng)力矢量的偏導(dǎo)數(shù))
! | dstrn — 應(yīng)變?cè)隽?! | strsp — 預(yù)應(yīng)力
! | dmate — 彈性矩陣
! | dmatp — 彈塑性矩陣
! | hardk — 強(qiáng)化規(guī)律(屈服函數(shù)對(duì)內(nèi)時(shí)變量κ的偏導(dǎo)數(shù))
! ===============================================================
DOUBLE PRECISION FUNCTION Lamda( dmate, strsg, strsp, dstrn, &
sflow, pflow, hardk, ietyp, itype )
! 計(jì)算dλ
USE CtrlData
IMPLICIT DOUBLE PRECISION( a-h, o-z )
DIMENSION sflow( 6 ), pflow( 6 )
DIMENSION vwork( 6 ), dstrn( 6 )
DIMENSION strsp( 6 ), strsg( 6 ), dmate( 6, 6 )
! 計(jì)算(塑性)流動(dòng)矢量轉(zhuǎn)置與彈性矩陣的乘積
DO istrs = 1, 6
vwork( istrs ) = 0.0D0
DO jstrs = 1, 6
vwork( istrs ) = vwork( istrs ) + &
sflow( jstrs ) * dmate( jstrs, istrs )
END DO
END DO
! 先計(jì)算dλ的分子部分
partn = 0.0D0
DO istrs = 1, 6
partn = partn + vwork( istrs ) * dstrn( istrs )
END DO
! 再計(jì)算dλ的分母部分
partd = 0.0D0
DO istrs = 1, 6
partd = partd + vwork( istrs ) * sflow( istrs )
partd = partd - vwork( istrs ) * pflow( istrs )
END DO
dkdla = DkDlamda( sflow, strsg, strsp, ietyp, itype )
IF( nerrc .NE. 0 ) RETURN
partd = partd - hardk * dkdla
Lamda = partn / partd
IF( Lamda .LT. 0.0D0 ) Lamda = 0.0D0
END
FUNCTION DkDlamda( sflow, strsg, strsp, ietyp, itype )
! ================================================================
! | 模塊功能:計(jì)算dκ/dλ
! ================================================================
USE CtrlData
IMPLICIT DOUBLE PRECISION( a-h, o-z )
DIMENSION strsg( 6 ), vwork( 6 )
DIMENSION sflow( 6 ), vtemp( 6 )
DIMENSION strsp( 6 ), vtran( 6 )
CALL ReorderStress( strsg, vwork, ietyp, 0 )
CALL ReorderStress( strsp, vtran, ietyp, 0 )
CALL ReorderStress( sflow, vtemp, ietyp, 0 )
DO istrs = 1, 6
vwork( istrs ) = vwork( istrs ) + vtran( istrs )
END DO
reslt = 0.0D0
SELECT CASE( itype )
CASE( 1 )
!...........塑性功
DO istrs = 1, 6
reslt = reslt + vwork( istrs ) * vtemp( istrs )
END DO
CASE( 2 )
!...........塑性體積應(yīng)變
reslt = vtemp(1) + vtemp(2) + vtemp(3)
CASE( 3 )
!...........塑性等效應(yīng)變
DO istrs = 1, 6
reslt = reslt + vtemp( istrs ) * vtemp( istrs )
END DO
reslt = DSQRT( reslt )
CASE DEFAULT
nerrc = 3403546
WRITE( 12, 2000 )
END SELECT
DkDlamda = reslt
2000 FORMAT( //2x, '致命錯(cuò)誤:選擇了無(wú)效的內(nèi)時(shí)變量!' )
END
SUBROUTINE DEPMatix( dmate, dmatp, strsg, strsp, sflow, &
pflow, hardk, ietyp, itype )
! 計(jì)算彈塑性矩陣Dep
USE CtrlData
IMPLICIT DOUBLE PRECISION( a-h, o-z )
DIMENSION dmate( 6, 6 ), strsg( 6 ), sflow( 6 )
DIMENSION dmatp( 6, 6 ), pflow( 6 ), vwork( 6 ), strsp( 6 )
! 計(jì)算(塑性)流動(dòng)矢量轉(zhuǎn)置與彈性矩陣的乘積
DO istrs = 1, 6
vwork( istrs ) = 0.0D0
DO jstrs = 1, 6
vwork( istrs ) = vwork( istrs ) + &
sflow( jstrs ) * dmate( jstrs, istrs )
dmatp( istrs, jstrs ) = dmate( istrs, jstrs )
END DO
END DO
! 計(jì)算A的分母部分
apara = 0.0D0
DO istrs = 1, 6
apara = apara + vwork( istrs ) * sflow( istrs )
apara = apara - vwork( istrs ) * pflow( istrs )
END DO
dkdla = DkDlamda( sflow, strsg, strsp, ietyp, itype )
IF( nerrc .NE. 0 ) RETURN
apara = apara - hardk * dkdla
DO istrs = 1, 6
DO jstrs = 1, 6
dmatp( istrs, jstrs ) = dmatp( istrs, jstrs ) - &
vwork( istrs ) * vwork( jstrs ) / apara
END DO
END DO
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -