36
37
38
39 USE fail_param_mod
40
41
42
43#include "implicit_f.inc"
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77#include "mvsiz_p.inc"
78#include "units_c.inc"
79#include "comlock.inc"
80#include "param_c.inc"
81
82
83
84
85 INTEGER NEL, NUVAR,NGL(*),IPLY
87 . time,timestep(*),signzz(*),
88 . signyz0(*),signxz0(*),signyz(*),signxz(*),
89 . offi(*),count(*),reduc(*)
90 TYPE (FAIL_PARAM_) ,INTENT(IN) :: FAIL
91
92
93
94
95
96
97
98
99 my_real uvar(nel,nuvar), off(nel)
100
101
102
103 INTEGER
104 . I,J,IDEL,,IFLAG(MVSIZ),INDX(MVSIZ),NINDX,
105 . JST(MVSIZ),IR,JJ,
106 . NINDX0,INDX0(MVSIZ)
108 . k1(mvsiz),k2(mvsiz),k3(mvsiz),k(mvsiz),
109 . a(mvsiz),gama1(mvsiz),gama2(mvsiz),
110 . y0(mvsiz),yc(mvsiz),tmax(mvsiz),fac,
111 . dam, yd1,yd2,yd3,cc,delta,w,yd,sig, dam0
112
113
114 ir = 0
115 DO i=1,nel
116 IF (off(i)== zero) cycle
117 k1(i) = fail%UPARAM(1)
118 k2(i) = fail%UPARAM(2)
119 k3(i) = fail%UPARAM(3)
120 gama1(i) = fail%UPARAM(4)
121 gama2(i) = fail%UPARAM(5)
122 y0(i) = fail%UPARAM(6)
123 yc(i) = fail%UPARAM(7)
124 k(i) = fail%UPARAM(8)
125 a(i) = fail%UPARAM(9)
126 reduc(i) = fail%UPARAM(13)
127 ir = ir + 1
128 jst(ir) = i
129 indx(i) = 0
130 ENDDO
131
132
133
134 IF (time == zero) THEN
135 DO jj=1,ir
136 i = jst(jj)
137 uvar(i,9) = one
138 ENDDO
139 ENDIF
140
141
142 nindx = 0
143 nindx0 = 0
144 DO j =1,ir
145 i=jst(j)
146 IF (off(i) == one ) THEN
147
148 IF(uvar(i,1) < one)THEN
149 dam0 = uvar(i,1)
150 dam = dam0
151
152
153
154 sig = half*(signzz(i) + abs(signzz(i)))
155 yd3 = k3(i)*(one - dam)**2
156 yd3 = half*sig*sig/
max(yd3, em20)
157 yd3 =
max(yd3, uvar(i,2))
158 uvar(i,2) = yd3
159
160
161
162 sig = signyz(i)
163 yd2 = k2(i)*(one - dam)**2
164 yd2 = half*sig*sig/
max(yd2, em20)
165 yd2 =
max(yd2, uvar(i,3))
166 uvar(i,3) = yd2
167
168
169
170 sig =signxz(i)
171 yd1 = k1(i)*(one - dam)**2
172 yd1 = half*sig*sig/
max(yd1, em20)
173 yd1 =
max(yd1, uvar(i,4))
174 uvar(i,4) = yd1
175
176
177
178 yd = yd3 + gama1(i)*yd1 + gama2(i)*yd2
179 delta = sqrt(yd) - y0(i)
180 delta = half*(delta + abs(delta))
181 w = delta /(yc(i) - y0(i))
182 cc = w - dam
183 cc = half*(cc + abs(cc))
184 fac = k(i)*timestep(i)/a(i)
185 dam = dam + fac*(one - exp(-a(i)*cc))
187 uvar(i,1) = dam
188
189
190
191 IF( signzz(i) > zero )
192 . signzz(i) = signzz(i) *
max((one - dam),reduc(i))
193 signyz0(i) = signyz0(i)*
max((one - dam),reduc(i))
194 signxz0(i) = signxz0(i)*
max((one - dam),reduc(i))
195
196 IF(dam0 == zero .AND. dam > zero) THEN
197 nindx0=nindx0+1
198 indx0(nindx0)=i
199 ENDIF
200
201 IF(dam == one) THEN
202 nindx=nindx+1
203 indx(nindx)=i
204
205 count(i) = count(i) + one
206 IF(int(count(i)) == 4)THEN
207
208 WRITE(iout, 1300) ngl(i),iply,time
209 WRITE(istdo,1300) ngl(i),iply, time
210 ENDIF
211 ENDIF
212 ELSE
213
214
215
216 offi(i) = reduc(i)
217 ENDIF
218 ENDIF
219 ENDDO
220
221 IF(nindx0 > 0)THEN
222 DO j=1,nindx0
223 i = indx0(j)
224#include "lockon.inc"
225 WRITE(iout, 1100) ngl(i),iply,time
226 WRITE(istdo,1100) ngl(i),iply, time
227#include "lockoff.inc"
228 END DO
229 ENDIF
230
231 IF(nindx > 0)THEN
232 DO j=1,nindx
233 i = indx(j)
234#include "lockon.inc"
235 WRITE(iout, 1200) ngl(i),iply,time
236 WRITE(istdo,1200) ngl(i),iply, time
237#include "lockoff.inc"
238 END DO
239 ENDIF
240
241
242 1100 FORMAT(1x,'DAMAGE INITIATION OF SHELL #',i10,1x,
243 . 'INTERPLY ', i10, 1x,
244 . 'AT TIME # ',1pe20.13)
245 1200 FORMAT(1x,'DELAMINATION OF SHELL #',i10,1x,
246 . 'INTERPLY ', i10, 1x,
247 . 'AT TIME # ',1pe20.13)
248 1300 FORMAT(1x,'FULL DELAMINATION OF SHELL #',i10,1x,
249 . 'INTERPLY', i10,1x,'AT TIME # ',1pe20.13)
250 RETURN