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