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