30 . NEL ,NUVAR ,TIME ,TIMESTEP,UPARAM ,NGL ,
31 . SIGNXX ,SIGNYY ,SIGNXY ,EPSXX ,EPSYY ,EPSXY ,
32 . UVAR ,OFF ,DFMAX ,ISMSTR )
38#include "implicit_f.inc"
64 INTEGER NEL,NUVAR,ISMSTR
67 my_real uparam(*),epsxx(nel) ,epsyy(nel),epsxy
71 my_real uvar(nel,nuvar), off(nel),offl(nel),
72 . signxx(nel),signyy(nel),signxy(nel)
78 INTEGER I,,LENG,NINDX,INDX(NEL),TYPE_MAX,F_FLAG,STRDEF,STRFLAG
79 my_real E11,SIG_A,SIG_B,SIG_11,EPS_A,EPS_B,
80 . C_MIN,C_MAX,EMA,DAMAGE
81 DOUBLE PRECISION :: A0(2),A1(2),A2(2),C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,
82 . x1,x2,x3,y1,y2,y3,z1,z2,z3,f,ff,d,dd,d2,dp,e,g
83 DOUBLE PRECISION,
PARAMETER :: PI8 = 0.3926990817d0
84 DOUBLE PRECISION,
PARAMETER :: PI38 = 1.178097245d0
85 DOUBLE PRECISION,
PARAMETER :: SPI8 = 0.3826834324d0
86 DOUBLE PRECISION,
PARAMETER :: SPI38 = 0.9238795325d0
96 type_max = int(uparam(1))
101 f_flag = int(uparam(6))
102 strdef = int(uparam(7))
109 IF (strdef == 2)
THEN
110 IF (ismstr == 10 .or. ismstr == 12)
THEN
112 ELSE IF (ismstr == 0 .or. ismstr == 2 .or. ismstr == 4)
THEN
115 ELSE IF (strdef == 3)
THEN
116 IF (ismstr == 1 .or. ismstr == 3 .or. ismstr == 11)
THEN
118 ELSE IF (ismstr == 10 .or. ismstr == 12)
THEN
128 IF (uvar(i,1) < 1.0d0 .AND. off(i) == one)
THEN
130 IF (type_max == 1)
THEN
133 sig_a = (signxx(i) + signyy(i))/two
134 sig_b = sqrt(((signxx(i)-signyy(i))/two)**2+signxy(i)**2)
135 sig_11 = sig_a + sig_b
141 eps_a = (epsxx(i) + epsyy(i)) * half
142 eps_b = sqrt(((epsxx(i)-epsyy(i))/two)**2+(half*epsxy(i))**2)
144 IF (strflag == 1)
THEN
145 e11 = sqrt(e11 + one) - one
146 ELSE IF (strflag == 2)
THEN
148 ELSE IF (strflag == 3)
THEN
150 ELSE IF (strflag == 4)
THEN
151 e11 = log(sqrt(e11+one))
158 IF (ema == one .and. ff /= zero .and. f_flag > 1)
THEN
162 f =
min(ff,zep4 /
max(timestep,em20))
163 d = tan(pi*f*
max(timestep,em20))
191 a0(1) = uvar(i,3)*uvar(i,9)
192 a0(2) = uvar(i,4)*uvar(i,9)
193 a1(1) = uvar(i,5)*uvar(i,10)
194 a1(2) = uvar(i,6)*uvar(i,10)
195 a2(1) = uvar(i,7)*uvar(i,11)
196 a2(2) = uvar(i,8)*uvar(i,11)
224 IF ((x3 /= zero).AND.(x2 /= zero))
THEN
227 uvar(i,5) = a1(1)/(c0*x3)
228 uvar(i,6) = a1(2)/(c0*x3)
229 uvar(i,7) = a2(1)/(c0*y3)
230 uvar(i,8) = a2(2)/(c0*y3)
253 e11 = ema * e11 + ( one - ema ) * uvar(i,2)
267 damage =
max(zero ,
min(one ,(e11-c_min)/
max(em6,(c_max-c_min)) ))
268 uvar(i,1) =
max(uvar(i,1),damage)
271 IF (uvar(i,1) >= one)
THEN
287 WRITE(iout, 1000) ngl(i),time
288 WRITE(istdo,1100) ngl(i),time
289#include "lockoff.inc"
293 1000
FORMAT(1x,
'SHELL ELEMENT NUMBER (VISUAL) el#',i10,
294 .
' LIMIT REACHED AT TIME :',1pe12.4)
295 1100
FORMAT(1x,
'SHELL ELEMENT NUMBER (VISUAL) el#',i10,
296 .
' LIMIT REACHED AT TIME :',1pe12.4)
subroutine fail_visual_c(nel, nuvar, time, timestep, uparam, ngl, signxx, signyy, signxy, epsxx, epsyy, epsxy, uvar, off, dfmax, ismstr)