C DYNE24    SOURCE    CHAT      05/01/12    23:15:54     5004
      SUBROUTINE DYNE24(ITABL,ITLIA,KTRAV,II,NLS,NVAR)
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
*--------------------------------------------------------------------*
*                                                                    *
*     Operateur DYNE : algorithme de Fu - de Vogelaere               *
*     ________________________________________________               *
*                                                                    *
*     Dimensionne les variables NLS et NVAR, gestion des demandes de *
*     sorties pour les liaisons.                                     *
*                                                                    *
*     Parametres:                                                    *
*                                                                    *
* e   ITABL   Table definissant les liaisons en sortie.              *
* e   ITLIA   Table definissant toutes les liaisons sur une base.    *
* e   KTRAV   Segment de travail qui va remplir MTRES dans DYNE15    *
* es  II      Compteur                                               *
* s   NLS     Nombre de demandes de liaisons en sortie               *
* s   NVAR    Nombre maxi de variables internes de liaisons          *
*                                                                    *
*                                                                    *
*     Auteur, date de cr{ation:                                      *
*                                                                    *
*     Lionel VIVAN, le 2 octobre 1989.                               *
*                                                                    *
*--------------------------------------------------------------------*

-INC PPARAM
-INC CCOPTIO
*
      SEGMENT,MTRAV
         INTEGER ICHRE2(NBLS),MPOLA(NBLS),MNULA(NBLS)
         INTEGER MPOLB(NBLS),MNULB(NBLS)
         INTEGER IVLIAA(NBLS,NTVAR),INLIAA(NBLS,NTVAR)
         INTEGER IVLIAB(NBLS,NTVAR),INLIAB(NBLS,NTVAR)
      ENDSEGMENT
*
      LOGICAL L0,L1,LVAR
      CHARACTER*8  MONMOT,TYPRET,CHARRE
      CHARACTER*40 CMOT
*
      MTRAV = KTRAV
      NLS  = 0
      NVAR = 0
*
*     recherche des liaisons en sortie
*
      INDICE = 0
      IVAR   = 0
 100  CONTINUE
      INDICE = INDICE + 1
      TYPRET = ' '
      CALL ACCTAB(ITLIA,'ENTIER',INDICE,X0,' ',L0,IP0,
     &                  TYPRET,I1,X1,CHARRE,L1,ITTL)
      IF (TYPRET.EQ.'TABLE   ' .AND. ITTL.NE.0) THEN
         TYPRET = ' '
         CALL ACCTAB(ITABL,'TABLE',I0,X0,' ',L0,ITTL,
     &                     TYPRET,I1,X1,CHARRE,LVAR,ITVAR)
         IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR) THEN
            NLS = NLS + 1
            MNULA(NLS) = INDICE
            MPOLA(NLS) = ITTL
            CALL ACCTAB(ITTL,'MOT',I0,X0,'TYPE_LIAISON',L0,IP0,
     &                       'MOT',I1,X1,CMOT,L1,IP1)
            IF (CMOT(1:17).EQ.'POINT_PLAN_FLUIDE') THEN
               IVAR = 6
               NVAR = MAX(NVAR,IVAR)
               II = II + 1
               ICHRE2(II) = IVAR
               IVLIAA(NLS,1) = 1
               INLIAA(NLS,1) = 7
               IVLIAA(NLS,2) = 1
               INLIAA(NLS,2) = 8
               IVLIAA(NLS,3) = 1
               INLIAA(NLS,3) = 69
               IVLIAA(NLS,4) = 1
               INLIAA(NLS,4) = 70
               IVLIAA(NLS,5) = 1
               INLIAA(NLS,5) = 71
               IVLIAA(NLS,6) = 1
               INLIAA(NLS,6) = 72
*
            ELSE IF (CMOT(1:10).EQ.'POINT_PLAN') THEN
               MONMOT = ' '
               CALL ACCTAB(ITTL,'MOT',I0,X0,'AMORTISSEMENT',L0,IP0,
     &                          MONMOT,I1,XAMO,CHARRE,L1,IP1)
*
               IF (MONMOT.EQ.'FLOTTANT') THEN
                  IVAR = 3
                  IVLIAA(NLS,3) = 1
                  INLIAA(NLS,3) = 39
               ELSE
                  IVAR = 2
               ENDIF
               NVAR = MAX(NVAR,IVAR)
               II = II + 1
               ICHRE2(II) = IVAR
               IVLIAA(NLS,1) = 1
               INLIAA(NLS,1) = 15
               IVLIAA(NLS,4) = 1
               INLIAA(NLS,4) = 7
*
            ELSE IF (CMOT(1:16).EQ.'COUPLAGE_VITESSE') THEN
               IVAR = 3
               NVAR = MAX(NVAR,IVAR)
               II = II + 1
               ICHRE2(II) = IVAR
               IVLIAA(NLS,1) = 1
               INLIAA(NLS,1) = 73
               IVLIAA(NLS,3) = 1
               INLIAA(NLS,3) = 8
               IVLIAA(NLS,4) = 1
               INLIAA(NLS,4) = 7
*
            ELSE IF (CMOT(1:20).EQ.'COUPLAGE_DEPLACEMENT') THEN
               IVAR = 2
               NVAR = MAX(NVAR,IVAR)
               II = II + 1
               ICHRE2(II) = IVAR
               IVLIAA(NLS,1) = 1
               INLIAA(NLS,1) = 74
               IVLIAA(NLS,4) = 1
               INLIAA(NLS,4) = 7
*
            ELSE IF (CMOT(1:11).EQ.'POLYNOMIALE') THEN
               IVAR = 1
               NVAR = MAX(NVAR,IVAR)
               II = II + 1
               ICHRE2(II) = IVAR
               IVLIAA(NLS,1) = 1
               INLIAA(NLS,1) = 77
*
            ELSE
               CALL ERREUR(490)
               RETURN
            ENDIF
*
         ELSE IF (TYPRET.EQ.'TABLE   ' .AND. ITVAR.NE.0) THEN
            NLS = NLS + 1
            MNULA(NLS) = INDICE
            MPOLA(NLS) = ITTL
            CALL ACCTAB(ITTL,'MOT',I0,X0,'TYPE_LIAISON',L0,IP0,
     &                       'MOT',I1,X1,CMOT,L1,IT1)
            IVAR = 0
*
            IF (CMOT(1:17).EQ.'POINT_PLAN_FLUIDE') THEN
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'DEPLACEMENT',L0,IP0,
     &                           TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,1) = 1
                  INLIAA(NLS,1) = 7
               ENDIF
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'VITESSE',L0,IP0,
     &                           TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,2) = 1
                  INLIAA(NLS,2) = 8
               ENDIF
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'MASSE_AJOUTEE',L0,IP0,
     &                           TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,3) = 1
                  INLIAA(NLS,3) = 69
               ENDIF
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'FORCE_CONVECTION',L0,IP0,
     &                           TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,4) = 1
                  INLIAA(NLS,4) = 70
               ENDIF
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'FORCE_VISCOSITE',L0,IP0,
     &                           TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,5) = 1
                  INLIAA(NLS,5) = 71
               ENDIF
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'FORCE_PERTE_DE_CHARGE',
     &                           L0,IP0,TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,6) = 1
                  INLIAA(NLS,6) = 72
               ENDIF
               IF (IVAR.EQ.0) THEN
                  CALL ERREUR(496)
                  RETURN
               ENDIF
*
            ELSE IF (CMOT(1:10).EQ.'POINT_PLAN') THEN
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'DEPLACEMENT',L0,IP0,
     &                           TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,4) = 1
                  INLIAA(NLS,4) = 7
               ENDIF
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'VITESSE_NORMALE',L0,IP0,
     &                           TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,3) = 1
                  INLIAA(NLS,3) = 39
               ENDIF
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'FORCE_DE_CHOC',L0,IP0,
     &                           TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,1) = 1
                  INLIAA(NLS,1) = 15
               ENDIF
               IF (IVAR.EQ.0) THEN
                  CALL ERREUR(496)
                  RETURN
               ENDIF
*
            ELSE IF (CMOT(1:16).EQ.'COUPLAGE_VITESSE') THEN
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'DEPLACEMENT',L0,IP0,
     &                           TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,4) = 1
                  INLIAA(NLS,4) = 7
               ENDIF
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'VITESSE',L0,IP0,
     &                           TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,3) = 1
                  INLIAA(NLS,3) = 8
               ENDIF
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,
     &                     'FORCE_DE_COUPLAGE_VITESSE',L0,IP0,
     &                     TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,1) = 1
                  INLIAA(NLS,1) = 73
               ENDIF
               IF (IVAR.EQ.0) THEN
                  CALL ERREUR(496)
                  RETURN
               ENDIF
*
            ELSE IF (CMOT(1:20).EQ.'COUPLAGE_DEPLACEMENT') THEN
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'DEPLACEMENT',L0,IP0,
     &                           TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,4) = 1
                  INLIAA(NLS,4) = 7
               ENDIF
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,
     &                     'FORCE_DE_COUPLAGE_DEPLACEMENT',L0,IP0,
     &                     TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE ' .AND. LVAR ) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,1) = 1
                  INLIAA(NLS,1) = 74
               ENDIF
               IF (IVAR.EQ.0) THEN
                  CALL ERREUR(496)
                  RETURN
               ENDIF
*
            ELSE IF (CMOT(1:11).EQ.'POLYNOMIALE') THEN
               TYPRET = ' '
               CALL ACCTAB(ITVAR,'MOT',I0,X0,'FORCE_POLYNOMIALE',
     &                     L0,IP0,TYPRET,I1,X1,CHARRE,LVAR,IT1)
               IF (TYPRET.EQ.'LOGIQUE '.AND.LVAR) THEN
                  IVAR = IVAR + 1
                  IVLIAA(NLS,1) = 1
                  INLIAA(NLS,1) = 77
               ENDIF
*
            ELSE
               CALL ERREUR(490)
               RETURN
            ENDIF
            NVAR = MAX(NVAR,IVAR)
            II = II + 1
            ICHRE2(II) = IVAR
            IF (IIMPI.EQ.333) THEN
               WRITE(IOIMP,*)'DYNE24 : ICHRE2(',II,')=',IVAR
            ENDIF
         ENDIF
         GOTO 100
      ENDIF
      IF (IIMPI.EQ.333) THEN
      WRITE(IOIMP,*) 'DYNE24 : NVAR = ',NVAR
      WRITE(IOIMP,*) 'DYNE24 : NLS  = ',NLS
      WRITE(IOIMP,*) 'DYNE24 : IVAR = ',IVAR
      ENDIF
*
      END



