35 1 NEL ,NUPARAM ,NUVAR ,MFUNC ,KFUNC ,ALDT ,
36 2 NPF ,TF ,TIME ,UPARAM ,TDELE ,
37 3 NGL ,DPLA ,UVAR ,OFF ,DFMAX ,DMGSCL ,
38 4 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX )
42#include "implicit_f.inc"
47#include "tabsiz_c.inc"
53 INTEGER,
INTENT(IN) :: NEL,NUPARAM,NUVAR,NGL(NEL)
54 my_real,
INTENT(IN) :: TIME,UPARAM(NUPARAM),
55 . SIGNXX(NEL),SIGNYY(NEL),SIGNZZ(NEL),
56 . SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL),
58 my_real,
INTENT(INOUT) :: uvar(nel,nuvar),dfmax(nel),
59 . tdele(nel),off(nel),dmgscl(nel)
63 INTEGER NPF(SNPC), , KFUNC(MFUNC)
64 my_real FINTER ,TF(STF)
69 INTEGER I,J,INDX(NEL),NINDX,SEL,FLAG_PERTURB,ICOUP
71 . DF,P,TRIAXS,SVM,SXX,SYY,SZZ,EPS_FAIL,P1X,P1Y,S1X,S1Y,
72 . S2Y,A1,B1,C1,REF_EL_LEN,LAMBDA,FAC,X_1(3),X_2(3),DCRIT,EXP
84 flag_perturb = uparam(8)
85 sel = int(uparam(11)+0.0001)
87 ref_el_len = uparam(13)
88 icoup = nint(uparam(14))
97 IF (uvar(1,3) == zero)
THEN
100 lambda = uvar(i,3) / ref_el_len
101 fac = finter(kfunc(1),lambda,npf,tf,df)
105 ELSEIF (nuvar == 9)
THEN
106 IF (uvar(1,9) == zero)
THEN
109 lambda = uvar(i,9) / ref_el_len
110 fac = finter(kfunc(1),lambda,npf,tf,df)
119 IF (off(i) < em01) off(i) = zero
120 IF (off(i) < one .AND. off(i) > zero) off(i) = off(i)*four_over_5
130 IF (flag_perturb == 0)
THEN
132 IF (off(i) == one .AND. dpla(i) /= zero)
THEN
134 p = third*(signxx(i) + signyy(i) + signzz(i))
140 svm = half*(sxx**2 + syy**2 + szz**2)
141 . + signxy(i)**2 + signzx(i)**2 + signyz(i)**2
142 svm = sqrt(three*svm)
145 triaxs = p/
max(em20,svm)
146 IF (triaxs < -two_third) triaxs = -two_third
147 IF (triaxs > two_third) triaxs = two_third
151 IF (triaxs <= third)
THEN
152 eps_fail = x_1(1) + x_1(2)*triaxs + x_1(3)*triaxs**2
153 IF ((nuvar == 3).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,3)
158 eps_fail = x_2(1) + x_2(2)*triaxs + x_2(3)*triaxs**2
159 IF ((nuvar == 3).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,3)
161 ELSEIF (sel == 2)
THEN
162 IF (triaxs <= one/sqr3)
THEN
164 p1y = x_1(1) + x_1(2)*p1x + x_1(3)*p1x**2
166 s1y = x_2(1) + x_2(2)/sqr3 + x_2(3)*(one/sqr3)**2
167 a1 = (p1y - s1y)/(p1x - s1x)**2
170 eps_fail = c1 + b1*triaxs + a1*triaxs*
171 IF ((nuvar == 3).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,3)
174 p1y = x_2(1) + x_2(2)*p1x + x_2(3)*p1x**2
176 s1y = x_2(1) + x_2(2)/sqr3 + x_2(3)*(one/sqr3)**2
177 a1 = (p1y - s1y)/(p1x - s1x)**2
180 eps_fail = c1 + b1*triaxs + a1*triaxs**2
181 IF ((nuvar == 3).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,3)
187 dfmax(i) = dfmax(i) + dpla(i)/
max(eps_fail,em6)
190 IF (dfmax(i) >= one .AND. off(i) == one)
THEN
201 IF (off(i) == one .AND. dpla(i) /= zero)
THEN
203 p = third*(signxx(i) + signyy(i) + signzz(i))
210 . + signxy(i)**2 + signzx(i)**2 + signyz(i)**2
211 svm = sqrt(three*svm)
215 IF (triaxs < -two_third) triaxs = -two_third
216 IF (triaxs > two_third) triaxs = two_third
220 IF (triaxs <= third)
THEN
221 eps_fail = uvar(i,3) + uvar(i,4)*triaxs + uvar(i,5)*triaxs**2
222 IF ((nuvar == 9).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,9)
227 eps_fail = uvar(i,6) + uvar(i,7)*triaxs + uvar(i,8)
228 IF ((nuvar == 9).AND.(mfunc > 0)) eps_fail = eps_fail*uvar
230 ELSEIF (sel == 2)
THEN
231 IF (triaxs <= one/sqr3)
THEN
233 p1y = uvar(i,3) + uvar(i,4)*p1x + uvar(i,5)*p1x**2
235 s1y = uvar(i,6) + uvar(i,7)/sqr3 + uvar(i,8)*(one/sqr3)**2
236 a1 = (p1y - s1y)/(p1x - s1x)**2
239 eps_fail = c1 + b1*triaxs + a1*triaxs**2
240 IF ((nuvar == 9).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,9)
243 p1y = uvar(i,3) + uvar(i,4)*p1x + uvar(i,5)
245 s1y = uvar(i,6) + uvar(i,7)/sqr3 + uvar(i,8)*(one/sqr3)**2
246 a1 = (p1y - s1y)/(p1x - s1x)**2
249 eps_fail = c1 + b1*triaxs + a1*triaxs**2
250 IF ((nuvar == 9).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,9)
256 dfmax(i) = dfmax(i) + dpla(i)/
max(eps_fail,em6)
257 dfmax(i) =
min(one,dfmax(i))
259 IF (dfmax(i) >= one .AND. off(i) == one)
THEN
274 IF (dfmax(i) >= dcrit)
THEN
275 IF (dcrit < one)
THEN
276 dmgscl(i) = one - ((dfmax(i)-dcrit)/
max(one-dcrit,em20))**exp
293 WRITE(iout, 1000) ngl(i),time
294 WRITE(istdo,1100) ngl(i),time
295#include "lockoff.inc"
299 1000
FORMAT(1x,
' -- RUPTURE OF SOLID ELEMENT (BIQUAD)',i10,
300 .
' AT TIME : ',1pe12.4)
301 1100
FORMAT(1x,
' -- RUPTURE OF SOLID ELEMENT (BIQUAD)',i10,
302 .
' AT TIME : ',1pe12.4)
subroutine usermat_solid(timers, lft, llt, nft, mtn, jcvt, pm, off, sig, eint, rho, qold, vol, strain, sigl, gama, uvar, bufmat, tf, npf, stifn, mat, ngl, nuvar, dt2t, neltst, ityptst, offg, geo, pid, epsd, el_temp, wxx, wyy, wzz, jsph, mumax, ssp, aire, voln, vd2, deltax, vis, d1, d2, d3, d4, d5, d6, pnew, psh, q, ssp_eq, dvol, sold1, sold2, sold3, sold4, sold5, sold6, rx, ry, rz, sx, sy, sz, tx, ty, tz, ipla, sigy, defp, ismstr, mfxx, mfxy, mfxz, mfyx, mfyy, mfyz, mfzx, mfzy, mfzz, ipm, isorth, fbuf, nfail, npg, sigdd, dxy, dyx, dyz, dzy, dzx, dxz, fr_wav, isrot, v, varnl, w, ix, x, jthe, et, mssa, dmels, iptr, ipts, iptt, table, fvd2, fdeltax, fssp, fqvis, iparg1, igeo, sigv, al_imp, signor, istrain, ng, elbuf_tab, vbuf, ilay, vk, iparg, bufvois, vdx, vdy, vdz, ihet, conde, itask, iexpan, vol_avg, amu, epsth3, epsth, svisc, nel, etotsh, iselect, tstar, muold, amu2, dpdm, rhoref, rhosp, nloc_dmg, ity, jtur, mat_elem, idel7nok, svis, dt, glob_therm, damp_buf, idamp_freq_range)