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