33 2 TIME ,UPARAM ,NGL ,IPT ,NPTOT ,
34 3 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
36 5 OFF ,OFFL ,DFMAX ,TDEL ,NFUNC ,
37 6 IFUNC ,NPF ,TF ,ALDT ,FOFF ,
38 7 IPG ,DMG_FLAG ,DMGSCL )
44#include "implicit_f.inc"
84 INTEGER NEL,NUVAR,IPT,NPTOT,NFUNC,IPG
85 INTEGER NGL(NEL),IFUNC(NFUNC)
86 my_real TIME,UPARAM(*),DPLA(NEL),UEL1(),ALDT(NEL)
87 INTEGER,
INTENT(INOUT) :: DMG_FLAG
91 INTEGER ,
DIMENSION(NEL),
INTENT(INOUT) :: FOFF
93 . uvar(nel,nuvar),off(nel),offl(nel),
94 . signxx(nel),signyy(nel),signxy(nel),signyz(nel),signzx(nel),
95 . dfmax(nel),tdel(nel)
96 my_real,
INTENT(INOUT) :: dmgscl(nel)
101 my_real FINTER ,TF(*)
114 INTEGER I,J,L,NINDX1,NINDX2,FLAG_PERTURB,SEL
115 INTEGER FAIL_COUNT,IT,ICOUP
116 INTEGER,
DIMENSION(MVSIZ) :: INDX1,INDX2
118 my_real X_1(3) , X_2(3),c3,DYDX,DC(NEL)
119 my_real EPS_FAIL, EPS_FAIL2, DAMAGE, INST, DCRIT, EXP
120 my_real p1x,p1y,s1x,s1y,s2y, a1, a2, b1, b2, c1, c2,fac,lambda
133 flag_perturb = uparam(8)
135 l = int(uparam(10)+0.0001)
136 sel = int(uparam(11)+0.0001)
138 ref_el_len = uparam(13)
143 icoup = nint(uparam(14))
150 IF (uvar(1,3)==zero)
THEN
153 lambda = uvar(i,3) / ref_el_len
154 fac = finter(ifunc(1),lambda,npf,tf,dydx)
158 ELSEIF (nuvar == 9)
THEN
159 IF (uvar(1,9)==zero)
THEN
162 lambda = uvar(i,9) / ref_el_len
163 fac = finter(ifunc(1),lambda,npf,tf,dydx)
170 IF(flag_perturb == 0)
THEN
172 IF(off(i) == one .AND. dpla(i) /= zero .AND. foff(i) == 1 )
THEN
173 hydros= (signxx(i)+ signyy(i))/3.0
174 vmises= sqrt((signxx(i)**2)+(signyy(i)**2)-(signxx(i)*signyy(i))+(3.0*signxy(i)**2))
175 triaxs = hydros /
max(em20,vmises)
177 IF (triaxs <= third)
THEN
178 eps_fail = x_1(1) + x_1(2) * triaxs + x_1(3) * triaxs**2
179 IF ((nuvar == 3).AND.(nfunc > 0)) eps_fail = eps_fail * uvar(i,3)
183 eps_fail = x_2(1) + x_2(2) * triaxs + x_2(3) * triaxs**2
184 IF ((nuvar == 3).AND.(nfunc > 0)) eps_fail = eps_fail * uvar(i,3)
186 IF (triaxs <= one/sqr3)
THEN
188 p1y = x_1(1) + x_1(2) * p1x + x_1(3) * p1x**2
191 a1 = (p1y - s1y) / (p1x - s1x)**2
193 c1 = a1 * s1x**2 + s1y
195 IF ((nuvar == 3).AND.(nfunc > 0)) eps_fail = eps_fail * uvar(i,3)
198 p1y = x_2(1) + x_2(2) * p1x + x_2(3) *
200 s1y = x_2(1) + x_2(2) / sqr3 + x_2(3) * (one/sqr3)**2
201 a1 = (p1y - s1y) / (p1x - s1x)**2
203 c1 = a1 * s1x**2 + s1y
204 eps_fail = c1 + b1 * triaxs + a1 * triaxs**2
205 IF ((nuvar == 3).AND.(nfunc > 0)) eps_fail = eps_fail * uvar(i,3)
208 IF (triaxs <= one/sqr3)
THEN
210 p1y = x_1(1) + x_1(2) * p1x + x_1(3) * p1x**2
212 s1y = x_2(1) + x_2(2) / sqr3 + x_2(3) * (one/sqr3)**2
214 a1 = (p1y - s1y) / (p1x - s1x)**2
215 a2 = (p1y - s2y) / (p1x - s1x)**2
218 c1 = a1 * s1x**2 + s1y
219 c2 = a2 * s1x**2 + s2y
220 eps_fail = c1 + b1 * triaxs + a1 * triaxs**2
221 IF ((nuvar == 3).AND.(nfunc > 0)) eps_fail = eps_fail * uvar(i,3)
222 eps_fail2 = c2 + b2 * triaxs + a2 * triaxs**2
223 IF ((nuvar == 3).AND.(nfunc > 0)) eps_fail2 = eps_fail2 * uvar(i,3)
226 p1y = x_2(1) + x_2(2) * p1x + x_2(3) * p1x**2
228 s1y = x_2(1) + x_2(2) / sqr3 + x_2(3) * (one/sqr3)**2
230 a1 = (p1y - s1y) / (p1x - s1x)**2
231 a2 = (p1y - s2y) / (p1x - s1x)**2
234 c1 = a1 * s1x**2 + s1y
235 c2 = a2 * s1x**2 + s2y
236 eps_fail = c1 + b1 * triaxs + a1 * triaxs**2
237 IF ((nuvar == 3).AND.(nfunc > 0)) eps_fail = eps_fail * uvar(i,3)
238 eps_fail2 = c2 + b2 * triaxs + a2 * triaxs**2
239 IF ((nuvar == 3).AND.(nfunc > 0)) eps_fail2 = eps_fail2 * uvar(i,3)
241 IF (eps_fail2> zero)
THEN
242 damage = damage + dpla(i)/eps_fail2
243 damage =
min(one,damage)
245 IF ((damage >= one).AND.(uvar(i,2) == zero))
THEN
252 dfmax(i) = dfmax(i) + dpla(i)/
max(eps_fail,em6)
253 dfmax(i) =
min(one,dfmax(i))
255 IF (dfmax(i) >= one)
THEN
261 IF (damage >= one .AND. offl(i) == one .AND. icoup == 0)
THEN
262 uel1(i) = uel1(i) + one
263 offl(i) = four_over_5
264 IF (int(uel1(i)) == nptot)
THEN
278 ELSEIF(flag_perturb == 1)
THEN
280 IF(off(i) == one .AND. dpla(i) /= zero .AND. foff(i) == 1 )
THEN
281 hydros= (signxx(i)+ signyy(i))/3.0
282 vmises= sqrt((signxx(i)**2)+(signyy(i)**2)-(signxx(i)*signyy(i))+(3.0*signxy(i)**2))
283 triaxs = hydros /
max(em20,vmises)
285 IF (triaxs <= third
THEN
286 eps_fail = uvar(i,3) + uvar(i,4) * triaxs + uvar(i,5) * triaxs**2
287 IF ((nuvar == 9).AND.(nfunc > 0)) eps_fail = eps_fail * uvar(i,9)
291 eps_fail = uvar(i,6) + uvar(i,7) * triaxs + uvar(i,8) * triaxs**2
292 IF ((nuvar == 9).AND.(nfunc > 0)) eps_fail = eps_fail * uvar(i,9)
294 IF (triaxs <= one/sqr3)
THEN
296 p1y = uvar(i,3) + uvar(i,4) * p1x + uvar(i,5) * p1x**2
298 s1y = uvar(i,6) + uvar(i,7) / sqr3 + uvar(i,8) * (one/sqr3)**2
299 a1 = (p1y - s1y) / (p1x - s1x)**2
301 c1 = a1 * s1x**2 + s1y
302 eps_fail = c1 + b1 * triaxs + a1 * triaxs**2
303 IF ((nuvar == 9).AND.(nfunc > 0)) eps_fail
308 s1y = uvar(i,6) + uvar(i,7) / sqr3 + uvar(i,8) * (one
309 a1 = (p1y - s1y) / (p1x - s1x)**2
311 c1 = a1 * s1x**2 + s1y
312 eps_fail = c1 + b1 * triaxs + a1 * triaxs**2
313 IF ((nuvar == 9).AND.(nfunc > 0)) eps_fail = eps_fail * uvar(i,9)
316 IF (triaxs <= one/sqr3)
THEN
318 p1y = uvar(i,3) + uvar(i,4) * p1x + uvar(i,5) * p1x**2
320 s1y = uvar(i,6) + uvar(i,7) / sqr3 + uvar(i,8) * (one/sqr3)**2
322 a1 = (p1y - s1y) / (p1x - s1x)**2
323 a2 = (p1y - s2y) / (p1x - s1x)**2
326 c1 = a1 * s1x**2 + s1y
327 c2 = a2 * s1x**2 + s2y
328 eps_fail = c1 + b1 * triaxs + a1 * triaxs**2
329 IF ((nuvar == 9).AND.(nfunc > 0)) eps_fail = eps_fail * uvar(i,9)
330 eps_fail2 = c2 + b2 * triaxs + a2 * triaxs**2
331 IF ((nuvar == 9).AND.(nfunc > 0)) eps_fail2 = eps_fail2 * uvar(i,9)
334 p1y = uvar(i,3) + uvar(i,4) * p1x + uvar(i,5) * p1x**2
336 s1y = uvar(i,6) + uvar(i,7) / sqr3 + uvar(i,8) * (one/sqr3)**2
338 a1 = (p1y - s1y) / (p1x - s1x)**2
339 a2 = (p1y - s2y) / (p1x - s1x)**2
342 c1 = a1 * s1x**2 + s1y
343 c2 = a2 * s1x**2 + s2y
344 eps_fail = c1 + b1 * triaxs + a1 * triaxs**2
345 IF ((nuvar == 9).AND.(nfunc > 0)) eps_fail = eps_fail * uvar(i,9)
346 eps_fail2 = c2 + b2 * triaxs + a2 * triaxs**2
347 IF ((nuvar == 9).AND.(nfunc > 0)) eps_fail2 = eps_fail2 * uvar(i,9)
349 IF (eps_fail2> zero)
THEN
350 damage = damage + dpla(i)/eps_fail2
351 damage =
min(one,damage)
353 IF ((damage >= one).AND.(uvar(i,2) == zero))
THEN
360 dfmax(i) = dfmax(i) + dpla(i)/
max(eps_fail,em6)
361 dfmax(i) =
min(one,dfmax(i))
363 IF (dfmax(i) >= one)
THEN
369 IF (damage >= one .AND. offl(i) == one .AND. icoup == 0)
THEN
370 uel1(i) = uel1(i) + one
371 offl(i) = four_over_5
372 IF (int(uel1(i)) == nptot)
THEN
396 IF (dfmax(i) >= dcrit)
THEN
397 IF (dcrit < one)
THEN
398 dmgscl(i) = one - ((dfmax(i)-dcrit)/
max(one-dcrit,em20))**exp
409 IF (dc(i) == zero) dc(i
411 IF (dc(i) < one)
THEN
412 dmgscl(i) = one - ((dfmax(i)-dc(i))/
max(one-dc(i),em20))**exp
431 WRITE(istdo,2000) ngl(i),ipg,ipt,time
432#include "lockoff.inc"
439 WRITE(iout, 3000) ngl(i)
440 WRITE(iout, 2200) ngl(i), time
441 WRITE(istdo,3000) ngl(i)
442 WRITE(istdo,2200) ngl(i), time
443#include "lockoff.inc"
448 2000
FORMAT(1x,
'FOR SHELL ELEMENT (BIQUAD)',i10,1x,
'GAUSS POINT',i3,
449 . 1x,
'LAYER',i3,
':',/,
450 . 1x,
'STRESS TENSOR SET TO ZERO',1x,
'AT TIME :',1pe12.4)
451 2200
FORMAT(1x,
' *** RUPTURE OF SHELL ELEMENT (BIQUAD)',i10,1x,
452 .
' AT TIME :',1pe12.4)
453 3000
FORMAT(1x,
'FOR SHELL ELEMENT (BIQUAD)',i10,
454 . 1x,
'INSTABILITY REACHED.')