C POUREA    SOURCE    PV090527  24/04/04    21:15:24     11875          
      SUBROUTINE POUREA(XX,YY,ZZ,XDDL,WORK,P,VECT,KERRE)
C-----------------------------------------------------------------------
C  ROUTINE DE REACTUALISATION DU VECTEUR VECT
C-----------------------------------------------------------------------
C  ENTREE
C         XX,YY,ZZ  LES COORDONNEES DES 2 NOEUDS
C         XDDL      LES DEPLACEMENTS EN AXES GLOBAUX
C         WORK      TABLEAU DE TRAVAIL
C         P         MATRICE DE PASSAGE
C
C  SORTIE
C         VECT      NOUVEAU VECTEUR
C         KERRE     INDICE D'ERREUR  (  0 SI TOUT EST OK )
C
C-----------------------------------------------------------------------
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
      DIMENSION WORK(*),P(3,*),VECT(*),VN(3),VNP(3),XDDL(*)
      DIMENSION OMEG(3),PP(3,3),XX(*),YY(*),ZZ(*)
-INC CCREEL

C     Initialisation à ZERO sinon SIGSEV parfois car utilisation de termes non initialises
      CALL ZERO(PP,3,3)
C
C  CALCUL DE VNP
C
      VNP(1)=XX(2)+XDDL(7)-XX(1)-XDDL(1)
      VNP(2)=YY(2)+XDDL(8)-YY(1)-XDDL(2)
      VNP(3)=ZZ(2)+XDDL(9)-ZZ(1)-XDDL(3)
      RLVNP=SQRT(VNP(1)*VNP(1)+VNP(2)*VNP(2)+VNP(3)*VNP(3))+XPETIT
      IF(RLVNP.LT.2*XPETIT) THEN
      KERRE=1
      RETURN
      ENDIF
      DO 1 I=1,3
      VNP(I)=VNP(I)/RLVNP
      OMEG(I)=VNP(I)
   1  continue           
C
C  CALCUL DE LA MATRICE DE PASSAGE
C
      CALL POUPAS(XX,YY,ZZ,OMEG,PP,KERRE)
      IOMEG=KERRE
      KERRE=0
C
C  PASSAGE DES DEPLACEMENTS EN AXES LOCAUX - ROTATION PSI
C
      CALL POUVEC(XDDL,WORK,P,1)
      PSI=(WORK(4)+WORK(10))*0.5D0
      C2=PP(1,1)*VNP(1)+PP(1,2)*VNP(2)+PP(1,3)*VNP(3)
      S2=PP(2,1)*VNP(1)+PP(2,2)*VNP(2)+PP(2,3)*VNP(3)
      C3=COS(PSI)
      S3=SIN(PSI)
C
C  REACTUALISATION DU VECTEUR
C
      IF(IOMEG.EQ.0) THEN
      DO   I=1,3
      VN(I)=0.D0
      DO   J=1,3
      VN(I)=VN(I)+PP(I,J)*VECT(J)
      enddo
      enddo
      OMEG(1)=C2*VN(1)-S2*C3*VN(2)+S2*S3*VN(3)
      OMEG(2)=S2*VN(1)+C2*C3*VN(2)-C2*S3*VN(3)
      OMEG(3)=S3*VN(2)+C3*VN(3)
      DO   I=1,3
      VECT(I)=0.D0
      DO   J=1,3
      VECT(I)=VECT(I)+PP(J,I)*OMEG(J)
      enddo
      enddo
      ELSE
      VN(1)=0.D0
      VN(2)=C3
      VN(3)=S3
      DO   I=1,3
      VECT(I)=0.D0
      DO   J=1,3
      VECT(I)=VECT(I)+P(J,I)*VN(J)
      enddo
      enddo
      ENDIF
      END
 
 
 
