Example #1
0
void
_MEDfieldnValue236(int dummy, ...)
{


  med_int               _ret                 =-1;
  med_int               _nprofile         = 0;
  med_int               _n                   = 0;
  med_int               _profilearraysize    = 0,_nvaluesperentity=0;
  med_int               _nintegrationpoint= 0;
  med_bool              _anyprofile          = MED_FALSE;
  med_geometrie_element _locgeotype          = 0;
  med_int               _intlocgeotype       = 0;
  med_int               _nvaluesperentityfromloc=0;
  int                   _dummy                     =0;
  char     _localizationname  [MED_TAILLE_NOM+1]                 = "";
  char     _tmpprofilename    [MED_NAME_SIZE+1]                  = "", *_profilename=0;
  char     _path              [MED_LOCALIZATION_GRP_SIZE+MED_TAILLE_NOM+1]= MED_LOCALIZATION_GRP;
  char     _geotype           [MED_TAILLE_NOM_ENTITE+1]          = "";


  MED_VARGS_DECL(const, med_idt           , , fid                        );
  MED_VARGS_DECL(const, char * , const      , fieldname                  );
  MED_VARGS_DECL(const, med_int           , , numdt                      );
  MED_VARGS_DECL(const, med_int           , , numit                      );
  MED_VARGS_DECL(const, med_entity_type   , , entitytype                 );
  MED_VARGS_DECL(const, med_geometry_type , , geotype                    );
  MED_VARGS_DECL(, char *, const      , profilename                      );
  MED_VARGS_DECL(const, int               , , profileit                  );
  MED_VARGS_DECL(const, med_storage_mode  , , storagemode                );
  MED_VARGS_DECL(, med_int *, const   , profilesize                      );
  MED_VARGS_DECL(, char *, const      , localizationname                 );
  MED_VARGS_DECL(, med_int *, const   , nintegrationpoint             );
  MED_VARGS_DECL(, med_int *         ,, fret                             );

  va_list params;
  va_start(params,dummy);

  MED_VARGS_DEF(const, med_idt           , , fid                        );
  MED_VARGS_DEF(const, char * , const      , fieldname                  );
  MED_VARGS_DEF(const, med_int           , , numdt                      );
  MED_VARGS_DEF(const, med_int           , , numit                      );
  MED_VARGS_DEF(const, med_entity_type   , , entitytype                 );
  MED_VARGS_DEF(const, med_geometry_type , , geotype                    );
  MED_VARGS_DEF(, char *, const      , profilename                      );
  MED_VARGS_DEF(const, int               , , profileit                  );
  MED_VARGS_DEF(const, med_storage_mode  , , storagemode                );
  MED_VARGS_DEF(, med_int *, const   , profilesize                      );
  MED_VARGS_DEF(, char *, const      , localizationname                 );
  MED_VARGS_DEF(, med_int *, const   , nintegrationpoint             );
  MED_VARGS_DEF(, med_int *         ,, fret                             );

  /*
   * On inhibe le gestionnaire d'erreur HDF 5
   */
  _MEDmodeErreurVerrouiller();

  NOFINALBLANK(fieldname,ERROR);

  if ( (profileit != 1) &&  
       (profileit != -1)) {
    MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_PARAMETER,MED_ERR_VALUE_MSG);
    ISCRUTE_int(profileit);goto ERROR;
  }

  /*
   * Cette appel effectue l'appel à _MEDfieldComputingStepCheck236
   */
  _MEDfieldnProfile236(_dummy,fid,fieldname,numdt,numit,entitytype,geotype,
		       &_tmpprofilename,&_localizationname,&_nprofile );


  if ( _nprofile  < 0 ) {
    MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDfieldnProfile236");
    goto ERROR;
  }

  /* REM: MEDnVal prend en compte le nombre de points de Gauss, ce qui n'est pas le cas
     de MEDfieldnValue */
  if ( (_n = MEDnVal(fid, (char *) fieldname,entitytype,geotype,
		     numdt,numit,MED_NOREF,(med_mode_profil) storagemode) ) < 0 ) {
    MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDnVal");
    goto ERROR;
  }

  /*
   * Lecture de la taille du profil (eventuellement MED_ALLENTITIES_PROFILE)
   */

  /* REM:  (profileit < 0 ) signifie que l'on nous a fourni <profilename> */
  if ( profileit < 0 ) {
      if ( !strlen(profilename)) {
	_profilename = MED_NOPFL;
      }  else {
	if ( strcmp(_tmpprofilename,profilename) ) {
	  MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_PARAMETER,profilename);
	  SSCRUTE(_tmpprofilename); goto ERROR;
	}
	_profilename=profilename;
	_anyprofile=MED_TRUE;
      }
  } else {
    strncpy(profilename,_tmpprofilename,MED_TAILLE_NOM+1);
    profilename[MED_TAILLE_NOM]='\0';
    _profilename=profilename;
    if ( strlen(profilename)) _anyprofile=MED_TRUE;
  }

  if ( _anyprofile ) {
    if ( (_profilearraysize=MEDprofileSizeByName(fid, _profilename)) < 0)  {
      MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,MED_ERR_FIELD_MSG);
      SSCRUTE(fieldname); SSCRUTE(_profilename);
      SSCRUTE("MEDprofileSizeByName");goto ERROR;
    }
  }

  /*
   * Lecture du nombre de points d'intégration.
   */

  strncpy(localizationname,_localizationname,MED_TAILLE_NOM+1);
  localizationname[MED_TAILLE_NOM]='\0';

  /* Vérification de la cohérence du  nombre de valeurs pas entité */
  if (entitytype == MED_NODE_ELEMENT ) {
    if ( strlen( _localizationname) ) {
	MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_PARAMETER,_localizationname);
	SSCRUTE(MED_NO_LOCALIZATION);ISCRUTE_int(entitytype);goto ERROR;
    }
    _nvaluesperentityfromloc = geotype % 100;
  } else if (! strcmp(_localizationname,MED_GAUSS_ELNO)) {
    /* Les points de Gauss sont d"finis sur les noeuds de l'element (mot cle) */
    /* le nombre de points de Gauss est egal au nombre de noeuds de l'element */
    _nvaluesperentityfromloc = geotype % 100;
  } else if ( strlen(_localizationname) ) {

    strcat(_path,_localizationname);

    if ( _MEDattributeNumRdByName(fid, _path, MED_NOM_NBR,MED_INTERNAL_INT,(unsigned char *) &_nvaluesperentityfromloc) < 0 ) {
      MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE, MED_ERR_NAME_MSG );
      SSCRUTE(MED_NOM_NBR);SSCRUTE(_path); ISCRUTE(_nvaluesperentityfromloc);goto ERROR;
    }

    if ( _MEDattributeNumRdByName(fid, _path, MED_NOM_GEO, MED_INTERNAL_INT,(unsigned char *) &_intlocgeotype) < 0 ) {
      MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE, MED_ERR_NAME_MSG );
      SSCRUTE(MED_NOM_GEO);SSCRUTE(_path); ISCRUTE(_intlocgeotype);goto ERROR;
    }

    _locgeotype = (med_geometry_type) _intlocgeotype;

    if ( _locgeotype != geotype ) {
      MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG);
      SSCRUTE(_localizationname);SSCRUTE(MED_NOM_GEO);ISCRUTE_int(_locgeotype);ISCRUTE_int(geotype);
      goto ERROR;
    }

  } else {
    _nvaluesperentityfromloc = 1;
  }

  /* Pour effectuer la vérification suivante (incohérence dans le fichier suite à une 
     maj de la localisation ou du champ  sans prise en compte d'un nombre de points d'intégration différent),
     il faudrait lire l'attribut MED_NOM_NGA sur le maillage par défaut du champ*/
  /* Pour celà il faut soit developper une nouvelle routine soit utiliser MEDpasdetempsInfo mais qui
     est itérative*/
/*   if ( _nvaluesperentityfromloc != _nvaluesperentity ) { */
/*     MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG); */
/*     SSCRUTE(_localizationname);SSCRUTE(MED_NOM_GEO);ISCRUTE(_nvaluesperentityfromloc); */
/*     ISCRUTE(_nvaluesperentity);goto ERROR; */
/*   } */

  *nintegrationpoint = _nvaluesperentityfromloc;

  _n/=_nvaluesperentityfromloc;

  /*Rectification de la valeur 2.3.6 qui prend en compte le nombre de points d'intégration*/
  if (_anyprofile)
    *profilesize=_profilearraysize;
  else
    *profilesize=_n;


  _ret = _n;
 ERROR:

  va_end(params);
  *fret = _ret;

  return;
}
Example #2
0
med_err getFieldsOn(med_idt fid, char * nomcha, med_type_champ typcha, med_int ncomp,
		    med_entite_maillage entite, med_mode_switch stockage) {
	      
  int j,k,l,m,n,nb_geo;
  med_int nbpdtnor=0,pflsize,*pflval,ngauss=0,*vale=NULL,nval;
  med_int numdt=0,numo=0,lnsize,nbrefmaa;
  med_float *valr=NULL,dt=0.0;
  med_err ret=0;
  med_booleen local;
  char pflname [MED_TAILLE_NOM+1]="";
  char locname [MED_TAILLE_NOM+1]="";
  char * lien = NULL;
  char maa_ass [MED_TAILLE_NOM+1]="";
  char dt_unit [MED_TAILLE_PNOM+1]="";


  med_geometrie_element * type_geo;
  med_geometrie_element typ_noeud[1] = { MED_NONE };
  med_geometrie_element typmai[MED_NBR_GEOMETRIE_MAILLE+2] = {MED_POINT1, MED_SEG2, MED_SEG3, MED_TRIA3,
							      MED_QUAD4, MED_TRIA6,MED_QUAD8, MED_TETRA4,
							      MED_PYRA5, MED_PENTA6, MED_HEXA8, MED_TETRA10, 
							      MED_PYRA13, MED_PENTA15, MED_HEXA20, 
							      MED_POLYGONE, MED_POLYEDRE};
  med_geometrie_element typfac[MED_NBR_GEOMETRIE_FACE+1] = {MED_TRIA3,MED_TRIA6,
							    MED_QUAD4,MED_QUAD8,
							    MED_POLYGONE};
  med_geometrie_element typare[MED_NBR_GEOMETRIE_ARETE] = {MED_SEG2,MED_SEG3};  
  
  char ** AFF; 

  switch (entite) {
  case MED_NOEUD : 
    type_geo = typ_noeud;
    nb_geo   = 1;
    AFF      = MED_GEOMETRIE_NOEUD_AFF;
    break;
  case  MED_MAILLE : 
    type_geo = typmai;
    nb_geo   = MED_NBR_GEOMETRIE_MAILLE+2;
    AFF      =  MED_GEOMETRIE_MAILLE_AFF;
    break;
  case  MED_FACE : 
    type_geo = typfac;
    nb_geo   = MED_NBR_GEOMETRIE_FACE+1;
    AFF      =  MED_GEOMETRIE_FACE_AFF;
    break;
  case  MED_ARETE : 
    type_geo = typare;
    nb_geo   = MED_NBR_GEOMETRIE_ARETE;
    AFF      =  MED_GEOMETRIE_ARETE_AFF;
   break;
  }
	
      
  for (k=0;k<nb_geo;k++) {
    
    /* Combien de (PDT,NOR) a lire */
    nbpdtnor = MEDnPasdetemps(fid,nomcha,entite,type_geo[k]); 
    if (nbpdtnor < 1 ) continue;

    for (j=0;j<nbpdtnor;j++) {
		
      if ( MEDpasdetempsInfo(fid,nomcha,entite,type_geo[k],
			     j+1, &ngauss, &numdt, &numo, dt_unit,
			     &dt, maa_ass, &local, &nbrefmaa) <0) {
	MESSAGE("Erreur a la demande d'information sur (pdt,nor) : "); 
	ISCRUTE(numdt); ISCRUTE(numo);
	ret = -1; continue;
      };
      
      printf("\n  +Pas de Temps n.%i (%f) [%s], n. d'ordre %i, avec %i pts de gauss sur le maillage par defaut.\n",numdt,dt,dt_unit,numo,ngauss);
      
      printf("\tLe maillage par defaut est : |%s|, sur un total de : %i maillages associes\n",
	     maa_ass, nbrefmaa);

      /* Le maillage reference est-il porte par un autre fichier */
      if ( !local ) {
	
	if ( (lnsize=MEDnValLien(fid,maa_ass) ) < 0 )  {
	  MESSAGE("Erreur a la lecture de la taille du lien : "); 
	  SSCRUTE(maa_ass);
	  ret = -1;
	} else {

	  lien = malloc(lnsize*sizeof(char));
	  EXIT_IF(lien == NULL,NULL,NULL);

	  if ( MEDlienLire(fid, lien, maa_ass) < 0 )  {
	    MESSAGE("Erreur a la lecture du lien : "); 
	    SSCRUTE(maa_ass);SSCRUTE(lien);
	    ret = -1; 
	  } else {
	    printf("\tLe maillage |%s| est porte par un fichier distant |%s|\n",maa_ass,lien);
	  }
	  free(lien);
	}
      }

      /* Combien de maillages lies aux (nomcha,ent,geo,numdt,numo)  */
      /* Notons que cette information est egalement disponible a partir de MEDpasdetempsInfo */
      if ( (nbrefmaa = MEDnChampRef(fid,nomcha,entite,type_geo[k],numdt,numo) ) < 0 ) {
	MESSAGE("Erreur a la demande du nombre de maillages references par le champ : "); 
	SSCRUTE(nomcha); ISCRUTE(numdt); ISCRUTE(numo);
	ret = -1; continue;
      };

      for (l=0;l<nbrefmaa;l++) {
	
	if ( MEDchampRefInfo(fid,nomcha,entite,type_geo[k],
			     l+1,numdt, numo, maa_ass, &local, &ngauss) <0 ) {
	  MESSAGE("Erreur a la demande d'information sur le maillage utilise par le champ n° : "); 
	  SSCRUTE(nomcha);ISCRUTE(entite);ISCRUTE(type_geo[k]);
          ISCRUTE(l+1);ISCRUTE(numdt); ISCRUTE(numo);SSCRUTE(maa_ass); 
	  ret = -1; continue;
	};		  
		  
	/* Prend en compte le nbre de pt de gauss automatiquement */
	if ((nval = MEDnVal(fid,nomcha,entite,type_geo[k],numdt,numo,maa_ass,USER_MODE)) <= 0)   {
	  MESSAGE("Erreur a la lecture du nombre de valeurs du champ : "); 
	  SSCRUTE(nomcha);ISCRUTE(entite);ISCRUTE(type_geo[k]);
	  ISCRUTE(numdt);ISCRUTE(numo);SSCRUTE(maa_ass);ISCRUTE(USER_MODE);
	  ret = -1; continue;
	};	
	  
	  
	printf("\t- Il y a %d valeurs en mode %i. Chaque entite %s\
 de type geometrique %s associes au maillage |%s| a %i pts de gauss \n",
	       nval,USER_MODE,MED_ENTITE_MAILLAGE_AFF[(int)entite],AFF[k],maa_ass,ngauss);                    
	
	/* Le maillage reference est-il porte par un autre fichier */
	if ( !local ) {
	
	  if ( (lnsize=MEDnValLien(fid,maa_ass) ) < 0 )  {
	    MESSAGE("Erreur a la lecture de la taille du lien : "); 
	    SSCRUTE(maa_ass);
	    ret = -1;
	  } else {
	    
	    lien = malloc(lnsize*sizeof(char));
	    EXIT_IF(lien == NULL,NULL,NULL);
	    
	    if ( MEDlienLire(fid, lien, maa_ass) < 0 )  {
	      MESSAGE("Erreur a la lecture du lien : "); 
	      SSCRUTE(maa_ass);SSCRUTE(lien);
	      ret = -1; 
	    } else {
	      printf("\tLe maillage |%s| est porte par un fichier distant |%s|\n",maa_ass,lien);
	    }
	    free(lien);
	  }
	}
	
	/*Lecture des valeurs du champ */
	if (typcha == MED_FLOAT64) {
	  
	  valr = (med_float*) calloc(ncomp*nval,sizeof(med_float));
	  EXIT_IF(valr == NULL,NULL,NULL);
	  if ( MEDchampLire(fid,maa_ass,nomcha,(unsigned char*)valr,stockage,MED_ALL,locname,
			    pflname,USER_MODE,entite,type_geo[k],numdt,numo) < 0 ) {
	    MESSAGE("Erreur a la lecture du nombre de valeurs du champ : "); 
	    SSCRUTE(nomcha);ISCRUTE(entite);ISCRUTE(type_geo[k]);
	    ISCRUTE(numdt);ISCRUTE(numo);SSCRUTE(maa_ass);
	    ret = -1;
	  };		  

	} else {
	  
	  vale = (med_int*) calloc(ncomp*nval,sizeof(med_int));
	  EXIT_IF(vale == NULL,NULL,NULL);
	  if ( MEDchampLire(fid,maa_ass,nomcha,(unsigned char*)vale,stockage,MED_ALL,locname,
			    pflname,USER_MODE,entite,type_geo[k],numdt,numo) < 0 ) {
	    MESSAGE("Erreur a la lecture des valeurs du champ : "); 
	    SSCRUTE(nomcha);ISCRUTE(entite);ISCRUTE(type_geo[k]);
	    ISCRUTE(numdt);ISCRUTE(numo);SSCRUTE(maa_ass);
	    ret = -1;
	  };	
	  
	}

	if ( ngauss > 1 )
	  printf("\t- Modèle de localisation des points de Gauss de nom |%s|\n",locname);

      switch (stockage) {
      
      case MED_FULL_INTERLACE : 
	printf("\t- Valeurs :\n\t");
	for (m=0;m<nval/ngauss;m++) {
	  printf("|");
	  for (n=0;n<ngauss*ncomp;n++)     
	    if (typcha == MED_FLOAT64) 
	      printf(" %f ",*(valr+(m*ngauss*ncomp)+n));
	    else
	      printf(" %d ",*(vale+(m*ngauss*ncomp)+n));

	}
	break;
	
	/*Affichage en fonction du profil à traiter*/
      case MED_NO_INTERLACE :
	printf("\t- Valeurs :\n\t");
	for (m=0;m<ncomp;m++) {
	  printf("|");
	  for (n=0;n<nval;n++) 
	    if (typcha == MED_FLOAT64) 
	      printf(" %f ",*(valr+(m*nval)+n));
	    else
	      printf(" %d ",*(vale+(m*nval)+n));
	}
	break;
      }
      
      printf("|\n");  
      if (typcha == MED_FLOAT64) {
	if ( valr ) {free(valr);valr = NULL;}}
      else
	if (vale) { free(vale);vale = NULL; }
      
      /*Lecture du profil associe */
      if (strcmp(pflname,MED_NOPFL) == 0 )
	printf("\t- Profil : MED_NOPFL\n");
      else {
	
	  if ( (pflsize = MEDnValProfil(fid,pflname)) <0 )  {
	    MESSAGE("Erreur a la lecture du nombre de valeurs du profil : "); 
	    SSCRUTE(pflname);
	    ret = -1; continue;
	  }
		  
	  printf("\t- Profil : |%s| de taille %i\n",pflname,pflsize);
	  
	  pflval = (med_int*) malloc(sizeof(med_int)*pflsize);
	  EXIT_IF(pflval == NULL,NULL,NULL);
	  if ( MEDprofilLire(fid,pflval,pflname) <0) {
	    MESSAGE("Erreur a la lecture des valeurs du profil : "); 
	    SSCRUTE(pflname);
	    ret = -1;
	  }
	  printf("\t");
	  for (m=0;m<pflsize;m++) printf(" %i ",*(pflval+m));
	  printf("\n");
	  free(pflval);
	  
	}
	
      }
    } 
  } /* fin for sur les mailles*/
  
  return ret;
}
Example #3
0
med_err MED231champNormaliser(med_idt fid, char * nomcha, med_type_champ typcha, med_int ncomp,
		    med_entite_maillage entite) {
	      
  int j,k,l,m,n,nb_geo;
  med_int nbpdtnor=0,ngauss=0,*vale=NULL,nval;
  med_int numdt=0,numo=0,nbrefmaa;
  med_float *valr=NULL,dt=0.0;
  med_err ret=0, rett;
  med_booleen local;
  char pflname   [MED_TAILLE_NOM+1]="";
  char locname   [MED_TAILLE_NOM+1]="";
  char maa_ass_i [MED_TAILLE_NOM+1]="";
  char maa_ass   [MED_TAILLE_NOM+1]="";
  char dt_unit   [MED_TAILLE_PNOM+1]="";


  med_geometrie_element * type_geo;
  med_geometrie_element typ_noeud[1] = { MED_NONE };
  med_geometrie_element typmai[MED_NBR_GEOMETRIE_MAILLE+2] = {MED_POINT1, MED_SEG2, MED_SEG3, MED_TRIA3,
							      MED_QUAD4, MED_TRIA6,MED_QUAD8, MED_TETRA4,
							      MED_PYRA5, MED_PENTA6, MED_HEXA8, MED_TETRA10, 
							      MED_PYRA13, MED_PENTA15, MED_HEXA20, 
							      MED_POLYGONE, MED_POLYEDRE};
  med_geometrie_element typfac[MED_NBR_GEOMETRIE_FACE+1] = {MED_TRIA3,MED_TRIA6,
							    MED_QUAD4,MED_QUAD8,
							    MED_POLYGONE};
  med_geometrie_element typare[MED_NBR_GEOMETRIE_ARETE] = {MED_SEG2,MED_SEG3};
  
  char ** AFF;

  switch (entite) {
    case MED_NOEUD :
      type_geo = typ_noeud;
      nb_geo   = 1;
      AFF      = MED_GEOMETRIE_NOEUD_AFF;
      break;
    case  MED_MAILLE :
      type_geo = typmai;
      nb_geo   = MED_NBR_GEOMETRIE_MAILLE+2;
      AFF      =  MED_GEOMETRIE_MAILLE_AFF;
      break;
    case  MED_FACE :
      type_geo = typfac;
      nb_geo   = MED_NBR_GEOMETRIE_FACE+1;
      AFF      =  MED_GEOMETRIE_FACE_AFF;
      break;
    case  MED_ARETE :
      type_geo = typare;
      nb_geo   = MED_NBR_GEOMETRIE_ARETE;
      AFF      =  MED_GEOMETRIE_ARETE_AFF;
     break;
  }

  
  for (k=0;k<nb_geo;k++) {
    
    /* Combien de (PDT,NOR) a lire */
    nbpdtnor = MEDnPasdetemps(fid,nomcha,entite,type_geo[k]);
    if (nbpdtnor < 1 ) continue;

    for (j=0;j<nbpdtnor;j++) {

      /*le nom du maillage associé va être modifié dans MED231champRefInfoEtRenMaa */
      rett = MEDpasdetempsInfo(fid,nomcha,entite,type_geo[k],
			     j+1, &ngauss, &numdt, &numo, dt_unit,
			     &dt, maa_ass_i, &local, &nbrefmaa);
      if ( rett <0) {
	    MESSAGE("Erreur a la demande d'information sur (pdt,nor) : ");
	    ISCRUTE(numdt); ISCRUTE(numo);
	    ret = -1; continue;
      };


      /* Combien de maillages lies aux (nomcha,ent,geo,numdt,numo)  */
      /* Notons que cette information est egalement disponible a partir de MEDpasdetempsInfo */
      nbrefmaa = MEDnChampRef(fid,nomcha,entite,type_geo[k],numdt,numo);
      if ( nbrefmaa < 0 ) {
	    MESSAGE("Erreur a la demande du nombre de maillages references par le champ : ");
	    SSCRUTE(nomcha); ISCRUTE(numdt); ISCRUTE(numo);
	    ret = -1; continue;
      };

      for (l=0;l<nbrefmaa;l++) {

        rett = MED231champRefInfoEtRenMaa(fid,nomcha,entite,type_geo[k],
					  l+1,numdt, numo, maa_ass, &local, &ngauss);
	    if ( rett < 0 ) {
	      MESSAGE("Erreur a la demande d'information sur le maillage utilise par le champ n° : ");
	      ISCRUTE_int(l+1);
	      ret = -1; continue;
	    };

	    
	    /* Prend en compte le nbre de pt de gauss automatiquement */
        nval = MEDnVal(fid,nomcha,entite,type_geo[k],numdt,numo,maa_ass,MED_GLOBAL);
	    if (nval <= 0)   {
	      MESSAGE("Erreur a la lecture du nombre de valeurs du champ : ");
	      SSCRUTE(nomcha);ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);
	      ISCRUTE(numdt);ISCRUTE(numo);SSCRUTE(maa_ass);
	      ret = -1; continue;
	    };

	    /*Lecture des valeurs du champ */
	    if (typcha == MED_FLOAT64) {

	      valr = (med_float*) calloc(ncomp*nval,sizeof(med_float));
	      EXIT_IF(valr == NULL,NULL,NULL);
	      rett = MED231champLireEtUnlink(fid,maa_ass,nomcha,(unsigned char*)valr,MED_NO_INTERLACE,MED_ALL,locname,
		    	    pflname,MED_GLOBAL,entite,type_geo[k],numdt,numo);
	      if ( rett < 0 ) {
	        MESSAGE("Erreur a la lecture des valeurs du champ : ");
	        SSCRUTE(nomcha);ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);
	        ISCRUTE(numdt);ISCRUTE(numo);SSCRUTE(maa_ass);
	        ret = -1;
	      };

	    }
        else {
	  
	      vale = (med_int*) calloc(ncomp*nval,sizeof(med_int));
	      EXIT_IF(vale == NULL,NULL,NULL);
	      rett = MED231champLireEtUnlink(fid,maa_ass,nomcha,(unsigned char*)vale,MED_NO_INTERLACE,MED_ALL,locname,
		    	    pflname,MED_GLOBAL,entite,type_geo[k],numdt,numo);
	      if ( rett < 0 ) {
	        MESSAGE("Erreur a la lecture des valeurs du champ : ");
	        SSCRUTE(nomcha);ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);
	        ISCRUTE(numdt);ISCRUTE(numo);SSCRUTE(maa_ass);
	        ret = -1;
	      };
	  
	    }

        if (strcmp(pflname,MED_NOPFL)) {
    	    if (typcha == MED_FLOAT64) {

              rett = MEDchampEcr(fid,maa_ass,nomcha,(unsigned char*)valr,MED_NO_INTERLACE,nval,locname,
    	                MED_ALL,pflname,MED_GLOBAL,entite,type_geo[k],numdt,dt_unit,dt,numo);
    	      if ( rett < 0 ) {
    	        MESSAGE("Erreur a l'ecriture du nombre de valeurs du champ : ");
    	        SSCRUTE(nomcha);ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);
    	        ISCRUTE(numdt);ISCRUTE(numo);SSCRUTE(maa_ass);
    	        ret = -1;
    	      };

    	    }
            else {

              rett = MEDchampEcr(fid,maa_ass,nomcha,(unsigned char*)vale,MED_NO_INTERLACE,nval,locname,
    	                MED_ALL,pflname,MED_GLOBAL,entite,type_geo[k],numdt,dt_unit,dt,numo);
    	      if ( rett < 0 ) {
    	        MESSAGE("Erreur a l'ecriture des valeurs du champ : ");
    	        SSCRUTE(nomcha);ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);
    	        ISCRUTE(numdt);ISCRUTE(numo);SSCRUTE(maa_ass);
    	        ret = -1;
    	      };

    	    }
    	}


        if (typcha == MED_FLOAT64) {
	      if ( valr ) {free(valr);valr = NULL;}}
        else
	      if (vale) { free(vale);vale = NULL; }

      }
    }
  } /* fin for sur les mailles*/

  return ret;
}