36
37
38
40 USE elbufdef_mod
41 use element_mod , only : nixc
42
43
44
45#include "implicit_f.inc"
46
47
48
49#include "vect01_c.inc"
50#include "com01_c.inc"
51#include "param_c.inc"
52
53
54
55 INTEGER N, IXC(NIXC,*), IPARG(NPARG,*),
56 . IGEO(NPROPGI,*), IPM(NPROPMI,*), SH4TREE(KSH4TREE,*)
58 . x(3,*)
59 TYPE(ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
60
61
62
63 INTEGER IB,M,N1,N2,N3,N4,IR,IS,IT,IL,IPT,NPTR,NPTS,NPTT,NLAY,
64 . I,J,K,II,JJ,I1,IG,NG,NG1,NEL1,NFT1,,NEL,ISTRA,
65 . IEXPAN,IH,LENS,LENM,LENF,NPTM,
66 . PTF,PTM,PTE,PTP,PTS,QTF,QTM,QTE,QTP,QTS,KK(12),KK1(12)
68 . nx,ny,nz,stot,x13,y13,z13,x24,y24,z24,zz
70 . qpg(2,4),s2wake(4),sk(2),st(2),mk(2),mt(2),
71 . shk(2),sht(2),z01(11,11)
72 TYPE(G_BUFEL_) ,POINTER :: GBUFS,GBUFT
73 TYPE(L_BUFEL_) ,POINTER :: LBUFS,LBUFT
74 TYPE(BUF_LAY_) ,POINTER :: BUFLY
75
76 DATA qpg/-0.5,-0.5,
77 . 0.5,-0.5,
78 . 0.5, 0.5,
79 . -0.5, 0.5/
80 DATA z01/
81 1 0. ,0. ,0. ,0. ,0. ,
82 1 0. ,0. ,0. ,0. ,0. ,0. ,
83 2 -.5 ,0.5 ,0. ,0. ,0. ,
84 2 0. ,0. ,0. ,0. ,0. ,0. ,
85 3 -.5 ,0. ,0.5 ,0. ,0. ,
86 3 0. ,0. ,0. ,0. ,0. ,0. ,
87 4 -.5 ,-.1666667,0.1666667,0.5 ,0. ,
88 4 0. ,0. ,0. ,0. ,0. ,0. ,
89 5 -.5 ,-.25 ,0. ,0.25 ,0.5 ,
90 5 0. ,0. ,0. ,0. ,0. ,0. ,
91 6 -.5 ,-.3 ,-.1 ,0.1 ,0.3 ,
92 6 0.5 ,0. ,0. ,0. ,0. ,0. ,
93 7 -.5 ,-.3333333,-.1666667,0.0 ,0.1666667,
94 7 0.3333333,0.5 ,0. ,0. ,0. ,0. ,
95 8 -.5 ,-.3571429,-.2142857,-.0714286,0.0714286,
96 8 0.2142857,0.3571429,0.5 ,0. ,0. ,0. ,
97 9 -.5 ,-.375 ,-.25 ,-.125 ,0.0 ,
98 9 0.125 ,0.25 ,0.375 ,0.5 ,0. ,0. ,
99 a -.5 ,-.3888889,-.2777778,-.1666667,0.0555555,
100 a 0.0555555,0.1666667,0.2777778,0.3888889,0.5 ,0. ,
101 b -.5 ,-.4 ,-.3 ,-.2 ,-.1 ,
102 b 0. ,0.1 ,0.2 ,0.3 ,0.4 ,0.5 /
103
104 stot=zero
105 DO ib=1,4
106
107 m = sh4tree(2,n)+ib-1
108 n1 = ixc(2,m)
109 n2 = ixc(3,m)
110 n3 = ixc(4,m)
111 n4 = ixc(5,m)
112
113 x13 = x(1,n3) - x(1,n1)
114 y13 = x(2,n3) - x(2,n1)
115 z13 = x(3,n3) - x(3,n1)
116
117 x24 = x(1,n4) - x(1,n2)
118 y24 = x(2,n4) - x(2,n2)
119 z24 = x(3,n4) - x(3,n2)
120
121 nx = y13*z24 - z13*y24
122 ny = z13*x24 - x13*z24
123 nz = x13*y24 - y13*x24
124
125 s2wake(ib)=sqrt(nx*nx+ny*ny+nz*nz)
126 stot=stot+s2wake(ib)
127
128 END DO
129
130 ng =sh4tree(4,n)
131 mlw = iparg(1,ng)
132
133
134 nel = iparg(2,ng)
135 nft = iparg(3,ng)
136 npt = iparg(6,ng)
137 istra= iparg(44,ng)
138 jhbe = iparg(23,ng)
139 igtyp= iparg(38,ng)
140 iexpan=iparg(49,ng)
141 i = n-nft
142
144 gbufs => elbuf_tab(ng)%GBUF
145 nlay = elbuf_tab(ng)%NLAY
146 nptr = elbuf_tab(ng)%NPTR
147 npts = elbuf_tab(ng)%NPTS
148 nptt = elbuf_tab(ng)%NPTT
149
150 DO k=1,12
151 kk(k) = nel *(k-1)
152 ENDDO
153
154
155 DO ib=1,4
156
157 m = sh4tree(2,n)+ib-1
158 ng1= sh4tree(4,m)
159
160 nel1 = iparg(2,ng1)
161 nft1 = iparg(3,ng1)
162 i1 = m-nft1
163 gbuft => elbuf_tab(ng1)%GBUF
164
165 DO k=1,12
166 kk1(k) = nel1*(k-1)
167 ENDDO
168
169
170 IF (jhbe == 11) THEN
171
172 gbuft%THK(i1) = gbufs%THK(i)
173
174 gbuft%EINT(i1) = gbufs%EINT(i)*s2wake(ib)/stot
175 gbuft%EINT(i1+nel1) = gbufs%EINT(i+nel)*s2wake(ib)/stot
176
177 gbuft%OFF(i1) = gbufs%OFF(i)
178
179 IF (gbuft%G_EPSD > 0) THEN
180 gbuft%EPSD(i1) = gbufs%EPSD(i)
181 ENDIF
182
183 IF (istra > 0) THEN
184 DO k=1,8
185 gbuft%STRA(kk1(k)+i1)=gbufs%STRA(kk(k)+i)
186 END DO
187 END IF
188
189 IF (iexpan /= 0) THEN
190 gbuft%TEMP(i1)=gbufs%TEMP(i)
191 END IF
192
193
194
195 IF (gbuft%G_PLA > 0) THEN
196 DO il=1,nlay
197 DO ir=1,nptr
198 DO is=1,npts
199 DO it=1,nptt
200 elbuf_tab(ng1)%BUFLY(il)%LBUF(ir,is,it)%PLA(i1) =
201 . elbuf_tab(ng) %BUFLY(il)%LBUF(ir,is,it)%PLA(i)
202 END DO
203 END DO
204 END DO
205 END DO
206 ENDIF
207
208
209
210 DO il=1,nlay
211 DO ir=1,nptr
212 DO is=1,npts
213 DO it=1,nptt
214 lbuft => elbuf_tab(ng1)%BUFLY(il)%LBUF(ir,is,it)
215 lbufs => elbuf_tab(ng )%BUFLY(il)%LBUF(ir,is,it)
216 lbuft%SIG(kk1(1)+i1) = lbufs%SIG(kk(1)+i)
217 lbuft%SIG(kk1(2)+i1) = lbufs%SIG(kk(2)+i)
218 lbuft%SIG(kk1(3)+i1) = lbufs%SIG(kk(3)+i)
219 lbuft%SIG(kk1(4)+i1) = lbufs%SIG(kk(4)+i)
220 lbuft%SIG(kk1(5)+i1) = lbufs%SIG(kk(5)+i)
221 END DO
222 END DO
223 END DO
224 END DO
225
226
227
228 IF (mlw>=28 .AND. mlw/=32) THEN
229 DO il=1,nlay
230 DO ir=1,nptr
231 DO is=1,npts
232 DO it=1,nptt
233 DO k=1,elbuf_tab(ng)%BUFLY(il)%NVAR_MAT
234 elbuf_tab(ng1)%BUFLY(il)%MAT(ir,is,it)%VAR(nel1*(k-1)+i1)=
235 . elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)%VAR(nel*(k-1)+i)
236 END DO
237 END DO
238 END DO
239 END DO
240 END DO
241 END IF
242
243 lenf = nel*5
244 lenm = nel*3
245 lens = nel*8
246 ptf = 5*nel*(ib-1)
247 ptm = 3*nel*(ib-1)
248 DO ir=1,nptr
249 DO is=1,npts
250 ig = nptr*(is-1) + ir
251 qtf = 5*nel1*(ig-1)
252 qtm = 3*nel1*(ig-1)
253 gbuft%FORPG(qtf+kk1(1)+i1)=gbufs%FORPG(ptf+kk(1)+i)
254 gbuft%FORPG(qtf+kk1(2)+i1)=gbufs%FORPG(ptf+kk(2)+i)
255 gbuft%FORPG(qtf+kk1(3)+i1)=gbufs%FORPG(ptf+kk(3)+i)
256 gbuft%FORPG(qtf+kk1(4)+i1)=gbufs%FORPG(ptf+kk(4)+i)
257 gbuft%FORPG(qtf+kk1(5)+i1)=gbufs%FORPG(ptf+kk(5)+i)
258
259 gbuft%MOMPG(qtm+kk1(1)+i1)=gbufs%MOMPG(ptm+kk(1)+i)
260 gbuft%MOMPG(qtm+kk1(2)+i1)=gbufs%MOMPG(ptm+kk(2)+i)
261 gbuft%MOMPG(qtm+kk1(3)+i1)=gbufs%MOMPG(ptm+kk(3)+i)
262 ENDDO
263 ENDDO
264
265
266 ELSE
267
268 gbuft%FOR(kk1(1)+i1) = gbufs%FOR(kk(1)+i)
269 gbuft%FOR(kk1(2)+i1) = gbufs%FOR(kk(2)+i)
270 gbuft%FOR(kk1(3)+i1) = gbufs%FOR(kk(3)+i)
271 gbuft%FOR(kk1(4)+i1) = gbufs%FOR(kk(4)+i)
272 gbuft%FOR(kk1(5)+i1) = gbufs%FOR(kk(5)+i)
273
274 gbuft%MOM(kk1(1)+i1) = gbufs%MOM(kk(1)+i)
275 gbuft%MOM(kk1(2)+i1) = gbufs%MOM(kk(2)+i)
276 gbuft%MOM(kk1(3)+i1) = gbufs%MOM(kk(3)+i)
277
278 gbuft%THK(i1) = gbufs%THK(i)
279
280 IF (jhbe == 22 .OR. jhbe == 23) THEN
281 ih = (i-1)*12
282 st(1) = gbufs%HOURG(kk(1)+i)
283 st(2) = -gbufs%HOURG(kk(2)+i)
284 mt(1) = gbufs%HOURG(kk(3)+i)
285 mt(2) = -gbufs%HOURG(kk(4)+i)
286 sk(1) = -gbufs%HOURG(kk(7)+i)
287 sk(2) = gbufs%HOURG(kk(8)+i)
288 mk(1) = -gbufs%HOURG(kk(9)+i)
289 mk(2) = gbufs%HOURG(kk(10)+i)
290 sht(1)= gbufs%HOURG(kk(5)+i)
291 sht(2)= -gbufs%HOURG(kk(6)+i)
292 shk(1)= -gbufs%HOURG(kk(11)+i)
293 shk(2)= gbufs%HOURG(kk(12)+i)
294
295 IF (npt==0) THEN
296 gbuft%FOR(kk1(1)+i1) = gbuft%FOR(kk1(1)+i1)
297 . + st(1)*qpg(2,ib)+sk(1)*qpg(1,ib)
298 gbuft%FOR(kk1(2)+i1) = gbuft%FOR(kk1(2)+i1)
299 . + st(2)*qpg(2,ib)+sk(2)*qpg(1,ib)
300
301 gbuft%FOR(kk1(4)+i1) = gbuft%FOR(kk1(4)+i1)
302 . + sht(2)*qpg(2,ib)+shk(2)*qpg(1,ib)
303 gbuft%FOR(kk1(5)+i1) = gbuft%FOR(kk1(5)+i1)
304 . + sht(1)*qpg(2,ib)+shk(1)*qpg(1,ib)
305
306 gbuft%MOM(kk1(1)+i1) = gbuft%MOM(kk1(1)+i1)
307 . + mt(1)*qpg(2,ib)+mk(1)*qpg(1,ib)
308 gbuft%MOM(kk1(2)+i1) = gbuft%MOM(kk1(2)+i1)
309 . + mt(2)*qpg(2,ib)+mk(2)*qpg(1,ib)
310
311 ELSE
312 CONTINUE
313 END IF
314
315 DO k=1,12
316 gbuft%HOURG(kk1(k)+i1) = zero
317 END DO
318
319 ELSE
320 DO k=1,5
321 gbuft%HOURG(kk1(k)+i1) = gbufs%HOURG(kk(k)+i)
322 END DO
323 END IF
324
325 gbuft%EINT(i1) = gbufs%EINT(i)*s2wake(ib)/stot
326 gbuft%EINT(i1+nel1) = gbufs%EINT(i+nel)*s2wake(ib)/stot
327
328 gbuft%OFF(i1) = gbufs%OFF(i)
329 IF (gbuft%G_EPSD > 0) THEN
330 gbuft%EPSD(i1) = gbufs%EPSD(i)
331 ENDIF
332 IF (iexpan/=0) THEN
333 gbuft%TEMP(i1) = gbufs%TEMP(i)
334 END IF
335
336 IF (istra > 0) THEN
337 DO k=1,8
338 gbuft%STRA(kk1(k)+i1)=gbufs%STRA(kk(k)+i)
339 END DO
340 END IF
341
342
343
344 DO il=1,nlay
345 DO it=1,nptt
346 lbuft => elbuf_tab(ng1)%BUFLY(il)%LBUF(1,1,it)
347 lbufs => elbuf_tab(ng )%BUFLY(il)%LBUF(1,1,it)
348 lbuft%SIG(kk1(1)+i1) = lbufs%SIG(kk(1)+i)
349 lbuft%SIG(kk1(2)+i1) = lbufs%SIG(kk(2)+i)
350 lbuft%SIG(kk1(3)+i1) = lbufs%SIG(kk(3)+i)
351 lbuft%SIG(kk1(4)+i1) = lbufs%SIG(kk(4)+i)
352 lbuft%SIG(kk1(5)+i1) = lbufs%SIG(kk(5)+i)
353 END DO
354 END DO
355
356 IF (jhbe == 22 .OR. jhbe == 23) THEN
357 DO il=1,nlay
358 DO it=1,nptt
359 lbuft => elbuf_tab(ng1)%BUFLY(il)%LBUF(1,1,it)
360 ipt = il*it
361 zz = gbuft%THK(i1)*z01(ipt,npt)
362 lbuft%SIG(kk1(1)+i1) = lbuft%SIG(kk1(1)+i1)
363 . + (st(1)+zz*mt(1))*qpg(2,ib)
364 . + (sk(1)+zz*mk(1))*qpg(1,ib)
365 lbuft%SIG(kk1(2)+i1) = lbuft%SIG(kk1(2)+i1)
366 . + (st(2)+zz*mt(2))*qpg(2,ib)
367 . + (sk(2)+zz*mk(2))*qpg(1,ib)
368
369 lbuft%SIG(kk1(4)+i1) = lbuft%SIG(kk1(4)+i1)
370 . + sht(2)*qpg(2,ib) + shk(2)*qpg(1,ib)
371 lbuft%SIG(kk1(5)+i1) = lbuft%SIG(kk1(5)+i1)
372 . + sht(1)*qpg(2,ib) + shk(1)*qpg(1,ib)
373 END DO
374 END DO
375 END IF
376
377
378
379 IF (gbuft%G_PLA > 0) THEN
380 DO il=1,nlay
381 DO it=1,nptt
382 elbuf_tab(ng1)%BUFLY(il)%LBUF(1,1,it)%PLA(i1) =
383 . elbuf_tab(ng )%BUFLY(il)%LBUF(1,1,it)%PLA(i)
384 END DO
385 END DO
386 ENDIF
387
388
389
390 IF (mlw>=28 .AND. mlw/=32) THEN
391 DO il=1,nlay
392 DO it=1,nptt
393 DO k=1,elbuf_tab(ng)%BUFLY(il)%NVAR_MAT
394 elbuf_tab(ng1)%BUFLY(il)%MAT(1,1,it)%VAR(nel1*(k-1)+i1)=
395 . elbuf_tab(ng )%BUFLY(il)%MAT(1,1,it)%VAR(nel*(k-1)+i)
396 END DO
397 END DO
398 END DO
399 END IF
400
401
402
403 END IF
404 END DO
405
406
407
408 gbufs%OFF(i) =-abs(gbufs%OFF(i))
409
410 gbufs%FOR(kk(1)+i) = zero
411 gbufs%FOR(kk(2)+i) = zero
412 gbufs%FOR(kk(3)+i) = zero
413 gbufs%FOR(kk(4)+i) = zero
414 gbufs%FOR(kk(5)+i) = zero
415
416 gbufs%MOM(kk(1)+i) = zero
417 gbufs%MOM(kk(2)+i) = zero
418 gbufs%MOM(kk(3)+i) = zero
419 gbufs%EINT(i) = zero
420 gbufs%EINT(i+nel) = zero
421 IF (gbufs%G_EPSD > 0) gbufs%EPSD(i) = zero
422 IF (istra > 0) THEN
423 DO k=1,8
424 gbufs%STRA(kk(k)+i) = zero
425 END DO
426 END IF
427
428 DO ir=1,nptr
429 DO is=1,npts
430 DO il=1,nlay
431 DO it=1,nptt
432 DO k=1,5
433 elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,it)%SIG(kk(k)+i)=zero
434 ENDDO
435 END DO
436 END DO
437 END DO
438 END DO
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485 RETURN