38 1 JFT ,JLT ,NFT ,NLAY ,NUMEL ,
39 2 NSIGSH ,NIX ,IX ,IGEO ,GEO ,
40 3 SKEW ,SIGSH ,PTSH ,PHI1 ,PHI2 ,
41 4 VX ,VY ,VZ ,COOR1 ,COOR2 ,
42 5 COOR3 ,COOR4 ,IORTHLOC,ISUBSTACK, STACK ,
43 6 IREP ,ELBUF_STR,DRAPE ,ANGLE ,X ,
44 7 GEO_STACK,E3X ,E3Y ,E3Z ,
45 8 BETAORTH ,X1 ,X2 ,Y1 ,Y2 ,
46 9 Z1 ,Z2 ,NEL ,G_ADD_NODE,ADD_NODE,
47 A NPT_ALL , IDRAPE ,INDX)
57 use element_mod ,
only : nixtg
61#include "implicit_f.inc"
76 INTEGER JFT,JLT,NFT,NLAY,IPT,ID,NIX,NUMEL,NSIGSH,
77 . ISUBSTACK,IREP,NPT_ALL,IDRAPE
78 INTEGER IX(NIX,*),IGEO(NPROPGI,*),PTSH(*),IORTHLOC(*)
79 INTEGER, INTENT(IN) :: NEL,G_ADD_NODE,ADD_NODE(G_ADD_NODE*NEL)
80 INTEGER, DIMENSION(*) :: INDX
82 . GEO(NPROPG,*),SKEW(LSKEW,*),SIGSH(NSIGSH,*),VX(*),VY(*),VZ(*),
83 . PHI1(NPT_ALL,*),PHI2(NPT_ALL,*),COOR1(NPT_ALL,MVSIZ),COOR2(NPT_ALL,MVSIZ),
84 . COOR3(NPT_ALL,MVSIZ),COOR4(NPT_ALL,MVSIZ),
85 . ANGLE(*),GEO_STACK(NPROPG,*),X(3,*),BETAORTH(*)
86 my_real, DIMENSION(MVSIZ), INTENT(IN) :: E3X,E3Y,E3Z,X1,X2,Y1,Y2,Z1,Z2
88 TYPE(ELBUF_STRUCT_), TARGET :: ELBUF_STR
89 TYPE (STACK_PLY):: STACK
90 TYPE (DRAPE_) , DIMENSION(*), TARGET :: DRAPE
94 INTEGER I,II,J,JJ,N,NPT,NPTI,IGTYP,IPID,PID,ISK,IPANG,IPPHI,
95 . IPTHK,IPPOS,IPDIR,ILAW_LY,
96 . DEF_ORTH(MVSIZ),N1,N2,IRP,NOD,IL,IT,NSLICE,IPT_ALL,NPTT,
97 . IE, IP,IPID_PLY,N3,N4
98 my_real V(MVSIZ),E11,E12,E13,NE1,VX0,VY0,VZ0,
99 . XC(MVSIZ),YC(MVSIZ),ZC(MVSIZ)
100 CHARACTER(LEN=NCHARTITLE)::TITR1
102 TYPE (DRAPE_PLY_) , POINTER :: DRAPE_PLY
107 DEF_ORTH(1:MVSIZ) = NLAY
116.OR..OR.
IF (IGTYP == 17 IGTYP == 51 IGTYP == 52 ) THEN
136 CASE (20) ! N1---> N2 (nodes)
140 VX(I) = X(1,N2)-X(1,N1)
141 VY(I) = X(2,N2)-X(2,N1)
142 VZ(I) = X(3,N2)-X(3,N1)
151 CASE (23) ! Proj on the element V x normal_eleemt
156 VX(I) = E3Y(I)*VZ0 - E3Z(I)*VY0
157 VY(I) = E3Z(I)*VX0 - E3X(I)*VZ0
158 VZ(I) = E3X(I)*VY0 - E3Y(I)*VX0
165 VX(I) = X(1,NOD)-X(1,N1)
166 VY(I) = X(2,NOD)-X(2,N1)
167 VZ(I) = X(3,NOD)-X(3,N1)
172 IF (NIX > NIXTG) THEN
178 XC(I) = FOURTH*(X(1,N1)+X(1,N2)+X(1,N3)+X(1,N4))
179 YC(I) = FOURTH*(X(2,N1)+X(2,N2)+X(2,N3)+X(2,N4))
180 ZC(I) = FOURTH*(X(3,N1)+X(3,N2)+X(3,N3)+X(3,N4))
187 XC(I) = THIRD*(X(1,N1)+X(1,N2)+X(1,N3))
188 YC(I) = THIRD*(X(2,N1)+X(2,N2)+X(2,N3))
189 ZC(I) = THIRD*(X(3,N1)+X(3,N2)+X(3,N3))
193 E11 = XC(I)-SKEW(10,ISK)
194 E12 = YC(I)-SKEW(11,ISK)
195 E13 = ZC(I)-SKEW(12,ISK)
196 VX(I) = SKEW(8,ISK)*E13 - SKEW(9,ISK)*E12
197 VY(I) = SKEW(9,ISK)*E11 - SKEW(7,ISK)*E13
198 VZ(I) = SKEW(7,ISK)*E12 - SKEW(8,ISK)*E11
204 PHI1(1,I)= GEO(10,PID)
206 ELSEIF (IGTYP == 10) THEN
209 PHI1(J,I)= GEO(IPANG+J,PID)
212 ELSEIF (IGTYP == 11) THEN
215 PHI1(J,I)= GEO(IPANG+J,PID)
218.AND.
ELSEIF (IGTYP == 17 IRP /= 24) THEN !
225 IPID_PLY = STACK%IGEO(2 + J,ISUBSTACK)
226 IF(IPID_PLY > 0) THEN
227 PHI1(J,I) = ANGLE(I) + GEO(2,IPID_PLY) + STACK%GEO(IPANG+J,ISUBSTACK) ! + stack_angle
228 IF (IREP >= 2) PHI2(J,I)= STACK%GEO(IPDIR+J,ISUBSTACK)
229 DEF_ORTH(I) = DEF_ORTH(I) - 1
234 IPID_PLY = STACK%IGEO(2+J,ISUBSTACK)
235 IF(IPID_PLY > 0) THEN
236 PHI1(J,I) = ANGLE(I) + GEO(2,IPID_PLY) + STACK%GEO(IPANG+J,ISUBSTACK) ! + stack_angle
237 IF (IREP >= 2) PHI2(J,I)= STACK%GEO(IPDIR+J,ISUBSTACK)
238 DEF_ORTH(I) = DEF_ORTH(I) - 1
239 IP = DRAPE(IE)%INDX_PLY(J)
241 DRAPE_PLY => DRAPE(IE)%DRAPE_PLY(IP)
242 PHI1(J,I) = PHI1(J,I) + DRAPE_PLY%RDRAPE(1,2)
252 IPID_PLY = STACK%IGEO(2+J,ISUBSTACK)
253 IF(IPID_PLY > 0) THEN
254 PHI1(J,I) = ANGLE(I) + GEO(2,IPID_PLY) + STACK%GEO(IPANG+J,ISUBSTACK)
255 DEF_ORTH(I) = DEF_ORTH(I) - 1
256 IF (IREP >= 2) PHI2(J,I)= STACK%GEO(IPDIR+J,ISUBSTACK)
261.AND.
ELSEIF(IGTYP == 51 IRP /= 24 ) THEN !
269 NPTT = ELBUF_STR%BUFLY(IL)%NPTT
270 IP = DRAPE(IE)%INDX_PLY(IL)
271 IPID_PLY = STACK%IGEO(2 + IL,ISUBSTACK)
272 IF(IPID_PLY > 0) THEN
274 DRAPE_PLY => DRAPE(IE)%DRAPE_PLY(IP)
275 NSLICE = DRAPE_PLY%NSLICE ! NPTT
276 DEF_ORTH(I) = DEF_ORTH(I) - 1 !
280 PHI1(IPT,I) = ANGLE(I) + GEO(2,IPID_PLY) + STACK%GEO(IPANG+IL,ISUBSTACK)
281 . + DRAPE_PLY%RDRAPE(IT,2)
282 PHI2(IPT,I) = STACK%GEO(IPDIR + IL,ISUBSTACK)
287 PHI1(IPT,I) = ANGLE(I) + GEO(2,IPID_PLY) + STACK%GEO(IPANG+IL,ISUBSTACK)
288 . + DRAPE_PLY%RDRAPE(IT,2)
292 DEF_ORTH(I) = DEF_ORTH(I) - 1
296 PHI1(IPT,I) = ANGLE(I) + GEO(2,IPID_PLY) + STACK%GEO(IPANG + IL,ISUBSTACK)
297 PHI2(IPT,I) = STACK%GEO(IPDIR+IL,ISUBSTACK)
302 PHI1(IPT,I) = ANGLE(I) + GEO(2,IPID_PLY) + STACK%GEO(IPANG + IL,ISUBSTACK)
307 IPT_ALL = IPT_ALL + NPTT
311 NPTT = ELBUF_STR%BUFLY(IL)%NPTT
312 IPID_PLY = STACK%IGEO(2 + IL,ISUBSTACK)
313 IF(IPID_PLY > 0) THEN
314 DEF_ORTH(I) = DEF_ORTH(I) - 1
318 PHI1(IPT,I) = ANGLE(I) + GEO(2,IPID_PLY) + STACK%GEO(IPANG + IL,ISUBSTACK)
319 PHI2(IPT,I) = STACK%GEO(IPDIR+IL,ISUBSTACK)
324 PHI1(IPT,I) = ANGLE(I) + GEO(2,IPID_PLY) + STACK%GEO(IPANG + IL,ISUBSTACK)
328 IPT_ALL = IPT_ALL + NPTT
336 IPID_PLY = STACK%IGEO(2 + IL,ISUBSTACK)
337 IF(IPID_PLY > 0 ) THEN
338 PHI1(IL,I) = ANGLE(I) + GEO(2,IPID_PLY) + STACK%GEO(IPANG + IL,ISUBSTACK)
339 DEF_ORTH(I) = DEF_ORTH(I) - 1
341 IF (IREP >= 2) PHI2(IL,I)= STACK%GEO(IPDIR + IL,ISUBSTACK)
345.AND.
ELSEIF(IGTYP == 52 IRP /= 24 ) THEN
353 NPTT = ELBUF_STR%BUFLY(IL)%NPTT
354 IP = DRAPE(IE)%INDX_PLY(IL)
355 IPID_PLY = STACK%IGEO(2+IL,ISUBSTACK)
356 IF( IPID_PLY > 0) THEN
358 DRAPE_PLY => DRAPE(IE)%DRAPE_PLY(IP)
359 NSLICE = DRAPE_PLY%NSLICE ! NPTT
360 DEF_ORTH(I) = DEF_ORTH(I) - 1
364 PHI1(IPT,I) = ANGLE(I) + GEO_STACK(2,IPID_PLY)
365 . + STACK%GEO(IPANG + IL,ISUBSTACK) + DRAPE_PLY%RDRAPE(IT,2)
366 PHI2(IPT,I)= STACK%GEO(IPDIR+IL,ISUBSTACK)
371 PHI1(IPT,I) = ANGLE(I) + GEO_STACK(2,IPID_PLY)
372 . + STACK%GEO(IPANG + IL,ISUBSTACK) + DRAPE_PLY%RDRAPE(IT,2)
376 DEF_ORTH(I) = DEF_ORTH(I) - 1
380 PHI1(IPT,I) = ANGLE(I) + GEO_STACK(2,IPID_PLY) + STACK%GEO(IPANG + IL,ISUBSTACK)
381 PHI2(IPT,I) = STACK%GEO(IPDIR+IL,ISUBSTACK)
386 PHI1(IPT,I) = ANGLE(I) + GEO_STACK(2,IPID_PLY) + STACK%GEO(IPANG + IL,ISUBSTACK)
391 IPT_ALL = IPT_ALL + NPTT
395 NPTT = ELBUF_STR%BUFLY(IL)%NPTT
396 IPID_PLY = STACK%IGEO(2+IL,ISUBSTACK)
397 IF(IPID_PLY > 0) THEN
398 DEF_ORTH(I) = DEF_ORTH(I) - 1
402 PHI1(IPT,I) = ANGLE(I) + GEO_STACK(2,IPID_PLY) + STACK%GEO(IPANG + IL,ISUBSTACK)
403 PHI2(IPT,I)= STACK%GEO(IPDIR+IL,ISUBSTACK)
408 PHI1(IPT,I) = ANGLE(I) + GEO_STACK(2,IPID_PLY) + STACK%GEO(IPANG + IL,ISUBSTACK)
412 IPT_ALL = IPT_ALL + NPTT
420 IPID_PLY = STACK%IGEO(2+IL,ISUBSTACK)
421 IF(IPID_PLY > 0) THEN
422 DEF_ORTH(I) = DEF_ORTH(I) - 1
423 PHI1(IL,I) = ANGLE(I) + GEO_STACK(2,IPID_PLY) + STACK%GEO(IPANG + IL,ISUBSTACK)
424 IF(IREP >= 2) PHI2(IL,I)= STACK%GEO(IPDIR+IL,ISUBSTACK)
429 ELSEIF (IGTYP == 16) THEN
432 PHI1(J,I)= GEO(IPANG+J,PID)
433 PHI2(J,I)= GEO(IPPHI+J,PID)
438 IF (IORTSHEL == 1) THEN
440.AND..AND.
IF (ABS(ISIGI) /= 3 ABS(ISIGI)/=4 ABS(ISIGI)/=5) THEN
445 N = NINT(SIGSH(1,II))
451 N = NINT(SIGSH(1,II))
462 IF (II == 0) GOTO 100
464 IF(SIGSH(NVSHELL + NUSHELL + 5,II) == ZERO) CYCLE
466 NPTI = NINT(SIGSH(NVSHELL + NUSHELL + 4,II))
467 IF(IGTYP == 9) NPTI = 1
468 IF (NLAY /= NPTI) THEN
471 CALL FRETITL2(TITR1,IGEO(NPROPGI-LTITR+1,IPID),LTITR)
473 CALL ANCMSG(MSGID=355,
474 . MSGTYPE=MSGWARNING,
475 . ANMODE=ANINFO_BLIND_1,
480 CALL ANCMSG(MSGID=26,
489 IPT = NVSHELL + NUSHELL
490 VX(I) = SIGSH(IPT+1,II)
491 VY(I) = SIGSH(IPT+2,II)
492 VZ(I) = SIGSH(IPT+3,II)
494 IF ( IGTYP == 9) THEN
495 PHI1(1,I) = SIGSH(IPT+1,II)
496 PHI2(1,I) = SIGSH(IPT+2,II)
500 PHI1(J,I) = SIGSH(IPT+1,II)
501 PHI2(J,I) = SIGSH(IPT+2,II)
510 IF (IORTSHEL == 2) THEN
513.AND..AND.
IF (ABS(ISIGI) /= 3 ABS(ISIGI) /= 4 ABS(ISIGI) /= 5) THEN
517 N = NINT(SIGSH(1,II))
523 N = NINT(SIGSH(1,II))
534 IF (II == 0) GOTO 110
536 IF(SIGSH(NVSHELL + NUSHELL + 5,II) == ZERO) CYCLE
537 NPTI = NINT(SIGSH(NVSHELL + NUSHELL + 4,II))
539 NPT = NINT(GEO(6,IX(NIX-1,I)))
540.AND..OR.
IF(IDRAPE > 0 (IGTYP == 51 IGTYP==52)) THEN
542.OR..OR..OR.
ELSEIF (IGTYP == 16 IGTYP == 17 IGTYP == 51 IGTYP == 52) THEN
545 IF (NPT /= NPTI) THEN
548 CALL FRETITL2(TITR1,IGEO(NPROPGI-LTITR+1,IPID),LTITR)
550 CALL ANCMSG(MSGID=355,
551 . MSGTYPE=MSGWARNING,
552 . ANMODE=ANINFO_BLIND_1,
557 CALL ANCMSG(MSGID=26,
566 IPT = NVSHELL + NUSHELL + 5
568 COOR1(1,I) = SIGSH(IPT+1,II)
569 COOR2(1,I) = SIGSH(IPT+2,II)
572.OR..OR..OR.
ELSEIF (IGTYP == 10 IGTYP == 11 IGTYP == 16
573.OR..OR.
. IGTYP == 17 IGTYP == 51 IGTYP == 52) THEN
575 ILAW_LY = ELBUF_STR%BUFLY(J)%ILAW
576.OR..AND.
IF (IGTYP == 16 (IGTYP == 51 ILAW_LY == 58)
577.OR..AND.
. (IGTYP == 52 ILAW_LY == 58) ) THEN
578 COOR1(J,I) = SIGSH(IPT+1,II)
579 COOR2(J,I) = SIGSH(IPT+2,II)
580 COOR3(J,I) = SIGSH(IPT+3,II)
581 COOR4(J,I) = SIGSH(IPT+4,II)
584 COOR1(J,I) = SIGSH(IPT+1,II)
585 COOR2(J,I) = SIGSH(IPT+2,II)
598 V(I) =VX(I)*E3X(I)+VY(I)*E3Y(I)+VZ(I)*E3Z(I)
599 VX(I)=VX(I)-V(I)*E3X(I)
600 VY(I)=VY(I)-V(I)*E3Y(I)
601 VZ(I)=VZ(I)-V(I)*E3Z(I)
602 V(I) =SQRT(VX(I)*VX(I)+VY(I)*VY(I)+VZ(I)*VZ(I))
606.AND..AND.
IF (V(I) < EM3 IORTHLOC(I) == 0
607 . DEF_ORTH(I) /= 0)THEN
610 CALL FRETITL2(TITR1,IGEO(NPROPGI-LTITR+1,PID),LTITR)
611 CALL ANCMSG(MSGID=197,
631 NE1 = SQRT(E11*E11+E12*E12+E13*E13)
633 BETAORTH(I) = (VX(I)*E11 + VY(I)*E12 +VZ(I)*E13 )/MAX(NE1,EM20)
subroutine corthini(jft, jlt, nft, nlay, numel, nsigsh, nix, ix, igeo, geo, skew, sigsh, ptsh, phi1, phi2, vx, vy, vz, coor1, coor2, coor3, coor4, iorthloc, isubstack, stack, irep, elbuf_str, drape, angle, x, geo_stack, e3x, e3y, e3z, betaorth, x1, x2, y1, y2, z1, z2, nel, g_add_node, add_node, npt_all, idrape, indx)