C NORFAC SOURCE CHAT 05/01/13 01:59:53 5004 SUBROUTINE NORFAC(VN,IPA,IPO,IPB) * APPELE PAR ARETE1 * CALCULE UNE NORMALE AU PLAN DEFINI PAR LES POINTS * IPA,IPO,IPB . ORIENTE CETTE NORMALE SELON X POSITIF * *-------------------------------------------------------------------- * AUTEUR : J.BRUN (JUIN 90) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Y) IMPLICIT LOGICAL (Z) -INC SMELEME -INC PPARAM -INC CCOPTIO -INC SMCOORD REAL*8 VN(3),OA(3),OB(3) *--------------------------------------------------------------------- * * CREE et NORME LES DEUX VECTEURS OA ET OB * *--------------------------------------------------------------------- IA=(IPA-1)*(IDIM+1) IB=(IPB-1)*(IDIM+1) IO=(IPO-1)*(IDIM+1) OA(1)=XCOOR(IA+1)-XCOOR(IO+1) OA(2)=XCOOR(IA+2)-XCOOR(IO+2) OA(3)=XCOOR(IA+3)-XCOOR(IO+3) AINVN=1./SQRT( OA(1)**2 + OA(2)**2 + OA(3)**2) OA(1)=OA(1)*AINVN OA(2)=OA(2)*AINVN OA(3)=OA(3)*AINVN OB(1)=XCOOR(IB+1)-XCOOR(IO+1) OB(2)=XCOOR(IB+2)-XCOOR(IO+2) OB(3)=XCOOR(IB+3)-XCOOR(IO+3) BINVN=1./SQRT( OB(1)**2 + OB(2)**2 + OB(3)**2) OB(1)=OB(1)*BINVN OB(2)=OB(2)*BINVN OB(3)=OB(3)*BINVN *--------------------------------------------------------------------- * * CALCUL DE LA NORMALE * *--------------------------------------------------------------------- VN(1)=OA(2)*OB(3)-OB(2)*OA(3) VN(2)=OA(3)*OB(1)-OB(3)*OA(1) VN(3)=OA(1)*OB(2)-OB(1)*OA(2) ANORME=SQRT( VN(1)**2 + VN(2)**2 + VN(3)**2) IF (ANORME .GT. 1D-6) THEN IF (VN(1).LT.0D0) THEN VN(1)=-VN(1) VN(2)=-VN(2) VN(3)=-VN(3) ENDIF VN(1)=VN(1)/ANORME VN(2)=VN(2)/ANORME VN(3)=VN(3)/ANORME ENDIF END