45
46
47
48 USE elbufdef_mod
49
50
51
52#include "implicit_f.inc"
53
54
55
56
57
58
59
60 INTEGER JFT,JLT,NLAY,IREP,NEL,IDRAPE,IT
61
63 . rx(*),ry(*),rz(*),sx(*),sy(*),sz(*),
64 . dir_a(*),dir_b(*),e1x(*),e1y(*),e1z(*),e2x(*),e2y(*),e2z(*)
65
66 TYPE (ELBUF_STRUCT_), TARGET :: ELBUF_STR
67
68
69
70 INTEGER ,J,N,ILAW,NPTT,K,IAD
71
73 . v1,v2,v3,vr,vs,aa,bb,suma
75 . DIMENSION(:) , POINTER :: dir1, dir2
76 TYPE(L_BUFEL_) ,POINTER :: LBUF
77 TYPE(L_BUFEL_DIR_) ,POINTER :: LBUF_DIR
78
79 idrape = elbuf_str%IDRAPE
80 IF(idrape == 0) THEN
81 IF (irep == 1) THEN
82 DO n=1,nlay
83 dir1 => elbuf_str%BUFLY(n)%DIRA
84 j = (n-1)*nel*2
85
86 DO i=jft,jlt
87 aa = dir1(i)
88 bb = dir1(i + nel)
89 v1 = aa*rx(i) + bb*sx(i)
90 v2 = aa*ry(i) + bb*sy(i)
91 v3 = aa*rz(i) + bb*sz(i)
92 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
93 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
94 suma=sqrt(vr*vr + vs*vs)
95 dir_a(j+i) = vr/suma
96 dir_a(j+i+nel) = vs/suma
97
98
99 ENDDO
100 ENDDO
101 ELSEIF (irep == 2) THEN
102 DO n=1,nlay
103 dir1 => elbuf_str%BUFLY(n)%DIRA
104 dir2 => elbuf_str%BUFLY(n)%DIRB
105 j = (n-1)*nel*2
106
107 DO i=jft,jlt
108
109 aa = dir1(i)
110 bb = dir1(i + nel)
111 v1 = aa*rx(i) + bb*sx(i)
112 v2 = aa*ry(i) + bb*sy(i)
113 v3 = aa*rz(i) + bb*sz(i)
114 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
115 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
116 suma =
max( sqrt(vr*vr + vs*vs), em20)
117 dir_a(j+i) = vr/suma
118 dir_a(j+i+nel) = vs/suma
119
120
121
122 aa = dir2(i)
123 bb = dir2(i + nel)
124 v1 = aa*rx(i) + bb*sx(i)
125 v2 = aa*ry(i) + bb*sy(i)
126 v3 = aa*rz(i) + bb*sz(i)
127 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
128 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
129 suma =
max( sqrt(vr*vr + vs*vs), em20)
130 dir_b(j+i) = vr/suma
131 dir_b(j+i+nel) = vs/suma
132
133
134 ENDDO
135 ENDDO
136 ELSEIF (irep == 3) THEN
137
138 DO n=1,nlay
139 ilaw = elbuf_str%BUFLY(n)%ILAW
140 IF (ilaw == 58) THEN
141 dir1 => elbuf_str%BUFLY(n)%DIRA
142 dir2 => elbuf_str%BUFLY(n)%DIRB
143 j = (n-1)*nel*2
144
145 DO i=jft,jlt
146
147 aa = dir1(i)
148 bb = dir1(i + nel)
149 v1 = aa*rx(i) + bb*sx(i)
150 v2 = aa*ry(i) + bb*sy(i)
151 v3 = aa*rz(i) + bb*sz(i)
152 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
153 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
154 suma =
max( sqrt(vr*vr + vs*vs), em20)
155 dir_a(j+i) = vr/suma
156 dir_a(j+i+nel) = vs/suma
157
158
159
160 aa = dir2(i)
161 bb = dir2(i + nel)
162 v1 = aa*rx(i) + bb*sx(i)
163 v2 = aa*ry(i) + bb*sy(i)
164 v3 = aa*rz(i) + bb*sz(i)
165 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
166 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
167 suma =
max( sqrt(vr*vr + vs*vs), em20)
168 dir_b(j+i) = vr/suma
169 dir_b(j+i+nel) = vs/suma
170
171
172 ENDDO
173 ELSE
174 dir1 => elbuf_str%BUFLY(n)%DIRA
175
176 j = (n-1)*nel*2
177 DO i=jft,jlt
178 dir_a(j+i) = dir1(i)
179 dir_a(j+i+nel) = dir1(i+nel)
180
181
182 ENDDO
183 ENDIF
184 ENDDO
185 ELSEIF (irep == 4) THEN
186
187 DO n=1,nlay
188 ilaw = elbuf_str%BUFLY(n)%ILAW
189 IF (ilaw == 58) THEN
190 dir1 => elbuf_str%BUFLY(n)%DIRA
191 dir2 => elbuf_str%BUFLY(n)%DIRB
192 j = (n-1)*nel*2
193
194 DO i=jft,jlt
195
196 aa = dir1(i)
197 bb = dir1(i + nel)
198 v1 = aa*rx(i) + bb*sx(i)
199 v2 = aa*ry(i) + bb*sy(i)
200 v3 = aa*rz(i) + bb*sz(i)
201 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
202 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
203 suma =
max( sqrt(vr*vr + vs*vs), em20)
204 dir_a(j+i) = vr/suma
205 dir_a(j+i+nel) = vs/suma
206
207
208
209 aa = dir2(i)
210 bb = dir2(i + nel)
211 v1 = aa*rx(i) + bb*sx(i)
212 v2 = aa*ry(i) + bb*sy(i)
213 v3 = aa*rz(i) + bb*sz(i)
214 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
215 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
216 suma =
max( sqrt(vr*vr + vs*vs), em20)
217 dir_b(j+i) = vr/suma
218 dir_b(j+i+nel) = vs/suma
219
220
221 ENDDO
222 ELSE
223 dir1 => elbuf_str%BUFLY(n)%DIRA
224 j = (n-1)*nel*2
225
226 DO i=jft,jlt
227 aa = dir1(i)
228 bb = dir1(i + nel)
229 v1 = aa*rx(i) + bb*sx(i)
230 v2 = aa*ry(i) + bb*sy(i)
231 v3 = aa*rz(i) + bb*sz(i)
232 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
233 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
234 suma=sqrt(vr*vr + vs*vs)
235 dir_a(j+i) = vr/suma
236 dir_a(j+i+nel) = vs/suma
237
238
239 ENDDO
240 ENDIF
241 ENDDO
242 ENDIF
243 ELSE
244 IF (irep == 1) THEN
245 iad = 0
246 DO n=1,nlay
247 nptt = elbuf_str%BUFLY(n)%NPTT
248 DO it = 1,nptt
249 lbuf_dir => elbuf_str%BUFLY(n)%LBUF_DIR(it)
250 dir1 => lbuf_dir%DIRA
251 j = iad + (it-1)*nel*2
252
253 DO i=jft,jlt
254 aa = dir1(i)
255 bb = dir1(i + nel)
256 v1 = aa*rx(i) + bb*sx(i)
257 v2 = aa*ry(i) + bb*sy(i)
258 v3 = aa*rz(i) + bb*sz(i)
259 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
260 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
261 suma=sqrt(vr*vr + vs*vs)
262 dir_a(j+i) = vr/suma
263 dir_a(j+i+nel) = vs/suma
264
265
266 ENDDO
267 ENDDO
268 iad = iad + nptt*nel*2
269 ENDDO ! nlay
270 ELSEIF (irep == 2) THEN
271 iad = 0
272 DO n=1,nlay
273 nptt = elbuf_str%BUFLY(n)%NPTT
274 DO it = 1,nptt
275 lbuf_dir => elbuf_str%BUFLY(n)%LBUF_DIR(it)
276 dir1 => lbuf_dir%DIRA
277 dir2 => lbuf_dir%DIRB
278 j = iad + (it-1)*nel*2
279
280 DO i=jft,jlt
281
282 aa = dir1(i)
283 bb = dir1(i + nel)
284 v1 = aa*rx(i) + bb*sx(i)
285 v2 = aa*ry(i) + bb*sy(i)
286 v3 = aa*rz(i) + bb*sz(i)
287 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
288 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
289 suma =
max( sqrt(vr*vr + vs*vs), em20)
290 dir_a(j+i) = vr/suma
291 dir_a(j+i+nel) = vs/suma
292
293
294
295 aa = dir2(i)
296 bb = dir2(i + nel)
297 v1 = aa*rx(i) + bb*sx(i)
298 v2 = aa*ry(i) + bb*sy(i)
299 v3 = aa*rz(i) + bb*sz(i)
300 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
301 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
302 suma =
max( sqrt(vr*vr + vs*vs), em20)
303 dir_b(j+i) = vr/suma
304 dir_b(j+i+nel) = vs/suma
305
306
307 ENDDO
308 ENDDO
309 iad = iad + nptt*nel*2
310 ENDDO
311 ELSEIF (irep == 3) THEN
312
313 iad = 0
314 DO n=1,nlay
315 ilaw = elbuf_str%BUFLY(n)%ILAW
316 IF (ilaw == 58) THEN
317 nptt = elbuf_str%BUFLY(n)%NPTT
318 DO it = 1,nptt
319 lbuf_dir => elbuf_str%BUFLY(n)%LBUF_DIR(it)
320 dir1 => lbuf_dir%DIRA
321 dir2 => lbuf_dir%DIRB
322 j = iad + (it-1)*nel*2
323
324 DO i=jft,jlt
325
326 aa = dir1(i)
327 bb = dir1(i + nel)
328 v1 = aa*rx(i) + bb*sx(i)
329 v2 = aa*ry(i) + bb*sy(i)
330 v3 = aa*rz(i) + bb*sz(i)
331 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
332 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
333 suma =
max( sqrt(vr*vr + vs*vs), em20)
334 dir_a(j+i) = vr/suma
335 dir_a(j+i+nel) = vs/suma
336
337
338
339 aa = dir2(i)
340 bb = dir2(i + nel)
341 v1 = aa*rx(i) + bb*sx(i)
342 v2 = aa*ry(i) + bb*sy(i)
343 v3 = aa*rz(i) + bb*sz(i)
344 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
345 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
346 suma =
max( sqrt(vr*vr + vs*vs), em20)
347 dir_b(j+i) = vr/suma
348 dir_b(j+i+nel) = vs/suma
349
350
351 ENDDO
352 ENDDO
353 iad = iad + nptt*2*nel
354 ELSE
355 nptt = elbuf_str%BUFLY(n)%NPTT
356 DO it = 1,nptt
357 lbuf_dir => elbuf_str%BUFLY(n)%LBUF_DIR(it)
358 dir1 => lbuf_dir%DIRA
359
360 j = iad + (it-1)*nel*2
361 DO i=jft,jlt
362 dir_a(j+i) = dir1(i)
363 dir_a(j+i+nel) = dir1(i+nel)
364
365
366 ENDDO
367 ENDDO
368 iad = iad + 2*nel*nptt
369 ENDIF
370 ENDDO
371 ELSEIF (irep == 4) THEN
372
373 iad = 0
374 DO n=1,nlay
375 ilaw = elbuf_str%BUFLY(n)%ILAW
376 IF (ilaw == 58) THEN
377 nptt = elbuf_str%BUFLY(n)%NPTT
378 DO it = 1,nptt
379 lbuf_dir => elbuf_str%BUFLY(n)%LBUF_DIR(it)
380 dir1 => lbuf_dir%DIRA
381 dir2 => lbuf_dir%DIRB
382 j = iad + (it - 1)*nel*2
383
384 DO i=jft,jlt
385
386 aa = dir1(i)
387 bb = dir1(i + nel)
388 v1 = aa*rx(i) + bb*sx(i)
389 v2 = aa*ry(i) + bb*sy(i)
390 v3 = aa*rz(i) + bb*sz(i)
391 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
392 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
393 suma =
max( sqrt(vr*vr + vs*vs), em20)
394 dir_a(j+i) = vr/suma
395 dir_a(j+i+nel) = vs/suma
396
397
398
399 aa = dir2(i)
400 bb = dir2(i + nel)
401 v1 = aa*rx(i) + bb*sx(i)
402 v2 = aa*ry(i) + bb*sy(i)
403 v3 = aa*rz(i) + bb*sz(i)
404 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
405 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
406 suma =
max( sqrt(vr*vr + vs*vs), em20)
407 dir_b(j+i) = vr/suma
408 dir_b(j+i+nel) = vs/suma
409
410
411 ENDDO
412 ENDDO
413 iad = iad + nptt*2*nel
414 ELSE
415 nptt = elbuf_str%BUFLY(n)%NPTT
416 DO it = 1,nptt
417 lbuf_dir => elbuf_str%BUFLY(n)%LBUF_DIR(it)
418 dir1 => lbuf_dir%DIRA
419 j = iad + (it-1)*nel*2
420
421 DO i=jft,jlt
422 aa = dir1(i)
423 bb = dir1(i + nel)
424 v1 = aa*rx(i) + bb*sx(i)
425 v2 = aa*ry(i) + bb*sy(i)
426 v3 = aa*rz(i) + bb*sz(i)
427 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
428 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
429 suma=sqrt(vr*vr + vs*vs)
430 dir_a(j+i) = vr/suma
431 dir_a(j+i+nel) = vs/suma
432
433
434 ENDDO
435 ENDDO
436 iad = iad + 2*nptt*nel
437 ENDIF
438 ENDDO
439 ENDIF
440
441
442 ENDIF
443
444 RETURN