38 1 NEL ,NUPARAM ,NUVAR ,
39 2 TABLE ,NTABLF ,ITABLF ,TIME ,UPARAM ,
40 3 NGL ,ALDT ,DPLA ,EPSP ,UVAR ,
41 4 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
42 5 PLA ,TEMP ,SIGY ,OFF ,DFMAX ,
43 6 TDELE ,DMG_SCALE,UELR ,IPG ,NPG ,
44 7 LOFF ,DAMINI ,VOL ,INLOC )
52#include "implicit_f.inc"
60#include "tabsiz_c.inc"
64 INTEGER,
INTENT(IN) ::
65 . NEL,NUPARAM,NUVAR,NGL(NEL),NPG,IPG
66INTEGER,
DIMENSION(NTABLF) ,
INTENT(IN) :: ITABLF
67 my_real,
INTENT(IN) ::
68 . TIME,UPARAM(NUPARAM),ALDT(NEL),
69 . DPLA(NEL),EPSP(NEL),TEMP(NEL)
72 . pla(nel),sigy(nel),vol(nel)
73 my_real,
INTENT(INOUT) ::
74 . uvar(nel,nuvar),dfmax(nel),tdele(nel),
75 . dmg_scale(nel),off(nel),uelr(nel),
76 . loff(nel),damini(nel)
77 TYPE (TTABLE),
INTENT(IN),
DIMENSION(NTABLE) :: TABLE
81 INTEGER I,J,INDX(NEL),NINDX,FAILIP,IPOS(NEL,2),
83 INTEGERDIMENSION(:),
ALLOCATABLE ::
84 . initype,evotype,evoshap,comptyp,tab_id,
86 my_real,
DIMENSION(:),
ALLOCATABLE ::
87 . sr_ref,fscale,ini_p1,el_ref,elscal,
89 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
92 . lambda,fac,df,l0(nel) ,triax(nel) ,epsf(nel) ,
94 . epsmod(nel) ,p(nel) ,svm(nel) ,dmgmax(nel) ,
95 . dmgmul(nel) ,sigtens(nel,3,3) ,sig_pr(nel,3),
96 . vect_pr(nel,3,3),plas_disp,r_inter ,yld0 ,
97 . maxshear(nel),sigpmaj(nel),
alpha(nel) ,dsize(nel) ,
98 . center ,devsp1 ,devsp2 ,radius ,
106 ilen = int(uparam(3))
107 IF (inloc > 0) ilen = 1
108 failip =
min(nint(uparam(4)),npg)
109 ALLOCATE(initype(ninievo))
110 ALLOCATE(evotype(ninievo))
111 ALLOCATE(evoshap(ninievo))
112 ALLOCATE(comptyp(ninievo))
113 ALLOCATE(tab_id(ninievo))
114 ALLOCATE(sr_ref (ninievo))
115 ALLOCATE(fscale(ninievo))
116 ALLOCATE(ini_p1(ninievo))
117 ALLOCATE(tab_el(ninievo))
118 ALLOCATE(el_ref(ninievo))
119 ALLOCATE(elscal(ninievo))
120 ALLOCATE(disp(ninievo))
121 ALLOCATE(ener(ninievo))
124 tab_id(1:ninievo) = itablf(1:ninievo)
125 tab_el(1:ninievo) = itablf(ninievo+1:ninievo*2)
128 initype(j) = uparam(6 + 14*(j-1))
129 evotype(j) = uparam(7 + 14*(j-1))
130 evoshap(j) = uparam(8 + 14*(j-1))
131 comptyp(j) = uparam(9 + 14*(j-1))
132 sr_ref(j) = uparam(11 + 14*(j-1))
133 fscale(j) = uparam(12 + 14*(j-1))
134 ini_p1(j) = uparam(13 + 14*(j-1))
135 el_ref(j) = uparam(15 + 14*(j-1))
136 elscal(j) = uparam(16 + 14*(j-1))
137 disp(j) = uparam(17 + 14*(j-1))
138 alpha2(j) = uparam(18 + 14*(j-1))
139 ener(j) = uparam(19 + 14*(j-1))
144 IF (uvar(1,1) == zero)
THEN
147 uvar(1:nel,1) = aldt(1:nel)
151 uvar(i,1) = exp(third*log(vol(i)))
155 l0(1:nel) = uvar(1:nel,1)
157 epsmod(1:nel) = uvar(1:nel,2)
159 ALLOCATE(dmgini(nel,ninievo))
160 ALLOCATE(dmgevo(nel,ninievo))
165 dmgini(i,j) = uvar(i,3+(j-1)*3)
167 dmgevo(i,j) = uvar(i,4+(j-1)*3)
179 p(i) = -third*(signxx(i) + signyy(i) + signzz(i))
180 sxx = signxx(i) + p(i)
181 syy = signyy(i) + p(i)
182 szz = signzz(i) + p(i)
183 svm(i) = half*(sxx**2 + syy**2 + szz**2)
184 . + signxy(i)**2 + signzx(i)**2 + signyz(i)**2
185 svm(i) = sqrt(three*svm(i))
186 triax(i) = -p(i)/
max(em20,svm(i))
187 IF (triax(i) < -one) triax(i) = -one
188 IF (triax(i) > one) triax(i) = one
191 IF (triax(i) > zero) epsmod(i) = epsmod(i) + dpla(i)
194 sigtens(i,1,1) = signxx(i)
195 sigtens(i,2,2) = signyy(i)
196 sigtens(i,3,3) = signzz(i)
197 sigtens(i,1,2) = signxy(i)
198 sigtens(i,2,3) = signyz(i)
199 sigtens(i,3,1) = signzx(i)
200 sigtens(i,2,1) = signxy(i)
201 sigtens(i,3,2) = signyz(i)
202 sigtens(i,1,3) = signzx(i)
207 CALL jacobiew_v(nel,3,sigtens,sig_pr,vect_pr,nrot)
212 IF (sig_pr(i,1) < sig_pr(i,2))
THEN
213 r_inter = sig_pr(i,1)
214 sig_pr(i,1) = sig_pr(i,2)
215 sig_pr(i,2) = r_inter
217 IF (sig_pr(i,2) < sig_pr(i,3))
THEN
218 r_inter = sig_pr(i,2)
219 sig_pr(i,2) = sig_pr(i,3)
220 sig_pr(i,3) = r_inter
222 IF (sig_pr(i,1) < sig_pr(i,2))
THEN
223 r_inter = sig_pr(i,1)
224 sig_pr(i,1) = sig_pr(i,2)
225 sig_pr(i,2) = r_inter
227 sigpmaj(i) = sig_pr(i,1)
228 maxshear(i) = (sig_pr(i,1)-sig_pr(i,3))*half
231 center = half*(signxx(i)+signyy(i))
232 radius = sqrt((half*(signxx(i)-signyy(i)))**2 + signxy(i)**2)
233 sigp1 = center + radius
234 sigp2 = center - radius
235 devsp1 = sigp1 - third*(sigp1+sigp2)
236 devsp2 = sigp2 - third*(sigp1+sigp2)
237 alpha(i) = devsp2/sign(
max(abs(devsp1),em20),devsp1)
246 SELECT CASE(initype(j))
249 xvec(1:nel,1) = triax(1:nel)
253 xvec(i,1) = (svm(i) + ini_p1(j)*p(i))/
max(maxshear(i),em08)
257 xvec(1:nel,1) =
alpha(1:nel)
264 xvec(1:nel,2) = epsp(1:nel)/sr_ref(j)
266 CALL table_vinterp(table(tab_id(j)),nel,nel,ipos,xvec,epsf,depsf)
267 epsf(1:nel) = epsf(1:nel)*fscale(j)
270 IF (tab_el(j) > 0)
THEN
271 xvec(1:nel,1) = l0(1:nel)/el_ref(j)
272 SELECT CASE (initype(j))
274 xvec(1:nel,2) = triax(1:nel)
277 xvec(i,2) = (svm(i) + ini_p1(j)*p(i))/
max(maxshear(i),em08)
280 xvec(1:nel,2) =
alpha(1:nel)
283 xvec(i,2) = (svm(i) + ini_p1(j)*p(i))/
max(sigpmaj(i),em08)
287 CALL table_vinterp(table(tab_el(j)),nel,nel,ipos,xvec,sizefac,dsize)
288 sizefac(1:nel) = sizefac(1:nel)*elscal(j)
293 SELECT CASE (initype(j))
296 IF ((dpla(i) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one))
THEN
297 dmgini(i,j) = dmgini(i,j) + dpla(i)/
max(epsf(i),em20)
298 dmgini(i,j) =
min(dmgini(i,j),one)
302 IF (nint(ini_p1(j))>0)
THEN
304 IF (((epsmod(i)-uvar(i,2)) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one))
THEN
305 dmgini(i,j) = dmgini(i,j) + (epsmod(i)-uvar(i,2))/
max(epsf(i),em20)
306 dmgini(i,j) =
min(dmgini(i,j),one)
311 IF (((epsmod(i)-uvar(i,2)) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one))
THEN
312 dmgini(i,j) =
max(dmgini(i,j),epsmod(i)/
max(epsf(i),em20))
313 dmgini(i,j) =
min(dmgini(i,j),one)
318 IF (nint(ini_p1(j))>0)
THEN
320 IF ((dpla(i) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one))
THEN
321 dmgini(i,j) = dmgini(i,j) + dpla(i)/
max(epsf(i),em20)
322 dmgini(i,j) =
min(dmgini(i,j),one)
327 IF ((dpla(i) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one))
THEN
328 dmgini(i,j) =
max(dmgini(i,j),pla(i)/
max(epsf(i),em20))
329 dmgini(i,j) =
min(dmgini(i,j),one)
336 SELECT CASE (evotype(j))
339 SELECT CASE (evoshap(j))
343 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
344 . (loff(i) == one).AND.(dmgevo(i,j)<one))
THEN
345 dmgevo(i,j) = dmgevo(i,j) + l0(i)*dpla(i)/disp(j)
346 dmgevo(i,j) =
min(one,dmgevo(i,j))
347 IF (dmgevo(i,j) >= one) fcrit(i) = j
353 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
354 . (loff(i) == one).AND.(dmgevo(i,j)<one))
THEN
355 IF (dmgevo(i,j) == zero) uvar(i,5+(j-1)*3) = pla(i)
356 plas_disp = (pla(i) - uvar(i,5+(j-1)*3))*l0(i)/disp(j)
357 dmgevo(i,j) = dmgevo(i,j) + (
alpha2(j)/(one - exp(-
alpha2(j))))*
358 . exp(-
alpha2(j)*plas_disp)*
359 . dpla(i)*l0(i)/disp(j)
360 IF (dmgevo(i,j) > 0.999d0) dmgevo(i,j) = one
361 dmgevo(i,j) =
min(one,dmgevo(i,j))
362 IF (dmgevo(i,j) >= one) fcrit(i) = j
368 SELECT CASE (evoshap(j))
372 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
373 . (loff(i) == one).AND.(dmgevo(i,j)<one))
THEN
374 IF (dmgevo(i,j) == zero) uvar(i,5+(j-1)*3) = sigy(i)
375 yld0 = uvar(i,5+(j-1)*3)
376 dmgevo(i,j) = dmgevo(i,j) + dpla(i)*l0(i)*yld0/(two*ener(j))
377 dmgevo(i,j) =
min(one,dmgevo(i,j))
378 IF (dmgevo(i,j) >= one) fcrit(i) = j
384 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
385 . (loff(i) == one).AND.(dmgevo(i,j)<one))
THEN
386 uvar(i,5+(j-1)*3) = uvar(i,5+(j-1)*3) + sigy(i)*l0(i)*dpla(i)
387 dmgevo(i,j) = one - exp(-(uvar(i,5+(j-1)*3))/ener(j))
388 IF (dmgevo(i,j) > 0.999d0) dmgevo(i,j) = one
389 dmgevo(i,j) =
min(one,dmgevo(i,j))
390 IF (dmgevo(i,j) >= one) fcrit(i) = j
397 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
398 . (loff(i) == one).AND.(dmgevo(i,j)<one))
THEN
399 dmgevo(i,j) = dmgini(i,j)
400 dmgevo(i,j) =
min(one,dmgevo(i,j))
401 IF (dmgevo(i,j) >= one) fcrit(i) = j
414 SELECT CASE (comptyp(j))
418 dmgmax(i) =
max(dmgmax(i),dmgevo(i,j))
423 dmgmul(i) = dmgmul(i)*(one-dmgevo(i,j))
427 dmgmul(1:nel) = one - dmgmul(1:nel)
431 IF ((loff(i) == one).AND.(off(i) > zero))
THEN
432 dfmax(i) =
max(dmgmax(i),dmgmul(i))
433 IF (dfmax(i) >= one)
THEN
436 uelr(i) = uelr(i) + one
438 IF (nint(uelr(i)) >= failip)
THEN
449 dmg_scale(1:nel) = one - dfmax(1:nel)
455 uvar(1:nel,2) = epsmod(1:nel)
461 damini(i) =
max(dmgini(i,j),damini(i))
463 uvar(i,3+(j-1)*3) = dmgini(i,j)
465 uvar(i,4+(j-1)*3) = dmgevo(i,j)
476 WRITE(iout, 1000) ngl(i),fcrit(i),ipg,time
477 WRITE(istdo,1000) ngl(i),fcrit(i
478 IF (off(i) == zero)
THEN
479 WRITE(iout, 2000) ngl(i),time
480 WRITE(istdo,2000) ngl(i),time
482#include "lockoff.inc"
489 IF (
ALLOCATED(initype))
DEALLOCATE(initype)
490 IF (
ALLOCATED(evotype))
DEALLOCATE(evotype)
491 IF (
ALLOCATED(evoshap))
DEALLOCATE(evoshap)
492 IF (
ALLOCATED(comptyp))
DEALLOCATE(comptyp)
493 IF (
ALLOCATED(tab_id))
DEALLOCATE(tab_id)
494 IF (
ALLOCATED(sr_ref))
DEALLOCATE(sr_ref)
495 IF (
ALLOCATED(fscale))
DEALLOCATE(fscale)
496 IFALLOCATED(ini_p1))
DEALLOCATE(ini_p1)
497 IF (
ALLOCATED(tab_el))
DEALLOCATE(tab_el)
498 IF (
ALLOCATED(el_ref))
DEALLOCATE(el_ref)
499 IF (
ALLOCATED(elscal))
DEALLOCATE(elscal)
500 IF (
ALLOCATED(disp))
DEALLOCATE(disp)
501 IF (
ALLOCATED(ener))
DEALLOCATE(ener)
503 IF (
ALLOCATED(dmgini))
DEALLOCATE(dmgini)
504 IF (
ALLOCATED(dmgevo))
DEALLOCATE(dmgevo)
505 IF (
ALLOCATED(fcrit))
DEALLOCATE(fcrit)
507 1000
FORMAT(1x,
'FOR SOLID ELEMENT NUMBER ',i10
508 .
' FAILURE (INIEVO) WITH CRITERION NUMBER ',i3,
509 .
' AT GAUSS POINT ',i5,
' AT TIME :',1pe12.4)
510 2000
FORMAT(1x,
'-- RUPTURE OF SOLID ELEMENT :',i10,
511 .
' AT TIME :',1pe12.4)