Example #1
0
med_int
MEDnEntMaa(med_idt fid, char *maa, med_table quoi, med_entite_maillage type_ent, 
	   med_geometrie_element type_geo, med_connectivite type_conn)
{
  med_idt root=0, maaid=0, entid=0,geoid=0, dataset=0;
  med_int ret=-1;
  char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1];
  char nom_ent[MED_TAILLE_NOM_ENTITE+1];
  char nom_geo[MED_TAILLE_NOM_ENTITE+1];
  char nom_dataset[MED_TAILLE_NOM_ENTITE+1];
  med_int res = 0;
  med_entite_maillage _type_ent=type_ent;

  if ( type_ent == MED_NOEUD_MAILLE ) _type_ent=MED_NOEUD ;

  /*
   * On inhibe le gestionnaire d'erreur HDF 5
   */
  _MEDmodeErreurVerrouiller();
if (MEDcheckVersion(fid) < 0) return -1;


  /*
   * Si le maillage n'existe pas => erreur
   */
  strcpy(chemin,MED_MAA);
  strcat(chemin,maa);
  if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0)
    goto ERROR;

  /*
   * On met a jour le nom du Data Group representant
   * le type des entites
   */
  if ( _MEDnomEntite(nom_ent,_type_ent) < 0)
    goto ERROR;

   /*
    * Si le Data Group des entites n'existe pas => res = 0
    */
  entid = _MEDdatagroupOuvrir(maaid,nom_ent);

   /*
    * Pour les mailles, les faces et le aretes
    * si le Data Group du type geometrique n'existe pas => res = 0
    */
  if ((_type_ent==MED_MAILLE)||(_type_ent==MED_FACE)||(_type_ent==MED_ARETE))
    {
      if ( _MEDnomGeometrie30(nom_geo,type_geo) < 0)
	goto ERROR;
      geoid = _MEDdatagroupOuvrir(entid,nom_geo);
    }
  else
    geoid = -1;
  
   /*
    * Ouverture du Data Set renvoye par _MEDnomDataset()
    * S'il n'existe pas => erreur
    * Sinon lecture de l'attribut NBR
    */
   if (geoid == -1)
     root = entid;
   else
     root = geoid;
   if ( _MEDnomDataset(nom_dataset,quoi,type_conn) < 0)
     goto ERROR;
   dataset = _MEDdatasetOuvrir(root,nom_dataset);
   if (dataset > 0)
     if ( _MEDattrEntierLire(dataset,MED_NOM_NBR,&res) < 0)
       goto ERROR;

   /*
    * On ferme tout
    */
    ret=res;
   ERROR :
   if (dataset > 0)
     if ( _MEDdatasetFermer(dataset) < 0)
       ret=-1;
   if (geoid > 0)
     if ( _MEDdatagroupFermer(geoid) < 0)
       ret=-1;
   if (entid > 0)
     if ( _MEDdatagroupFermer(entid) < 0)
       ret=-1;
   if (maaid > 0)
     if ( _MEDdatagroupFermer(maaid) < 0)
       ret=-1;
/*ICI;_MEDobjetsOuverts(fid);*/
  return ret;
}
Example #2
0
med_int
MEDjointnCorres (med_idt fid, char *maa, char *jn, 
		 med_entite_maillage type_ent_local,   med_geometrie_element typ_geo_local,
		 med_entite_maillage type_ent_distant, med_geometrie_element typ_geo_distant)
{
  med_entite_maillage _type_ent_local   = (med_entite_maillage) ( (int)(type_ent_local) % 10 );
  med_entite_maillage _type_ent_distant = (med_entite_maillage) ( (int)(type_ent_distant) % 10 );
  med_idt datagroup1=0,datagroup2=0;
  med_int n=0, ret=-1;

  char chemin[MED_TAILLE_MAA+MED_TAILLE_JNT+2*MED_TAILLE_NOM+1]; 
  char nomdatagroup[MED_TAILLE_NOM_ENTITE*4+3+1];
  char tmp[MED_TAILLE_NOM_ENTITE+1];
  med_size dimd[1];

/*   if (typ_geo_local   == MED_TETRA4 || typ_geo_local    == MED_TETRA10 || */
/*       typ_geo_local   == MED_HEXA8  || typ_geo_local    == MED_HEXA20  || */
/*       typ_geo_local   == MED_PENTA6 || typ_geo_local    == MED_PENTA15 || */
/*       typ_geo_local   == MED_PYRA5  || typ_geo_local    == MED_PYRA13  || */
/*       typ_geo_distant == MED_TETRA4 || typ_geo_distant == MED_TETRA10 || */
/*       typ_geo_distant == MED_HEXA8  || typ_geo_distant == MED_HEXA20  || */
/*       typ_geo_distant == MED_PENTA6 || typ_geo_distant == MED_PENTA15 || */
/*       typ_geo_distant == MED_PYRA5  || typ_geo_distant == MED_PYRA13) */
/*     return -1; */

  /*
   * On inhibe le gestionnaire d'erreur HDF 5
   */
  _MEDmodeErreurVerrouiller();
if (MEDcheckVersion(fid) < 0) return -1;


  /* 
   * Si le Data Group de "JNT/Corres" n'existe pas => erreur
   */
  strcpy(chemin,MED_MAA);
  strcat(chemin,maa);
  strcat(chemin,MED_JNT);
  strcat(chemin,jn);


  if ((datagroup1 = _MEDdatagroupOuvrir(fid,chemin)) < 0) {
    MESSAGE("Impossible d'ouvrir le datagroup  : ");
    SSCRUTE(chemin); 
    goto ERREUR;
  }

  /*
   * Ecriture de la correspondance
   *   construction du tag HDF "reperant" la correspondance 
   *   
   */
  if ( _MEDnomEntite(nomdatagroup,_type_ent_local) < 0)
    goto ERREUR;
  if ((_type_ent_local != MED_NOEUD)) {
    if ( _MEDnomGeometrie30(tmp,typ_geo_local) < 0) goto ERREUR;
    strcat(nomdatagroup,".");
    strcat(nomdatagroup,tmp);
  }


  if ( _MEDnomEntite(tmp,_type_ent_distant) < 0)  goto ERREUR;
  strcat(nomdatagroup,".");
  strcat(nomdatagroup,tmp);
  if ((_type_ent_distant != MED_NOEUD)) {
    if ( _MEDnomGeometrie30(tmp,typ_geo_distant) < 0) goto ERREUR;
    strcat(nomdatagroup,".");
    strcat(nomdatagroup,tmp);
  }


  /* le couple d'entite n'existe pas, on renvoie 0 */

  if ((datagroup2 = _MEDdatagroupOuvrir(datagroup1,nomdatagroup)) < 0 ) goto SORTIE;

  /* erreur : le couple d'entite existe mais on
     ne peut lire l'attribut NBR */

  if ( _MEDattrEntierLire(datagroup2,MED_NOM_NBR,&n) < 0) {
    MESSAGE("Impossible de lire l'attribut NBR : ");
    SSCRUTE(chemin);SSCRUTE(MED_NOM_NBR); goto ERREUR;
  }

  /*
   * On ferme tout 
   */
  
 SORTIE:
  ret= n;
 ERREUR:

  if (datagroup2 > 0 ) if ( _MEDdatagroupFermer(datagroup2) < 0) {
    MESSAGE("Impossible de fermer le groupe  : ");
    SSCRUTE(chemin);SSCRUTE(nomdatagroup);ret=-1;
  }

  if (datagroup1 > 0 ) if ( _MEDdatagroupFermer(datagroup1) < 0) {
    MESSAGE("Impossible de fermer le groupe  : ");
    SSCRUTE(chemin);ret= -1;
  }

  return (med_int) ret;  

}
Example #3
0
med_err 
MEDfamLire(med_idt fid,char *maa, med_int *fam, med_int n, 
	   med_entite_maillage type_ent,med_geometrie_element type_geo)
{
  med_idt root;
  med_idt maaid = 0;
  med_idt entid = 0;
  med_idt geoid = 0;
  med_err ret =  -1;
  char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1];
  char nom_ent[MED_TAILLE_NOM_ENTITE+1];
  char nom_geo[MED_TAILLE_NOM_ENTITE+1];
  med_int i;
  med_entite_maillage _type_ent=type_ent;

  if ( type_ent == MED_NOEUD_MAILLE ) _type_ent=MED_NOEUD ;

  /*
   * On inhibe le gestionnaire d'erreur HDF 5
   */
  _MEDmodeErreurVerrouiller();
if (MEDcheckVersion(fid) < 0) return -1;


  /*
   * Si le maillage n'existe pas => erreur
   */
  strcpy(chemin,MED_MAA);
  strcat(chemin,maa);
  if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) {
    MESSAGE("Impossible d'acceder au maillage");
    SSCRUTE(chemin);
    goto ERREUR;
  }

  /*
   * On met a jour le nom du Data Group representant
   * le type des entites
   */
   if (_MEDnomEntite(nom_ent,_type_ent) < 0) {
    MESSAGE("L'entité demandée n'est pas une entité <med_entite_maillage> : ");
    SSCRUTE(nom_ent); 
    ISCRUTE(_type_ent);
    goto ERREUR;
  }

   /*
    * Si le "Data Group" des entites n'existe pas => erreur
    */
   if ((entid = _MEDdatagroupOuvrir(maaid,nom_ent)) < 0) { 
     MESSAGE("Impossible d'accéder au groupe des entités : ");
     SSCRUTE(nom_ent); 
     ISCRUTE(_type_ent);
     goto ERREUR;
   }


   /*
    * Pour les mailles, les faces et le aretes, on cree
    * si le "Data Group" du type geometrique => erreur
    */
   if ((_type_ent==MED_MAILLE)||(_type_ent==MED_FACE)||(_type_ent==MED_ARETE))
     {
       if (_MEDnomGeometrie30(nom_geo,type_geo) < 0) {
	 MESSAGE("L'entité demandée n'est pas un élément <med_geometrie_element> : ");
	 SSCRUTE(nom_geo); 
	 ISCRUTE(type_geo);
	 goto ERREUR;
       }
       if ((geoid = _MEDdatagroupOuvrir(entid,nom_geo)) < 0) {
	 MESSAGE("Impossible d'accéder au groupe des éléments géométriques : ");
	 SSCRUTE(nom_geo); 
	 ISCRUTE(type_geo);
	 goto ERREUR;
       }
	
     }
   else 
     geoid = -1;

   /*
    * lecture du Data Set "FAM" 
    * - En cas d'erreur, pas de message car la presence des 
    *   numeros est optionnelle dans un fichier MED (à partir de la V2.2)
    *   Dans ce cas de figure, on considère que tous les numéros sont à 0
    */
   if (geoid == -1)
     root = entid;
   else
     root = geoid;
#if defined(HAVE_F77INT64)
   if (_MEDdatasetNumLire(root,MED_NOM_FAM,MED_INT64,
			  MED_NO_INTERLACE,1,MED_ALL,
			  MED_NOPF,MED_NO_PFLMOD,MED_PFL_NON_COMPACT,0,MED_NOPG,0,
			  (unsigned char *)fam) < 0)
     for (i=0; i<n; i++)
       *(fam+i) = 0;
#else
   if (_MEDdatasetNumLire(root,MED_NOM_FAM,MED_INT32,
			  MED_NO_INTERLACE,1,MED_ALL,
			  MED_NOPF,MED_NO_PFLMOD,MED_PFL_NON_COMPACT,0,MED_NOPG,0,
			  (unsigned char *)fam) < 0)
     for (i=0; i<n; i++)
       *(fam+i) = 0;
#endif

   /*
    * Tout s'est bien passé si on est parvenu jusqu'ici
    */
   ret = 0;

   /*
    * On ferme tout
    */
 ERREUR:
   if (geoid > 0)
     if (_MEDdatagroupFermer(geoid) < 0)
       return -1;
   if (entid > 0)
     if (_MEDdatagroupFermer(entid) < 0)
       return -1;
   if (maaid > 0)
     if (_MEDdatagroupFermer(maaid) < 0)
       return -1; 

   /* Code retour : 
    *   - ret == 0 en cas de succès
    *   - ret == -1 en cas d'échec 
    */
   return (ret); 
}
Example #4
0
void
_MEDfieldnProfile236(int dummy, ...) {


  med_int  _ret=-1,_err=-1;
  med_idt  _gid=0,_datagroup1=0;
  char     _path[(MED_TAILLE_CHA+MED_NAME_SIZE+1)+(2*MED_MAX_PARA+1)+1]=MED_CHA;
  char     _datagroupname1  [2*MED_TAILLE_NOM_ENTITE+2]="";
  char     _nomdatagroup2   [2*MED_MAX_PARA+1]         ="";
  char     _geotype         [MED_TAILLE_NOM_ENTITE+1]  ="";
  char     _profilename     [MED_NAME_SIZE+1]          ="";
  char     _meshname        [MED_NAME_SIZE+1]          ="";
  char     _localizationname[MED_NAME_SIZE+1]          ="";
  med_int  _numdt=0, _numit=0;
  med_size _n=0,_ncpst=0;
  med_bool _checkmultiplemesh=MED_TRUE, _multiplemesh        =MED_FALSE;
  med_bool _checkmeshname    =MED_TRUE,  _samedefaultmeshname=MED_FALSE;
  char     _tmp1         [MED_TAILLE_NOM_ENTITE+1]="";
/*   med_size _rank; */


  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   , , entitype                );
  MED_VARGS_DECL(const, med_geometry_type , , geotype                 );
  MED_VARGS_DECL(, char *, const      , defaultprofilename            );
  MED_VARGS_DECL(, char *, const      , defaultlocalizationname       );
  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   , , entitype                );
  MED_VARGS_DEF(const, med_geometry_type , , geotype                 );
  MED_VARGS_DEF(, char *, const      , defaultprofilename            );
  MED_VARGS_DEF(, char *, const      , defaultlocalizationname       );
  MED_VARGS_DEF(, med_int *         ,, fret                          );

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

  NOFINALBLANK(fieldname,ERROR);

  /*
   * Autorise la lecture du profile et de la localisation des points d'intégration
   * s'il n'y a qu'un même maillage sur tous les pas de temps de tous les couples
   * (typent,typgeo)
   */
#if ! defined(MED_CHECK_23FORMAT)
#error "Data model objects version checking must be either activated or deactivated, hence MED_CHECK_23FORMAT macro must be defined."
#error "Verify that you include med_config.h, thanks."
#endif

# if MED_CHECK_23FORMAT == 1

  if (  _MEDfieldComputingStepCheck236(fid,  fieldname,
				      &_ncpst,
				      _checkmultiplemesh, &_multiplemesh,
				      _checkmeshname,     &_samedefaultmeshname) < 0) {
    MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_FIELD,fieldname);
    goto ERROR;
  }
# endif

  strcat(_path,fieldname);
  strcat(_path,"/");

  if (_MEDnomEntite(_datagroupname1,entitype) < 0) {
    MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG);
    ISCRUTE_int(entitype);SSCRUTE(_path);goto ERROR;
  };

  if ((entitype != MED_NOEUD)) {
    if (_MEDnomGeometrie30(_tmp1,geotype) < 0) {
      MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG);
      ISCRUTE_int(geotype);SSCRUTE(_path);goto ERROR;
    }
    strcat(_datagroupname1,".");
    strcat(_datagroupname1,_tmp1);
  }
  strcat(_path,_datagroupname1);

  if ((_datagroup1 = _MEDdatagroupOuvrir(fid,_path)) < 0) {
    _ret = 0;
    goto ERROR;
  }

  strcat(_path,"/");

  /*TODO : Vérifier IFORMAT */
  sprintf(_nomdatagroup2,"%*li%*li",MED_MAX_PARA,(long ) numdt,MED_MAX_PARA,(long ) numit);

  strcat(_path,_nomdatagroup2);

/*   if (  _MEDobjectGetRank(fid, */
/* 			  _path, */
/* 			  _rank ) < 0 ) { */
/*     MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDobjectGetRank"); */
/*     goto ERROR; */
/*   } */

  if ((_gid = _MEDdatagroupOuvrir(fid,_path)) < 0) {
    _ret = 0;
    goto ERROR;
  }
  strcat(_path,"/");

  /*Lit l'attribut MED_NOM_NDT  */
  if ( _MEDattrEntierLire(_gid,MED_NOM_NDT, &_numdt) < 0) {
    MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
    SSCRUTE(fieldname);SSCRUTE(_path);SSCRUTE(MED_NOM_NDT);
    ISCRUTE(_numdt);goto ERROR;
  }

  if ( _numdt != numdt) {
    MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
    SSCRUTE(fieldname);ISCRUTE(_numdt);ISCRUTE(numdt);goto ERROR;
  }

  /*Lit l'attribut MED_NOM_NOR */
  if ( _MEDattrEntierLire(_gid,MED_NOM_NOR, &_numit) < 0) {
    MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
    SSCRUTE(fieldname);SSCRUTE(_path);SSCRUTE(MED_NOM_NOR);
    ISCRUTE(_numit); goto ERROR;
  }

  if ( _numit != numit) {
    MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
    SSCRUTE(fieldname);ISCRUTE(_numit);ISCRUTE(numit);goto ERROR;
  }


  /*Pas d'info maillage local ou distant*/
  if (_MEDattrStringLire(_gid,MED_NOM_MAI,MED_TAILLE_NOM,_meshname) < 0) {
    MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
    SSCRUTE(fieldname);SSCRUTE(_path);SSCRUTE(MED_NOM_MAI);
    SSCRUTE(_meshname); goto ERROR;
  };

  strcat(_path,_meshname);

  if ( _MEDattributeStringRdByName(fid, _path, MED_NOM_GAU, MED_TAILLE_NOM, _localizationname) < 0 ) {
    MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_ATTRIBUTE, MED_ERR_NAME_MSG );
    SSCRUTE(MED_NOM_GAU);SSCRUTE(_localizationname);goto ERROR;
  }

  if ( ! strcmp(_localizationname,MED_NOGAUSSi))
    strcpy(defaultlocalizationname,MED_NO_LOCALIZATION);
  else
    strcpy(defaultlocalizationname,_localizationname);

  if ( _MEDattributeStringRdByName(fid, _path, MED_NOM_PFL, MED_TAILLE_NOM, _profilename) < 0 ) {
    MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_ATTRIBUTE, MED_ERR_NAME_MSG );
    SSCRUTE(MED_NOM_PFL);SSCRUTE(_profilename);goto ERROR;
  }

  if ( strcmp(_profilename,MED_NOPFLi) &&
       strcmp(_profilename,"") ) /* le test MED_NOPFLi pour des raisons de compatibilité */
    {
      strcpy(defaultprofilename,_profilename);
    }  else {
    strcpy(defaultprofilename, MED_NO_PROFILE);
  }


  _ret = (med_int) 1;

 ERROR:


  if (_datagroup1>0)            if (_MEDdatagroupFermer(_datagroup1) < 0) {
    MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path);
    SSCRUTE(_datagroupname1); ISCRUTE_id(_datagroup1);
  }

  if (_gid>0)            if (_MEDdatagroupFermer(_gid) < 0) {
    MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path);
    ISCRUTE_id(_gid);
  }

  va_end(params);
  *fret = _ret;
  return;
}
Example #5
0
med_err 
MEDnomLire(med_idt fid,char *maa, char *nom, med_int n, 
	   med_entite_maillage type_ent,med_geometrie_element type_geo)
{
  med_idt root;
  med_idt maaid = 0;
  med_idt entid = 0;
  med_idt geoid = 0;
  med_err ret = -1;
  char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1];
  char nom_ent[MED_TAILLE_NOM_ENTITE+1];
  char nom_geo[MED_TAILLE_NOM_ENTITE+1];
  med_entite_maillage _type_ent=type_ent;

  if ( type_ent == MED_NOEUD_MAILLE ) _type_ent=MED_NOEUD ;

  /*
   * On inhibe le gestionnaire d'erreur HDF 5
   */
  _MEDmodeErreurVerrouiller();
if (MEDcheckVersion(fid) < 0) return -1;


  /*
   * Si le maillage n'existe pas => erreur
   */
  strcpy(chemin,MED_MAA);
  strcat(chemin,maa);
  if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) {
    MESSAGE("Impossible d'acceder au maillage");
    SSCRUTE(chemin);
    goto ERREUR;
  }
  
  /*
   * On met a jour le nom du "Data Group" representant
   * le type des entites
   */
  if (_MEDnomEntite(nom_ent,_type_ent) < 0) {
    MESSAGE("L'entité demandée n'est pas une entité <med_entite_maillage> : ");
    SSCRUTE(nom_ent); 
    ISCRUTE(_type_ent);
    goto ERREUR;
  }
     
  
  /*
   * Si le "Data Group" des entites n'existe pas => erreur
   */
   if ((entid = _MEDdatagroupOuvrir(maaid,nom_ent)) < 0) { 
     MESSAGE("Impossible d'accéder au groupe des entités : ");
     SSCRUTE(nom_ent); 
     ISCRUTE(_type_ent);
     goto ERREUR;
   }

   /*
    * Pour les mailles, les faces et le aretes,
    * on ouvre le "Data Group" du type geometrique correspondant
    */
   if ((_type_ent==MED_MAILLE)||(_type_ent==MED_FACE)||(_type_ent==MED_ARETE))
     {
       if (_MEDnomGeometrie30(nom_geo,type_geo) < 0) {
	 MESSAGE("L'entité demandée n'est pas un élément <med_geometrie_element> : ");
	 SSCRUTE(nom_geo); 
	 ISCRUTE(type_geo);
	 goto ERREUR;
       }
       
       if ((geoid = _MEDdatagroupOuvrir(entid,nom_geo)) < 0) {
	 MESSAGE("Impossible d'accéder au groupe des éléments géométriques : ");
	 SSCRUTE(nom_geo); 
	 ISCRUTE(type_geo);
	 goto ERREUR;
       }	   
     }
   else /* pour les noeuds */
     geoid = -1;

   /*
    * Lecture du "Data Set" "NOM" :
    * - En cas d'erreur, pas de message car la presence des 
    *   noms est optionnelle dans un maillage MED
    */
   if (geoid == -1)
     root = entid;
   else
     root = geoid;
   if (_MEDdatasetStringLire(root,MED_NOM_NOM,nom) < 0)
     goto ERREUR;

   /*
    * Tout s'est bien passé si on est parvenu jusqu'ici
    */
   ret = 0;

   /*
    * On ferme tout y compris en cas d'erreur
    */
 ERREUR:
   if (geoid > 0)
     if (_MEDdatagroupFermer(geoid) < 0)
       return -1;
   if (entid > 0)
     if (_MEDdatagroupFermer(entid) < 0)
       return -1;
   if (maaid > 0)
     if (_MEDdatagroupFermer(maaid) < 0)
       return -1;

   /* Code retour : 
    *   - ret == 0 en cas de succès
    *   - ret == -1 en cas d'échec 
    */
   return (ret); 
}
Example #6
0
med_err 
MEDconnLire(med_idt fid,char *maa,med_int mdim,med_int *connectivite,med_mode_switch mode_switch,
	    med_int * pfltabtmp, med_size psizetmp,
	    med_entite_maillage type_ent, med_geometrie_element type_geo,med_connectivite type_conn)
{
  med_idt maaid,entid,geoid;
  med_err ret;
  char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1];
  char nom_ent[MED_TAILLE_NOM_ENTITE+1];
  char nom_geo[MED_TAILLE_NOM_ENTITE+1];
  char nom_dataset[MED_TAILLE_NOM_ENTITE+1];
  med_size * pfltab=NULL;
  med_size    psize;
  int dim,nnoe,ndes;
  int taille;  
  int i,j;
  med_entite_maillage _type_ent=type_ent;

  if ( type_ent == MED_NOEUD_MAILLE ) _type_ent=MED_NOEUD ;
  
  /*
   * On inhibe le gestionnaire d'erreur HDF 5
   */
  _MEDmodeErreurVerrouiller();
if (MEDcheckVersion(fid) < 0) return -1;

  
  /*
   * Si le maillage n'existe pas => erreur
   */
  strcpy(chemin,MED_MAA);
  strcat(chemin,maa);
  if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0)
    return -1;

  /*
   * On met a jour le nom du Data Group representant
   * le type des entites
   */
   if ((ret = _MEDnomEntite(nom_ent,_type_ent)) < 0)
     return -1;
   /*
    * Si le Data Group des entites n'existe pas => erreur
    */
   if ((entid = _MEDdatagroupOuvrir(maaid,nom_ent)) < 0)
     return -1;

   /*
    * si le Data Group du type geometrique n'existe pas => erreur
    */
   if ((ret = _MEDnomGeometrie30(nom_geo,type_geo)) < 0)
     return -1;
   if ((geoid = _MEDdatagroupOuvrir(entid,nom_geo)) < 0)
     return -1;

   /*
    * Si le Data Set de la connectivite n'existe pas => erreur
    * Si oui => on le lit
    */
   if ((ret=_MEDparametresGeometrie(_type_ent,type_geo,&dim,&nnoe,&ndes))<0)
     return -1;

   psize = psizetmp;
   switch(type_conn)
     {
     case MED_NOD :
       strcpy(nom_dataset,MED_NOM_NOD);
       taille = nnoe;
       break;

     case MED_DESC :
       strcpy(nom_dataset,MED_NOM_DES);
       taille = ndes;
       if ( psizetmp != MED_NOPF ) {
	 psize = psizetmp;
	 pfltab = (med_size *) malloc (sizeof(med_size)*psize);
	 for (i=0;i<psizetmp;i++)
	   pfltab[i] = (med_size) (pfltabtmp[i]);
       };
       
       break;
       
     default :
       return -1;
     }


#if defined(HAVE_F77INT64)
   if ((ret = _MEDdatasetNumLire(geoid,nom_dataset,MED_INT64,
				 mode_switch,(med_size)taille,MED_ALL,
				 psize,MED_COMPACT,MED_PFL_NON_COMPACT,pfltab,MED_NOPG,0,
				 (unsigned char*) connectivite)) < 0)
     return -1;
#else
   if ((ret = _MEDdatasetNumLire(geoid,nom_dataset,MED_INT32,
				 mode_switch,(med_size) taille,MED_ALL,
				 psize,MED_COMPACT,MED_PFL_NON_COMPACT,pfltab,MED_NOPG,0,
				 (unsigned char*) connectivite)) < 0)
     return -1;
#endif 

   /*
    * On ferme tout 
    */

   if ( (psize != MED_NOPF) && (type_conn == MED_DESC) ) free(pfltab);
  
   if ((ret = _MEDdatagroupFermer(geoid)) < 0)
     return -1;
   if ((ret = _MEDdatagroupFermer(entid)) < 0)
     return -1;
   if ((ret = _MEDdatagroupFermer(maaid)) < 0)
     return -1;

   return 0; 
}
Example #7
0
med_err 
MEDchampRefInfo(med_idt fid,char *champ,
		med_entite_maillage type_ent, med_geometrie_element type_geo,
		int indice, med_int numdt, med_int numo,
		char * maa, med_booleen * local, med_int *ngauss)
{

  med_err ret=-1;
  int num;
  med_idt datagroup3=0,gid_maa=0,gid_lien=0;
  char chemin[(MED_TAILLE_CHA+MED_TAILLE_NOM+1)+(2*MED_TAILLE_NOM_ENTITE+2)+(2*MED_MAX_PARA+1)+(MED_TAILLE_NOM)+1]="";
  char chemin_maa[MED_TAILLE_MAA+MED_TAILLE_NOM+1]="";
  char chemin_lien[MED_TAILLE_LIENS+MED_TAILLE_NOM+1]=""; 
  char nomdatagroup1[2*MED_TAILLE_NOM_ENTITE+2]="";
  char nomdatagroup2[2*MED_MAX_PARA+1]="";
  char tmp1         [MED_TAILLE_NOM_ENTITE+1]="";

  /*
   * On inhibe le gestionnaire d'erreur HDF 5
   */
  _MEDmodeErreurVerrouiller();
if (MEDcheckVersion(fid) < 0) return -1;


  /*
   * On construit le nom du datagroup
   */
  strcpy(chemin,MED_CHA);
  strcat(chemin,champ);
  strcat(chemin,"/");

  /* 
   * Si le Data Group  de niveau 1 <type_ent>[.<type_geo>] n'existe pas => erreur
   */
  /* modif pour la version 2.3.3 */
  
  if (_MEDnomEntite(nomdatagroup1,type_ent) < 0)
    goto ERROR;
  if ((type_ent != MED_NOEUD)) {
    if (_MEDnomGeometrie30(tmp1,type_geo) < 0)
      goto ERROR;
    strcat(nomdatagroup1,".");
    strcat(nomdatagroup1,tmp1);
  }
  strcat(chemin,nomdatagroup1);
  strcat(chemin,"/");

  /*
   * Si le Data Group de niveau 2 <numdtt>.<numoo> n'existe pas => erreur
   */
  sprintf(nomdatagroup2,"%*li%*li",MED_MAX_PARA,(long ) numdt,MED_MAX_PARA,(long ) numo);
  
  strcat(chemin,nomdatagroup2);
  strcat(chemin,"/");


  /*
   * Cherche le datagroup de niveau 3 <maa> correspondant à l'indice <num>
   */
  num = indice - 1;
  if (_MEDobjetIdentifier(fid,chemin,num,maa) < 0) {
    MESSAGE("Impossible de trouver un groupe à l'indice spécifié : ");
    SSCRUTE(chemin); ISCRUTE_int(num); goto ERROR;
  };
  strcat(chemin,maa);
 

  /*
   * Si le Data Group de niveau 3 <maa> n'existe pas => erreur
   */
 
  if ((datagroup3 = _MEDdatagroupOuvrir(fid,chemin)) < 0) {
    MESSAGE("Erreur d'ouverture du datagroup lien au maillage : ");
    SSCRUTE(chemin); goto ERROR;
  };


  /* Lire le nbre des points de GAUSS*/
  if (_MEDattrEntierLire(datagroup3,MED_NOM_NGA,ngauss) < 0) {
    MESSAGE("Erreur à la lecture de l'attribut MED_NOM_NGA : ");
    ISCRUTE(*ngauss);goto ERROR;
  };


  /* Maillage local ou distant */
  strcpy(chemin_maa,MED_MAA);
  strcat(chemin_maa,maa);
  /* Le maillage est il distant */
  if ( (gid_maa = _MEDdatagroupOuvrir(fid,chemin_maa)) < 0)  {
    
    /* Verifie que le maillage est bien référencé comme distant */  
    strcpy(chemin_lien,MED_LIENS);
    strcat(chemin_lien,maa); 
    if ((gid_lien = _MEDdatagroupOuvrir(fid,chemin_lien)) < 0) {
/*       MESSAGE("Le maillage n'est ni local, ni distant : "); */
/*        SSCRUTE(chemin_maa);SSCRUTE(chemin_lien); goto ERROR; */
      *local = MED_FAUX;
    }
  
    *local = MED_FAUX;
    
  } else  
    *local = MED_VRAI;
    
  
  /*
   * On ferme tout 
   */

  ret = 0;

 ERROR:
  
  if (datagroup3>0)     if (_MEDdatagroupFermer(datagroup3) < 0) {
      MESSAGE("Impossible de fermer le datagroup : ");
      ISCRUTE_int(datagroup3); ret = -1; 
  }
  
  if (gid_maa>0)  if (_MEDdatagroupFermer(gid_maa) < 0) {
      MESSAGE("Impossible de fermer le datagroup : ");
      ISCRUTE_id(gid_maa); ret = -1; 
  }
  
  if (gid_lien>0) if (_MEDdatagroupFermer(gid_lien) < 0) {
      MESSAGE("Impossible de fermer le datagroup : ");
      SSCRUTE(chemin_lien); ret = -1; 
  }

  return ret; 
}