36 SUBROUTINE corth3(ELBUF_STR,DIR_A ,DIR_B ,JFT ,JLT ,
38 . X1 ,X2 ,X3 ,X4 ,Y1 ,Y2 ,
39 . Y3 ,Y4 ,Z1 ,Z2 ,Z3 ,Z4 ,
40 . E1X, E2X, E3X, E1Y, E2Y, E3Y ,E1Z, E2Z, E3Z ,
49#include "implicit_f.inc"
57 INTEGER JFT,JLT,NLAY,IREP,NEL,IGTYP,IDRAPE
60 my_real,
DIMENSION(MVSIZ),
INTENT(IN) ::
61 . X1,X2,X3,X4,Y1,Y2,Y3,Y4,Z1,Z2,Z3,,
62 . e1x, e2x, e3x, e1y, e2y, e3y ,e1z, e2z, e3z
63 TYPE (ELBUF_STRUCT_),
TARGET :: ELBUF_STR
67#include
"vect01_c.inc"
71 INTEGER I,II,J,N,ILAW,IDIR,IT,NPTT
74 . E11(MVSIZ),E12(MVSIZ),E13(MVSIZ),
75 . E21(MVSIZ),E22(),E23(MVSIZ)
77 . v1,v2,v3,vr,vs,aa,bb,suma,s1,s2
79 .
DIMENSION(:) ,
POINTER :: dir1, dir2
80 TYPE(l_bufel_dir_),
POINTER :: LBUF_DIR
85 e11(i)= x2(i)+x3(i)-x1(i)-x4(i)
86 e12(i)= y2(i)+y3(i)-y1(i)-y4(i)
87 e13(i)= z2(i)+z3(i)-z1(i)-z4(i)
89 e22(i)= y3(i)+y4(i)-y1(i)-y2(i)
90 e23(i)= z3(i)+z4(i)-z1(i)-z2(i)
92 ELSEIF (ity == 7)
THEN
104 IF((igtyp == 51 .OR. igtyp == 52) .AND. idrape > 0)
THEN
105 IF (elbuf_str%BUFLY(1)%LY_DIRA == 0)
THEN
108 nptt = elbuf_str%BUFLY(n)%NPTT
110 j = idir + (it-1)*nel*2
113 dir_a(j+i+nel) = zero
116 idir = idir + 2*nel*nptt
118 ELSEIF (irep == 0)
THEN
121 nptt = elbuf_str%BUFLY(n)%NPTT
123 dir1 => elbuf_str%BUFLY(n)%LBUF_DIR(it)%DIRA
124 j = idir + (it-1)*nel*2
127 dir_a(j+i+nel) = dir1(i+nel)
130 idir = idir + 2*nel*nptt
132 ELSEIF (irep == 1)
THEN
135 nptt = elbuf_str%BUFLY(n)%NPTT
137 dir1 => elbuf_str%BUFLY(n)%LBUF_DIR(it)%DIRA
138 j = idir + (it-1)*nel*2
142 v1 = aa*e11(i) + bb*e21(i)
143 v2 = aa*e12(i) + bb*e22(i)
144 v3 = aa*e13(i) + bb*e23(i)
145 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
146 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
147 suma=sqrt(vr*vr + vs*vs)
149 dir_a(j+i+nel) = vs/suma
152 idir = idir + 2*nptt*nel
154 ELSEIF (irep == 2)
THEN
157 nptt = elbuf_str%BUFLY(n)%NPTT
159 lbuf_dir => elbuf_str%BUFLY(n)%LBUF_DIR(it)
160 dir1 => lbuf_dir%DIRA
161 dir2 => lbuf_dir%DIRB
162 j = idir + (it-1)*nel*2
167 v1 = aa*e11(i) + bb*e21(i)
168 v2 = aa*e12(i) + bb*e22(i)
169 v3 = aa*e13(i) + bb*e23(i)
170 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
171 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
172 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
174 dir_a(j+i+nel) = vs*suma
178 v1 = aa*e11(i) + bb*e21(i)
179 v2 = aa*e12(i) + bb*e22(i)
180 v3 = aa*e13(i) + bb*e23(i)
181 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
182 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
183 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
185 dir_b(j+i+nel) = vs*suma
188 idir = idir + 2*nptt*nel
190 ELSEIF (irep == 3)
THEN
194 ilaw = elbuf_str%BUFLY(n)%ILAW
195 nptt = elbuf_str%BUFLY(n)%NPTT
198 j = idir + (it-1)*nel*2
199 lbuf_dir =>elbuf_str%BUFLY(n)%LBUF_DIR(it)
200 dir1 => lbuf_dir%DIRA
201 dir2 => lbuf_dir%DIRB
206 v1 = aa*e11(i) + bb*e21(i)
207 v2 = aa*e12(i) + bb*e22(i)
208 v3 = aa*e13(i) + bb*e23(i)
209 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
210 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
211 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
213 dir_a(j+i+nel) = vs*suma
217 v1 = aa*e11(i) + bb*e21(i)
218 v2 = aa*e12(i) + bb*e22(i)
219 v3 = aa*e13(i) + bb*e23(i)
220 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
221 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
222 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
224 dir_b(j+i+nel) = vs*suma
227 idir = idir + 2*nel*nptt
230 j = idir + (it-1)*nel*2
231 lbuf_dir => elbuf_str%BUFLY(n)%LBUF_DIR(it)
232 dir1 => lbuf_dir%DIRA
235 dir_a(j+i+nel) = dir1(i+nel)
238 idir = idir + 2*nel*nptt
241 ELSEIF (irep == 4)
THEN
245 ilaw = elbuf_str%BUFLY(n)%ILAW
246 nptt = elbuf_str%BUFLY(n)%NPTT
249 j = idir + (it-1)*nel*2
250 lbuf_dir =>elbuf_str%BUFLY(n)%LBUF_DIR(it)
251 dir1 => lbuf_dir%DIRA
252 dir2 => lbuf_dir%DIRB
257 v1 = aa*e11(i) + bb*e21(i)
258 v2 = aa*e12(i) + bb*e22(i)
259 v3 = aa*e13(i) + bb*e23(i)
260 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
261 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
262 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
264 dir_a(j+i+nel) = vs*suma
268 v1 = aa*e11(i) + bb*e21(i)
269 v2 = aa*e12(i) + bb*e22(i)
270 v3 = aa*e13(i) + bb*e23(i)
271 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
272 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
273 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
275 dir_b(j+i+nel) = vs*suma
278 idir = idir + 2*nel*nptt
281 j = idir + (it-1)*nel*2
282 lbuf_dir =>elbuf_str%BUFLY(n)%LBUF_DIR(it)
283 dir1 => lbuf_dir%DIRA
287 v1 = aa*e11(i) + bb*e21(i)
288 v2 = aa*e12(i) + bb*e22(i)
289 v3 = aa*e13(i) + bb*e23(i)
290 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
291 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
292 suma=sqrt(vr*vr + vs*vs)
294 dir_a(j+i+nel) = vs/suma
297 idir = idir + 2*nel*nptt
304 IF (elbuf_str%BUFLY(1)%LY_DIRA == 0)
THEN
309 dir_a(j+i+nel) = zero
312 ELSEIF (irep == 0)
THEN
314 dir1 => elbuf_str%BUFLY(n)%DIRA
318 dir_a(j+i+nel) = dir1(i+nel)
321 ELSEIF (irep == 1)
THEN
323 dir1 => elbuf_str%BUFLY(n)%DIRA
328 v1 = aa*e11(i) + bb*e21(i)
329 v2 = aa*e12(i) + bb*e22(i)
330 v3 = aa*e13(i) + bb*e23(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=sqrt(vr*vr + vs*vs)
335 dir_a(j+i+nel) = vs/suma
338 ELSEIF (irep == 2)
THEN
340 dir1 => elbuf_str%BUFLY(n)%DIRA
341 dir2 => elbuf_str%BUFLY(n)%DIRB
347 v1 = aa*e11(i) + bb*e21(i)
348 v2 = aa*e12(i) + bb*e22(i)
349 v3 = aa*e13(i) + bb*e23(i)
350 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
351 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
352 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
354 dir_a(j+i+nel) = vs*suma
358 v1 = aa*e11(i) + bb*e21(i)
359 v2 = aa*e12(i) + bb*e22(i)
360 v3 = aa*e13(i) + bb*e23(i)
361 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
362 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
363 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
365 dir_b(j+i+nel) = vs*suma
368 ELSEIF (irep == 3)
THEN
371 ilaw = elbuf_str%BUFLY(n)%ILAW
374 dir1 => elbuf_str%BUFLY(n)%DIRA
375 dir2 => elbuf_str%BUFLY(n)%DIRB
380 v1 = aa*e11(i) + bb*e21(i)
381 v2 = aa*e12(i) + bb*e22(i
382 v3 = aa*e13(i) + bb*e23(i)
383 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
384 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
385 suma = one /
max( sqrt(vr*vr
387 dir_a(j+i+nel) = vs*suma
391 v1 = aa*e11(i) + bb*e21(i)
392 v2 = aa*e12(i) + bb*e22(i)
393 v3 = aa*e13(i) + bb*e23(i)
394 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
395 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
396 suma = one /
max( sqrt(vr*vr + vs*vs), em20
398 dir_b(j+i+nel) = vs*suma
401 dir1 => elbuf_str%BUFLY(n)%DIRA
404 dir_a(j+i+nel) = dir1(i+nel)
408 ELSEIF (irep == 4)
THEN
411 ilaw = elbuf_str%BUFLY(n)%ILAW
414 dir1 => elbuf_str%BUFLY(n)%DIRA
415 dir2 => elbuf_str%BUFLY(n)%DIRB
420 v1 = aa*e11(i) + bb*e21(i)
422 v3 = aa*e13(i) + bb*e23(i)
423 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
424 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
425 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
427 dir_a(j+i+nel) = vs*suma
431 v1 = aa*e11(i) + bb*e21(i)
432 v2 = aa*e12(i) + bb*e22(i)
433 v3 = aa*e13(i) + bb*e23(i)
434 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
435 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
436 suma = one /
max( sqrt(vr*vr + vs*vs),
438 dir_b(j+i+nel) = vs*suma
441 dir1 => elbuf_str%BUFLY(n)%DIRA
445 v1 = aa*e11(i) + bb*e21(i)
446 v2 = aa*e12(i) + bb*e22(i)
449 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
450 suma=sqrt(vr*vr + vs*vs)
452 dir_a(j+i+nel) = vs/suma