51
52
53
54 use matparam_def_mod
55 use mat25_tsaiwu_s_mod
56 use mat25_crasurv_s_mod
57
58
59
60#include "implicit_f.inc"
61#include "comlock.inc"
62
63
64
65#include "mvsiz_p.inc"
66
67
68
69#include "units_c.inc"
70#include "scr17_c.inc"
71#include "param_c.inc"
72#include "com08_c.inc"
73#include "impl1_c.inc"
74
75
76
77 INTEGER, INTENT(IN) :: NFT
78 INTEGER, INTENT(IN) :: NPT
79 INTEGER, INTENT(IN) :: JCVT
80 INTEGER, INTENT(IN) :: JSPH
81 INTEGER, INTENT(IN) :: ISORTH
82 INTEGER, INTENT(IN) :: L_DMG
83 INTEGER NGL(MVSIZ),ILAY,NEL,IPG
84 INTEGER, INTENT(INOUT) :: OUTV(NEL)
85 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: epsd
87 . pm(npropm),off(*), sig(nel,6), wpla(*), gama(mvsiz,6),
88 . eint(*),rx(*) ,ry(*),rz(*) ,sx(*),sy(*),sz(*),tx(*) ,ty(*) ,tz(*)
90 . d1(*), d2(*), d3(*), d4(*),
91 . d5(*), d6(*),
92 . s01(*),s02(*),s03(*),s04(*),s05(*),s06(*),
93 . vol(*),vnew(*),ssp(*),epst(nel,6),sigl(mvsiz,6),flay(*),
94 . tsaiwu(nel)
95 type (matparam_struct_) ,intent(in) :: mat_param
96 my_real,
DIMENSION(NEL,L_DMG) :: dmg
97
98
99
100 INTEGER NFIS1(MVSIZ), NFIS2(MVSIZ), NFIS3(MVSIZ), INDX(MVSIZ)
101 INTEGER I, J, , J1, J2, J3, JJ, II, I2, NINDX, I1,
102 . IOFF,JOFF,IDIR,IFLAG
103
105 . degmb(mvsiz),degfx(mvsiz),
106 . wplar(mvsiz),strn1(mvsiz),strn2(mvsiz),strn3(mvsiz),
107 . damcr(mvsiz,2), dmaxt(mvsiz),strp1(mvsiz) ,strp2(mvsiz),
108 . epspl(mvsiz),s1(mvsiz),s2(mvsiz),s3(mvsiz),
109 . s4(mvsiz),s5(mvsiz),s6(mvsiz),
110 . ep1(mvsiz),ep2(mvsiz),ep3(mvsiz),ep4(mvsiz),ep5(mvsiz),
111 . ep6(mvsiz),epst1(mvsiz),epst2(mvsiz),epsm1(mvsiz),epsm2(mvsiz),
112 . dmax(mvsiz),r11(mvsiz),r12(mvsiz),r13(mvsiz),r21(mvsiz),
113 . r22(mvsiz),r23(mvsiz),r31(mvsiz),r32(mvsiz),r33(mvsiz)
115 . asrate,eps_k2, eps_m2, sigt1, sigt2,
116 . zt, wmc, visc, dtinv ,epd,dav,dam1,dam2,dt5,
117 . epst1_1,epst2_1,epsm1_1,epsm2_1,dmax_1,ssp_1
118
119
120
121 iflag = mat_param%IPARAM(1)
122
123 epst1_1 = mat_param%UPARAM(12)
124 epst2_1 = mat_param%UPARAM(13)
125 epsm1_1 = mat_param%UPARAM(14)
126 epsm2_1 = mat_param%UPARAM(15)
127 dmax_1 = mat_param%UPARAM(18)
128
129 asrate = pm(9)*dt1
130 ssp_1 = pm(27)
131
132 DO i=1,nel
133 wplar(i) = zero
134 nfis1(i) = 0
135 nfis2(i) = 0
136 nfis3(i) = 0
137 dmaxt(i) = zero
138 ENDDO
139
140
141
142 asrate = asrate / (asrate + one)
143 DO i=1,nel
144 dav = -third*(d1(i)+d2(i)+d3(i))
145 epd = half*((d1(i)+dav )**2 + (d2(i)+dav)**2 + (d3(i)+dav)**2)
146 . + fourth*(d4(i)**2 + d5(i)**2 + d6(i)**2)
147 epd = sqrt(three*epd)/three_half
148 epsd(i) = asrate*epd + (one - asrate)*epsd(i)
149 ENDDO
150
151
152
153 DO i=1,nel
154 ep1(i) = d1(i)*dt1
155 ep2(i) = d2(i)*dt1
156 ep3(i) = d3(i)*dt1
157 ep4(i) = d4(i)*dt1
158 ep5(i) = d5(i)*dt1
159 ep6(i) = d6(i)*dt1
160 s1(i) = sig(i,1)
161 s2(i) = sig(i,2)
162 s3(i) = sig(i,3)
163 s4(i) = sig(i,4)
164 s5(i) = sig(i,5)
165 s6(i) = sig(i,6)
166 ENDDO
167
168 IF (isorth > 0 .AND. jcvt == 0) THEN
170 1 gama, r11, r12, r13,
171 2 r21, r22, r23, r31,
172 3 r32, r33, rx, ry,
173 4 rz, sx, sy, sz,
174 5 tx, ty, tz, nel, jsph)
175 DO i=1,nel
176 ep4(i) = half*ep4(i)
177 ep5(i) = half*ep5(i)
178 ep6(i) = half*ep6(i)
179 ENDDO
180 CALL mrotens(1,nel,ep1,ep2,ep3,ep4,ep5,ep6,
181 . r11,r12,r13,
182 . r21,r22,r23,
183 . r31,r32,r33)
184 DO i=1,nel
185 ep4(i) = two*ep4(i)
186 ep5(i) = two*ep5(i)
187 ep6(i) = two*ep6(i)
188 ENDDO
189
190 CALL mrotens(1,nel,s1,s2,s3,s4,s5,s6,
191 . r11,r12,r13,
192 . r21,r22,r23,
193 . r31,r32,r33)
194 ENDIF
195
196
197
198 IF (iflag == 0) THEN
199 CALL mat25_tsaiwu_s(mat_param,
200 1 nel ,ngl ,off ,flay ,
201 2 s1 ,s2 ,s3 ,s4 ,s5 ,s6 ,
202 3 ep1 ,ep2 ,ep3 ,ep4 , ep5 ,ep6 ,
203 4 epst ,nfis1,nfis2 ,nfis3,
204 5 wplar ,epsd ,wpla ,sigl ,ilay ,ipg ,
205 6 tsaiwu ,tt ,imconv,mvsiz,iout ,dmg ,
206 7 l_dmg ,outv)
207
208 ELSE
209
210 CALL mat25_crasurv_s(mat_param ,
211 1 nel ,ngl, off ,flay ,
212 2 s1 ,s2 ,s3 ,s4 ,s5 ,s6 ,
213 3 ep1 ,ep2 ,ep3 ,ep4 , ep5 ,ep6,
214 4 epst ,nfis1,nfis2,nfis3,
215 5 wplar,epsd, wpla, sigl, ilay,
216 6 ipg ,tsaiwu,tt,imconv ,mvsiz ,iout,
217 7 dmg ,l_dmg ,outv)
218
219 END IF
220
221 IF (isorth > 0 .AND. jcvt == 0) THEN
222 CALL mrotens(1,nel,s1 ,s2 ,s3 ,s4 ,s5 ,s6 ,
223 . r11,r21,r31,r12,r22,r32,r13,r23,r33 )
224 ENDIF
225
226 DO i=1,nel
227 sig(i,1) = s1(i)*off(i)
228 sig(i,2) = s2(i)*off(i)
229 sig(i,3) = s3(i)*off(i)
230 sig(i,4) = s4(i)*off(i)
231 sig(i,5) = s5(i)*off(i)
232 sig(i,6) = s6(i)*off(i)
233 ENDDO
234
235
236
237 DO i=1,nel
238 epst1(i) =epst1_1
239 epst2(i) =epst2_1
240 epsm1(i) =epsm1_1
241 epsm2(i) =epsm2_1
242 dmax(i) =dmax_1
243 ssp(i) = ssp_1
244 ENDDO
245
246
247
248 nindx=0
249 DO i=1,nel
250 IF(epst(i,1) >= epst1(i)
251 + .AND. dmg(i,2) == zero .AND. off(i) == one)THEN
252 nindx=nindx+1
253 indx(nindx)=i
254 ENDIF
255 ENDDO
256
257 IF(nindx>0)THEN
258 idir=1
259 DO j=1,nindx
260 i=indx(j)
261 dam1=(epst(i,1)-epst1(i))/(epsm1(i)-epst1(i))
262 dam2= dam1*epsm1(i)/epst(i,1)
263 dmg(i,2)=
min(dam2,dmax(i))
264 IF(dmg(i,2)==dmax(i).AND.imconv==1)THEN
265#include "lockon.inc"
266 WRITE(iout, '(A,I1,A,I10,A,I3,A,I3,A,1PE11.4)')
267 + ' FAILURE-',idir,', ELEMENT #',ngl(i),
268 + ', LAYER #',ilay,', INTEGRATION POINT #',ipg,
269 + ', TIME=',tt
270#include "lockoff.inc"
271 ENDIF
272 ENDDO
273 ENDIF
274
275 nindx=0
276 DO i=1,nel
277 IF(epst(i,2) >= epst2(i)
278 + .AND. dmg(i,3) == zero .AND. off(i) == one) THEN
279 nindx=nindx+1
280 indx(nindx)=i
281 ENDIF
282 ENDDO
283
284 IF(nindx > 0)THEN
285 idir=2
286 DO j=1,nindx
287 i=indx(j)
288 dam1=(epst(i,2)-epst2(i))/(epsm2(i)-epst2(i))
289 dam2= dam1*epsm2(i)/epst(i,2)
290 dmg(i,3)=
min(dam2,dmax(i))
291 IF(dmg(i,3) == dmax(i) .AND. imconv == 1)THEN
292#include "lockon.inc"
293 WRITE(iout, '(A,I1,A,I10,A,I3,A,I3,A,1PE11.4)')
294 + ' FAILURE-',idir,', ELEMENT #',ngl(i),
295 + ', LAYER #',ilay,', INTEGRATION POINT #',ipg,
296 + ', TIME=',tt
297#include "lockoff.inc"
298 ENDIF
299 ENDDO
300 ENDIF
301
302
303
304 IF (iflag == 0) THEN
305 DO i=1,nel
306 dmg(i,1) =
max(dmg(i,2),dmg(i,3),dmg(i,4))
307 ENDDO
308 ELSE
309 DO i=1,nel
310 dmg(i,1) =
max(dmg(i,2),dmg(i,3),dmg(i,4))
311 IF (abs(dmg(i,5)) >= one) THEN
312 dmg(i,1) =
max(abs(dmg(i,5))-one,dmg(i,1))
313 ENDIF
314 IF (abs(dmg(i,6)) >= one) THEN
315 dmg(i,1) =
max(abs(dmg(i,6))-one,dmg(i,1))
316 ENDIF
317 IF (dmg(i,7) >= one) THEN
318 dmg(i,1) =
max(dmg(i,7)-one,dmg(i,1))
319 ENDIF
320 ENDDO
321 ENDIF
322
323
324
325 DO i=1,nel
326 IF(off(i) < em01) off(i)=zero
327 IF(off(i) < one ) off(i)=off(i)*four_over_5
328 ENDDO
329
330 nindx=0
331 DO i=1,nel
332 IF(off(i)==one) THEN
333 ioff = mat_param%iparam(2)
334 IF(ioff < 0) ioff=-(ioff+1)
335 joff=0
336
337
338
339
340
341
342
343
344
345 IF(joff == one) THEN
346 off(i)=off(i)*four_over_5
347 ii=i+nft
348 nindx=nindx+1
349 indx(nindx)=i
350 IF(imconv==1)THEN
351#include "lockon.inc"
352 WRITE(iout,1000) ngl(i)
353 WRITE(istdo,1100) ngl(i),tt
354#include "lockoff.inc"
355 ENDIF
356 ENDIF
357 ENDIF
358 ENDDO
359 dt5=half*dt1
360 DO i=1,nel
361 eint(i)=eint(i) + dt5*vnew(i)*
362 . ( d1(i)*(s01(i)+sig(i,1))
363 . + d2(i)*(s02(i)+sig(i,2))
364 . + d3(i)*(s03(i)+sig(i,3))
365 . + d4(i)*(s04(i)+sig(i,4))
366 . + d5(i)*(s05(i)+sig(i,5))
367 . + d6(i)*(s06(i)+sig(i,6)))
368 eint(i)=eint(i)/vol(i)
369 ENDDO
370
371 1000 FORMAT(1x,'-- RUPTURE OF SOLID ELEMENT NUMBER ',i10)
372 1100 FORMAT(1x,'-- RUPTURE OF SOLID ELEMENT :',i10,' AT TIME :',g11.4)
373
374 RETURN
subroutine mreploc(ang, r11, r12, r13, r21, r22, r23, r31, r32, r33, rx, ry, rz, sx, sy, sz, tx, ty, tz, nel, jsph)
subroutine mrotens(lft, llt, e1, e2, e3, e4, dyz, e6, r11, r12, r13, r21, r22, r23, r31, r32, r33)