30 1 NEL ,NUPARAM ,NUVAR ,UPARAM ,UVAR ,
31 2 NGL ,TIME ,IPG ,ILAY ,IPT ,
32 3 DEPSXX ,DEPSYY ,DEPSXY ,DMG_FLAG ,DMG_SCALE,
33 4 ALDT ,FOFF ,DFMAX ,TDEL ,
34 5 SIGNXX ,SIGNYY ,SIGNXY ,IGTYP ,PLY_ID )
38#include "implicit_f.inc"
47 INTEGER,
INTENT(IN) :: NEL,NUPARAM,NUVAR,IPG,ILAY,IPT,
49 INTEGER,
DIMENSION(NEL),
INTENT(IN) :: NGL
50 my_real,
INTENT(IN) :: TIME
51 my_real,
DIMENSION(NEL),
INTENT(IN) :: ,,
52 . depsxy,signxx,signyy,signxy,aldt
53 my_real,
DIMENSION(NUPARAM),
INTENT(IN) :: uparam
57 INTEGER,
INTENT(OUT) :: DMG_FLAG
58 INTEGER,
DIMENSION(NEL),
INTENT(INOUT) :: FOFF
59 ,
DIMENSION(NEL),
INTENT(INOUT) :: DFMAX,TDEL
60 my_real,
DIMENSION(NEL,5),
INTENT(OUT) :: DMG_SCALE
61 ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) :: UVAR
65 INTEGER I,J,NINDX,FAILMOD,MODE,ISHAP11T,ISHAP11C,ISHAP22T,
66 . ishap22c,ishap12t,ishap12c,nmod
67 INTEGER ,
DIMENSION(NEL) :: INDX
68 INTEGER ,
DIMENSION(NEL,6) :: FMODE
69 my_real DAM(NEL,6),ENER(NEL,6),LE(NEL)
70 my_real sigma_11t,sigma_11c,sigma_22t,sigma_22c,
71 . sigma_12t,sigma_12c,g_11t,g_11c,g_22t,g_22c,g_12t,g_12c
82 sigma_12c = uparam(10)
87 g_12t = uparam(21) ! -> fracture energy
for positive shear in
89 ishap11t = nint(uparam(27))
90 ishap11c = nint(uparam(28))
91 ishap22t = nint(uparam(29))
92 ishap22c = nint(uparam(30))
93 ishap12t = nint(uparam(33)) ! -> softening shape flag
for positive shear in plane 12
94 ishap12c = nint(uparam(34))
95 nmod = nint(uparam(39))
102 IF (uvar(1,13) == zero)
THEN
103 uvar(1:nel,13) = aldt(1:nel)
105 le(1:nel) = uvar(1:nel,13)
113 ener(i,j) = uvar(i,j+6)
126 IF (foff(i) == 1)
THEN
134 IF (signxx(i) > sigma_11t .AND. signxx(i) > zero .AND. dam(i,mode) < one)
THEN
136 IF (ishap11t == 1)
THEN
137 dam(i,mode) = dam(i,mode) + le(i)*depsxx(i)*sigma_11t/(two*g_11t)
138 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
140 ELSEIF (ishap11t == 2)
THEN
141 ener(i,mode) = ener(i,mode) + signxx(i)*le(i)*depsxx(i)
142 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+6))
143 dam(i,mode) = (one - exp(-ener(i,mode)/g_11t))
144 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
146 dam(i,mode) =
min(dam(i,mode),one)
148 dfmax(i) =
max(dfmax(i),dam(i,mode))
151 IF (dam(i,mode) >= one)
THEN
152 failmod = failmod + 1
158 IF (signyy(i) > sigma_22t .AND. signyy(i) > zero .AND. dam(i,mode) < one)
THEN
160 IF (ishap22t == 1)
THEN
161 dam(i,mode) = dam(i,mode) + le(i)*depsyy(i)*sigma_22t/(two*g_22t)
162 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
164 ELSEIF (ishap22t == 2)
THEN
165 ener(i,mode) = ener(i,mode) + signyy(i)*le(i)*depsyy(i
166 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+6))
167 dam(i,mode) = (one - exp(-ener(i,mode)/g_22t))
168 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
170 dam(i,mode) =
min(dam(i,mode),one)
172 dfmax(i) =
max(dfmax(i),dam(i,mode))
175 IF (dam(i,mode) >= one)
THEN
176 failmod = failmod + 1
182 IF (signxy(i) > sigma_12t .AND. signxy(i) > zero .AND. dam(i,mode) < one)
THEN
184 IF (ishap12t == 1)
THEN
185 dam(i,mode) = dam(i,mode) + le(i)*depsxy(i)*sigma_12t/(four*g_12t)
186 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
188 ELSEIF (ishap12t == 2)
THEN
189 ener(i,mode) = ener(i,mode) + signxy(i)*le(i)*half*depsxy(i)
190 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+6))
191 dam(i,mode) = (one - exp(-ener(i,mode)/g_12t))
192 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
194 dam(i,mode) =
min(dam(i,mode),one)
196 dfmax(i) =
max(dfmax(i),dam(i,mode))
199 IF (dam(i,mode) >= one)
THEN
200 failmod = failmod + 1
206 IF (-signxx(i) > sigma_11c .AND. signxx(i) < zero .AND. dam(i,mode) < one)
THEN
208 IF (ishap11c == 1)
THEN
209 dam(i,mode) = dam(i,mode) + le(i)*abs(depsxx(i))*sigma_11c/(two*g_11c)
210 dam(i,mode) =
max(dam(i,mode),uvar(i,mode
212 ELSEIF (ishap11c == 2)
THEN
213 ener(i,mode) = ener(i,mode) + abs(signxx(i))*le(i)*abs(depsxx
214 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+6))
215 dam(i,mode) = (one - exp(-ener(i,mode)/g_11c))
216 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
218 dam(i,mode) =
min(dam(i,mode),one)
220 dfmax(i) =
max(dfmax(i),dam(i,mode))
223 IF (dam(i,mode) >= one)
THEN
224 failmod = failmod + 1
230 IF (-signyy(i) > sigma_22c .AND. signyy(i) < zero .AND. dam(i,mode) < one)
THEN
232 IF (ishap22c == 1)
THEN
233 dam(i,mode) = dam(i,mode) + le(i)*abs(depsyy(i))*sigma_22c/(two*g_22c)
234 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
236 ELSEIF (ishap22c == 2)
THEN
237 ener(i,mode) = ener(i,mode) + abs(signyy(i))*le(i)*abs(depsyy(i))
238 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+6))
239 dam(i,mode) = (one - exp(-ener(i,mode)/g_22c))
240 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
242 dam(i,mode) =
min(dam(i,mode),one)
244 dfmax(i) =
max(dfmax(i),dam(i,mode))
247 IF (dam(i,mode) >= one)
THEN
248 failmod = failmod + 1
254 IF (-signxy(i) > sigma_12c .AND. signxy(i) < zero .AND. dam(i,mode) < one)
THEN
256 IF (ishap12c == 1)
THEN
257 dam(i,mode) = dam(i,mode) + le(i)*abs(depsxy(i))*sigma_12c/(four*g_12c)
258 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
260 ELSEIF (ishap12c == 2)
THEN
261 ener(i,mode) = ener(i,mode) + abs(signxy(i))*le(i)
262 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+6))
263 dam(i,mode) = (one - exp(-ener(i,mode
264 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
266 dam(i,mode) =
min(dam(i,mode),one)
268 dfmax(i) =
max(dfmax(i),dam(i,mode))
271 IF (dam(i,mode) >= one)
THEN
272 failmod = failmod + 1
277 IF (failmod >= nmod)
THEN
290 IF (foff(i) == 1)
THEN
292 IF (signxx(i) >= zero)
THEN
293 dmg_scale(i,1) = one - dam(i,1)
298 IF (signyy(i) >= zero)
THEN
299 dmg_scale(i,2) = one - dam(i,2)
301 dmg_scale(i,2) = one - dam(i,5)
304 IF (signxy(i) >= zero)
THEN
305 dmg_scale(i,3) = one - dam(i,3)
307 dmg_scale(i,3) = one - dam(i,6)
320 uvar(i,j+6) = ener(i,j)
331 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)
THEN
332 WRITE(iout, 1200) ngl(i),ipg,ply_id,ipt
333 WRITE(istdo,1200) ngl(i),ipg,ply_id,ipt
334 ELSEIF (igtyp == 1 .OR. igtyp == 9)
THEN
335 WRITE(iout, 1000) ngl(i),ipg,ipt
336 WRITE(istdo,1000) ngl(i),ipg,ipt
338 WRITE(iout, 1100) ngl(i),ipg,ilay,ipt
339 WRITE(istdo,1100) ngl(i),ipg,ilay,ipt
341 IF (fmode(i,1)==1)
WRITE(iout, 2000)
'1 - TRACTION XX'
342 IF (fmode(i,2)==1)
WRITE(iout, 2000)
'2 - TRACTION YY'
343 IF (fmode(i,3)==1)
WRITE(iout, 2000)
'3 - POSITIVE SHEAR XY'
344 IF (fmode(i,4)==1)
WRITE'4 - COMPRESSION XX'
345 IF (fmode
WRITE(iout, 2000)
'5 - COMPRESSION YY'
346 IF (fmode(i,6)==1)
WRITE(iout, 2000)
'6 - NEGATIVE SHEAR XY'
347#include
"lockoff.inc"
351 1000
FORMAT(1x,
'FAILURE (ORTHENERG) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
352 . i2,1x,
',INTEGRATION PT',i3)
353 1100
FORMAT(1x,
'FAILURE (ORTHENERG) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
354 . i2,1x,
',LAYER',i3,1x,
',INTEGRATION PT',i3)
355 1200
FORMAT(1x,
'FAILURE (ORTHENERG) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
356 . i2,1x,
',PLY ID',i10,1x
',INTEGRATION PT',i3)
357 2000
FORMAT(1x,
'MODE',1x,a)
subroutine usermat_shell(timers, elbuf_str, mat_elem, jft, jlt, nel, pm, for, mom, gstr, thk, eint, off, dir_a, dir_b, mat, area, exx, eyy, exy, exz, eyz, kxx, kyy, kxy, geo, thk_ly, pid, tf, npf, mtn, dt1c, dm, bufmat, ssp, rho, viscmx, ipla, iofc, indx, ngl, thkly, matly, zcfac, ng, shf, gs, sigy, thk0, epsd_pg, posly, igeo, ipm, failwave, fwave_el, ifailure, aldt, tempel, die, r11, r12, r13, r21, r22, r23, r31, r32, r33, table, ixfem, elcrkini, dir1_crk, dir2_crk, iparg, jhbe, ismstr, jthe, tensx, ir, is, nlay, npt, ixlay, ixel, ithk, f_def, ishplyxfem, itask, pm_stack, isubstack, stack, alpe, ply_exx, ply_eyy, ply_exy, ply_exz, ply_eyz, ply_f, varnl, nloc_dmg, nlay_max, laynpt_max, dt)