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, IXTG(NIXTG,*), IPARG(NPARG,*),
54 . IGEO(NPROPGI,*), IPM(NPROPMI,*), SH3TREE(KSH3TREE,*)
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,NPTR,NPTS,NPTT,NLAY,
62 . I,J,K,II,JJ,I1,NG,NG1,NEL1,NFT1,MLW,NEL,
63 . MATLY,NUVAR,IVAR,ISTRA,IEXPAN,NPTM,KK(8),KK1(8)
65 . nx,ny,nz,
66 . stot,x12,y12,z12,x13,y13,z13,s2wake(4)
67 TYPE(G_BUFEL_) ,POINTER :: GBUFS,GBUFT
68 TYPE(L_BUFEL_) ,POINTER :: LBUFS,LBUFT
69 TYPE() ,POINTER :: BUFLY
70
71 stot=zero
72
73 DO ib=1,4
74 m = sh3tree(2,n)+ib-1
75 n1 = ixtg(2,m)
76 n2 = ixtg(3,m)
77 n3 = ixtg(4,m)
78
79 x12 = x(1,n2) - x(1,n1)
80 y12 = x(2,n2) - x(2,n1)
81 z12 = x(3,n2) - x(3,n1)
82
83 x13 = x(1,n3) - x(1,n1)
84 y13 = x(2,n3) - x(2,n1)
85 z13 = x(3,n3) - x(3,n1)
86
87 nx = y12*z13 - z12*y13
88 ny = z12*x13 - x12*z13
89 nz = x12*y13 - y12*x13
90
91 s2wake(ib)=sqrt(nx*nx+ny*ny+nz*nz)
92 stot = stot+s2wake(ib)
93 END DO
94
95 ng = sh3tree(4,n)
96 mlw = iparg(1,ng)
97
98
99
100 nel = iparg(2,ng)
101 nft = iparg(3,ng)
102 npt = iparg(6,ng)
103 istra= iparg(44,ng)
104 igtyp= iparg(38,ng)
105 iexpan=iparg(49,ng)
107 i = n-nft
108
109 gbufs => elbuf_tab(ng)%GBUF
110 nlay = elbuf_tab(ng)%NLAY
111 nptr = elbuf_tab(ng)%NPTR
112 npts = elbuf_tab(ng)%NPTS
113 nptt = elbuf_tab(ng)%NPTT
114
115
116
117 DO ib=1,3
118
119 m = sh3tree(2,n)+ib-1
120 ng1 = sh3tree(4,m)
121 nel1 = iparg(2,ng1)
122 nft1 = iparg(3,ng1)
123 i1 = m-nft1
124 gbuft => elbuf_tab(ng1)%GBUF
125
126 DO k=1,8
127 kk(k) = nel *(k-1)
128 kk1(k) = nel1*(k-1)
129 ENDDO
130
131 gbuft%FOR(kk1(1)+i1) = gbufs%FOR(kk(1)+i)
132 gbuft%FOR(kk1(2)+i1) = gbufs%FOR(kk(2)+i)
133 gbuft%FOR(kk1(3)+i1) = gbufs%FOR(kk(3)+i)
134 gbuft%FOR(kk1(4)+i1) = gbufs%FOR(kk(4)+i)
135 gbuft%FOR(kk1(5)+i1) = gbufs%FOR(kk(5)+i)
136
137 gbuft%MOM(kk1(1)+i1) = gbufs%MOM(kk(1)+i)
138 gbuft%MOM(kk1(2)+i1) = gbufs%MOM(kk(2)+i)
139 gbuft%MOM(kk1(3)+i1) = gbufs%MOM(kk(3)+i)
140
141 gbuft%EINT(i1) = gbufs%EINT(i)*s2wake(ib)/stot
142 gbuft%EINT(i1+nel1) = gbufs%EINT(i+nel)*s2wake(ib)/stot
143
144 gbuft%THK(i1) = gbufs%THK(i)
145 gbuft%OFF(i1) = gbufs%OFF(i)
146
147 IF (gbuft%G_EPSD > 0) THEN
148 gbuft%EPSD(i1) = gbufs%EPSD(i)
149 ENDIF
150
151 IF (istra > 0) THEN
152 DO k=1,8
153 gbuft%STRA(kk1(k)+i1) = gbufs%STRA(kk(k)+i)
154 END DO
155 END IF
156
157 IF (iexpan /= 0) THEN
158 gbuft%TEMP(i1) = gbufs%TEMP(i)
159 END IF
160
161
162
163 DO ir=1,nptr
164 DO is=1,npts
165 DO il=1,nlay
166 DO it=1,nptt
167 lbuft => elbuf_tab(ng1)%BUFLY(il)%LBUF(ir,is,it)
168 lbufs => elbuf_tab(ng )%BUFLY(il)%LBUF(ir,is,it)
169 lbuft%SIG(kk1(1)+i1) = lbufs%SIG(kk(1)+i)
170 lbuft%SIG(kk1(2)+i1) = lbufs%SIG(kk(2)+i)
171 lbuft%SIG(kk1(3)+i1) = lbufs%SIG(kk(3)+i)
172 lbuft%SIG(kk1(4)+i1) = lbufs%SIG(kk(4)+i)
173 lbuft%SIG(kk1(5)+i1) = lbufs%SIG(kk(5)+i)
174 END DO
175 END DO
176 END DO
177 END DO
178
179
180
181 IF (gbuft%G_PLA > 0) THEN
182 DO il=1,nlay
183 DO ir=1,nptr
184 DO is=1,npts
185 DO it=1,nptt
186 elbuf_tab(ng1)%BUFLY(il)%LBUF(ir,is,it)%PLA(i1) =
187 . elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,it)%PLA(i)
188 END DO
189 END DO
190 END DO
191 END DO
192 ENDIF
193
194
195
196 IF (mlw>=28 .AND. mlw/=32) THEN
197 DO il=1,nlay
198 DO ir=1,nptr
199 DO is=1,npts
200 DO it=1,nptt
201 DO k=1,elbuf_tab(ng)%BUFLY(il)%NVAR_MAT
202 elbuf_tab(ng1)%BUFLY(il)%MAT(ir,is,it)%VAR(nel1*(k-1)+i1)=
203 . elbuf_tab(ng )%BUFLY(il)%MAT(ir,is,it)%VAR(nel*(k-1)+i)
204 END DO
205 END DO
206 END DO
207 END DO
208 END DO
209 END IF
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231 END DO
232
233
234
235 m = sh3tree(2,n)+3
236 ng1 = sh3tree(4,m)
237
238 nel1 = iparg(2,ng1)
239 nft1 = iparg(3,ng1)
240 gbuft => elbuf_tab(ng1)%GBUF
241 i1 = m-nft1
242
243 DO k=1,8
244 kk(k) = nel *(k-1)
245 kk1(k) = nel1*(k-1)
246 ENDDO
247
248 gbuft%FOR(kk1(1)+i1) = gbufs%FOR(kk(1)+i)
249 gbuft%FOR(kk1(2)+i1) = gbufs%FOR(kk(2)+i)
250 gbuft%FOR(kk1(3)+i1) = gbufs%FOR(kk(3)+i)
251 gbuft%FOR(kk1(4)+i1) = gbufs%FOR(kk(4)+i)
252 gbuft%FOR(kk1(5)+i1) = gbufs%FOR(kk(5)+i)
253
254 gbuft%MOM(kk1(1)+i1) = gbufs%MOM(kk(1)+i)
255 gbuft%MOM(kk1(2)+i1) = gbufs%MOM(kk(2)+i)
256 gbuft%MOM(kk1(3)+i1) = gbufs%MOM(kk(3)+i)
257
258 gbuft%THK(i1) = gbufs%THK(i)
259 gbuft%OFF(i1) = gbufs%OFF(i)
260
261
262
263 gbuft%EINT(i1) = gbufs%EINT(i)*s2wake(ib)/stot
264 gbuft%EINT(i1+nel1) = gbufs%EINT(i+nel)*s2wake(ib)/stot
265
266
267 IF (gbuft%G_EPSD > 0) THEN
268 gbuft%EPSD(i1) = gbufs%EPSD(i)
269 ENDIF
270
271 IF (istra > 0) THEN
272 DO k=1,8
273 gbuft%STRA(kk1(k)+i1) = gbufs%STRA(kk(k)+i)
274 END DO
275 END IF
276
277 IF (iexpan/=0) THEN
278 gbuft%TEMP(i1)=gbufs%TEMP(i)
279 END IF
280
281
282
283 IF (igtyp == 1) THEN
284 DO ir=1,nptr
285 DO is=1,npts
286 DO il=1,nlay
287 DO it=1,nptt
288 lbuft => elbuf_tab(ng1)%BUFLY(il)%LBUF(ir,is,it)
289 lbufs => elbuf_tab(ng )%BUFLY(il)%LBUF(ir,is,it)
290 lbuft%SIG(kk1(1)+i1) = lbufs%SIG(kk(1)+i)
291 lbuft%SIG(kk1(2)+i1) = lbufs%SIG(kk(2)+i)
292 lbuft%SIG(kk1(3)+i1) = lbufs%SIG(kk(3)+i)
293 lbuft%SIG(kk1(4)+i1) =-lbufs%SIG(kk(4)+i)
294 lbuft%SIG(kk1(5)+i1) =-lbufs%SIG(kk(5)+i)
295 END DO
296 END DO
297 END DO
298 END DO
299 ELSE
300 DO ir=1,nptr
301 DO is=1,npts
302 DO il=1,nlay
303 DO it=1,nptt
304 lbuft => elbuf_tab(ng1)%BUFLY(il)%LBUF(ir,is,it)
305 lbufs => elbuf_tab(ng )%BUFLY(il)%LBUF(ir,is,it)
306 lbuft%SIG(kk1(1)+i1) = lbufs%SIG(kk(1)+i)
307 lbuft%SIG(kk1(2)+i1) = lbufs%SIG(kk(2)+i)
308 lbuft%SIG(kk1(3)+i1) = lbufs%SIG(kk(3)+i)
309 lbuft%SIG(kk1(4)+i1) = lbufs%SIG(kk(4)+i)
310 lbuft%SIG(kk1(5)+i1) = lbufs%SIG(kk(5)+i)
311 END DO
312 END DO
313 END DO
314 END DO
315 END IF
316
317
318
319 IF (gbuft%G_PLA > 0) THEN
320 DO il=1,nlay
321 DO ir=1,nptr
322 DO is=1,npts
323 DO it=1,nptt
324 elbuf_tab(ng1)%BUFLY(il)%LBUF(ir,is,it)%PLA(i1) =
325 . elbuf_tab(ng )%BUFLY(il)%LBUF(ir,is,it)%PLA(i)
326 END DO
327 END DO
328 END DO
329 END DO
330 ENDIF
331
332
333
334 IF (mlw>=28 .AND. mlw/=32) THEN
335 DO il=1,nlay
336 DO ir=1,nptr
337 DO is=1,npts
338 DO it=1,nptt
339 DO k=1,elbuf_tab(ng)%BUFLY(il)%NVAR_MAT
340 elbuf_tab(ng1)%BUFLY(il)%MAT(ir,is,it)%VAR(nel1*(k-1)+i1)=
341 . elbuf_tab(ng )%BUFLY(il)%MAT(ir,is,it)%VAR(nel*(k-1)+i)
342 END DO
343 END DO
344 END DO
345 END DO
346 END DO
347 END IF
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373 gbufs%OFF(i) =-abs(gbufs%OFF(i))
374
375 gbufs%FOR(kk(1)+i) = zero
376 gbufs%FOR(kk(2)+i) = zero
377 gbufs%FOR(kk(3)+i) = zero
378 gbufs%FOR(kk(4)+i) = zero
379 gbufs%FOR(kk(5)+i) = zero
380
381 gbufs%MOM(kk(1)+i) = zero
382 gbufs%MOM(kk(2)+i) = zero
383 gbufs%MOM(kk(3)+i) = zero
384 gbufs%EINT(i) = zero
385 gbufs%EINT(i+nel) = zero
386 IF (gbufs%G_EPSD > 0) gbufs%EPSD(i) = zero
387 IF (istra > 0) THEN
388 DO k=1,8
389 gbufs%STRA(kk(k)+i) = zero
390 END DO
391 END IF
392
393 DO ir=1,nptr
394 DO is=1,npts
395 DO il=1,nlay
396 DO it=1,nptt
397 DO k=1,5
398 elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,it)%SIG(kk(k)+i)=zero
399 ENDDO
400 elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,it)%PLA(i)=zero
401 END DO
402 END DO
403 END DO
404 END DO
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424 RETURN