C CALJQB    SOURCE    CHAT      05/01/12    21:46:53     5004
      SUBROUTINE CALJQB(XYZ,P,IES,NP)
C***********************************************************************
C   CE SP CALCULE
C       LA MATRICE DE ROTATION DU REPERE GLOBALE VERS LE REPERE LOCAL
C   DEFINI PAR DEUX OU TROIS POINTS PRIS DANS XYZ SUIVANT QU'ON EST
C   EN 2D OU EN 3D
C   ON PREND P1 P2 ET PNP
C
C     U                TEL QUE T SOIT DIRIGE SUIVANT P1P2 V TOURNE VERS
C     .     .V          P1PNP ET U = T VECTORIEL V
C     .   .
C     . .                             __       __
C (P1). . . . .T (P2)                | tx ty tz  |
C                                    |           |
C  ON A ALORS WL= P WG          P  = | vx vy vz  |
C                                    |           |
C                                    | ux uy uz  |
C                                    |__       __|
C***********************************************************************
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)

      REAL*8 XYZ(IES,NP),P(IES,IES)

C***

      IF(IES.EQ.2)GO TO 200

      TX=XYZ(1,2)-XYZ(1,1)
      TY=XYZ(2,2)-XYZ(2,1)
      TZ=XYZ(3,2)-XYZ(3,1)
      TT=TX*TX+TY*TY+TZ*TZ
      TT=1.D0/SQRT(TT)
      TX=TX*TT
      TY=TY*TT
      TZ=TZ*TT
C     WRITE(6,*)'TX= TY= TZ= TT=',TX,TY,TZ,TT
      UX=(XYZ(2,NP)-XYZ(2,1))*TZ-(XYZ(3,NP)-XYZ(3,1))*TY
      UY=(XYZ(3,NP)-XYZ(3,1))*TX-(XYZ(1,NP)-XYZ(1,1))*TZ
      UZ=(XYZ(1,NP)-XYZ(1,1))*TY-(XYZ(2,NP)-XYZ(2,1))*TX
      UU=UX*UX+UY*UY+UZ*UZ
      UU=1.D0/SQRT(UU)
      UX=-UX*UU
      UY=-UY*UU
      UZ=-UZ*UU
C     WRITE(6,*)'UX,UY,UZ,UU',UX,UY,UZ,UU
      VX=+UY*TZ-UZ*TY
      VY=+UZ*TX-UX*TZ
      VZ=+UX*TY-UY*TX
C     WRITE(6,*)'VX= VY= VZ=',VX,VY,VZ
      P(1,1)=TX
      P(1,2)=TY
      P(1,3)=TZ
      P(2,1)=VX
      P(2,2)=VY
      P(2,3)=VZ
      P(3,1)=UX
      P(3,2)=UY
      P(3,3)=UZ
C
      RETURN

 200  CONTINUE

      TX=XYZ(1,2)-XYZ(1,1)
      TY=XYZ(2,2)-XYZ(2,1)
      TT=TX*TX+TY*TY
      TT=SQRT(TT)
      TX=TX/TT
      TY=TY/TT

      VX=-TY
      VY= TX

      P(1,1)=TX
      P(1,2)=TY
      P(2,1)=VX
      P(2,2)=VY

      RETURN
      END

