32 . NEL ,NUPARAM ,NUVAR ,TIME ,TIMESTEP,UPARAM ,
33 . EPSXX ,EPSYY ,EPSZZ ,EPSXY ,EPSYZ ,EPSZX ,
34 . SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
35 . UVAR ,OFF ,NGL ,DFMAX ,ISMSTR )
41#include "implicit_f.inc"
68 INTEGER NEL,NUPARAM,NUVAR,ISMSTR
70 my_real TIME,TIMESTEP,UPARAM(NUPARAM),
71 . EPSXX(NEL) ,EPSYY(NEL) ,EPSZZ(NEL) ,
72 . epsxy(nel) ,epsyz(nel) ,epszx(nel) ,dfmax(nel)
76 my_real uvar(nel,nuvar)
77 my_real ,
DIMENSION(NEL) :: off,
78 . signxx,signyy,signzz,signxy,signyz,signzx
82 INTEGER I,J,NINDX,INDX(NEL),TYPE_MAX,F_FLAG,STRDEF,STRFLAG
83 my_real I1,I2,I3,E11,E22,E33,E_EQ,E_EQ1,E_EQ2,Q,R,R_INTER,PHI,
84 . C_MIN,C_MAX,EMA,DAMAGE
85 DOUBLE PRECISION :: A0(2),A1(2),A2(2),C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,
86 . x1,x2,x3,y1,y2,y3,z1,z2,z3,f,ff,d,dd,d2,dp,e,g
87 DOUBLE PRECISION,
PARAMETER :: PI8 = 0.3926990817d0
88 DOUBLE PRECISION,
PARAMETER :: PI38 = 1.178097245d0
89 DOUBLE PRECISION,
PARAMETER :: SPI8 = 0.3826834324d0
90 DOUBLE PRECISION,
PARAMETER :: SPI38 = 0.9238795325d0
99 type_max = int(uparam(1))
104 f_flag = int(uparam(6))
105 strdef = nint(uparam(7))
107 f =
min(ff,zep4/
max(em20,timestep))
112 IF (strdef == 2)
THEN
113 IF (ismstr == 10 .or. ismstr == 12)
THEN
115 ELSE IF (ismstr == 0 .or. ismstr == 2 .or. ismstr == 4)
THEN
118 ELSE IF (strdef == 3)
THEN
119 IF (ismstr == 1 .or. ismstr == 3 .or. ismstr == 11)
THEN
121 ELSE IF (ismstr == 10 .or. ismstr == 12)
THEN
130 IF (uvar(i,1) < one)
THEN
132 IF (type_max == 1)
THEN
134 i1 = signxx(i)+signyy(i)+signzz(i)
135 i2 = signxx(i)*signyy(i)+signyy(i)*signzz(i)+signzz(i)*signxx(i)-
136 . signxy(i)*signxy(i)-signzx(i)*signzx(i)-signyz(i)*signyz(i)
137 i3 = signxx(i)*signyy(i)*signzz(i)-signxx(i)*signyz(i)*signyz(i)-
138 . signyy(i)*signzx(i)*signzx(i)-signzz(i)*signxy(i)*signxy(i)+
139 . two*signxy(i)*signzx(i)*signyz(i)
140 q = (three*i2 - i1*i1)/9.0
142 r = (two*i1*i1*i1-9.0*i1*i2+27.0*i3)/54.0
143 r_inter =
min(r/sqrt(
max(em20,(-q**3))),one)
144 phi = acos(
max(r_inter,-one))
145 e11 = two*sqrt(-q)*cos(phi/three)+third*i1
146 e22 = two*sqrt(-q)*cos((phi+two*pi)/three)+third*i1
147 e33 = two*sqrt(-q)*cos((phi+4.0*pi)/three)+third*i1
169 i1 = epsxx(i)+epsyy(i)+epszz(i)
170 i2 = epsxx(i)*epsyy(i)+epsyy(i)*epszz(i)+epszz(i)*epsxx(i)-
171 . half*epsxy(i)*half*epsxy(i)-half*epszx(i)*half*epszx(i)-
173 i3 = epsxx(i)*epsyy(i)*epszz(i)-epsxx(i)*half*epsyz(i)*half*epsyz(i)-
174 . epsyy(i)*half*epszx(i)*half*epszx(i)-epszz(i
175 . two*half*epsxy(i)*half*epszx
176 q = (three*i2 - i1*i1)/9.0
177 r = (two*i1*i1*i1-9.0*i1*i2+27.0*i3)/54.0
179 r_inter =
min(r/sqrt(
max(em20,(-q**3))),one)
180 phi = acos(
max(r_inter,-one))
182 e11 = two*sqrt(-q)*cos(phi/three)+third*i1
183 e22 = two*sqrt(-q)*cos((phi+two*pi)/three)+third*i1
184 e33 = two*sqrt(-q)*cos((phi+4.0*pi)/three) +third*i1
186 IF (strflag == 1)
THEN
187 e11 = sqrt(e11 + one) - one
188 e22 = sqrt(e22 + one) - one
189 e33 = sqrt(e33 + one) - one
190 ELSE IF (strflag == 2)
THEN
194 ELSE IF (strflag == 3)
THEN
198 ELSE IF (strflag == 4)
THEN
199 e11 = log(sqrt(e11 + one))
200 e22 = log(sqrt(e22 + one))
201 e33 = log(sqrt(e33 + one))
223 IF (ema == one .and. ff /= zero .and. f_flag > 1)
THEN
228 d = tan(pi*f*timestep)
256 a0(1) = uvar(i,3)*uvar(i,9)
257 a0(2) = uvar(i,4)*uvar(i,9)
258 a1(1) = uvar(i,5)*uvar(i,10)
259 a1(2) = uvar(i,6)*uvar(i,10)
260 a2(1) = uvar(i,7)*uvar(i,11)
261 a2(2) = uvar(i,8)*uvar(i,11)
289 IF ((x3 /= zero).AND.(x2 /= zero))
THEN
292 uvar(i,5) = a1(1)/(c0*x3)
293 uvar(i,6) = a1(2)/(c0*x3)
294 uvar(i,7) = a2(1)/(c0*y3)
295 uvar(i,8) = a2(2)/(c0*y3)
327 e11 = ema * e11 + ( one - ema ) * uvar(i,2)
331 damage =
max(zero ,
min(one ,(e11-c_min)/
max(em6,(c_max-c_min)) ))
332 uvar(i,1) =
max(uvar(i,1),damage)
335 IF (uvar(i,1) >= one)
THEN
347 WRITE(iout, 1000) ngl(i),time
348 WRITE(istdo,1100) ngl(i),time
349#include "lockoff.inc"
353 1000
FORMAT(1x,
'SOLID ELEMENT NUMBER (VISUAL) el#',i10,
354 .
' LIMIT REACHED AT TIME :',1pe12.4)
355 1100
FORMAT(1x,
'SOLID ELEMENT NUMBER (VISUAL) el#',i10,
356 .
' LIMIT REACHED AT TIME :',1pe12.4)
subroutine fail_visual_s(nel, nuparam, nuvar, time, timestep, uparam, epsxx, epsyy, epszz, epsxy, epsyz, epszx, signxx, signyy, signzz, signxy, signyz, signzx, uvar, off, ngl, dfmax, ismstr)