C DYNE29    SOURCE    CHAT      05/01/12    23:16:54     5004
      SUBROUTINE DYNE29(IPALB,XPALB,NLIAB,NOMBN1,NOMBN2,I,ID1,IP1)
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
*--------------------------------------------------------------------*
*                                                                    *
*     Op{rateur DYNE : algorithme de Fu - de Vogelaere               *
*     ________________________________________________               *
*                                                                    *
*     Coefficient des droites form{es par les {l{ments du profil     *
*     fixe.                                                          *
*                                                                    *
*     Param}tres:                                                    *
*                                                                    *
* es  IPALB   tableau de description des liaisons sur base B         *
* es  XPALB   tableau de description des liaisons sur base B         *
* e   NLIAB   nombre total de liaisons sur base B                    *
* e   NOMBN1  nombre de points du profil fixe                        *
* e   NOMBN2  nombre de points du profil mobile                      *
* e   I       num{ro de liaison trait{e                              *
* e   ID1     indice de tableau pour XPALB                           *
* e   IP1     indice de tableau pour IPALB                           *
*                                                                    *
*                                                                    *
*     Auteur, date de cr{ation:                                      *
*                                                                    *
*     Lionel VIVAN, le 1 f{vrier 1991.                               *
*                                                                    *
*--------------------------------------------------------------------*

-INC PPARAM
-INC CCOPTIO
*
      INTEGER IPALB(NLIAB,*)
      REAL*8 XPALB(NLIAB,*)
      PARAMETER ( PRECIS = 1.D-15 , ZERO = 0.D0 )
*
      ID2 = ID1 + IDIM
      ID3 = ID1 + 2*IDIM
      ID4 = ID1 + 3*IDIM
      ID6 = ID1 + 5*IDIM
      ID8 = ID1 + 5*IDIM + IDIM*NOMBN1 + IDIM*NOMBN2
      NUM1 = ID6
      NUM2 = ID6 + IDIM
      DO 10 IE = 1,NOMBN1
         IF (IE.EQ.NOMBN1) THEN
            NUM2 = ID6
         ENDIF
*        calcul des coordonn{es dans le plan d{fini par les profils
         X1 = ZERO
         Y1 = ZERO
         X2 = ZERO
         Y2 = ZERO
         DO 12 ID = 1,IDIM
            XX = XPALB(I,NUM1+ID) - XPALB(I,ID2+ID)
            YY = XPALB(I,NUM2+ID) - XPALB(I,ID2+ID)
            X1 = X1 + ( XX * XPALB(I,ID3+ID) )
            Y1 = Y1 + ( XX * XPALB(I,ID4+ID) )
            X2 = X2 + ( YY * XPALB(I,ID3+ID) )
            Y2 = Y2 + ( YY * XPALB(I,ID4+ID) )
 12         CONTINUE
*        end do
         XXX = X2 - X1
         YYY = Y2 - Y1
         IF (ABS(XXX).LT.PRECIS) THEN
*           la droite est verticale
            IPALB(I,IP1+IE) = 1
            XPALB(I,ID8+1) = X1
            XPALB(I,ID8+2) = ZERO
         ELSE IF (ABS(YYY).LT.PRECIS) THEN
*           la droite est horizontale
            IPALB(I,IP1+IE) = 2
            XPALB(I,ID8+1) = ZERO
            XPALB(I,ID8+2) = Y1
         ELSE
*           la droite est quelconque
            IPALB(I,IP1+IE) = 3
            XPALB(I,ID8+1) = YYY / XXX
            XPALB(I,ID8+2) = ( X2*Y1 - X1*Y2 ) / XXX
         ENDIF
         NUM1 = NUM2
         NUM2 = NUM2 + IDIM
         ID8 = ID8 + 2
 10      CONTINUE
*     end do
*
      END

