C PRIDUA    SOURCE    CB215821  20/11/25    13:36:46     10792          
      SUBROUTINE PRIDUA(ICHP1,ICOD1,IPOS1)
************************************************************************
* NOM         : PRIDUA
* DESCRIPTION : Indique si un champ est primal ou dual
************************************************************************
* APPELE PAR : pjblch.eso
************************************************************************
* ENTREES : ICHP1 = pointeur vers le CHPOINT
* SORTIES : ICOD1 = 0 si le CHPOINT est vide ou si toutes les
*                     composantes sont a la fois primales et duales
*                     (i.e. elles sont dans NOMDD et aussi dans NOMDU)
*                 = 1 s'il n'y a que des primales
*                 = 2 s'il n'y a que des duales
*                 = -1 s'il y a a la fois des primales et des duales
*           IPOS1 contient la position dans NOMDD si ICOD1 vaut 0 ou 1,
*                 dans NOMDU si ICOD1 vaut 0 ou 2
*                 (vaut 0 si ICOD1 vaut -1)
************************************************************************

      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)

-INC PPARAM
-INC CCOPTIO
-INC SMCHPOI
-INC SMLENTI
-INC CCHAMP

      CHARACTER*(LOCOMP) MOCOMP
*
      ICOTY1=0
*
      JG=LNOMDD
      SEGINI,MLENTI
      JG=0
*
      MCHPO1=ICHP1
      SEGACT,MCHPO1
*
      NSOUP1=MCHPO1.IPCHP(/1)
      DO J1=1,NSOUP1
         MSOUP1=MCHPO1.IPCHP(J1)
         SEGACT,MSOUP1
*
         NCO1=MSOUP1.NOCOMP(/2)
         DO 10 K1=1,NCO1
*
*           ON CHERCHE LA COMPOSANTE DANS NOMDD ET AUSSI DANS NOMDU
*           (EN MECANIQUE DES FLUIDES, LE MEME NOM EST PARFOIS DONNE
*            A LA PRIMALE ET A LA DUALE)
            MOCOMP=MSOUP1.NOCOMP(K1)
            ICO1=0
            DO IDD=1,LNOMDD
               IF (MOCOMP.EQ.NOMDD(IDD)) THEN
                  ICO1=1
                  IPO1=IDD
                  GOTO 20
               ENDIF
            ENDDO
 20         CONTINUE
            DO IDU=1,LNOMDU
               IF (MOCOMP.EQ.NOMDU(IDU)) THEN
                  ICO1=ICO1+2
                  IPO1=IDU
                  GOTO 30
               ENDIF
            ENDDO
 30         CONTINUE
*
*           => LA COMPOSANTE N'EXISTE PAS DANS CCHAMP
            IF (ICO1.EQ.0) THEN
               MOTERR=MOCOMP
               CALL ERREUR(108)
               RETURN
*
*           => LA COMPOSANTE EST DANS LES DEUX LISTES
            ELSEIF (ICO1.EQ.3) THEN
               GOTO 11
            ENDIF
*
            IF (ICOTY1.EQ.0) ICOTY1=ICO1
            IF (ICOTY1.NE.ICO1) THEN
               ICOD1=-1
               IPOS1=0
               RETURN
            ENDIF
*
*           Incrementation de MLENTI
 11         CONTINUE
            DO L1=1,JG
               IF (IPO1.EQ.LECT(L1)) GOTO 10
            ENDDO
            JG=JG+1
            LECT(JG)=IPO1
*
 10      CONTINUE
      ENDDO
*
      ICOD1=ICOTY1
      IPOS1=MLENTI
      SEGADJ,MLENTI
      SEGDES,MLENTI
*
      RETURN
*
      END
*
*
 
