C ISOVAL    SOURCE    CB215821  23/11/02    21:15:06     11779          
      SUBROUTINE ISOVAL
      IMPLICIT REAL*8 (A-H,O-Z)
      IMPLICIT INTEGER (I-N)
C***********************************************************************
C NOM         : ISOVAL
C DESCRIPTION : Construit le maillage de l'isovaleur d'un champ par
C               éléments
C
C
C
C LANGAGE     : ESOPE
C AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
C               mél : gounand@semt2.smts.cea.fr
C***********************************************************************
C APPELES          :
C APPELES (E/S)    :
C APPELES (BLAS)   :
C APPELES (CALCUL) :
C APPELE PAR       :
C***********************************************************************
C SYNTAXE GIBIANE    :
C ENTREES            :
C ENTREES/SORTIES    :
C SORTIES            :
C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
C***********************************************************************
C VERSION    : v1, 15/12/2008, version initiale
C HISTORIQUE : v1, 15/12/2008, création
C HISTORIQUE :
C HISTORIQUE :
C***********************************************************************
C Prière de PRENDRE LE TEMPS de compléter les commentaires
C en cas de modification de ce sous-programme afin de faciliter
C la maintenance !
C***********************************************************************

-INC PPARAM
-INC CCOPTIO
-INC CCREEL
-INC SMCHAML
      CHARACTER*8 MCHA
      PARAMETER(NOPT=3)
      CHARACTER*4 LOPT(NOPT)

      INTEGER IMPR,IRET
      DATA LOPT/'EGIN','EGAL','EGSU'/

*
* Executable statements
*
      IMPR=0
      IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans isoval.eso'
*
      MCHA='MCHAML  '
      CALL LIROBJ(MCHA,MCHELM,1,IRETOU)
      CALL ACTOBJ(MCHA,MCHELM,1)
*  37 2
* On ne trouve pas d'objet de type %m1:8
      IF (IRETOU.NE.1) THEN
         MOTERR(1:8)=MCHA
         CALL ERREUR(37)
         RETURN
      ENDIF
*
* Lecture de l'option
* IOPT=-1 EGIN
* IOPT=0  EGAL (par défaut)
* IOPT=1  EGSU
*
      IOPT=0
      CALL LIRMOT(LOPT,NOPT,IOPT,0)
      IF (IOPT.EQ.0) IOPT=2
      IOPT=IOPT-2
      IF (IERR.NE.0) RETURN
*
      CALL LIRREE(XISO,1,IRETOU)
*  37 2
* On ne trouve pas d'objet de type %m1:8
      IF (IRETOU.NE.1) THEN
         MOTERR(1:8)='FLOTTANT'
         CALL ERREUR(37)
         RETURN
      ENDIF
*
* Recherche du maximum
*
      IPLMOT=0
      IPLACE=0
      KPLUS=1
      LABSO=1
      CALL MAXICH(MCHELM,IPLMOT,MCHA,IPLACE,XMAX,KPLUS,LABSO)
      XTOL=MAX(XMAX*XZPREC,XPETIT)
* Marge car sinon plantage sur semt2 sur un cas simple mis dans
* isov.dgibi, suite a la fiche 8625
*
      XTOL=XTOL*10.D0

*dbg      WRITE(IOIMP,*) 'XMAX=',XMAX
*dbg      WRITE(IOIMP,*) 'XZPREC=',XZPREC
*dbg      WRITE(IOIMP,*) 'XPETIT=',XPETIT
*dbg      WRITE(IOIMP,*) 'XTOL=',XTOL


*
* Calcul de l'isovaleur
*
      CALL ISOVA1(MCHELM,XISO,XTOL,IOPT,MELEME)
      IF (IERR.NE.0) RETURN
*
* On renvoie le résultat
*
      CALL ACTOBJ('MAILLAGE',MELEME,1)
      CALL ECROBJ('MAILLAGE',MELEME)
      RETURN
*
* End of subroutine ISOVAL
*
      END
 
