C DYNE30    SOURCE    CHAT      05/01/12    23:17:07     5004
      SUBROUTINE DYNE30(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               *
*     ________________________________________________               *
*                                                                    *
*     Position initiale du profil mobile par rapport au 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 ( ZERO = 0.D0 )
*
      ID2 = ID1 + IDIM
      ID3 = ID1 + 2*IDIM
      ID4 = ID1 + 3*IDIM
      ID7 = ID1 + 5*IDIM + IDIM*NOMBN1
      ID8 = ID7 + IDIM*NOMBN2
      NUM1 = ID7
      IEL2 = IP1 + NOMBN1
      DO 10 IN = 1,NOMBN2
*        calcul des coordonn{es dans le plan d{fini par les profils
         X1 = ZERO
         Y1 = ZERO
         DO 12 ID = 1,IDIM
            XX = XPALB(I,NUM1+ID) - XPALB(I,ID2+ID)
            X1 = X1 + ( XX * XPALB(I,ID3+ID) )
            Y1 = Y1 + ( XX * XPALB(I,ID4+ID) )
 12         CONTINUE
*        end do
         NUM2 = ID8
         DO 14 IE = 1,NOMBN1
            ITYP = IPALB(I,IP1+IE)
            XAIJ = XPALB(I,NUM2+1)
            XBIJ = XPALB(I,NUM2+2)
            IF (ITYP.EQ.1) THEN
*   La droite est verticale
               IF (X1.GT.XAIJ) THEN
                  IPALB(I,IEL2+IE) = 1
               ELSE IF (X1.LT.XAIJ) THEN
                  IPALB(I,IEL2+IE) = -1
               ELSE
                  IPALB(I,IEL2+IE) = 0
               ENDIF
            ELSE IF (ITYP.EQ.2) THEN
*   La droite est horizontale
               IF (Y1.GT.XBIJ) THEN
                  IPALB(I,IEL2+IE) = 1
               ELSE IF (Y1.LT.XBIJ) THEN
                  IPALB(I,IEL2+IE) = -1
               ELSE
                  IPALB(I,IEL2+IE) = 0
               ENDIF
            ELSE
*   La droite est quelconque
               RES = ( XAIJ * X1 ) + XBIJ
               IF (Y1.GT.RES) THEN
                  IPALB(I,IEL2+IE) = 1
               ELSE IF (Y1.LT.RES) THEN
                  IPALB(I,IEL2+IE) = -1
               ELSE
                  IPALB(I,IEL2+IE) = 0
               ENDIF
            ENDIF
            NUM2 = NUM2 + 2
 14         CONTINUE
*        end do
         IEL2 = IEL2 + NOMBN1
         NUM1 = NUM1 + IDIM
 10      CONTINUE
*     end do
*
      END

