36
37
38
39 USE elbufdef_mod
40
41
42
43#include "implicit_f.inc"
44#include "comlock.inc"
45
46
47
48#include "scr17_c.inc"
49#include "param_c.inc"
50#include "com08_c.inc"
51
52
53
54 INTEGER ,INTENT(IN) :: IMAT,NUMMAT
55 INTEGER ,DIMENSION(NPROPMI,NUMMAT) ,INTENT(IN) :: IPM
56 INTEGER JFT,JLT,NPT,NEL
57 INTEGER PID(NEL)
58 my_real ,
INTENT(IN) :: timestep
60
62 . exx(nel), exy(nel), exz(nel),
63 . kxx(nel), kyy(nel), kzz(nel),
64 . pm(npropm,*), geo(npropg,*), eint(nel,2),
65 . off(*),epsp(*), al(*)
66 my_real ,
INTENT(INOUT)::sigy(nel,npt)
67
68 TYPE (ELBUF_STRUCT_), TARGET :: ELBUF_STR
69
70
71
72 INTEGER :: I,IPT,ICC,IRTY,IPY,IPZ,IPA,VP,IR,IS,ILAYER
73 INTEGER :: II(3)
74 my_real :: epmx(nel),ca(nel), cb(nel), cn(nel),
ymax(nel),
75 . t(nel),z3(nel),cc(nel),epdr(nel),
76 . yld(nel),etse(nel),q(nel),e(nel),g(nel),
77 . ypt(nel),zpt(nel),apt(nel),vol(nel),dpla(nel),
78 . signxx(nel),signxy(nel),signxz(nel),logep(nel),
79 . depsxx(nel),depsxy(nel),depsxz(nel),plap(nel)
81 . epif,svm1,gs,mt,tstar,umr,r,shfact,plap1,z4
82
83 TYPE(L_BUFEL_) ,POINTER :: LBUF
84 TYPE(BUF_LAY_) ,POINTER :: BUFLY
85
86 ipy = 200
87 ipz = 300
88 ipa = 400
89 epif = zero
90 shfact = five_over_6
91
92 z4 = zero
93 DO i=1,3
94 ii(i) = nel*(i-1)
95 ENDDO
96
97
98 vp = ipm(255,imat)
99 irty = nint(pm(50,imat))
100 IF (irty == 0) THEN
101 tref = pm(79,imat)
102 tmelt = pm(80,imat)
103 cp = one /
max(em20,pm(69,imat))
104 ELSE
105 z4 = pm(52,imat)
106 cp = pm(53,imat)
107 tref = pm(54,imat)
108 tmelt = 0
109 END IF
110
111 icc = nint(pm(49,imat))
112 DO i=jft,jlt
113 e(i) = pm(20,imat)
114 g(i) = pm(22,imat)
115 ca(i) = pm(38,imat)
116 cb(i) = pm(39,imat)
117 cn(i) = pm(40,imat)
118 epmx(i) = pm(41,imat)
119 ymax(i) = pm(42,imat)
120 cc(i) = pm(43,imat)
121 IF(vp == 1)THEN
122 epdr(i) =
max(em20,pm(44,imat))
123 ELSE
124 epdr(i) =
max(em20,pm(44,imat)*dt1)
125 ENDIF
126 epif =
max(epif,cc(i))
127 z3(i) = pm(51,imat)
128 epsp(i) =
max(epsp(i),epdr(i))
129 vol(i) = al(i)*geo(1,pid(i))
130 ENDDO
131
132 DO i=jft,jlt
133 t(i) = tref + cp*(eint(i,1)+eint(i,2))/vol(i)
134 ENDDO
135
136
137
138
139 DO ipt= 1,npt
140
141 ilayer=1
142 ir = 1
143 is = 1
144 lbuf => elbuf_str%BUFLY(ilayer)%LBUF(ir,is,ipt)
145 bufly => elbuf_str%BUFLY(ilayer)
146
147 DO i=jft,jlt
148 ypt(i) = geo(ipy+ipt,pid(i))
149 zpt(i) = geo(ipz+ipt,pid(i))
150 apt(i) = geo(ipa+ipt,pid(i))
151 ENDDO
152 DO i=jft,jlt
153 signxx(i) = lbuf%SIG(ii(1)+i)
154 signxy(i) = lbuf%SIG(ii(2)+i)
155 signxz(i) = lbuf%SIG(ii(3)+i)
156 ENDDO
157
158 DO i= jft,jlt
159 depsxx(i) = exx(i) - ypt(i)*kzz(i) + zpt(i)*kyy(i)
160 depsxy(i) = exy(i) + zpt(i)*kxx(i)
161 depsxz(i) = exz(i) - ypt(i)*kxx(i)
162 depsxy(i) = depsxy(i) / shfact
163 depsxz(i) = depsxz(i) / shfact
164 ENDDO
165
166
167
168 IF (bufly%L_STRA > 0) THEN
169 DO i= jft,jlt
170 lbuf%STRA(ii(1)+i) = lbuf%STRA(ii(1)+i) + depsxx(i)
171 lbuf%STRA(ii(2)+i) = lbuf%STRA(ii(2)+i) + depsxy(i)
172 lbuf%STRA(ii(3)+i) = lbuf%STRA(ii(3)+i) + depsxz(i)
173 ENDDO
174 ENDIF
175
176
177
178 DO i = jft,jlt
179 gs = shfact*g(i)
180 signxx(i) = signxx(i) + e(i)*depsxx(i)
181 signxy(i) = signxy(i) + gs*depsxy(i)
182 signxz(i) = signxz(i) + gs*depsxz(i)
183 etse(i) = one
184 ENDDO
185 DO i=jft,jlt
186 etse(i) = one
187 ca(i) = pm(38,imat)
188 cb(i) = pm(39,imat)
189 ymax(i) = pm(42,imat)
190 ENDDO
191
192 IF(vp == 1)THEN
193 DO i= jft,jlt
194 plap(i) = bufly%MAT(ir,is,ipt)%VAR(i)
195 plap(i) =
max(plap(i),epdr(i) )
196 logep(i) = log(plap(i)/epdr(i))
197 ENDDO
198 ELSE
199 DO i= jft,jlt
200 logep(i) = log(epsp(i)/epdr(i))
201 ENDDO
202 ENDIF
203
204 IF (epif /= zero) THEN
205 IF (irty == 0)THEN
206 DO i=jft,jlt
208 tstar =
max(zero,(t(i)-tref)/(tmelt-tref))
209 IF (tstar == zero) THEN
210 q(i) = (one + cc(i) * logep(i))
211 ELSE
212 q(i) = (one + cc(i) * logep(i))*(one-exp(mt*log(tstar)))
213 ENDIF
214 q(i) =
max(q(i),em20)
215 ca(i) = ca(i) * q(i)
216 cb(i) = cb(i) * q(i)
217 IF (icc== 1)
ymax(i) =
ymax(i) * q(i)
218 ENDDO
219 ELSEIF (irty == 1) THEN
220 DO i=jft,jlt
221 q(i) = logep(i)
222 q(i) = cc(i)*exp((-z3(i)+z4 * q(i))*t(i))
223 IF (icc == 1)
ymax(i)=
ymax(i) + q(i)
224 ca(i) = ca(i) + q(i)
225 ENDDO
226 ENDIF
227 ENDIF
228
229 DO i=jft,jlt
230 IF(lbuf%PLA(i) == zero) THEN
231 yld(i)= ca(i)
232 ELSE
233 yld(i)= ca(i) + cb(i)*exp(cn(i)*log(lbuf%PLA(i)))
234 ENDIF
236 sigy(i,ipt) = yld(i)
237 ENDDO
238
239
240
241 DO i=jft,jlt
242 svm1 = signxx(i)**2 + three*(signxy(i)**2 + signxz(i)**2)
243 IF (svm1 > yld(i)**2) THEN
244 svm1 = sqrt(svm1)
245 r =
min( one, yld(i)/
max(em20,svm1) )
246 signxx(i) = signxx(i)*r
247 signxy(i) = signxy(i)*r
248 signxz(i) = signxz(i)*r
249 umr = one - r
250 dpla(i) = svm1*umr/(e(i))
251 lbuf%PLA(i) = lbuf%PLA(i) + off(i)* dpla(i)
252
253 ENDIF
254 ENDDO
255 IF (vp == 1) THEN
256 DO i=jft,jlt
257 plap1 = dpla(i) /
max(em20,timestep)
258 bufly%MAT(ir,is,ipt)%VAR(i) = asrate * plap1 + (one - asrate) * plap(i)
259 ENDDO
260 ENDIF
261
262
263
264
265
266
267
268 DO i=jft,jlt
269 IF (lbuf%PLA(i) >= epmx(i) .AND. off(i) == one) THEN
270 off(i)=four_over_5
271 ENDIF
272 ENDDO
273
274
275 DO i=jft,jlt
276 lbuf%SIG(ii(1)+i) = signxx(i)
277 lbuf%SIG(ii(2)+i) = signxy(i)
278 lbuf%SIG(ii(3)+i) = signxz(i)
279 ENDDO
280
281
282
283 ENDDO
284
285 RETURN
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)