joifrm
C JOIFRM SOURCE CB215821 19/03/20 21:15:07 10165 C----------------------------------------------------------------------- C ROUTINE DE REMISE A JOUR DES VECTEURS DEFINISSANT LE REPERE LOCAL C POUR UN ELEMENT JOI1 C----------------------------------------------------------------------- C ENTREE C IWRK POINTEUR SUR SEGMENT DE TRAVAIL C IL CONTIENT NOTAMMENT LES DEPLACEMENTS ET ROTATIONS C DES NOEUDS DU JOINT C R LES 2 VECTEURS DEFINISSANT LE REPERE DU JOINT C IDIM DIMENSION DE L'ESPACE C SORTIE C KERRE INDICE D'ERREUR ( 0 SI TOUT EST OK ) C ( 1 SI JOINT DE TAILLE NULLE ) C C----------------------------------------------------------------------- C C La position initiale du joint est donnee par ses deux noeuds A et B C C La position deformee du joint A'B' est deduite de IWRK (grace a la C table XDDL) qui contient les deplacements et les rotations de A et B C C Le repere du joint subit deux rotations : C - celle due aux deplacements (UX, UY, UZ) des noeuds qui amenent le C segment AB dans la position deplacee A'B' C - en dimension 3 seulement, celle due aux rotations (RX, RY, RZ) des C noeuds, seule la rotation autour de l'axe AB est appliquee C C C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) DIMENSION R(6),R1(3),P(3,3),VAB(3),VABN(3),VAB1(3),W(3) PARAMETER (TOL1=1D-13) C KERRE=0 C C -------------------------------------------------------- C ETAPE 0 : Verification sur la position initiale du joint C -------------------------------------------------------- C C Vecteur AB (position initiale du joint) DO I=1,IDIM VAB(I) = XE(I,2) - XE(I,1) ENDDO DAB = 0D0 DO I=1,IDIM DAB = DAB + (VAB(I)*VAB(I)) ENDDO DAB = SQRT(DAB) C Si les noeuds A et B sont initialement confondus, les matrices de C rotation ne sont pas definies --> on sort avec KERRE=1 IF (DAB.LT.TOL1) THEN KERRE=1 GOTO 2 ENDIF C Vecteur AB norme DO I=1,IDIM VABN(I) = VAB(I) / DAB ENDDO C C ----------------------------------------------------------------- C ETAPE 1 : ROTATION du repere due aux ddl de rotation (RX, RY, RZ) C en 3D seulement C ----------------------------------------------------------------- C IF (IDIM.EQ.3) THEN C Vecteur de rotation unitaire (c'est l'axe AB) DO I=1,IDIM W(I) = VABN(I) ENDDO C Angles de rotation moyens du joint autour des directions X, Y et Z AX = 0.5 * (XDDL(4) + XDDL(10)) AY = 0.5 * (XDDL(5) + XDDL(11)) AZ = 0.5 * (XDDL(6) + XDDL(12)) C Angle de rotation moyen autour de l'axe AB A = (VABN(1)*AX) + (VABN(2)*AY) + (VABN(3)*AZ) CA = COS(A) SA = SIN(A) C Si l'angle de rotation est nul, pas de matrice de rotation a calculer IF (ABS(A).LT.TOL1) GOTO 1 C Matrice de rotation associee (d'axe W et d'angle A) P(1,1) = CA + ((1D0-CA)*(W(1)*W(1))) + (SA*0D0) P(1,2) = 0D0 + ((1D0-CA)*(W(1)*W(2))) + (SA*(-1D0*W(3))) P(1,3) = 0D0 + ((1D0-CA)*(W(1)*W(3))) + (SA*( 1D0*W(2))) P(2,1) = 0D0 + ((1D0-CA)*(W(1)*W(2))) + (SA*( 1D0*W(3))) P(2,2) = CA + ((1D0-CA)*(W(2)*W(2))) + (SA*0D0) P(2,3) = 0D0 + ((1D0-CA)*(W(2)*W(3))) + (SA*(-1D0*W(1))) P(3,1) = 0D0 + ((1D0-CA)*(W(1)*W(3))) + (SA*(-1D0*W(2))) P(3,2) = 0D0 + ((1D0-CA)*(W(2)*W(3))) + (SA*( 1D0*W(1))) P(3,3) = CA + ((1D0-CA)*(W(3)*W(3))) + (SA*0D0) C Rotation du 1er vecteur de R puis normalisation R1(1) = (P(1,1)*R(1)) + (P(1,2)*R(2)) + (P(1,3)*R(3)) R1(2) = (P(2,1)*R(1)) + (P(2,2)*R(2)) + (P(2,3)*R(3)) R1(3) = (P(3,1)*R(1)) + (P(3,2)*R(2)) + (P(3,3)*R(3)) R(1) = R1(1) R(2) = R1(2) R(3) = R1(3) DR = SQRT((R(1)*R(1))+(R(2)*R(2))+(R(3)*R(3))) R(1) = R(1) / DR R(2) = R(2) / DR R(3) = R(3) / DR C Rotation du 2eme vecteur de R puis normalisation R1(1) = (P(1,1)*R(4)) + (P(1,2)*R(5)) + (P(1,3)*R(6)) R1(2) = (P(2,1)*R(4)) + (P(2,2)*R(5)) + (P(2,3)*R(6)) R1(3) = (P(3,1)*R(4)) + (P(3,2)*R(5)) + (P(3,3)*R(6)) R(4) = R1(1) R(5) = R1(2) R(6) = R1(3) DR = SQRT((R(4)*R(4))+(R(5)*R(5))+(R(6)*R(6))) R(4) = R(4) / DR R(5) = R(5) / DR R(6) = R(6) / DR 1 CONTINUE ENDIF C C C -------------------------------------------------------------------- C ETAPE 2 : ROTATION du repere due aux ddl de deplacement (UX, UY, UZ) C -------------------------------------------------------------------- C C Vecteur A'B' (position deformee du joint) IF (IDIM.EQ.2) THEN VAB1(1) = VAB(1) + XDDL(4) - XDDL(1) VAB1(2) = VAB(2) + XDDL(5) - XDDL(2) ENDIF IF (IDIM.EQ.3) THEN VAB1(1) = VAB(1) + XDDL(7) - XDDL(1) VAB1(2) = VAB(2) + XDDL(8) - XDDL(2) VAB1(3) = VAB(3) + XDDL(9) - XDDL(3) ENDIF DAB1 = 0D0 DO I=1,IDIM DAB1 = DAB1 + (VAB1(I)*VAB1(I)) ENDDO DAB1 = SQRT(DAB1) C Si les noeuds A' et B' sont confondus, la matrice de rotation n'est C pas definie --> on sort avec KERRE=1 IF (DAB1.LT.TOL1) THEN KERRE=1 GOTO 2 ENDIF C Vecteur rotation unitaire (W = AB ^ A'B') C En dimension 2, c'est l'axe Z, mais on tient compte du signe IF (IDIM.EQ.2) THEN SIG = SIGN (1D0,((VAB(1)*VAB1(2)) - (VAB(2)*VAB1(1)))) ENDIF IF (IDIM.EQ.3) THEN W(1) = (VAB(2)*VAB1(3)) - (VAB(3)*VAB1(2)) W(2) = (VAB(3)*VAB1(1)) - (VAB(1)*VAB1(3)) W(3) = (VAB(1)*VAB1(2)) - (VAB(2)*VAB1(1)) DW = SQRT((W(1)*W(1))+(W(2)*W(2))+(W(3)*W(3))) IF (DW.GT.TOL1) THEN W(1) = W(1) / DW W(2) = W(2) / DW W(3) = W(3) / DW ENDIF ENDIF C Angle de rotation autour de W ( AB . A'B' = |AB| . |A'B'| . cos a ) PS = 0D0 DO I=1,IDIM PS = PS + (VAB(I)*VAB1(I)) ENDDO CA = PS / (DAB*DAB1) IF (CA.GT.1D0) THEN CA = 1D0 ENDIF IF (CA.LT.-1D0) THEN CA = -1D0 ENDIF A = ACOS(CA) IF (IDIM.EQ.2) THEN A = SIG * A CA = COS(A) ENDIF SA = SIN(A) C Si l'angle de rotation est nul, pas de rotation IF (ABS(A).LT.TOL1) GOTO 2 C Matrice de rotation associee (d'axe W et d'angle A) IF (IDIM.EQ.2) THEN P(1,1) = CA P(1,2) = (-1D0) * SA P(2,1) = SA P(2,2) = CA ENDIF IF (IDIM.EQ.3) THEN P(1,1) = CA + ((1D0-CA)*(W(1)*W(1))) + (SA*0D0) P(1,2) = 0D0 + ((1D0-CA)*(W(1)*W(2))) + (SA*(-1D0*W(3))) P(1,3) = 0D0 + ((1D0-CA)*(W(1)*W(3))) + (SA*( 1D0*W(2))) P(2,1) = 0D0 + ((1D0-CA)*(W(1)*W(2))) + (SA*( 1D0*W(3))) P(2,2) = CA + ((1D0-CA)*(W(2)*W(2))) + (SA*0D0) P(2,3) = 0D0 + ((1D0-CA)*(W(2)*W(3))) + (SA*(-1D0*W(1))) P(3,1) = 0D0 + ((1D0-CA)*(W(1)*W(3))) + (SA*(-1D0*W(2))) P(3,2) = 0D0 + ((1D0-CA)*(W(2)*W(3))) + (SA*( 1D0*W(1))) P(3,3) = CA + ((1D0-CA)*(W(3)*W(3))) + (SA*0D0) ENDIF C Rotation du 1er vecteur de R puis normalisation DO I=1,IDIM R1(I) = 0.D0 DO J=1,IDIM R1(I) = R1(I) + (P(I,J)*R(J)) ENDDO ENDDO DO I=1,IDIM R(I) = R1(I) ENDDO DR = 0.D0 DO I=1,IDIM DR = DR + R(I)**2 ENDDO DR = SQRT(DR) DO I=1,IDIM R(I) = R(I) / DR ENDDO IF (IDIM.EQ.3) THEN C Rotation du 2eme vecteur de R puis normalisation DO I=1,IDIM R1(I) = 0.D0 DO J=1,IDIM R1(I) = R1(I) + (P(I,J)*R(J+3)) ENDDO ENDDO DO I=1,IDIM R(I+3) = R1(I) ENDDO DR = 0.D0 DO I=1,IDIM DR = DR + (R(I+3)*R(I+3)) ENDDO DR = SQRT(DR) DO I=1,IDIM R(I+3) = R(I+3) / DR ENDDO ENDIF C 2 CONTINUE END
© Cast3M 2003 - Tous droits réservés.
Mentions légales