55
56
57
58 USE matparam_def_mod
59 use mat25_tsaiwu_c_mod
60 use mat25_crasurv_c_mod
61
62
63
64#include "implicit_f.inc"
65#include "comlock.inc"
66
67
68
69#include "mvsiz_p.inc"
70
71
72
73#include "param_c.inc"
74#include "com01_c.inc"
75
76
77
78 INTEGER NEL,ISRATE,PLY_ID,
79 . IPT,NPTT,NPTTOT,ILAY,IGTYP,IFAILURE,ISHPLYXFEM,IPG
80 INTEGER ,INTENT(IN) :: IMCONV
81 INTEGER ,INTENT(IN) :: IOUT,L_DMG
82 INTEGER NGL(MVSIZ),IERR(NEL),IOFF_DUCT(MVSIZ)
83 INTEGER ,DIMENSION(NEL) ,INTENT(INOUT) :: NFIS1,NFIS2,NFIS3
87 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: epsd_pg
88 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: epsd
89 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: wplar
91 . pm(npropm),off(*),off_old(*),gstr(nel,8),dir(*),
92 . thly(*),shf(*),thk0(mvsiz),exx(mvsiz),eyy(mvsiz),
93 . exy(mvsiz),exz(mvsiz),eyz(mvsiz),kxx(mvsiz),kyy(mvsiz),
94 . kxy(mvsiz),zz(*),rho0(*),soundsp(*),uparam(*),
95 . sigy(*),zcfac(mvsiz,2),signxx(mvsiz),
96 . signyy(mvsiz),signxy(mvsiz),signyz(mvsiz),signzx(mvsiz),
97 . sigvxx(mvsiz),sigvyy(mvsiz),sigvxy(mvsiz),sigvyz(mvsiz),
98 . sigvzx(mvsiz),uvarv(nel,*),ply_f(mvsiz,5,*),
99 . ply_exx(mvsiz,*),ply_eyy(mvsiz,*),ply_exy(mvsiz,*),
100 . ply_exz(mvsiz,*),ply_eyz(mvsiz,*),
101 . sigoxx(nel),sigoyy(nel),sigoxy(nel),sigoyz(nel),
102 . sigozx(nel),pla(nel),crak(nel,2),seq_outp(nel),
103 . offl(nel),sigv(nel,5),sigply(nel,3),tsaiwu(nel)
104 TYPE(MATPARAM_STRUCT_) ,INTENT(IN) :: MAT_PARAM
105 my_real,
DIMENSION(NEL,L_DMG),
INTENT(INOUT) :: dmg
106
107
108
109 INTEGER :: I,J,IFLAG,IOFF,JOFF,FAILNPT,NPRONY
110 my_real :: zt,ratio,kv,dtinv,epst1,epst2,epsm1,epsm2,dmax
112 . eps(mvsiz,5),strn1(mvsiz),strn2(mvsiz),strn3(mvsiz),
113 . strp1(mvsiz),strp2(mvsiz),sige(mvsiz,5),
114 . epspxx(mvsiz),etse(mvsiz),yld(mvsiz),
115 . epspyy(mvsiz),epspxy(mvsiz),epspyz(mvsiz),epspzx(mvsiz),
116 . sig(nel,5),sigpe(mvsiz,5)
117 my_real,
DIMENSION(:),
ALLOCATABLE :: gv,beta
118
119
120 iflag = mat_param%IPARAM(1)
121
122 ioff = mat_param%IPARAM(2)
123
124 epst1 = mat_param%uparam(12)
125 epst2 = mat_param%uparam(13)
126 epsm1 = mat_param%uparam(14)
127 epsm2 = mat_param%uparam(15)
128 dmax = mat_param%uparam(18)
129
130 ratio = mat_param%uparam(19)
131
132
133
134 IF (mat_param%IVISC == 1) THEN
135 nprony = mat_param%VISC%IPARAM(1)
136 kv = mat_param%VISC%UPARAM(1)
137 ALLOCATE(gv(nprony),beta(nprony))
138 DO i=1,nprony
139 gv(i) = mat_param%VISC%UPARAM(1 + i)
140 beta(i) = mat_param%VISC%UPARAM(1 + nprony + i)
141 ENDDO
142 ELSE
143 ALLOCATE(gv(0),beta(0))
144 ENDIF
145
146 IF (ishplyxfem == 0 .OR. iplyxfem == 2) THEN
147 DO i=1,nel
148 zt=zz(i)*thk0(i)
149 eps(i,1)=exx(i)+zt*kxx(i)
150 eps(i,2)=eyy(i)+zt*kyy(i)
151 eps(i,3)=exy(i)+zt*kxy(i)
152 eps(i,4)=eyz(i)
153 eps(i,5)=exz(i)
154 strn1(i)= gstr(i,1)+zt*gstr(i,6)
155 strn2(i)= gstr(i,2)+zt*gstr(i,7)
156 strn3(i)=(gstr(i,3)+zt*gstr(i,8))*half
157 ENDDO
158 ELSE
159 DO i=1,nel
160 zt=zz(i)*thk0(i)
161 eps(i,1)=exx(i) + zt*kxx(i) + ply_exx(i,ipt)
162 eps(i,2)=eyy(i) + zt*kyy(i) + ply_eyy(i,ipt)
163 eps(i,3)=exy(i) + zt*kxy(i) + ply_exy(i,ipt)
164 eps(i,4)=eyz(i)
165 eps(i,5)=exz(i)
166 strn1(i)= gstr(i,1)+ zt*gstr(i,6)
167 strn2(i)= gstr(i,2)+ zt*gstr(i,7)
168 strn3(i)=(gstr(i,3)+ zt*gstr(i,8))*half
169 ENDDO
170 ENDIF
171
172 IF (mat_param%IVISC == 1) THEN
173 dtinv = timestep /
max(timestep**2,em20)
174 DO i=1,nel
175 epspxx(i) = eps(i,1)*dtinv
176 epspyy(i) = eps(i,2)*dtinv
177 epspxy(i) = eps(i,3)*dtinv
178 epspyz(i) = eps(i,4)*dtinv
179 epspzx(i) = eps(i,5)*dtinv
180 ENDDO
181 ENDIF
182
183 DO i=1,nel
184 sig(i,1)=sigoxx(i)
185 sig(i,2)=sigoyy(i)
186 sig(i,3)=sigoxy(i)
187 sig(i,4)=sigoyz(i)
188 sig(i,5)=sigozx(i)
189 ENDDO
190
191 IF (iflag == 0) THEN
192 CALL mat25_tsaiwu_c(mat_param,
193 1 nel ,off ,sig ,
194 2 pla ,dir ,crak ,
195 3 nfis1 ,nfis2 ,nfis3 ,ilay ,shf ,
196 4 ngl ,eps ,igtyp ,wplar ,strn1 ,
197 5 strn2 ,strn3 ,strp1 ,strp2 ,sige ,
198 6 epsd_pg ,epsd ,israte ,asrate ,offl ,
199 7 yld ,etse,ishplyxfem,ply_exx(1,ipt),ply_eyy(1,ipt),
200 8 ply_exy(1,ipt),sigply,sigpe,ply_id ,
201 9 signxx ,signyy ,signxy ,signyz ,signzx,
202 a ipg ,tsaiwu ,iplyxfem,time ,timestep,
203 b imconv ,mvsiz ,iout ,dmg ,l_dmg )
204
205 ELSE
206
207 CALL mat25_crasurv_c(mat_param,
208 1 nel ,off ,sig ,
209 2 pla ,dir ,crak ,
210 3 nfis1 ,nfis2 ,nfis3 ,ilay ,shf ,
211 4 ngl ,eps ,wplar ,strn1 ,
212 5 strn2 ,strn3 ,strp1 ,strp2 ,sige ,
213 6 epsd_pg ,epsd ,israte ,asrate ,offl ,
214 7 yld ,etse ,ierr,ishplyxfem,ply_exx(1,ipt),ply_eyy(1,ipt),
215 8 ply_exy(1,ipt),sigply,sigpe,ply_id ,
216 9 signxx ,signyy ,signxy ,signyz ,signzx,
217 a ipg ,tsaiwu ,iplyxfem,time ,timestep,
218 b imconv ,mvsiz ,iout ,dmg ,l_dmg )
219
220 END IF
221
222 IF (iplyxfem == 1) THEN
223#include "vectorize.inc"
224 DO i=1,nel
225 ply_f(i,1,ipt) = thly(i)*sige(i,1)
226 ply_f(i,2,ipt) = thly(i)*sige(i,2)
227 ply_f(i,3,ipt) = thly(i)*sige(i,3)
228 ply_f(i,4,ipt) = thly(i)*sige(i,4)
229 ply_f(i,5,ipt) = thly(i)*sige(i,5)
230 ENDDO
231 ELSEIF (iplyxfem == 2) THEN
232#include "vectorize.inc"
233 DO i=1,nel
234 ply_f(i,1,ipt) = thly(i)*(sige(i,1)+sigpe(i,1))
235 ply_f(i,2,ipt) = thly(i)*(sige(i,2)+sigpe(i,2))
236 ply_f(i,3,ipt) = thly(i)*(sige(i,3)+sigpe(i,3))
237 ply_f(i,4,ipt) = thly(i)*sige(i,4)
238 ply_f(i,5,ipt) = thly(i)*sige(i,5)
239 ENDDO
240 ENDIF
241
242
243
244 IF (mat_param%IVISC == 1 ) THEN
245 CALL prony25c(nel ,nprony ,beta ,kv ,
246 1 gv ,timestep,rho0 ,off ,dir ,
247 2 epspxx ,epspyy ,epspxy ,epspyz ,epspzx,
248 3 sigvxx ,sigvyy ,sigvxy ,sigvyz ,sigvzx,
249 4 sigv ,soundsp ,uvarv ,igtyp )
250
251 IF (ishplyxfem > 0) THEN
252#include "vectorize.inc"
253 DO i=1,nel
254 ply_f(i,1,ipt) = ply_f(i,1,ipt) + thly(i)*sigvxx(i)
255 ply_f(i,2,ipt) = ply_f(i,2,ipt) + thly(i)*sigvyy(i)
256 ply_f(i,3,ipt) = ply_f(i,3,ipt) + thly(i)*sigvxy(i)
257 ply_f(i,4,ipt) = ply_f(i,4,ipt) + thly(i)*sigvyz(i)
258 ply_f(i,5,ipt) = ply_f(i,5,ipt) + thly(i)*sigvzx(i)
259 ENDDO
260 ENDIF
261 ENDIF
262
263
264
265 sigy(1:nel) = sigy(1:nel) + yld(1:nel)/npttot
266 DO i=1,nel
267 zcfac(i,1) = zcfac(i,1) + etse(i) / npttot
268 zcfac(i,2) =
min(etse(i),zcfac(i,2))
269 IF (offl(i)==zero) zcfac(i,2)=-abs(zcfac(i,2))
270 ENDDO
271
272
273
274 CALL m25crak(nel ,off ,dmg ,l_dmg ,dir ,ilay ,
275 . thly ,ngl ,strp1 ,strp2 ,ply_id ,igtyp ,
276 . ipg ,epst1 ,epst2 ,epsm1 ,epsm2 ,dmax )
277
278 DEALLOCATE(gv,beta)
279
280 DO i=1,nel
281 IF (off(i) == zero .AND. nptt > 1) offl(i) = zero
282 ENDDO
283
284
285
286 IF (iflag == 0) THEN
287 DO i=1,nel
288 dmg(i,1) =
max(dmg(i,2),dmg(i,3),dmg(i,4))
289 ENDDO
290 ELSE
291 DO i=1,nel
292 dmg(i,1) =
max(dmg(i,2),dmg(i,3),dmg(i,4))
293 IF (abs(dmg(i,5)) >= one) THEN
294 dmg(i,1) =
max(abs(dmg(i,5))-one,dmg(i,1))
295 ENDIF
296 IF (abs(dmg(i,6)) >= one) THEN
297 dmg(i,1) =
max(abs(dmg(i,6))-one,dmg(i,1))
298 ENDIF
299 IF (dmg(i,7) >= one) THEN
300 dmg(i,1) =
max(dmg(i,7)-one,dmg(i,1))
301 ENDIF
302 ENDDO
303 ENDIF
304
305
306
307 DO i=1,nel
308 IF (off(i) == off_old(i) .and. off(i) > zero) THEN
309 IF (off(i) == one) THEN
310 IF (ratio < zero) THEN
311 failnpt = npttot - 1
312 ELSE
313 failnpt = npttot - nint(npttot*(one-ratio))
314
315 END IF
316 IF (ioff < 0) ioff=-(ioff+1)
317 joff=0
318
319 IF (ioff == 0 .AND. wplar(i) >= one) joff=1
320 IF (ioff == 1 .AND. nint(wplar(i)) >= failnpt) joff=1
321 IF (ioff == 2 .AND. nfis1(i) >= failnpt) joff=1
322 IF (ioff == 3 .AND. nfis2(i) >= failnpt) joff=1
323 IF (ioff == 4 .AND. nfis1(i) >= failnpt
324 . .AND. nfis2(i) == failnpt) joff=1
325 IF (ioff == 5 .AND. nfis1(i) >= failnpt) joff=1
326 IF (ioff == 5 .AND. nfis2(i) >= failnpt) joff=1
327 IF (ioff == 6 .AND. nfis3(i) >= failnpt) joff=1
328
329 IF (joff == 1) THEN
330 off(i) = four_over_5
331 IF (ifailure == 0) ioff_duct(i) = 1
332 ENDIF
333 ELSE IF (ifailure == 0 .and. off(i) < one ) THEN
334 off(i) = off(i)*four_over_5
335 ENDIF
336 ENDIF
337 ENDDO
338
339 RETURN
subroutine m25crak(nel, off, dmg, l_dmg, dir, ilayer, thly, ngl, strp1, strp2, ply_id, igtyp, ipg, epst1, epst2, epsm1, epsm2, dmax)
subroutine prony25c(nel, nprony, beta, kv, gv, timestep, rho0, off, dir, epspxx, epspyy, epspxy, epspyz, epspzx, sigvxx, sigvyy, sigvxy, sigvyz, sigvzx, sigv, soundsp, vari, igtyp)