33 SUBROUTINE c3evec3(ELBUF_STR,DIR_A ,DIR_B ,JFT ,JLT ,
34 . IREP ,E1X0 ,E1Y0 ,E1Z0 ,E2X0 ,
35 . E2Y0 ,E2Z0 ,E3X0 ,E3Y0 ,E3Z0 ,
36 . E1X ,E1Y ,E1Z ,E2X ,
37 . E2Y ,E2Z ,E3X ,E3Y ,E3Z ,
38 . NLAY ,OFFG ,ECOS ,ESIN ,ISH3NFRAM,
39 . NEL ,AREA ,X21 ,Y21 ,Z21 ,
41 . X1 ,X2 ,X3 ,Y1 ,Y2 ,
50#include "implicit_f.inc"
58 INTEGER JFT,JLT,IREP,NLAY,ISH3NFRAM,NEL
60 . DIR_A(NEL,*), DIR_B(NEL,*),E1X0(*), E1Y0(*), E1Z0(*),
61 . E2X0(*), E2Y0(*), E2Z0(*),E3X0(*), E3Y0(*), E3Z0(*),OFFG(*),
62 . E1X(MVSIZ), E1Y(MVSIZ), E1Z(MVSIZ),
63 . E2X(MVSIZ), E2Y(MVSIZ), E2Z(MVSIZ),
64 . E3X(MVSIZ), E3Y(MVSIZ), E3Z(MVSIZ),
65 . X21(MVSIZ), Y21(MVSIZ), Z21(MVSIZ),
66 . X31(), Y31(MVSIZ), Z31(MVSIZ),
67 . ecos(*) ,esin(*),
area(mvsiz)
69 REAL(kind=8), dimension(mvsiz),
INTENT(in) ::x1,x2,x3
70 REAL(kind=8), dimension(mvsiz),
INTENT(in) ::y1,y2,y3
71 REAL(kind=8), dimension(mvsiz),
INTENT(in) ::z1,z2,z3
74 TYPE (ELBUF_STRUCT_) ::
78 INTEGER I,II,J,N,ILAW, IDRAPE,IGTYP,NPTT,IT,IPT_ALL,IPT
80 my_real x32(mvsiz), y32(mvsiz), z32(mvsiz),sum
81 . e11(mvsiz),e12(mvsiz),e13(mvsiz),
82 . e21(mvsiz),e22(mvsiz),e23(mvsiz)
83 my_real v1,v2,v3,vr,vs,aa,bb,suma
84 my_real,
DIMENSION(:) ,
POINTER :: dir1, dir2
86 idrape = elbuf_str%IDRAPE
87 igtyp = elbuf_str%IGTYP
115 sum(i) = sqrt(e1x(i)*e1x(i)+e1y(i)*e1y(i)+e1z(i)*e1z(i))
122 e3x(i)=y31(i)*z32(i)-z31(i)*y32(i)
123 e3y(i)=z31(i)*x32(i)-x31(i)*z32(i)
124 e3z(i)=x31(i)*y32(i)-y31(i)*x32(i)
125 sum(i) = sqrt(e3x(i)*e3x(i)+e3y(i)*e3y(i)+e3z(i)*e3z(i))
129 area(i) = half * sum(i)
133 e2x(i)=e3y(i)*e1z(i)-e3z(i)*e1y(i)
135 e2z(i)=e3x(i)*e1y(i)-e3y(i)*e1x(i)
136 sum(i) = sqrt(e2x(i)*e2x(i)+e2y(i)*e2y(i)+e2z(i)*e2z(i))
153 IF(ish3nfram ==0 )
THEN
158 . e1x,e2x,e3x,e1y,e2y,e3y,e1z,e2z,e3z,sum,offg)
160 ecos(i) = e1x(i)*e1x0(i)+e1y(i)*e1y0(i)+e1z(i)*e1z0(i)
161 aa =
max(zero,one-ecos(i)*ecos(i))
163 bb = e2x(i)*e1x0(i)+e2y(i)*e1y0(i)+e2z(i)*e1z0(i)
164 IF (bb >zero) esin(i) = -esin(i)
168 IF(idrape > 0 .AND. (igtyp == 51 .OR. igtyp == 52))
THEN
172 nptt = elbuf_str%BUFLY(n)%NPTT
175 dir1 => elbuf_str%BUFLY(n)%LBUF_DIR(it)%DIRA
181 v1 = aa*e11(i) + bb*e21(i)
182 v2 = aa*e12(i) + bb*e22(i)
183 v3 = aa*e13(i) + bb*e23(i)
184 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
185 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
186 suma=sqrt(vr*vr + vs*vs)
187 dir_a(i,j+1) = vr/suma
188 dir_a(i,j+2) = vs/suma
191 ipt_all = ipt_all + nptt
193 ELSEIF (irep == 2)
THEN
195 nptt = elbuf_str%BUFLY(n)%NPTT
198 dir1 => elbuf_str%BUFLY(n)%LBUF_DIR(it)%DIRA
199 dir2 => elbuf_str%BUFLY(n)%LBUF_DIR(it)%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)
212 dir_a(i,j+1) = vr*suma
213 dir_a(i,j+2) = 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)
223 dir_b(i,j+1) = vr*suma
224 dir_b(i,j+2) = vs*suma
227 ipt_all = ipt_all + nptt
229 ELSEIF (irep == 3)
THEN
232 ilaw = elbuf_str%BUFLY(n)%ILAW
233 nptt = elbuf_str%BUFLY(n)%NPTT
237 dir1 => elbuf_str%BUFLY(n)%LBUF_DIR(it)%DIRA
238 dir2 => elbuf_str%BUFLY(n)%LBUF_DIR(it)%DIRB
245 v1 = aa*e11(i) + bb*e21(i)
246 v2 = aa*e12(i) + bb*e22(i)
247 v3 = aa*e13(i) + bb*e23(i)
248 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
249 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
250 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
251 dir_a(i,j+1) = vr*suma
252 dir_a(i,j+2) = vs*suma
256 v1 = aa*e11(i) + bb*e21(i)
257 v2 = aa*e12(i) + bb*e22(i)
258 v3 = aa*e13(i) + bb*e23(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 = one /
max( sqrt(vr*vr + vs*vs), em20)
262 dir_b(i,j+1) = vr*suma
263 dir_b(i,j+2) = vs*suma
266 ipt_all = ipt_all + nptt
269 dir1 => elbuf_str%BUFLY(n)%LBUF_DIR(it)%DIRA
273 dir_a(i,j+1) = dir1(i)
274 dir_a(i,j+2) = dir1(i+nel)
277 ipt_all = ipt_all + nptt
280 ELSEIF (irep == 4)
THEN
283 ilaw = elbuf_str%BUFLY(n)%ILAW
284 nptt = elbuf_str%BUFLY(n)%NPTT
288 dir1 => elbuf_str%BUFLY(n)%LBUF_DIR(it)%DIRA
289 dir2 => elbuf_str%BUFLY(n)%LBUF_DIR(it)%DIRB
296 v1 = aa*e11(i) + bb*e21(i)
297 v2 = aa*e12(i) + bb*e22(i)
298 v3 = aa*e13(i) + bb*e23(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 = one /
max( sqrt(vr*vr + vs*vs), em20)
302 dir_a(i,j+1) = vr*suma
303 dir_a(i,j+2) = vs*suma
307 v1 = aa*e11(i) + bb*e21(i)
308 v2 = aa*e12(i) + bb*e22(i)
309 v3 = aa*e13(i) + bb*e23(i)
311 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
312 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
313 dir_b(i,j+1) = vr*suma
314 dir_b(i,j+2) = vs*suma
317 ipt_all = ipt_all + nptt
321 dir1 => elbuf_str%BUFLY(n)%LBUF_DIR(it)%DIRA
327 v1 = aa*e11(i) + bb*e21(i)
328 v2 = aa*e12(i) + bb*e22(i)
329 v3 = aa*e13(i) + bb*e23(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=sqrt(vr*vr + vs*vs)
333 dir_a(i,j+1) = vr/suma
334 dir_a(i,j+2) = vs/suma
337 ipt_all = ipt_all + nptt
344 dir1 => elbuf_str%BUFLY(n)%DIRA
349 v1 = aa*e11(i) + bb*e21(i)
350 v2 = aa*e12(i) + bb*e22(i)
351 v3 = aa*e13(i) + bb*e23(i)
352 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
353 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
354 suma=sqrt(vr*vr + vs*vs)
355 dir_a(i,j+1) = vr/suma
356 dir_a(i,j+2) = vs/suma
359 ELSEIF (irep == 2)
THEN
361 dir1 => elbuf_str%BUFLY(n)%DIRA
362 dir2 => elbuf_str%BUFLY(n)%DIRB
369 v1 = aa*e11(i) + bb*e21(i)
370 v2 = aa*e12(i) + bb*e22(i)
371 v3 = aa*e13(i) + bb*e23(i)
372 vr = v1*e1x(i) + v2*e1y(i) + v3*e1z(i)
373 vs = v1*e2x(i) + v2*e2y(i) + v3*e2z(i)
374 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
375 dir_a(i,j+1) = vr*suma
376 dir_a(i,j+2) = vs*suma
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 + vs*vs), em20)
386 dir_b(i,j+1) = vr*suma
387 dir_b(i,j+2) = vs*suma
390 ELSEIF (irep == 3)
THEN
393 ilaw = elbuf_str%BUFLY(n)%ILAW
397 dir1 => elbuf_str%BUFLY(n)%DIRA
398 dir2 => elbuf_str%BUFLY(n)%DIRB
403 v1 = aa*e11(i) + bb*e21(i)
404 v2 = aa*e12(i) + bb*e22(i)
405 v3 = aa*e13(i) + bb*e23(i)
406 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
407 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
408 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
409 dir_a(i,j+1) = vr*suma
410 dir_a(i,j+2) = vs*suma
414 v1 = aa*e11(i) + bb*e21(i)
415 v2 = aa*e12(i) + bb*e22(i)
416 v3 = aa*e13(i) + bb*e23(i)
417 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
418 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
419 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
420 dir_b(i,j+1) = vr*suma
421 dir_b(i,j+2) = vs*suma
424 dir1 => elbuf_str%BUFLY(n)%DIRA
426 dir_a(i,j+1) = dir1(i)
427 dir_a(i,j+2) = dir1(i+nel)
431 ELSEIF (irep == 4)
THEN
434 ilaw = elbuf_str%BUFLY(n)%ILAW
438 dir1 => elbuf_str%BUFLY(n)%DIRA
439 dir2 => elbuf_str%BUFLY(n)%DIRB
444 v1 = aa*e11(i) + bb*e21(i)
445 v2 = aa*e12(i) + bb*e22(i)
446 v3 = aa*e13(i) + bb*e23(i)
447 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
449 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
450 dir_a(i,j+1) = vr*suma
451 dir_a(i,j+2) = vs*suma
455 v1 = aa*e11(i) + bb*e21(i)
456 v2 = aa*e12(i) + bb*e22(i)
457 v3 = aa*e13(i) + bb*e23(i)
458 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
459 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
460 suma = one /
max( sqrt(vr*vr + vs*vs), em20)
461 dir_b(i,j+1) = vr*suma
462 dir_b(i,j+2) = vs*suma
465 dir1 => elbuf_str%BUFLY(n)%DIRA
469 v1 = aa*e11(i) + bb*e21(i)
470 v2 = aa*e12(i) + bb*e22(i)
471 v3 = aa*e13(i) + bb*e23(i)
472 vr = v1*e1x(i)+ v2*e1y(i) + v3*e1z(i)
473 vs = v1*e2x(i)+ v2*e2y(i) + v3*e2z(i)
474 suma=sqrt(vr*vr + vs*vs)
475 dir_a(i,j+1) = vr/suma
476 dir_a(i,j+2) = vs/suma
483 IF(ish3nfram ==0 )
THEN
subroutine c3evec3(elbuf_str, dir_a, dir_b, jft, jlt, irep, e1x0, e1y0, e1z0, e2x0, e2y0, e2z0, e3x0, e3y0, e3z0, e1x, e1y, e1z, e2x, e2y, e2z, e3x, e3y, e3z, nlay, offg, ecos, esin, ish3nfram, nel, area, x21, y21, z21, x31, y31, z31, x1, x2, x3, y1, y2, y3, z1, z2, z3)