C DIVU1     SOURCE    FANDEUR   22/01/03    21:15:12     11136          
      SUBROUTINE DIVU1(IRE1,IRE2,IRE3,IRE4,IRE5,IRET)
C-----------------------------------------------------------------------
C Calcul la divergence à partir des FLUX.
C Le CHAMPOINT résultat est de support CENTRE.
C-----------------------------------------------------------------------
C
C---------------------------
C Parametres Entree/Sortie :
C---------------------------
C
C E/  IRE1    : Champoint de type FLUX
C E/  IRE2    : Mchaml des orientation de normale (1=out,-1=in)
C E/  IRE3    : MELEME des points FACE
C E/  IRE4    : MELEME des points CENTRE
C E/  IRE5    : CHPOIN des points CENTRE
C  /S IRET    : Champoint resultat de composante SCAL
C
C----------------------
C Tableaux de travail :
C----------------------
C
C  ICPR(I)=J : Le noeud I a le numero J dans le MELEME des faces
C              Correspondance numerotation globale/locale
C  INUI(I)=J : Le Ieme noeud local est le Jeme global
C                Correspondance numerotation locale/globale
C  NNGOT     : Nombre de noeuds total du domaine
C
C----------------------
C Variables en COMMON :
C----------------------
C
C  IFOUR : cf CCOPTIO.INC
C
C-----------------------------------------------------------------------
C
C Langage : ESOPE + FORTRAN77
C
C Auteurs : F.DABBENE 01/94
C Complements : C. LE POTIER ET F. AURIOL 20/00
C
C-----------------------------------------------------------------------
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
*

-INC PPARAM
-INC CCOPTIO
-INC SMELEME
-INC SMCHPOI
-INC SMCHAML
-INC SMCOORD
*
      SEGMENT ICCPR
         INTEGER ICPR(NNGOT) , INUI(NNGOT)
      ENDSEGMENT
C
C= INITIALISATIONS
C
      MCHPOI = IRE1
      MCHELM = IRE2
      IPT1   = IRE3
      IPT2   = IRE4
C
C= Initialisations à partir de la rigidité
C
      NNGOT  = nbpts
      SEGINI ICCPR
      IRET   = 0
*
*= Creation des tableaux ICPR et INUI pour le maillage IPT1 des FACES
*
      SEGACT IPT1
      N2 = IPT1.NUM(/2)
      IK = 0
      NBFACE = N2
      DO 10 I2=1,N2
         K = IPT1.NUM(1,I2)
         IF (ICPR(K).EQ.0) THEN
            IK      = IK + 1
            ICPR(K) = IK
            INUI(IK)= K
         ENDIF
 10   CONTINUE
      SEGDES IPT1
C
C- Récupération du pointeur MPOVAL des flux
C
      SEGACT MCHPOI
      MSOUPO = IPCHP(1)
      SEGACT MSOUPO
      MPOVA1 = IPOVAL
      SEGDES MSOUPO
      SEGDES MCHPOI
C
C------------------------------------------
C Création du CHAMPOINT SCAL contenant DIVu
C------------------------------------------
C
      NSOUPO = 1
      NAT    = 1
      SEGINI MCHPOI
      IRET = MCHPOI
      IFOPOI    = IFOUR
      JATTRI(1) = 1
      NC        = 1
      SEGINI MSOUPO
      IPCHP(1)  = MSOUPO
      SEGDES MCHPOI
      NOCOMP(1) = 'SCAL'
      IGEOC     = IRE4
      SEGACT IPT2
      N         = IPT2.NUM(/2)
      SEGDES IPT2
      SEGINI MPOVAL
      IPOVAL    = MPOVAL
      NOHARM(1) = NIFOUR
      SEGDES MSOUPO
C
C------------------------------------------------
C= Boucle  sur les ZONES ELEMENTAIRES du MCHAML
C------------------------------------------------
C
      ITELEM = 0
      SEGACT MCHELM
      SEGACT MPOVA1
      NRIGEL = IMACHE(/1)
      IF(IRE5.EQ.0)THEN
      DO 40 IRI=1,NRIGEL
C
C Recuperation du MELEME et activation
C
         MELEME = IMACHE(IRI)
         SEGACT MELEME
         N1 = NUM(/1)
         N2 = NUM(/2)
C
C Récupération du pointeur MELVAL du MCHAML d'orientation
C
         MCHAML = ICHAML(IRI)
         SEGACT MCHAML
         MELVAL = IELVAL(1)
         SEGDES MCHAML
         SEGACT MELVAL
C
C------------------------------
C= Boucle 30 sur les ELEMENTs.
C------------------------------
C
         DO 30 I2=1,N2
            ITELEM = ITELEM + 1
            DO 20 IN=1,N1
             VALIN1 = MPOVA1.VPOCHA(ICPR(NUM(IN,I2)),1)*VELCHE(IN,I2)
             VPOCHA(ITELEM,1) = VPOCHA(ITELEM,1) + VALIN1
 20         CONTINUE
 30      CONTINUE
         SEGDES MELVAL, MELEME
 40   CONTINUE
      ELSE
C
C  Cas ou l'on a une fonction
C
      MCHPO2=IRE5
      SEGACT MCHPO2
      MSOUP2=MCHPO2.IPCHP(1)
      SEGACT MSOUP2
      MPOVA2= MSOUP2.IPOVAL
      SEGACT MPOVA2
      DO 70 IRI=1,NRIGEL
C
C Recuperation du MELEME et activation
C
         MELEME = IMACHE(IRI)
         SEGACT MELEME
         N1 = NUM(/1)
         N2 = NUM(/2)
C
C Récupération du pointeur MELVAL du MCHAML d'orientation
C
         MCHAML = ICHAML(IRI)
         SEGACT MCHAML
         MELVAL = IELVAL(1)
         SEGDES MCHAML
         SEGACT MELVAL
C
C------------------------------
C= Boucle    sur les ELEMENTs.
C------------------------------
C
         DO 60 I2=1,N2
            ITELEM = ITELEM + 1
            DO 50 IN=1,N1
            VALIN1 = MPOVA1.VPOCHA(ICPR(NUM(IN,I2)),1)*VELCHE(IN,I2)
     *              * MPOVA2.VPOCHA(ICPR(NUM(IN,I2)),1)
             VPOCHA(ITELEM,1) = VPOCHA(ITELEM,1) + VALIN1
 50         CONTINUE
 60      CONTINUE
         SEGDES MELVAL, MELEME
 70   CONTINUE
      SEGDES MPOVA2,MSOUP2,MCHPO2
      ENDIF
      SEGDES MCHELM
      SEGDES MPOVA1
      SEGDES MPOVAL
      SEGSUP ICCPR
C
      RETURN
      END




 
 
 
