31 1 NEL ,NUVAR ,IP ,ILAY ,NPG ,TIME ,
32 2 TIMESTEP,UPARAM ,NGL ,OFF ,LOFF ,NOFF ,
33 3 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
34 4 UVAR ,NUPARAM ,DFMAX ,LF_DAMMX,TDELE ,DMG_SCALE)
38#include "implicit_f.inc"
45 INTEGER,
INTENT(IN) :: NEL,NUPARAM,NUVAR,
46 . ILAY,IP,NPG,NGL(NEL),LF_DAMMX
47 my_real,
INTENT(IN) ::
48 . TIME,TIMESTEP,UPARAM(NUPARAM)
49 my_real,
INTENT(INOUT) ::
50 . signxx(nel),signyy(nel),signzz(nel),
51 . signxy(nel),signyz(nel),signzx(nel)
55 INTEGER,
INTENT(INOUT) :: NOFF(NEL)
56 my_real,
INTENT(INOUT) ::
57 . UVAR(NEL,NUVAR),OFF(NEL),
58 . TDELE(NEL),DMG_SCALE(NEL),LOFF()
59 my_real ,
DIMENSION(NEL,LF_DAMMX),
INTENT(INOUT) :: dfmax
64 . I,J,INDX(NEL),NINDX,INDX0(NEL),NINDX0,
67 . x11,x22,s12,tmax,fcut
69 . asrate,sxx(nel),syy(nel),szz(nel),
70 . sxy(nel),syz(nel),szx(nel),findex,rfactr
81 ifail_so = int(uparam(7))
83 ! stress tensor filtering
86 asrate = two*pi*fcut*timestep
87 asrate = asrate/(one+asrate)
88 sxx(i) = asrate*signxx(i) + (one - asrate)*uvar(i,2)
89 syy(i) = asrate*signyy(i) + (one - asrate)*uvar(i,3)
90 szz(i) = asrate*signzz(i) + (one - asrate)*uvar(i,4)
91 sxy(i) = asrate*signxy(i) + (one - asrate)*uvar(i,5)
92 syz(i) = asrate*signyz(i) + (one - asrate)*uvar(i,6)
93 szx(i) = asrate*signzx(i) + (one - asrate)*uvar(i,7)
125 IF (dfmax(i,1)<one)
THEN
128 findex = (sxx(i)/x11)**2 - ((sxx(i)*syy(i))/(x11**2)) +
129 . (syy(i)/x22)**2 + (sxy(i)/s12)**2 -
132 findex =
max(zero,findex)
134 ! compute reserve factor
135 dfmax(i,2) = one/
max(sqrt(findex),em20)
138 dfmax(i,1) =
min(one ,
max(findex,dfmax(i,1)))
139 IF (dfmax(i,1) >= one)
THEN
142 IF (ifail_so > 0)
THEN
149 IF ((uvar(i,1) > zero).AND.(loff(i) /= zero).AND.
150 . (ifail_so > 0).AND.(off(i) /= zero))
THEN
151 dmg_scale(i) = exp(-(time - uvar(i,1))/tmax)
152 IF (dmg_scale(i) < em02)
THEN
156 IF (ifail_so == 1)
THEN
160 ELSEIF (ifail_so == 2)
THEN
161 noff(i) = noff(i) + 1
162 IF (int(noff(i)) >= npg)
THEN
179 WRITE(iout, 1000) ngl(i),ip,ilay
180 WRITE(istdo,1100) ngl(i),ip,ilay,time
181#include "lockoff.inc"
189 WRITE(iout, 1200) ngl(i),time
190 WRITE(istdo,1200) ngl(i),time
191#include "lockoff.inc"
195 1000
FORMAT(1x,
'FAILURE (TSAIHILL) OF SOLID ELEMENT ',i10,1x,
196 .
',GAUSS PT',i5,1x,
',LAYER',i5)
197 1100
FORMAT(1x,
'FAILURE (TSAIHILL) OF SOLID ELEMENT ',i10,1x,
198 .
',GAUSS PT',i5,1x,
',LAYER',i5,1x,
'AT TIME :',1pe20.13)
199 1200
FORMAT(1x,
'-- RUPTURE OF SOLID ELEMENT : ',i10,1x,
200 .
'AT TIME :',1pe20.13)
subroutine fail_tsaihill_s(nel, nuvar, ip, ilay, npg, time, timestep, uparam, ngl, off, loff, noff, signxx, signyy, signzz, signxy, signyz, signzx, uvar, nuparam, dfmax, lf_dammx, tdele, dmg_scale)
subroutine mulaw(lft, llt, nft, mtn, jcvt, pm, off, sig, eint, rho, vol, strain, gama, uvar, bufmat, tf, npf, imat, ngl, nuvar, nvartmp, vartmp, geo, pid, epsd, wxx, wyy, wzz, jsph, ssp, voln, vis, d1, d2, d3, d4, d5, d6, dvol, sold1, sold2, sold3, sold4, sold5, sold6, rx, ry, rz, sx, sy, sz, tx, ty, tz, ismstr, mfxx, mfxy, mfxz, mfyx, mfyy, mfyz, mfzx, mfzy, mfzz, ipm, isorth, nel, matparam)