      SUBROUTINE ES3C2C(NNO,NPO,NBFACE,NPOF,NNOF,NOREF,
     +                  NPI,POIDS,NPIS,POISMS,NLOC,X,Y,Z,
     +                  fom,fgam,pn,VP,VP1,VDPQ2,VDPQ1,VDPSQ1,VPS,VPS1,
     +                  BE,DELTS,DELTA)
C  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C     BUT :   CALCUL DU SECOND MEMBRE ELEMENTAIRE
C     ---     D UN ELEMENT  HEXAEDRIQUE OU TETRAEDRIQUE
C  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C     PARAMETRES D ENTREE
C     -------------------
C     NNO           : NOMBRE DE NOEUDS DE L ELEMENT
C     NPO           : NOMBRE DE POINTS DE L ELEMENT
C     NBFACE        : NOMBRE DE FACES DE L ELEMENT
C     NNOF,NPOF     : NOMBRE DE NOEUDS (POINTS) PAR FACE
C     NPI           : NOMBRE DE POINTS DE LA FORMULE D INTEGRATION
C                     SUR LE CUBE DE REFERENCE
C     NLOC          : NLOC(NNOF,NBFACE)
C     POIDS         : POIDS DE LA FORMULE D INTEGRATION 
C     NPIS POISMS   : MEME CHOSE POUR LES FACES
C     X,Y,Z         : COORDONNEES DES NOEUDS DE L ELEMENT
C     VOL           : DONNEES VOLUMIQUES 
C     VP            : VALEURS DES POLYNOMES DE BASE FONCTIONS
C                     AUX POINTS D INTEGRATION
C     VP1           : VALEUR DES POLYNOMES DE BASE (GEOMETRIE - FT)
C     VDPQ2         : VALEURS DES DERIVES DES POL DE BASE FONCTIONS
C                     AUX POINTS D INTEGRATION
C     VDPQ1         : VALEURS DES DERIVES DES POLYNOMES DE BASE GEOM 
C                     AUX POINTS D INTEGRATION
C     DELTA         : JACOBIEN  VOLUME
C     DELTS         : JACOBIEN FACES
C     FOM           : efforts volumique aux noeuds
C     FGAM          : esfforts surfaciques aux noeuds
c     PN            : pression aux noeuds
c     NOREF         : noref(nbface,2) 1 =/ 0 si effort surfacique
c                                     2 =/ 0 si pression
C     PARAMETRES RESULTATS
C     --------------------
C     BE            : SECOND MEMBRE ELEMENTAIRE
C  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C     PROGRAMMEUR  :  M VIDRASCU 2001
C  ...................................................................
      parameter (npfm=9 ,npim = 27)
      DOUBLE PRECISION POIDS(NPI),poisms(npis),BE(3,NNO), VOL(3,Npim),
     +       SUR(3,NPfm),fom(3,nno),fgam(3,nnof,nbface),pn(nnof,nbface),
     +       VP(NNO,NPI),VP1(NPO,npi),VDPQ2(3,NNO,NPI),VDPQ1(3,NPO,NPI),
     +       VDPSQ1(2,NPOF,NPIS), VPS(NNOF,npis),VPS1(NPOF,npis), 
     +       DF(3,3),DFINV(3,3),  
     +       DELTA(npi),DELTS(npis),zero
      INTEGER NOREF(nbface,2),NLOC(NNOF,nbface)
      DOUBLE PRECISION X(NPO),Y(NPO),Z(NPO),XS(NPfm),YS(NPfm),ZS(NPfm)

c     --- non utilises ---

      DOUBLE PRECISION a2(1),XINT(1),YINT(1),ZINT(1),
     *                  FF1(1),FF2(1),FF3(1)
      parameter (zero=0.)
C
      INDICE = 3
      call dcopy(3*npi,zero,0,vol,1)
      CALL FOBASE(3,3,NNO,NPO,NPI,VP,VP1,VDPQ2,VDPQ1,X,Y,Z,
     +            A2,XINT,YINT,ZINT,DELTA,DFINV,DF,INDICE,vol,fom,fom,1)


C     TERMES DE VOLUME
C     ----------------
C
      CALL dcopy(3*nno,zero,0,BE,1)
      DO 12 J=1,NNO
      DO 12 I=1,3
      DO 12 L=1,NPI
         BE(I,J) = BE(I,J) + VP(J,L)*POIDS(L)*DELTA(L)*VOL(I,L)
   12 CONTINUE
C
C    TERMES DE BORDS
C
      DO 26 NF=1,NBFACE

      IF(NOREF(NF,1) .GT. 0 .OR. NOREF(NF,2) .GT. 0 ) THEN
C
c       calcul de iopt
c
        if (noref(nf,1) .ne. 0) then
            if (noref(nf,2) .ne. 0) then
               iopt = 3
            else
               iopt = 1
            endif
        else
            iopt = 2
        endif
        DO 115 I=1,NPOF
              XS(I) = X(NLOC(I,NF))
              YS(I) = Y(NLOC(I,NF))
              ZS(I) = Z(NLOC(I,NF))
115      CONTINUE
         INDICE = 3

         call dcopy(3*npis,zero,0,sur,1)
         CALL FOBASE(3,2,NNOF,NPOF,NPIS,VPS,VPS1,VDPSQ1,VDPSQ1,XS,YS,ZS,
     +            A2,FF1,FF2,FF3,DELTS,DFINV,DF,INDICE,sur,fgam(1,1,nf),
     +            pn(1,nf),iopt)

         DO 23 J=1,NNOF
         DO 23 I=1,3
         DO 23 L=1,NPIS

              BE(I,NLOC(J,NF)) = BE(I,NLOC(J,NF))+VPS(J,L)
     +                      *DELTS(L)* POISMS(L)* SUR(I,L)

   23      CONTINUE
      END IF
   26 CONTINUE
      END
