35 1 NEL ,NUPARAM ,NUVAR ,MFUNC ,KFUNC ,
36 2 NPF ,TF ,TIME ,TIMESTEP ,UPARAM ,
37 3 NGL ,DPLA ,EPSP ,UVAR ,OFF ,
38 4 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
39 5 DFMAX ,TDELE ,ALDT )
43#include "implicit_f.inc"
73 INTEGER NEL, NUPARAM, NUVAR,NGL(NEL)
74 my_real TIME,TIMESTEP,UPARAM(*),
75 . SIGNXX(NEL),SIGNYY(NEL),SIGNZZ(NEL),
76 . SIGNXY(NEL),SIGNYZ(NEL),(NEL),UVAR(NEL,NUVAR),
77 . DPLA(NEL),EPSP(NEL),OFF(NEL),DFMAX(NEL),(NEL),
82 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
95 INTEGER I,K,J,INDX(MVSIZ),NINDX,SEL,NANGLE,IREG,IRATE
97 . DF,P,triaxs,SVM,SXX,SYY,SZZ,EPS_FAIL,
98 . P1X,P1Y,S1X,S1Y,S2Y,A1,B1,C1,REF_EL_LEN,LAMBDA,FAC,
99 . X_1(3),X_2(3),COS2(10,10),EPSD0,CJC,RATE_SCALE,FRATE,
100 . mohr_radius,cos2theta(nel)
101 my_real sig1(nel),sig2(nel),mohr_center
102 my_real,
DIMENSION(:),
ALLOCATABLE :: q_x11,q_x12,q_x13,q_x21,q_x22,q_x23,q_inst
105 1 1. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
106 2 0. ,1. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
107 3 -1. ,0. ,2. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
108 4 0. ,-3. ,0. ,4. ,0. ,0. ,0. ,0. ,0. ,0. ,
109 5 1. ,0. ,-8. ,0. ,8. ,0. ,0. ,0. ,0. ,0. ,
110 6 0. ,5. ,0. ,-20. ,0. ,16. ,0. ,0. ,0. ,0. ,
111 7 -1. ,0. ,18. ,0. ,-48. ,0. ,32. ,0. ,0. ,0. ,
112 8 0. ,-7. ,0. ,56. ,0. ,-112.,0. ,64. ,0. ,0. ,
113 9 1. ,0. ,-32. ,0. ,160. ,0. ,-256.,0. ,128. ,0. ,
114 a 0. ,9. ,0. ,-120.,0. ,432. ,0. ,-576 ,0. ,256. /
121 ref_el_len = uparam(3)
124 rate_scale = uparam(6)
125 nangle = int(uparam(7))
128 ALLOCATE(q_x11(nangle),q_x12(nangle),q_x13(nangle),
129 . q_x21(nangle),q_x22(nangle),q_x23(nangle))
132 ALLOCATE(q_inst(nangle))
134 q_x11(j) = uparam(8 + 7*(j-1))
135 q_x12(j) = uparam(9 + 7*(j-1))
136 q_x13(j) = uparam(10 + 7*(j-1))
137 q_x21(j) = uparam(11 + 7*(j-1))
138 q_x22(j) = uparam(12 + 7*(j-1))
139 q_x23(j) = uparam(13 + 7*(j-1))
140 q_inst(j) = uparam(14 + 7*(j-1))
144 q_x11(j) = uparam(8 + 6*(j-1))
145 q_x12(j) = uparam(9 + 6*(j-1))
146 q_x13(j) = uparam(10 + 6*(j-1))
147 q_x21(j) = uparam(11 + 6*(j-1))
148 q_x22(j) = uparam(12 + 6*(j-1))
149 q_x23(j) = uparam(13 + 6*(j-1))
152 IF (sel == 3) sel = 2
156 IF (rate_scale /= zero)
THEN
160 IF (ref_el_len /= zero)
THEN
165 IF (uvar(1,3) == zero .AND. ireg > 0)
THEN
167 lambda = aldt(i)/ref_el_len
168 fac = finter(kfunc(ireg),lambda,npf,tf,df)
175 IF (off(i) < em01) off(i) = zero
176 IF (off(i) < one .AND. off(i) > zero) off(i) = off(i)*four_over_5
190 !
If the element is not broken
191 IF (off(i) == one .AND. dpla(i) /= zero)
THEN
194 mohr_radius = sqrt(((signxx(i)-signyy(i))/two)**2 + signxy(i)**2)
195 mohr_center = (signxx(i)+signyy(i))/two
196 IF (mohr_radius > em20)
THEN
197 cos2theta(i) = ((signxx(i)-signyy(i))/two)/mohr_radius
201 sig1(i) = mohr_center + mohr_radius
202 sig2(i) = mohr_center - mohr_radius
203 IF (sig1(i)<zero.OR.((sig2(i)<zero).AND.(sig2(i)<-sig1(i))))
THEN
204 cos2theta(i) = -cos2theta(i)
212 x_1(1) = x_1(1) + q_x11(j)*cos2(k,j)*(cos2theta(i))**(k
214 x_1(3) = x_1(3) + q_x13(j)*cos2(k,j)*(cos2theta(i))**(k-1)
215 x_2(1) = x_2(1) + q_x21(j)*cos2(k,j
216 x_2(2) = x_2(2) + q_x22(j)*cos2
217 x_2(3) = x_2(3) + q_x23(j)*cos2
222 p = third*(signxx(i) + signyy(i) + signzz(i))
227 . + signxy(i)**2 + signzx(i
229 triaxs = p/
max(em20,svm)
230 IF (triaxs < -two_third) triaxs = -two_third
231 IF (triaxs > two_third) triaxs = two_third
234 IF (triaxs <= third)
THEN
235 eps_fail = x_1(1) + x_1(2)*triaxs + x_1(3)*triaxs**2
236 IF (ireg > 0) eps_fail = eps_fail*uvar(i,3)
240 eps_fail = x_2(1) + x_2(2)*triaxs + x_2(3)*triaxs**2
241 IF (ireg > 0) eps_fail = eps_fail*uvar(i,3)
243 IF (triaxs <= one/sqr3)
THEN
245 p1y = x_1(1) + x_1(2)*p1x + x_1(3)*p1x**2
247 s1y = x_2(1) + x_2(2)/sqr3 + x_2(3)*(one/sqr3)**2
248 a1 = (p1y - s1y)/(p1x - s1x)**2
251 eps_fail = c1 + b1*triaxs + a1*triaxs**2
252 IF (ireg > 0) eps_fail = eps_fail*uvar(i,3)
255 p1y = x_2(1) + x_2(2)*p1x + x_2(3)*p1x**2
257 s1y = x_2(1) + x_2(2)/sqr3 + x_2(3)*(one/sqr3)**2
258 a1 = (p1y - s1y)/(p1x - s1x)**2
261 eps_fail = c1 + b1*triaxs + a1*triaxs**2
262 IF (ireg > 0) eps_fail = eps_fail*uvar(i,3)
268 IF (cjc /= zero .OR. irate /= 0)
THEN
269 IF (cjc /= zero)
THEN
271 IF (epsp(i) > epsd0) frate = frate + cjc*log
272 ELSEIF (irate /= 0)
THEN
273 frate = finter(kfunc(irate),epsp(i)/rate_scale,npf,tf,df)
275 eps_fail = eps_fail*frate
279 dfmax(i) = dfmax(i) + dpla(i)/
max(eps_fail,em6)
280 dfmax(i) =
min(one,dfmax(i))
283 IF (dfmax(i) >= one .AND. off(i) == one)
THEN
294 IF (
ALLOCATED(q_x11))
DEALLOCATE(q_x11)
295 IF (
ALLOCATED(q_x12))
DEALLOCATE(q_x12)
296 IF (
ALLOCATED(q_x13))
DEALLOCATE(q_x13)
297 IF (
ALLOCATED(q_x21))
DEALLOCATE(q_x21)
298 IF (
ALLOCATED(q_x22))
DEALLOCATE(q_x22)
299 IF (
ALLOCATED(q_x23))
DEALLOCATE(q_x23)
300 IF (
ALLOCATED(q_inst))
DEALLOCATE(q_inst)
307 WRITE(iout, 1000) ngl(i),time
308 WRITE(istdo,1100) ngl(i),time
309#include "lockoff.inc"
313 1000
FORMAT(1x,
'DELETE SOLID ELEMENT NUMBER (ORTHBIQUAD) el#',i10,
314 .
' AT TIME :',1pe12.4)
315 1100
FORMAT(1x,
'DELETE SOLID ELEMENT NUMBER (ORTHBIQUAD) el#',i10,
316 .
' AT TIME :',1pe12.4)
subroutine mmain(pm, elbuf_str, ix, nix, x, geo, iparg, nel, skew, bufmat, ipart, ipartel, nummat, matparam, imat, ipm, ngl, pid, npf, tf, mfxx, mfxy, mfxz, mfyx, mfyy, mfyz, mfzx, mfzy, mfzz, rx, ry, rz, sx, sy, sz, gama, voln, dvol, s1, s2, s3, s4, s5, s6, dxx, dyy, dzz, d4, d5, d6, wxx, wyy, wzz)