📄 yieldf.for
字号:
C$DEBUG
C$LARGE
SUBROUTINE YIELDF(AVECT,DEVIA,LPROP,MMATS,NCRIT,NSTR1,
. PROPS,SINT3,STEFF,THETA,VARJ2) !(Page 241)
C******************************************************************
C
C**** THIS SUBROUTINE EVALUATES THE FLOW VECTOR
C
C******************************************************************
DIMENSION AVECT(4),DEVIA(4),PROPS(MMATS,7),
. VECA1(4),VECA2(4),VECA3(4)
IF(STEFF.EQ.0.0) RETURN
FRICT=PROPS(LPROP,7)
TANTH=TAN(THETA)
TANT3=TAN(3.0*THETA)
SINTH=SIN(THETA)
COSTH=COS(THETA)
COST3=COS(3.0*THETA)
ROOT3=1.73205080757
C
C*** CALCULATE VECTOR A1
C
VECA1(1)=1.0
VECA1(2)=1.0
VECA1(3)=0.0
VECA1(4)=1.0
C
C*** CALCULATE VECTOR A2
C
DO 10 ISTR1=1,NSTR1
10 VECA2(ISTR1)=DEVIA(ISTR1)/(2.0*STEFF)
VECA2(3)=DEVIA(3)/STEFF
C
C*** CALCULATE VECTOR A3
C
VECA3(1)=DEVIA(2)*DEVIA(4)+VARJ2/3.0
VECA3(2)=DEVIA(1)*DEVIA(4)+VARJ2/3.0
VECA3(3)=-2.0*DEVIA(3)*DEVIA(4)
VECA3(4)=DEVIA(1)*DEVIA(2)-DEVIA(3)*DEVIA(3)+VARJ2/3.0
GO TO (1,2,3,4) NCRIT
C
C*** TRESCA
C
1 CONS1=0.0
ABTHE=ABS(THETA*57.29577951308)
IF(ABTHE.LT.29.0) GO TO 20
CONS2=ROOT3
CONS3=0.0
GO TO 40
20 CONS2=2.0*(COSTH+SINTH*TANT3)
CONS3=ROOT3*SINTH/(VARJ2*COST3)
GO TO 40
C
C*** VON MISES
C
2 CONS1=0.0
CONS2=ROOT3
CONS3=0.0
GO TO 40
C
C*** MOHR-COULOMB
C
3 CONS1=SIN(FRICT*0.017453292)/3.0
ABTHE=ABS(THETA*57.29577951308)
IF(ABTHE.LT.29.0) GO TO 30
CONS3=0.0
PLUMI=1.0
IF(THETA.GT.0.0) PLUMI=-1.0
CONS2=0.5*(ROOT3+PLUMI*CONS1*ROOT3)
GO TO 40
30 CONS2=COSTH*((1.0+TANTH*TANT3)+CONS1*(TANT3-TANTH)*ROOT3)
CONS3=(ROOT3*SINTH+3.0*CONS1*COSTH)/(2.0*VARJ2*COST3)
GO TO 40
C
C*** DRUCKER-PRAGER
C
4 SNPHI=SIN(FRICT*0.017453292)
CONS1=2.0*SNPHI/(ROOT3*(3.0-SNPHI))
CONS2=1.0
CONS3=0.0
40 CONTINUE
DO 50 ISTR1=1,NSTR1
50 AVECT(ISTR1)=CONS1*VECA1(ISTR1)+CONS2*VECA2(ISTR1)+CONS3*
. VECA3(ISTR1)
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -