C VALPO2    SOURCE    GOUNAND   08/11/07    21:15:04     6194
      SUBROUTINE VALPO2(NDIML,
     $     XCONO1,NBMON,COEMON,
     $     EXPMON,
     $     ORDER1,
     $     VALEUR)
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
C***********************************************************************
C NOM         : VALPO2 (Idem VALPOL mais precable)
C PROJET      : Noyau lineaire NLIN
C DESCRIPTION : Calcule la valeur d'un polynome de R^{ndiml} ou la
C               valeur d'une de ses derivees en un point de R^{ndiml}.
C               NDIML  : dimension de l'espace
C               NBMONO : nombre de monomes du polynome
C               XCONO1 : coordonnees du point
C               COEMON : coefficient d'un monome
C               EXPMON : exposants du monome
C               ORDER1 : ordre de derivation par rapport a
C                        chacune des coordonnees
C
C LANGAGE     : Fortran 77 (sauf pour les E/S)
C AUTEUR      : Stephane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
C               mel : gounand@semt2.smts.cea.fr
C***********************************************************************
C APPELES          : -
C APPELE PAR       : SHAPEQ
C***********************************************************************
C ENTREES            : NDIML, NBMONO, XCONO1, COEMON, EXPMON, ORDER1
C ENTREES/SORTIES    : -
C SORTIES            : VALEUR
C CODE RETOUR (IRET) : = 0 si tout s'est bien passe
C***********************************************************************
C VERSION    : v1, 03/05/06, version initiale
C HISTORIQUE : v1, 03/05/06, creation
C HISTORIQUE :
C HISTORIQUE :
C***********************************************************************
C Priere de PRENDRE LE TEMPS de completer les commentaires
C en cas de modification de ce sous-programme afin de faciliter
C la maintenance !
C***********************************************************************
      INTEGER NDIML
      REAL*8 XCONO1(NDIML)
      INTEGER NBMON
      REAL*8  COEMON(NBMON)
      INTEGER EXPMON(NDIML,NBMON)
      INTEGER ORDER1(NDIML)
      REAL*8 VALEUR
*
      INTEGER IMPR,IRET
*
      INTEGER IMONO,INDIML,IFACT
      INTEGER NEXPKS,NDERKS
      REAL*8 VALMON,VAMOEL
*
* Executable statements
*
*
* Calcul de la valeur au point de coordonnees XCONO1 de la
* derivee definie par ORDER1 du monome definie par EXPMON
*
      VALEUR=0.D0
      DO IMON=1,NBMON
*         VALMON=1.D0
         VALMON=COEMON(IMON)
*         WRITE(IOIMP,*) 'VALMON=',VALMON
         DO 12 INDIML=1,NDIML
            NEXPKS=EXPMON(INDIML,IMON)
            NDERKS=ORDER1(INDIML)
*
*   d/dx^m (x^n) = 0 si m>n
*                = n!/(n-m)! x^(n-m) si m<=n
*       ou n! = factorielle de n et en choisissant
*          0! = 1
            IF (NDERKS.GT.NEXPKS) THEN
               VAMOEL=0.D0
            ELSEIF (NDERKS.EQ.NEXPKS) THEN
               VAMOEL=1.D0
               DO 222 IFACT=1,NEXPKS
                  VAMOEL=VAMOEL*IFACT
 222           CONTINUE
            ELSE
               VAMOEL=1.D0
               DO 122 IFACT=(NEXPKS-NDERKS+1),NEXPKS,1
                  VAMOEL=VAMOEL*IFACT
 122           CONTINUE
               VAMOEL=VAMOEL*(XCONO1(INDIML)**(NEXPKS-NDERKS))
            ENDIF
            VALMON=VALMON*VAMOEL
 12      CONTINUE
         VALEUR=VALEUR+VALMON
      ENDDO
*      WRITE(6,*) 'VALEUR=',VALEUR
*
* Normal termination
*
      IRET=0
      RETURN
*
* End of subroutine VALPO2
*
      END

