33 2 TIME ,UPARAM ,NGL ,IPT ,NPTOT ,
34 3 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
35 4 DPLA ,EPSP ,UVAR ,UEL1 ,
36 5 OFF ,OFFL ,DFMAX ,TDEL ,NFUNC ,
37 6 IFUNC ,NPF ,TF ,ALDT ,FOFF ,
44#include "implicit_f.inc"
78 INTEGER NEL,NUVAR,IPT,NPTOT,NFUNC,IPG
79 INTEGER NGL(NEL),IFUNC(NFUNC)
80 my_real TIME,UPARAM(*),DPLA(NEL),EPSP(NEL),
85 INTEGER,
DIMENSION(NEL),
INTENT(INOUT) :: FOFF
87 . uvar(nel,nuvar),off(nel),offl(nel),
88 . signxx(nel),signyy(nel),signxy(nel),signyz(nel),signzx(nel),
89 . dfmax(nel),tdel(nel)
106 my_real hydros,vmises,triaxs,ref_el_len
107 INTEGER I,J,K,L,NINDX1,NINDX2,SEL,NANGLE
108 INTEGER FAIL_COUNT,IT,IREG,IRATE
109 INTEGER,
DIMENSION(MVSIZ) :: INDX1,INDX2
110 my_real X_1(3),X_2(3),c3,DYDX,COS2(10,10),EPSD0,CJC,RATE_SCALE,FRATE
111 my_real EPS_FAIL,EPS_FAIL2,DAMAGE,INST,FSCALE_LEN,MOHR_RADIUS
112 my_real P1X,P1Y,S1X,S1Y,S2Y,A1,A2,B1,B2,C1,C2,FAC,LAMBDA,COS2THETA(NEL)
113 my_real sig1(nel),sig2(nel),mohr_center
114 my_real,
DIMENSION(:),
ALLOCATABLE :: q_x11,q_x12,q_x13,q_x21,q_x22,q_x23,q_inst
117 1 1. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
118 2 0. ,1. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
119 3 -1. ,0. ,2. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
120 4 0. ,-3. ,0. ,4. ,0. ,0. ,0. ,0. ,0. ,0. ,
121 5 1. ,0. ,-8. ,0. ,8. ,0. ,0. ,0. ,0. ,0. ,
122 6 0. ,5. ,0. ,-20. ,0. ,16. ,0. ,0. ,0. ,0. ,
123 7 -1. ,0. ,18. ,0. ,-48. ,0. ,32. ,0. ,0. ,0. ,
124 8 0. ,-7. ,0. ,56. ,0. ,-112.,0. ,64. ,0. ,0. ,
125 9 1. ,0. ,-32. ,0. ,160. ,0. ,-256.,0. ,128. ,0. ,
126 a 0. ,9. ,0. ,-120.,0. ,432. ,0. ,-576 ,0. ,256. /
138 ref_el_len = uparam(3)
141 rate_scale = uparam(6)
142 nangle = int(uparam(7))
145 ALLOCATE(q_x11(nangle),q_x12(nangle),q_x13(nangle),
146 . q_x21(nangle),q_x22(nangle),q_x23(nangle))
149 ALLOCATE(q_inst(nangle))
151 q_x11(j) = uparam(8 + 7*(j-1))
152 q_x12(j) = uparam(9 + 7*(j-1))
153 q_x13(j) = uparam(10 + 7*(j-1))
154 q_x21(j) = uparam(11 + 7*(j-1))
156 q_x23(j) = uparam(13 + 7*(j-1))
157 q_inst(j) = uparam(14 + 7*(j-1))
161 q_x11(j) = uparam(8 + 6*(j-1))
162 q_x12(j) = uparam(9 + 6*(j-1))
163 q_x13(j) = uparam(10 + 6*(j-1))
164 q_x21(j) = uparam(11 + 6*(j-1))
165 q_x22(j) = uparam(12 + 6*(j-1))
166 q_x23(j) = uparam(13 + 6*(j-1))
172 IF (rate_scale /= zero)
THEN
176 IF (ref_el_len /= zero)
THEN
180 ! at initial time, compute
the element
size regularization factor
181 IF (uvar(1,3) == zero .AND. ireg > 0)
THEN
183 lambda = aldt(i)/ref_el_len
184 fac = finter(ifunc(ireg),lambda,npf,tf,dydx)
203 IF (off(i) == one .AND. dpla(i) /= zero .AND. foff
THEN
206 mohr_radius = sqrt(((signxx(i)-signyy(i))/two)**2 + signxy(i)**2)
207 mohr_center = (signxx(i)+signyy(i))/two
208 IF (mohr_radius > em20)
THEN
209 cos2theta(i) = ((signxx(i)-signyy(i))/two)/mohr_radius
213 sig1(i) = mohr_center + mohr_radius
214 sig2(i) = mohr_center - mohr_radius
215 IF (sig1(i)<zero.OR.((sig2(i)<zero).AND.(sig2(i)<-sig1(i))))
THEN
216 cos2theta(i) = -cos2theta(i)
225 x_1(1) = x_1(1) + q_x11(j)*cos2(k,j)*(cos2theta(i))**(k-1)
226 x_1(2) = x_1(2) + q_x12(j)*cos2(k,j)*(cos2theta(i))**(k-1)
227 x_1(3) = x_1(3) + q_x13(j)*cos2(k,j)*(cos2theta(i))**(k-1)
228 x_2(1) = x_2(1) + q_x21(j)*cos2(k,j)*(cos2theta(i))**(k-1)
229 x_2(2) = x_2(2) + q_x22(j)*cos2(k,j)*(cos2theta(i))**(k-1)
230 x_2(3) = x_2(3) + q_x23(j)*cos2(k,j)*(cos2theta(i))**(k-1)
231 IF (sel == 3) inst = inst + q_inst(j)*cos2(k,j)*(cos2theta(i))**(k-1)
236 hydros = (signxx(i)+ signyy(i))/three
237 vmises = sqrt((signxx(i)**2)+(signyy(i)**2)-(signxx(i)*signyy(i))+(three*signxy(i)**2))
238 triaxs = hydros /
max(em20,vmises)
241 IF (triaxs <= third)
THEN
242 eps_fail = x_1(1) + x_1(2)*triaxs + x_1(3)*triaxs**2
243 IF (ireg > 0) eps_fail = eps_fail*uvar(i,3)
247 eps_fail = x_2(1) + x_2(2)*triaxs + x_2(3)*triaxs**2
248 IF (ireg > 0) eps_fail = eps_fail*uvar(i,3)
250 IF (triaxs <= one/sqr3)
THEN
252 p1y = x_1(1) + x_1(2)*p1x + x_1(3)*p1x**2
254 s1y = x_2(1) + x_2(2)/sqr3 + x_2(3)*(one/sqr3)**2
255 a1 = (p1y - s1y)/(p1x - s1x)**2
258 eps_fail = c1 + b1*triaxs + a1*triaxs**2
259 IF (ireg > 0) eps_fail = eps_fail*uvar(i,3)
262 p1y = x_2(1) + x_2(2)*p1x + x_2(3)*p1x**2
264 s1y = x_2(1) + x_2(2)/sqr3 + x_2(3)*(one/sqr3)**2
265 a1 = (p1y - s1y)/(p1x - s1x)**2
268 eps_fail = c1 + b1*triaxs + a1*triaxs**2
269 IF (ireg > 0) eps_fail = eps_fail*uvar(i,3)
272 IF (triaxs <= one/sqr3)
THEN
274 p1y = x_1(1) + x_1(2)*p1x + x_1(3)*p1x**2
276 s1y = x_2(1) + x_2(2)/sqr3 + x_2(3)*(one/sqr3)**2
278 a1 = (p1y - s1y)/(p1x - s1x)**2
279 a2 = (p1y - s2y)/(p1x - s1x)**2
284 eps_fail = c1 + b1*triaxs + a1*triaxs**2
285 IF (ireg > 0) eps_fail = eps_fail*uvar(i,3)
286 eps_fail2 = c2 + b2*triaxs + a2*triaxs**2
287 IF (ireg > 0) eps_fail2 = eps_fail2*uvar(i,3)
290 p1y = x_2(1) + x_2(2)*p1x + x_2(3)*p1x**2
292 s1y = x_2(1) + x_2(2)/sqr3 + x_2(3)*(one/sqr3)**2
294 a1 = (p1y - s1y)/(p1x - s1x)**2
295 a2 = (p1y - s2y)/(p1x - s1x)**2
300 eps_fail = c1 + b1*triaxs + a1*triaxs**2
301 IF (ireg > 0) eps_fail = eps_fail*uvar(i,3)
302 eps_fail2 = c2 + b2*triaxs + a2*triaxs**2
303 IF (ireg > 0) eps_fail2 = eps_fail2*uvar(i,3)
309 IF (cjc /= zero .OR. irate /= 0)
THEN
310 IF (cjc /= zero)
THEN
312 IF (epsp(i) > epsd0) frate = frate + cjc*log(epsp(i)/epsd0)
313 ELSEIF (irate /= 0)
THEN
314 frate = finter(ifunc(irate),epsp(i)/rate_scale,npf,tf,dydx)
316 eps_fail = eps_fail*frate
317 IF (sel == 3) eps_fail2 = eps_fail2*frate
321 dfmax(i) = dfmax(i) + dpla(i)/
max(eps_fail,em6)
322 dfmax(i) =
min(one,dfmax(i))
325 IF (eps_fail2 > zero)
THEN
326 damage = damage + dpla(i)/
max(eps_fail2,em6)
334 IF (offl(i) == one .AND. dfmax(i) >= one)
THEN
341 IF (damage > one .AND. uvar(i,2) == zero .AND. offl(i) == one)
THEN
343 uel1(i) = uel1(i) + one
344 IF (int(uel1(i)) == nptot)
THEN
361 IF (
ALLOCATED(q_x11))
DEALLOCATE(q_x11)
362 IF (
ALLOCATED(q_x12))
DEALLOCATE(q_x12)
363 IF (
ALLOCATED(q_x13))
DEALLOCATE(q_x13)
364 IF (
ALLOCATED(q_x21))
DEALLOCATE(q_x21)
365 IF (
ALLOCATED(q_x22))
DEALLOCATE(q_x22)
366 IF (
ALLOCATED(q_x23))
DEALLOCATE(q_x23)
367 IF (
ALLOCATED(q_inst))
DEALLOCATE(q_inst)
374 WRITE(iout, 2000) ngl(i),ipg,ipt,time
375 WRITE(istdo,2000) ngl(i),ipg,ipt,time
376#include "lockoff.inc"
383 WRITE(iout, 3000) ngl(i)
384 WRITE(iout, 2200) ngl(i), time
385 WRITE(istdo,3000) ngl(i)
386 WRITE(istdo,2200) ngl(i), time
387#include "lockoff.inc"
391 2000
FORMAT(1x,'
for shell element(orthbiquad)
',I10,1X,'gauss point
',I3,
392 . 1X,'layer
',I3,':
',/,
393 . 1X,'stress tensor set to zero
',1X,'at time :
',1PE12.4)
394 2200 FORMAT(1X,' *** rupture of shell element (orthbiquad)
',I10,1X,
395 . ' at time :
',1PE12.4)
396 3000 FORMAT(1X,'for shell element(orthbiquad)
',I10,
397 . 1X,'instability reached.
')