49
50
51
52
53
54
55#include "implicit_f.inc"
56#include "comlock.inc"
57
58
59
60#include "mvsiz_p.inc"
61
62
63
64#include "param_c.inc"
65#include "com04_c.inc"
66#include "com06_c.inc"
67#include "tabsiz_c.inc"
68
69
70
71 INTEGER, INTENT(IN) :: NEL
72 INTEGER, INTENT(IN) :: NFT
73 INTEGER, INTENT(IN) :: MTN
74 INTEGER, INTENT(IN) :: JLAG,IVECTOR
75 INTEGER, INTENT(IN) :: ISCTL
76 INTEGER, DIMENSION(MVSIZ) :: MAT,PID
77 INTEGER, DIMENSION(NUMELS) :: IPARTS
78 my_real,
DIMENSION(NPROPG,NUMGEO) ,
INTENT(IN):: geo
79 my_real,
DIMENSION(NPROPM,NUMMAT) ,
INTENT(IN):: pm
80 my_real,
DIMENSION(NEL,3,4) ,
INTENT(INOUT):: fhour
81 my_real,
DIMENSION(NPSAV,NPART) ,
INTENT(INOUT):: partsav
82 my_real,
DIMENSION(SEANI) ,
INTENT(INOUT):: eani
83 my_real,
DIMENSION(NEL) ,
INTENT(IN):: rho
84 my_real,
DIMENSION(MVSIZ) ,
INTENT(IN):: off,vol,
85 . vx1,vx2,vx3,vx4,vx5,vx6,vx7,vx8,
86 . vy1,vy2,vy3,vy4,vy5,vy6,vy7,vy8,
87 . vz1,vz2,vz3,vz4,vz5,vz6,vz7,vz8,
88 . px1h1, px1h2, px1h3,
89 . px2h1, px2h2, px2h3,
90 . px3h1, px3h2, px3h3,
91 . px4h1, px4h2, px4h3,cxx
92 my_real,
DIMENSION(MVSIZ) ,
INTENT(INOUT)::
93 . f11,f21,f31,f12,f22,f32,
94 . f13,f23,f33,f14,f24,f34,
95 . f15,f25,f35,f16,f26,f36,
96 . f17,f27,f37,f18,f28,f38,sti
98
99
100
101 INTEGER I, FLUID,MX, J, II, IC, JST(MVSIZ+1)
102
104 . caq(mvsiz), fcl(mvsiz), fcq(mvsiz),ehou(mvsiz),
105 . h11(mvsiz), h12(mvsiz), h13(mvsiz), h14(mvsiz),
106 . h15(mvsiz), h16(mvsiz), h17(mvsiz), h18(mvsiz),
107 . h21(mvsiz), h22(mvsiz), h23(mvsiz), h24(mvsiz),
108 . h25(mvsiz), h26(mvsiz), h27(mvsiz), h28(mvsiz),
109 . h31(mvsiz), h32(mvsiz), h33(mvsiz), h34(mvsiz),
110 . h35(mvsiz), h36(mvsiz), h37(mvsiz), h38(mvsiz),
111 . hx1(mvsiz), hx2(mvsiz), hx3(mvsiz), hx4(mvsiz),
112 . hy1(mvsiz), hy2(mvsiz), hy3(mvsiz), hy4(mvsiz),
113 . hz1(mvsiz), hz2(mvsiz), hz3(mvsiz), hz4(mvsiz),
114 . hgx1(mvsiz), hgx2(mvsiz), hgx3(mvsiz), hgx4(mvsiz),
115 . hgy1(mvsiz), hgy2(mvsiz), hgy3(mvsiz), hgy4(mvsiz),
116 . hgz1(mvsiz), hgz2(mvsiz), hgz3(mvsiz), hgz4(mvsiz),
117 . g11(mvsiz),g21(mvsiz),g31(mvsiz),g41(mvsiz),
118 . g51(mvsiz),g61(mvsiz),g71(mvsiz),g81(mvsiz),
119 . g12(mvsiz),g22(mvsiz),g32(mvsiz),g42(mvsiz),
120 . g52(mvsiz),g62(mvsiz),g72(mvsiz),g82(mvsiz),
121 . g13(mvsiz),g23(mvsiz),g33(mvsiz),g43(mvsiz),
122 . g53(mvsiz),g63(mvsiz),g73(mvsiz),g83(mvsiz),
123 . e0,g0,c1,nu,ehourt ,qh,lamg,sfac,fdamp,dt05,
124 . lamgt(mvsiz),f_et(mvsiz),f_sti(mvsiz),e_max,s_max,fac1,sfac1,
125 . f_gt(mvsiz)
126
127
128 mx = mat(1)
129 nu=pm(21,mx)
130 g0=pm(22,mx)
131 c1=pm(32,mx)
132 e0=pm(20,mx)
133 qh = geo(13,pid(1))
134 IF (isctl>0 .AND. nu>0.48999) qh = zep5*qh
135 lamgt(1:nel)=cxx(1:nel)*cxx(1:nel)*rho(1:nel)
136 f_et(1:nel)=one
137 SELECT CASE (mtn)
138 CASE (70)
139 e0=pm(24,mx)
140 lamg = third*(e0/(1-two*nu)+two*e0/(1+nu))
141 CASE (42,69)
142 c1 = third*e0/(1-two*nu)
143 g0 = half*g0
144 lamg = c1+four_over_3*g0
145 f_et(1:nel)=
max(one,lamgt(1:nel)/lamg)
146 f_gt(1:nel)=
max(one,(lamgt(1:nel)-c1)/g0/four_over_3)
147 CASE (1)
148 lamg = c1+four_over_3*g0
149 CASE (62)
150 g0 = half*g0
151 lamg = c1+four_over_3*g0
152 f_et(1:nel)=
max(one,lamgt(1:nel)/lamg)
153 CASE (88)
154 c1 = third*e0/(1-two*nu)
155 lamg = c1+four_over_3*g0
156 f_et(1:nel)=
max(one,lamgt(1:nel)/lamg)
157 CASE (90)
158 IF (qh==one) qh = fourth
159 lamg = c1+four_over_3*g0
160 f_et(1:nel)=
max(one,qh*lamgt(1:nel)/lamg)
161 CASE DEFAULT
162
163 lamg = c1+four_over_3*g0
164 f_et(1:nel)=
max(one,lamgt(1:nel)/lamg)
165 END SELECT
166
167 f_sti(1:nel) =
max(one,qh)
168 sfac = 0.038*qh*lamg
169
170 IF (mtn==62) THEN
171 DO i=1,nel
172 sfac1 =
min(ten,f_et(i))
173 IF (sfac1>two) sfac1=ten
174 f_et(i)=sfac1*f_et(i)
175 f_sti(i)=sfac1*f_sti(i)
176 ENDDO
177 ELSEIF (mtn==42.OR.mtn==69) THEN
178 DO i=1,nel
179 IF (f_et(i)>one) THEN
180 sfac1 =
min(four,f_gt(i))
181 f_et(i)=sfac1*f_et(i)
182 f_sti(i)=sfac1*f_sti(i)
183 END IF
184 ENDDO
185 END IF
186
187
188 IF (mtn==1.OR.mtn==62) THEN
189 DO i=1,nel
190 s_max=zero
191 DO j=1,4
192 s_max=
max(s_max,abs(fhour(i,1,j)),abs(fhour(i,2,j)),abs(fhour(i,3,j)))
193 END DO
194 fac1 = sfac*vol(i)**two_third
195 e_max=s_max/fac1
196 sfac1 =
min(ten,2500*e_max)
197 sfac1 =
max(one,sfac1)
198 f_et(i)=sfac1*f_et(i)
199 f_sti(i)=sfac1*f_sti(i)
200 END DO
201 END IF
202
203 IF (isctl==0) f_et(1:nel)=one
204 DO i=1,nel
205 caq(i)=sfac*dt1*off(i)
206 fcl(i)=f_et(i)*caq(i)*vol(i)**third
207 sti(i)=f_sti(i)*sti(i)
208 ENDDO
209
210 DO i=1,nel
211
212 g11(i)= one-px1h1(i)
213 g21(i)=-one-px2h1(i)
214 g31(i)= one-px3h1(i)
215 g41(i)=-one-px4h1(i)
216 g51(i)= one+px3h1(i)
217 g61(i)=-one+px4h1(i)
218 g71(i)= one+px1h1(i)
219 g81(i)=-one+px2h1(i)
220 hgx1(i)=
221 & g11(i)*vx1(i)+g21(i)*vx2(i)+g31(i)*vx3(i)+g41(i)*vx4(i)
222 & +g51(i)*vx5(i)+g61(i)*vx6(i)+g71(i)*vx7(i)+g81(i)*vx8(i)
223 hgy1(i)=
224 & g11(i)*vy1(i)+g21(i)*vy2(i)+g31(i)*vy3(i)+g41(i)*vy4(i)
225 & +g51(i)*vy5(i)+g61(i)*vy6(i)+g71(i)*vy7(i)+g81(i)*vy8(i)
226 hgz1(i)=
227 & g11(i)*vz1(i)+g21(i)*vz2(i)+g31(i)*vz3(i)+g41(i)*vz4(i)
228 & +g51(i)*vz5(i)+g61(i)*vz6(i)+g71(i)*vz7(i)+g81(i)*vz8(i)
229 ENDDO
230
231 DO i=1,nel
232
233 g12(i)= one-px1h2(i)
234 g22(i)= one-px2h2(i)
235 g32(i)=-one-px3h2(i)
236 g42(i)=-one-px4h2(i)
237 g52(i)=-one+px3h2(i)
238 g62(i)=-one+px4h2(i)
239 g72(i)= one+px1h2(i)
240 g82(i)= one+px2h2(i)
241 hgx2(i)=
242 & g12(i)*vx1(i)+g22(i)*vx2(i)+g32(i)*vx3(i)+g42(i)*vx4(i)
243 & +g52(i)*vx5(i)+g62(i)*vx6(i)+g72(i)*vx7(i)+g82(i)*vx8(i)
244 hgy2(i)=
245 & g12(i)*vy1(i)+g22(i)*vy2(i)+g32(i)*vy3(i)+g42(i)*vy4(i)
246 & +g52(i)*vy5(i)+g62(i)*vy6(i)+g72(i)*vy7(i)+g82(i)*vy8(i)
247 hgz2(i)=
248 & g12(i)*vz1(i)+g22(i)*vz2(i)+g32(i)*vz3(i)+g42(i)*vz4(i)
249 & +g52(i)*vz5(i)+g62(i)*vz6(i)+g72(i)*vz7(i)+g82(i)*vz8(i)
250 ENDDO
251 DO i=1,nel
252
253 g13(i)= one-px1h3(i)
254 g23(i)=-one-px2h3(i)
255 g33(i)=-one-px3h3(i)
256 g43(i)= one-px4h3(i)
257 g53(i)=-one+px3h3(i)
258 g63(i)= one+px4h3(i)
259 g73(i)= one+px1h3(i)
260 g83(i)=-one+px2h3(i)
261 hgx3(i)=
262 & g13(i)*vx1(i)+g23(i)*vx2(i)+g33(i)*vx3(i)+g43(i)*vx4(i)
263 & +g53(i)*vx5(i)+g63(i)*vx6(i)+g73(i)*vx7(i)+g83(i)*vx8(i)
264 hgy3(i)=
265 & g13(i)*vy1(i)+g23(i)*vy2(i)+g33(i)*vy3(i)+g43(i)*vy4(i)
266 & +g53(i)*vy5(i)+g63(i)*vy6(i)+g73(i)*vy7(i)+g83(i)*vy8(i)
267 hgz3(i)=
268 & g13(i)*vz1(i)+g23(i)*vz2(i)+g33(i)*vz3(i)+g43(i)*vz4(i)
269 & +g53(i)*vz5(i)+g63(i)*vz6(i)+g73(i)*vz7(i)+g83(i)*vz8(i)
270 ENDDO
271
272 DO i=1,nel
273
274 hgx4(i)=vx1(i)-vx2(i)+vx3(i)-vx4(i)-vx5(i)+vx6(i)-vx7(i)+vx8(i)
275 hgy4(i)=vy1(i)-vy2(i)+vy3(i)-vy4(i)-vy5(i)+vy6(i)-vy7(i)+vy8(i)
276 hgz4(i)=vz1(i)-vz2(i)+vz3(i)-vz4(i)-vz5(i)+vz6(i)-vz7(i)+vz8(i)
277 ENDDO
278
279 dt05 = half*dt1
280 DO i=1,nel
281 hx1(i)=fhour(i,1,1)
282 hx2(i)=fhour(i,1,2)
283 hx3(i)=fhour(i,1,3)
284 hx4(i)=fhour(i,1,4)
285
286 hy1(i)=fhour(i,2,1)
287 hy2(i)=fhour(i,2,2)
288 hy3(i)=fhour(i,2,3)
289 hy4(i)=fhour(i,2,4)
290
291 hz1(i)=fhour(i,3,1)
292 hz2(i)=fhour(i,3,2)
293 hz3(i)=fhour(i,3,3)
294 hz4(i)=fhour(i,3,4)
295 ENDDO
296 DO i=1,nel
297 ehou(i)= dt05*(
298 & hz1(i)*hgz1(i) + hz2(i)*hgz2(i) +
299 & hz3(i)*hgz3(i) + hz4(i)*hgz4(i) +
300 & hx1(i)*hgx1(i) + hx2(i)*hgx2(i) +
301 & hx3(i)*hgx3(i) + hx4(i)*hgx4(i) +
302 & hy1(i)*hgy1(i) + hy2(i)*hgy2(i) +
303 & hy3(i)*hgy3(i) + hy4(i)*hgy4(i) )
304 ENDDO
305 DO i=1,nel
306 fhour(i,1:3,1:4) = fhour(i,1:3,1:4)*off(i)
307 ENDDO
308
309 DO i=1,nel
310
311 fhour(i,1,1) = fhour(i,1,1) + fcl(i)*hgx1(i)
312 fhour(i,1,2) = fhour(i,1,2) + fcl(i)*hgx2(i)
313 fhour(i,1,3) = fhour(i,1,3) + fcl(i)*hgx3(i)
314 fhour(i,1,4) = fhour(i,1,4) + fcl(i)*hgx4(i)
315 fhour(i,2,1) = fhour(i,2,1) + fcl(i)*hgy1(i)
316 fhour(i,2,2) = fhour(i,2,2) + fcl(i)*hgy2(i)
317 fhour(i,2,3) = fhour(i,2,3) + fcl(i)*hgy3(i)
318 fhour(i,2,4) = fhour(i,2,4) + fcl(i)*hgy4(i)
319 fhour(i,3,1) = fhour(i,3,1) + fcl(i)*hgz1(i)
320 fhour(i,3,2) = fhour(i,3,2) + fcl(i)*hgz2(i)
321 fhour(i,3,3) = fhour(i,3,3) + fcl(i)*hgz3(i)
322 fhour(i,3,4) = fhour(i,3,4) + fcl(i)*hgz4(i)
323 ENDDO
324 DO i=1,nel
325 hx1(i)=fhour(i,1,1)
326 hx2(i)=fhour(i,1,2)
327 hx3(i)=fhour(i,1,3)
328 hx4(i)=fhour(i,1,4)
329
330 hy1(i)=fhour(i,2,1)
331 hy2(i)=fhour(i,2,2)
332 hy3(i)=fhour(i,2,3)
333 hy4(i)=fhour(i,2,4)
334
335 hz1(i)=fhour(i,3,1)
336 hz2(i)=fhour(i,3,2)
337 hz3(i)=fhour(i,3,3)
338 hz4(i)=fhour(i,3,4)
339 ENDDO
340
341 DO i=1,nel
342 f11(i) =-g11(i)*hx1(i)-g12(i)*hx2(i)-g13(i)*hx3(i)-hx4(i)
343 f12(i) =-g21(i)*hx1(i)-g22(i)*hx2(i)-g23(i)*hx3(i)+hx4(i)
344 f13(i) =-g31(i)*hx1(i)-g32(i)*hx2(i)-g33(i)*hx3(i)-hx4(i)
345 f14(i) =-g41(i)*hx1(i)-g42(i)*hx2(i)-g43(i)*hx3(i)+hx4(i)
346 f15(i) =-g51(i)*hx1(i)-g52(i)*hx2(i)-g53(i)*hx3(i)+hx4(i)
347 f16(i) =-g61(i)*hx1(i)-g62(i)*hx2(i)-g63(i)*hx3(i)-hx4(i)
348 f17(i) =-g71(i)*hx1(i)-g72(i)*hx2(i)-g73(i)*hx3(i)+hx4
349 f18(i) =-g81(i)*hx1(i)-g82(i)*hx2(i)-g83(i)*hx3(i)-hx4(i)
350
351 f21(i) =-g11(i)*hy1(i)-g12(i)*hy2(i)-g13(i)*hy3(i)-hy4(i)
352 f22(i) =-g21(i)*hy1(i)-g22(i)*hy2(i)-g23(i)*hy3(i)+hy4(i)
353 f23(i) =-g31(i)*hy1(i)-g32(i)*hy2(i)-g33(i)*hy3(i)-hy4(i)
354 f24(i) =-g41(i)*hy1(i)-g42(i)*hy2(i)-g43(i)*hy3(i)+hy4(i)
355 f25(i) =-g51(i)*hy1(i)-g52(i)*hy2(i)-g53(i)*hy3(i)+hy4(i)
356 f26(i) =-g61(i)*hy1(i)-g62(i)*hy2(i)-g63(i)*hy3(i)-hy4(i)
357 f27(i) =-g71(i)*hy1(i)-g72(i)*hy2(i)-g73(i)*hy3(i)+hy4(i)
358 f28(i) =-g81(i)*hy1(i)-g82(i)*hy2(i)-g83(i)*hy3(i)-hy4(i)
359
360 f31(i) =-g11(i)*hz1(i)-g12(i)*hz2(i)-g13(i)*hz3(i)-hz4(i)
361 f32(i) =-g21(i)*hz1(i)-g22(i)*hz2(i)-g23(i)*hz3(i)+hz4(i)
362 f33(i) =-g31(i)*hz1(i)-g32(i)*hz2(i)-g33(i)*hz3(i)-hz4(i)
363 f34(i) =-g41(i)*hz1(i)-g42(i)*hz2(i)-g43(i)*hz3(i)+hz4(i)
364 f35(i) =-g51(i)*hz1(i)-g52(i)*hz2(i)-g53(i)*hz3(i)+hz4(i)
365 f36(i) =-g61(i)*hz1(i)-g62(i)*hz2(i)-g63(i)*hz3(i)-hz4(i)
366 f37(i) =-g71(i)*hz1(i)-g72(i)*hz2(i)-g73(i)*hz3(i)+hz4(i)
367 f38(i) =-g81(i)*hz1(i)-g82(i)*hz2(i)-g83(i)*hz3(i)-hz4(i)
368 ENDDO
369
370 DO i=1,nel
371 ehou(i)= ehou(i) +dt05*(
372 & hz1(i)*hgz1(i) + hz2(i)*hgz2(i) +
373 & hz3(i)*hgz3(i) + hz4(i)*hgz4(i) +
374 & hx1(i)*hgx1(i) + hx2(i)*hgx2(i) +
375 & hx3(i)*hgx3(i) + hx4(i)*hgx4(i) +
376 & hy1(i)*hgy1(i) + hy2(i)*hgy2(i) +
377 & hy3(i)*hgy3(i) + hy4(i)*hgy4(i) )
378 ENDDO
379
380 ehourt = zero
381 DO i=1,nel
382 ehourt= ehourt+ehou(i)
383 ENDDO
384
385
386
387 IF(jlag==1)THEN
388
389 IF (ivector==0) THEN
390 DO i=1,nel
391 mx = iparts(i)
392 partsav(8,mx)=partsav(8,mx) + ehou(i)
393 ENDDO
394 ELSE
395 ic=1
396 jst(ic)=1
397 DO j=1+1,nel
398 IF (iparts(j)/=iparts(j-1)) THEN
399 ic=ic+1
400 jst(ic)=j
401 ENDIF
402 ENDDO
403 jst(ic+1)=nel+1
404 DO ii=1,ic
405 mx=iparts(jst(ii))
406 IF (jst(ii+1)-jst(ii)>15) THEN
407#include "vectorize.inc"
408 DO j=jst(ii),jst(ii+1)-1
409 partsav(8,mx)=partsav(8,mx) + ehou(j)
410 ENDDO
411 ELSE
412 DO j=jst(ii),jst(ii+1)-1
413 partsav(8,mx)=partsav(8,mx) + ehou(j)
414 ENDDO
415 ENDIF
416 ENDDO
417 ENDIF
418
419 ehour = ehour + ehourt
420 ENDIF
421
422#include "vectorize.inc"
423 DO i=1,nel
424 eani(nft+i) = eani(nft+i)+ehou(i)/
max(em30,rho(i)*vol(i))
425 ENDDO
426 RETURN