33 1 NEL ,UPARAM ,NUPARAM ,UVAR ,NUVAR ,
34 2 TIME ,NGL ,IPG ,DPLA ,TDELE ,
35 3 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
36 4 DFMAX ,NFUNC ,IFUNC ,ALDT ,OFF ,
37 5 NPF ,TF ,UELR ,NPG ,LOFF )
41#include "implicit_f.inc"
50#include "tabsiz_c.inc"
54 INTEGER,
INTENT(IN) ::
55 . NEL ,NUPARAM,NUVAR,NGL(NEL),IPG ,
56 . NFUNC ,IFUNC(NFUNC) ,NPG
57 my_real,
INTENT(IN) ::
58 . TIME ,UPARAM(NUPARAM),DPLA(NEL) ,
59 . signxx(nel),signyy(nel),signzz(nel),
60 . signxy(nel),signyz(nel),signzx(nel),
65 my_real,
INTENT(INOUT) ::
66 . uvar(nel,nuvar),loff(nel),off(nel),
67 . dfmax(nel),tdele(nel),uelr(nel)
71 INTEGER,
INTENT(IN) :: NPF(SNPC)
72 my_real,
INTENT(IN) :: TF(STF)
79 INTEGER I,J,NINDX,NINDX2,FAILIP
80 INTEGER,
DIMENSION(NEL) :: INDX,INDX2
82 . C1 ,C2 ,C3 ,C4 ,C5 ,
83 . C6 ,REF_LEN ,REG_SCALE
85 . lambda ,dydx ,fac(nel),p ,svm ,
86 . triax ,cos3theta,lodep ,epsfail,
87 . det ,sxx ,syy ,szz ,epfmin
99 reg_scale = uparam(15)
101 failip =
min(nint(uparam(17)),npg)
105 IF (uvar(1,1) == zero)
THEN
106 IF (ifunc(1) > 0)
THEN
108 lambda = aldt(i)/ref_len
109 uvar(i,1) = finter(ifunc(1),lambda,npf,tf,dydx)
110 uvar(i,1) = uvar(i,1)*reg_scale
120 IF (off(i) < em01) off(i) = zero
121 IF (off(i) < one .AND. off(i) > zero) off(i) = off(i)*four_over_5
136 IF (loff(i) == one .AND. dpla(i) > zero .AND. off(i) == one)
THEN
139 p = third*(signxx(i) + signyy(i) + signzz(i))
143 svm = half*(sxx**2 + syy**2 + szz**2)
144 . + signxy(i)**2+ signzx(i)**2 + signyz(i)**2
145 svm = sqrt(three*svm)
146 triax = p/
max(em20,svm)
147 IF (triax < -two_third) triax = -two_third
148 IF (triax > two_third) triax = two_third
151 det = sxx*syy*szz + two*signxy(i)*signzx(i)*signyz(i)-
152 . sxx*signyz(i)**2-szz*signxy(i)**2-syy*signzx(i)**2
153 cos3theta = half*twenty7*det/
max(em20,svm**3)
154 IF(cos3theta < -one) cos3theta = -one
156 lodep = one - two*acos(cos3theta)/pi
159 epsfail = c1 + c2*triax + c3*lodep + c4*(triax**2) +
160 . c5*(lodep**2) + c6*triax*lodep
161 epsfail = epsfail*fac(i)
162 epsfail =
max(epfmin,epsfail)
165 dfmax(i) = dfmax(i) + dpla(i)/
max(epsfail,em20)
166 dfmax(i) =
min(dfmax(i),one)
169 IF (dfmax(i) >= one)
THEN
173 uelr(i) = uelr(i) + one
174 IF (nint(uelr(i)) >= failip)
THEN
191 WRITE(iout, 1000) ngl(i),ipg,time
192 WRITE(istdo,1000) ngl(i),ipg,time
193#include "lockoff.inc"
200 WRITE(iout, 2000) ngl(i),time
201 WRITE(istdo,2000) ngl(i),time
202#include "lockoff.inc"
206 1000
FORMAT(1x,
'FOR SOLID ELEMENT NUMBER el#',i10,
207 .
' FAILURE (SYAZWAN) AT GAUSS POINT ',i5,
208 .
' AT TIME :',1pe12.4)
209 2000
FORMAT(1x,
'-- RUPTURE OF SOLID ELEMENT :',i10,
210 .
' AT TIME :',1pe12.4)
subroutine fail_syazwan_s(nel, uparam, nuparam, uvar, nuvar, time, ngl, ipg, dpla, tdele, signxx, signyy, signzz, signxy, signyz, signzx, dfmax, nfunc, ifunc, aldt, off, npf, tf, uelr, npg, loff)