med_err MEDscalaireFlottantLire(med_idt fid,char *scalaire, med_float *val,med_int numdt, med_int numo) { med_err ret = 0; med_idt gid, datagroup; med_int type, i; char nomdatagroup[2*MED_MAX_PARA+1]; char chemin[MED_TAILLE_NUM_DATA+MED_TAILLE_NOM+1]; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * Si le groupe HDF "scalaire" n'existe pas => erreur */ strcpy(chemin,MED_NUM_DATA); strcat(chemin,scalaire); if ((gid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * Si le groupe HDF <numdtt>.<numoo> n'existe pas => erreur */ sprintf(nomdatagroup,"%*li%*li",MED_MAX_PARA,(long ) numdt,MED_MAX_PARA,(long ) numo); datagroup = 0; if ( (datagroup = _MEDdatagroupOuvrir(gid,nomdatagroup)) < 0) return -1; if ((ret = _MEDattrEntierLire(gid,MED_NOM_TYP,&type)) < 0) return -1; switch(type) { case MED_FLOAT64 : if ((ret = _MEDattrFloatLire(datagroup,MED_NOM_VAL,val)) < 0) return -1; break; default : return -1; } /* * On ferme tout */ if ((ret = _MEDdatagroupFermer(datagroup)) < 0) return -1; if ((ret = _MEDdatagroupFermer(gid)) < 0) return -1; return ret; }
med_err MEDfileCommentWr(const med_idt fid, const char* const comment) { med_idt _rootId=0; med_err _ret=-1; _MEDmodeErreurVerrouiller(); if (_MEDcheckVersion30(fid) < 0) goto ERROR; /* the root data group is open */ if ((_rootId = _MEDdatagroupOuvrir(fid,"/")) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP," : '/'"); goto ERROR; } /* The comment is stored in a HDF attribute */ if (_MEDattributeStringWr(_rootId,MED_COMMENT_NAME,MED_COMMENT_SIZE,(char*)comment) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_COMMENT_NAME); SSCRUTE(comment); goto ERROR; } _ret = 0; ERROR: /* the "/" group has to be closed */ if (_rootId > 0) if (_MEDdatagroupFermer(_rootId) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP," : '/'"); } return _ret; }
med_err MEDparameterComputationStepInfo(const med_idt fid, const char * const paramname, const int csit, med_int * const numdt, med_int * const numit, med_float * const dt ) { med_err _ret = -1, _err = -1; med_idt _cpstidt = 0; char _path[(MED_TAILLE_NUM_DATA+MED_NAME_SIZE+1)+2*MED_MAX_PARA+1]=MED_NUM_DATA; int _num=csit-1; char _cstpname[2*MED_MAX_PARA+1]=""; _MEDmodeErreurVerrouiller(); /* On recupere le nom du pas de temps */ strcat(_path, paramname); if ( _MEDobjectGetName(fid, _path ,_num, _cstpname) < 0 ) { MED_ERR_(_ret,MED_ERR_ACCESS,MED_ERR_DATAGROUP,_path);ISCRUTE_int(_num); goto ERROR; } /* on ouvre le groupe HDF correspondant */ strcat(_path,"/"); strcat(_path,_cstpname); if ((_cpstidt = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path); goto ERROR; } /* Lecture des attributs */ if (_MEDattrEntierLire(_cpstidt, MED_NOM_NDT, (med_int*) numdt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_NDT); SSCRUTE(_path);ISCRUTE(*numdt);goto ERROR; } if (_MEDattrFloatLire(_cpstidt, MED_NOM_PDT, (med_float*) dt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_PDT); SSCRUTE(_path);RSCRUTE(*dt);goto ERROR; } if (_MEDattrEntierLire(_cpstidt, MED_NOM_NOR, (med_int*) numit) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_NOR); SSCRUTE(_path);ISCRUTE(*numit);goto ERROR; } _ret = 0; ERROR: /* on ferme tout */ if (_cpstidt > 0) if (_MEDdatagroupFermer(_cpstidt) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_cpstidt); } return _ret; }
med_err MEDfichEntete(med_idt fid, med_fich_info quoi, char str[]) { med_idt atid, root; med_err ret; char locale[MED_TAILLE_DESC+1]; char chemin[MED_TAILLE_MAA+1]; switch (quoi) { case MED_HDF_VERSION : strcpy(str,HDF_VERSION_ACTUELLE); break; case MED_VERSION : strcpy(str,PACKAGE_VERSION); break; case MED_FICH_DES : /* * On inhibe le gestionnaire d'erreur HDF */ _MEDmodeErreurVerrouiller(); /* Ajout de la ligne suivante par un script malencontreux ?*/ /* if (MEDcheckVersion(fid) < 0) return -1; */ /* * On ouvre le Data Group racine */ strncpy(chemin,MED_MAA,strlen(MED_MAA)-1); chemin[MED_TAILLE_MAA-1] = '\0'; if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * On regarde si l'attribut existe * Si non => erreur * Si oui => on le copie dans str */ if ((ret = _MEDattrStringLire(root,MED_NOM_DESCRIPTEUR, MED_TAILLE_DESC,locale)) < 0) { _MEDdatagroupFermer(root); return -1; } strcpy(str,locale); if ( _MEDdatagroupFermer(root) < 0) return -1; break; default : return -1; } return 0; }
med_err MEDgaussInfo(med_idt fid, int indice, char * locname, med_geometrie_element * type_geo, med_int * ngauss ) { int numero=0; med_idt locid=0; med_err ret=-1; char chemin[MED_TAILLE_GAUSS+MED_TAILLE_NOM+1]=""; med_int typegeo; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * On recupere le nom du groupe de rang "indice" */ numero = indice-1; if ( _MEDobjetIdentifier(fid,MED_GAUSS,numero,locname) < 0) goto ERROR; /* * On va chercher l'attribut ngauss */ strcpy(chemin,MED_GAUSS); strcat(chemin,locname); if ((locid = _MEDdatagroupOuvrir(fid,chemin)) < 0) { MESSAGE("Impossible d'ouvrir le datagroup : "); SSCRUTE(chemin); goto ERROR; } /* Lecture de <ngauss> */ if (_MEDattrEntierLire(locid,MED_NOM_NBR,ngauss) < 0) { MESSAGE("Erreur à la lecture de l'attribut MED_NOM_NBR : "); ISCRUTE(*ngauss);goto ERROR; }; /* Lecture <type_geo> sous forme d'attribut */ if (_MEDattrEntierLire(locid,MED_NOM_GEO,&typegeo) < 0) { MESSAGE("Erreur à la lecture de l'attribut MED_NOM_GEO : "); ISCRUTE(*type_geo);goto ERROR; }; *type_geo = ( med_geometrie_element ) typegeo; ret = 0; ERROR: if ( locid > 0 ) if (_MEDdatagroupFermer(locid) < 0) goto ERROR; return 0; }
void _MEDmeshUniversalNameRd30(int dummy, ...) { med_err _ret=-1; med_idt _meshid; char _path [MED_TAILLE_MAA+MED_NAME_SIZE+1]=MED_MAA; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , meshname ); MED_VARGS_DECL(, char *, const , univname ); MED_VARGS_DECL(, med_err * ,, fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , meshname ); MED_VARGS_DEF(, char *, const , univname ); MED_VARGS_DEF(, med_err * ,, fret ); /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); /* * Si le maillage n'existe pas => erreur */ strcat(_path,meshname); if ((_meshid = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_meshid);goto ERROR; } if ( _MEDattrStringLire(_meshid,MED_NOM_UNV,MED_LNAME_SIZE,univname) < 0) { _ret = MED_ERR_READ + MED_ERR_ATTRIBUTE; goto ERROR; } _ret = 0; ERROR: if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_meshid); } va_end(params); *fret = _ret; return; }
med_err MEDscalairePasdetempsInfo(med_idt fid,char *scalaire,int indice, med_int * numdt, char * dt_unit, med_float * dt,med_int * numo) { med_err ret=0; med_idt gid; char chemin[MED_TAILLE_NUM_DATA+MED_TAILLE_NOM+1+2*MED_MAX_PARA+1]; int num; char nomdatagroup[2*MED_MAX_PARA+1]; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * On construit le chemine d'acces */ strcpy(chemin,MED_NUM_DATA); strcat(chemin,scalaire); strcat(chemin,"/"); num = indice - 1; if ((ret = _MEDobjetIdentifier(fid,chemin,num,nomdatagroup)) < 0) return -1; strcat(chemin,nomdatagroup); if ((gid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * La liste des attributs */ if ((ret = _MEDattrEntierLire(gid,MED_NOM_NDT,(med_int*) numdt)) < 0) return -1; if ((ret = _MEDattrFloatLire(gid,MED_NOM_PDT,(med_float*) dt)) < 0) return -1; if ((ret = _MEDattrStringLire(gid,MED_NOM_UNI,MED_TAILLE_PNOM,dt_unit)) < 0) return -1; if ((ret = _MEDattrEntierLire(gid,MED_NOM_NOR,(med_int*) numo)) < 0) return -1; /* * On ferme tout */ if ((ret = _MEDdatagroupFermer(gid)) < 0) return -1; return ret; }
med_err MEDscalaireInfo(med_idt fid,int indice,char *scalaire, med_type_champ *type,char *desc) { med_err ret=0; med_idt gid; char chemin[MED_TAILLE_NUM_DATA+MED_TAILLE_NOM+1]; int num; med_int typechamp; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * On recupere le nom du scalaire */ num = indice - 1; strcpy(chemin,MED_NUM_DATA); if ((ret = _MEDobjetIdentifier(fid,chemin,num,scalaire)) < 0) return -1; /* * Si le Groupe HDF "scalaire" n'existe pas => erreur */ strcat(chemin,scalaire); if ((gid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * La liste des attributs */ if ((ret = _MEDattrEntierLire(gid,MED_NOM_TYP, & typechamp)) < 0) return -1; *type = (med_type_champ) typechamp; if ((ret = _MEDattrStringLire(gid,MED_NOM_DES,MED_TAILLE_DESC, desc)) < 0) return -1; /* * On ferme tout */ if ((ret = _MEDdatagroupFermer(gid)) < 0) return -1; return ret; }
med_err MEDnatureGrilleLire(med_idt fid,char *maillage,med_type_grille *type) { med_idt maaid; med_err ret; char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1]; med_maillage maillage_type; med_int att; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * On regarde si le groupe existe => erreur si non */ strcpy(chemin,MED_MAA); strcat(chemin,maillage); if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * Si le maillage est de type MED_NON_STRUCTURE => erreur */ if ((ret = _MEDattrEntierLire(maaid,MED_NOM_TYP,&att)) < 0) return -1; maillage_type = (med_maillage) att; if (maillage_type == MED_NON_STRUCTURE) return -1; /* * On lit le type de la grille */ if ((ret = _MEDattrEntierLire(maaid,MED_NOM_GTY,&att)) < 0) return -1; *type = (med_type_grille) att; /* * Fermeture des objets HDF */ if ((ret = _MEDdatagroupFermer(maaid)) < 0) return -1; return ret; }
int MEDequivInfo(int fid, char *maa, int ind, char *eq, char *des) { med_idt eqid; med_err ret; char chemin[MED_TAILLE_MAA+MED_TAILLE_EQS+2*MED_TAILLE_NOM+1]; int num; int idx; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * On recupere le nom de l'equivalence */ num = ind - 1; strcpy(chemin,MED_MAA); strcat(chemin,maa); strcat(chemin,MED_EQS); if ((idx = _MEDobjetIdentifier(fid,chemin,num,eq)) < 0) return -1; /* * Si le Data Group eq n'existe pas => erreur */ strcat(chemin,eq); if ((eqid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * L'attribut "DES" */ if ((ret = _MEDattrStringLire(eqid,MED_NOM_DES,MED_TAILLE_DESC,des)) < 0) return -1; /* * On ferme tout */ if ((ret = _MEDdatagroupFermer(eqid)) < 0) return -1; return 0; }
med_err MEDversionConforme(const char *nom) { med_int majeur, mineur; med_idt fid, gid; med_err ret; /* * On inhibe le gestionnaire d'erreur HDF */ _MEDmodeErreurVerrouiller(); /* * On ouvre le fichier MED en mode MED_LECT */ if ((fid = _MEDfichierOuvrir((char *)nom,MED_LECTURE)) < 0) return -1; /* * Lecture du numero de version */ if ((gid = _MEDdatagroupOuvrir(fid,MED_INFOS)) < 0) return -1; if ((ret = _MEDattrEntierLire(gid,MED_NOM_MAJEUR,&majeur)) < 0) return -1; if ((ret = _MEDattrEntierLire(gid,MED_NOM_MINEUR,&mineur)) < 0) return -1; /* * On ferme tout */ if ((ret = _MEDdatagroupFermer(gid)) < 0) return -1; if ((ret = _MEDfichierFermer(fid)) < 0) return -1; /* On autorise les versions 2.2.x et 2.3.x , ce qui est le cas depuis med2.3.1 */ if ((majeur == 2) && (mineur >1) && (mineur<4) ) return 0; else return -1; }
med_err MEDunvLire(med_idt fid, char *maa,char *nomu) { med_idt maaid=0; char chemin [MED_TAILLE_MAA+MED_TAILLE_NOM+1]; med_err ret=-1; /* * On inhibe le gestionnaire d'erreur */ _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; /* * Creation/Ecriture de l'attribut nom universel */ if ((ret = _MEDattrStringLire(maaid,MED_NOM_UNV,MED_TAILLE_LNOM, nomu )) < 0) goto ERROR; /* * Nettoyages divers */ ret=0; ERROR: if ( maaid> 0 ) if ( _MEDdatagroupFermer(maaid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(maaid);ret = -1; } return ret; }
med_err MEDprofilInfo(med_idt fid, int indice, char *profilname, med_int *n) { int numero=0; med_idt proid=0; med_err ret=-1; char chemin[MED_TAILLE_PROFILS+MED_TAILLE_NOM+1]=""; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * On recupere le nom du groupe de rang "indice" */ numero = indice-1; if ( _MEDobjetIdentifier(fid,MED_PROFILS,numero,profilname) < 0) goto ERROR; /* * On va chercher l'attribut taille du profil */ strcpy(chemin,MED_PROFILS); strcat(chemin,profilname); if ((proid = _MEDdatagroupOuvrir(fid,chemin)) < 0) goto ERROR; if (_MEDattrEntierLire(proid,MED_NOM_NBR,n) < 0) goto ERROR; ret = 0; ERROR: if ( proid > 0 ) if (_MEDdatagroupFermer(proid) < 0) goto ERROR; return 0; }
med_int MEDnProfil(med_idt fid) { int n=0; med_idt datagroup=0; _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; if ( (datagroup = _MEDdatagroupOuvrir(fid,MED_PROFILS)) < 0) return 0; else if (datagroup) if ( _MEDdatagroupFermer(datagroup) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_int(datagroup); return -1; } if ( _MEDnObjets(fid,MED_PROFILS,&n) < 0 ) return -1; return (med_int) n; }
med_int MEDnValProfil(med_idt fid, char *nom) { med_int n = 0; med_idt gid; char chemin[MED_TAILLE_PROFILS+MED_TAILLE_NOM+1]; med_err ret; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * ouverture du groupe /PROFILS/<nom> */ strcpy(chemin,MED_PROFILS); strcat(chemin,nom); if ((gid = _MEDdatagroupOuvrir(fid,chemin)) < 0){ MESSAGE("Impossible d'ouvrir le groupe MED_PROFILS : "); SSCRUTE(chemin); return -1; } if ((ret = _MEDattrEntierLire(gid,MED_NOM_NBR,&n)) < 0) { MESSAGE("Erreur à la lecture de l'attribut MED_NOM_NBR : "); ISCRUTE(n); return -1; } /* * On ferme tout */ if ((ret = _MEDdatagroupFermer(gid)) < 0) return -1; return n; }
med_int MEDnbnomaLire(med_idt fid,char *nom_maillage) { med_idt maaid; med_err ret; char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1]; med_int n; /* * On inhibe le gestionnaire d'erreur HDF */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * On regarde si le maillage existe => erreur si non */ strcpy(chemin,MED_MAA); strcat(chemin,nom_maillage); if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * On va lire l'attribut "NNM" */ if ((ret = _MEDattrEntierLire(maaid,MED_NOM_NNM,&n)) < 0) return -1; /* * Fermetures des objets HDF */ if ((ret = _MEDdatagroupFermer(maaid)) < 0) return -1; return n; }
med_err MEDnbnosoEcr(med_idt fid, char *nom_maillage,med_int n) { med_idt maaid; char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1]; med_err ret; /* * On inhibe le gestionnaire d'erreur HDF */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * Si le maillage n'existe pas => erreur */ strcpy(chemin,MED_MAA); strcat(chemin,nom_maillage); if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * Creation de l'attribut "Nombre de Noeuds Sommets" */ if ((ret = _MEDattrEntierEcrire(maaid,MED_NOM_NNS,&n)) < 0) return -1; /* * Fermetures */ if ((ret = _MEDdatagroupFermer(maaid)) < 0) return -1; return 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; }
void _MEDsubdomainCorrespondenceSize30(int dummy, ...) { med_err _ret=-1; med_idt _eqid=0,_datagroup1=0,_dataset=0; char _path[MED_JOINT_GRP_SIZE+2*MED_NAME_SIZE+2+2*MED_MAX_PARA+1+4*MED_TAILLE_NOM_ENTITE+4]=MED_JOINT_GRP; char _datagroupname1[2*MED_TAILLE_NOM_ENTITE+2]=""; char _cstpname[2*MED_MAX_PARA+1]=""; med_size _njointarray=0; med_sorting_type _sortingtype=0; med_int _intlocalentitype; med_int _intlocalgeotype; char _localgeotypename [MED_TAILLE_NOM_ENTITE+1]=""; char _remotegeotypename [MED_TAILLE_NOM_ENTITE+1]=""; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , meshname ); MED_VARGS_DECL(const, char * , const , jointname ); MED_VARGS_DECL(const, med_int , , numdt ); MED_VARGS_DECL(const, med_int , , numit ); MED_VARGS_DECL(const, med_entity_type , , localentitype ); MED_VARGS_DECL(const, med_geometry_type , , localgeotype ); MED_VARGS_DECL(const, med_entity_type , , remoteentitype ); MED_VARGS_DECL(const, med_geometry_type , , remotegeotype ); MED_VARGS_DECL(, med_int *, const , nentitycor ); MED_VARGS_DECL(, med_err * ,, fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , meshname ); MED_VARGS_DEF(const, char * , const , jointname ); MED_VARGS_DEF(const, med_int , , numdt ); MED_VARGS_DEF(const, med_int , , numit ); MED_VARGS_DEF(const, med_entity_type , , localentitype ); MED_VARGS_DEF(const, med_geometry_type , , localgeotype ); MED_VARGS_DEF(const, med_entity_type , , remoteentitype ); MED_VARGS_DEF(const, med_geometry_type , , remotegeotype ); MED_VARGS_DEF(, med_int *, const , nentitycor ); MED_VARGS_DEF(, med_err * ,, fret ); /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if ( MEDmeshSortingTypeRd(fid,meshname,&_sortingtype) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API," MEDmeshSortingTypeRd"); SSCRUTE(meshname);ISCRUTE_int(_sortingtype);goto ERROR; } strcat( _path, meshname); strcat( _path, "/"); strcat( _path, jointname); strcat( _path, "/"); _MEDgetComputationStepName(_sortingtype,numdt,numit,&_path[strlen(_path)]); strcat( _path, "/"); /* * Construction du nom de datagroup <localentitype>[.<localgeotype>].<remoteentitype>[.<remotegeotype>] */ if (_MEDgetEntityTypeName(&_path[strlen(_path)],localentitype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(localentitype);SSCRUTE(jointname);goto ERROR; } if ( localentitype != MED_NODE ) { if ( _MEDgetInternalGeometryTypeName(0,_localgeotypename,localgeotype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(localgeotype);SSCRUTE(jointname);goto ERROR; } strcat(_path,"."); strcat(_path,_localgeotypename); } strcat(_path,"."); if (_MEDgetEntityTypeName(&_path[strlen(_path)],remoteentitype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(remoteentitype);SSCRUTE(jointname);goto ERROR; } if ( remoteentitype != MED_NODE ) { if ( _MEDgetInternalGeometryTypeName(fid,_remotegeotypename,remotegeotype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(remotegeotype);SSCRUTE(jointname);goto ERROR; } strcat(_path,"."); strcat(_path,_remotegeotypename); } if ( (_datagroup1 = _MEDdatagroupOuvrir(fid,_path)) < 0 ) { *nentitycor=0; goto SORTIE; } if ((_dataset = _MEDdatasetOuvrir(_datagroup1,MED_NOM_COR)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATASET,MED_NOM_COR); SSCRUTE(_path); goto ERROR; } if ( _MEDattrEntierLire(_dataset,MED_NOM_NBR,nentitycor) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_SUBDOMAINJOINT_MSG); SSCRUTE(_path);SSCRUTE(MED_NOM_NBR);ISCRUTE(*nentitycor); goto ERROR; } SORTIE: _ret = 0; ERROR: if (_dataset>0) if (_MEDdatasetFermer(_dataset) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATASET,MED_NOM_COR); ISCRUTE_id(_dataset); } if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_datagroup1); } va_end(params); *fret = _ret; return; }
void _MEDlocalizationInfoByName30(int dummy, ...) { med_idt _lzid = 0; med_err _ret = -1; char _path[MED_TAILLE_GAUSS+MED_NAME_SIZE+1]=MED_GAUSS; char _sectiongeotypename[MED_TAILLE_NOM_ENTITE+1]=""; med_int _intgeotype = -1,_nsectiongeotype=0, _nsectionmeshcell=0; med_entity_type _sectionentitype = MED_CELL; med_geometry_type _sectiongeotype = MED_UNDEF_GEOTYPE; med_data_type _conorcoo = MED_CONNECTIVITY; med_bool _chgt=MED_FALSE,_trsf=MED_FALSE; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , localizationname ); MED_VARGS_DECL(, med_geometry_type *, const , geotype ); MED_VARGS_DECL(, med_int *, const , spacedimension ); MED_VARGS_DECL(, med_int *, const , nipoint ); MED_VARGS_DECL(, char *, const , geointerpname ); MED_VARGS_DECL(, char *, const , sectionmeshname ); MED_VARGS_DECL(, med_int *, const , nsectionmeshcell ); MED_VARGS_DECL(, med_geometry_type *, const , sectiongeotype ); MED_VARGS_DECL(, med_err * ,, fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , localizationname ); MED_VARGS_DEF(, med_geometry_type *, const , geotype ); MED_VARGS_DEF(, med_int *, const , spacedimension ); MED_VARGS_DEF(, med_int *, const , nipoint ); MED_VARGS_DEF(, char *, const , geointerpname ); MED_VARGS_DEF(, char *, const , sectionmeshname ); MED_VARGS_DEF(, med_int *, const , nsectionmeshcell ); MED_VARGS_DEF(, med_geometry_type *, const , sectiongeotype ); MED_VARGS_DEF(, med_err * ,, fret ); /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); /* * ouverture du groupe /GAUSS/"nom" */ strcat(_path,localizationname); if ((_lzid = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_LOCALIZATION_MSG); SSCRUTE(_path); goto ERROR; } /* * Lecture de l'attribut MED_NOM_NBR */ if (_MEDattrEntierLire(_lzid,MED_NOM_NBR,nipoint) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG); SSCRUTE(_path);SSCRUTE(MED_NOM_NBR);ISCRUTE(*nipoint); goto ERROR; } /* * On lit <typgeo> sous forme d'attribut */ /* sizeof(enum) tjrs = sizeof(int) en C, or sur machines 64 bits par défaut med_int==long, du coup sur machines 64 bits _MEDattributeIntWr utilise le type hdf NATIVE_LONG, ce qui pose un problème qd on passe un enum. */ if (_MEDattrEntierLire(_lzid,MED_NOM_GEO,&_intgeotype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG); SSCRUTE(localizationname);SSCRUTE(MED_NOM_GEO);ISCRUTE(_intgeotype); goto ERROR; }; *geotype = (med_geometry_type) _intgeotype; /* * On lit <spacedimension> */ if (_MEDattrEntierLire(_lzid,MED_NOM_DIM,spacedimension) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG); SSCRUTE(localizationname);SSCRUTE(MED_NOM_DIM);ISCRUTE(*spacedimension); goto ERROR; }; /* * Lecture de l'attribut MED_NOM_NOM (nom du maillage de section) */ if ( _MEDattrStringLire(_lzid,MED_NOM_NOM,MED_NAME_SIZE,sectionmeshname) < 0) { sectionmeshname[0]='\0'; } if ( strlen(sectionmeshname) && ( _intgeotype > MED_STRUCT_GEO_INTERNAL) && ( _intgeotype < MED_STRUCT_GEO_SUP_INTERNAL) ) { if ( _MEDgetSupportMeshNbOfEntities(fid,sectionmeshname,&_sectionentitype, &_sectiongeotype,NULL,&_nsectionmeshcell) < 0) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDgetSupportMeshNbOfEntities"); SSCRUTE(sectionmeshname);ISCRUTE_int(_sectionentitype); ISCRUTE(_sectiongeotype);ISCRUTE(_nsectionmeshcell);goto ERROR; } } *sectiongeotype= _sectiongeotype; *nsectionmeshcell= _nsectionmeshcell; if ( _MEDattrStringLire(_lzid,MED_NOM_INM,MED_NAME_SIZE,geointerpname) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG); SSCRUTE(localizationname);SSCRUTE(MED_NOM_INM);SSCRUTE(geointerpname); goto ERROR; } _ret = 0; ERROR: if ( _lzid > 0 ) if ( _MEDdatagroupFermer(_lzid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_GAUSS); ISCRUTE_id(_lzid); } va_end(params); *fret = _ret; return; }
void _MEDlocalizationInfoByName236(int dummy, ...) { med_idt _lzid=0; med_err _ret=-1; char _path[MED_TAILLE_GAUSS+MED_NAME_SIZE+1]=MED_GAUSS; med_int _intgeotype = -1; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , localizationname ); MED_VARGS_DECL(, med_geometry_type *, const , geotype ); MED_VARGS_DECL(, med_int *, const , spacedimension ); MED_VARGS_DECL(, med_int *, const , nipoint ); MED_VARGS_DECL(, char *, const , geointerpname ); MED_VARGS_DECL(, char *, const , sectionmeshname ); MED_VARGS_DECL(, med_int *, const , nsectionmeshcell ); MED_VARGS_DECL(, med_geometry_type *, const , sectiongeotype ); MED_VARGS_DECL(, med_err * ,, fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , localizationname ); MED_VARGS_DEF(, med_geometry_type *, const , geotype ); MED_VARGS_DEF(, med_int *, const , spacedimension ); MED_VARGS_DEF(, med_int *, const , nipoint ); MED_VARGS_DEF(, char *, const , geointerpname ); MED_VARGS_DEF(, char *, const , sectionmeshname ); MED_VARGS_DEF(, med_int *, const , nsectionmeshcell ); MED_VARGS_DEF(, med_geometry_type *, const , sectiongeotype ); MED_VARGS_DEF(, med_err * ,, fret ); /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); /* * ouverture du groupe /GAUSS/"nom" */ strcat(_path,localizationname); if ((_lzid = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_LOCALIZATION_MSG); SSCRUTE(_path); goto ERROR; } /* * Lecture de l'attribut MED_NOM_NBR */ if (_MEDattrEntierLire(_lzid,MED_NOM_NBR,nipoint) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG); SSCRUTE(_path);SSCRUTE(MED_NOM_NBR);ISCRUTE(*nipoint); goto ERROR; } /* * On lit <typgeo> sous forme d'attribut */ /* sizeof(enum) tjrs = sizeof(int) en C, or sur machines 64 bits par défaut med_int==long, du coup sur machines 64 bits _MEDattributeIntWr utilise le type hdf NATIVE_LONG, ce qui pose un problème qd on passe un enum. */ if (_MEDattrEntierLire(_lzid,MED_NOM_GEO,&_intgeotype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG); SSCRUTE(localizationname);SSCRUTE(MED_NOM_GEO);ISCRUTE(_intgeotype); goto ERROR; }; *geotype = (med_geometry_type) _intgeotype; *spacedimension = (_intgeotype/100); sectionmeshname[0]='\0'; geointerpname[0]='\0'; *nsectionmeshcell=0; *sectiongeotype=MED_UNDEF_GEOTYPE; _ret = 0; ERROR: if ( _lzid > 0 ) if ( _MEDdatagroupFermer(_lzid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_GAUSS); ISCRUTE_id(_lzid); } va_end(params); *fret = _ret; return; }
void _MEDmeshnEntity236(int dummy, ...) { med_int _ret=-1,_n=0,_tmpn=0; med_size _nn =0; med_data_type _meddatatype; med_int _nfaces=0; char _meshpath[MED_TAILLE_MAA+MED_TAILLE_NOM+1]=MED_MAA; med_idt _meshid=0,_datagroup1=0; char _datagroupname1[MED_TAILLE_NOM_ENTITE+1]=""; med_err _err =0; med_bool _datagroupexist=MED_FALSE; med_bool _isasoftlink =MED_FALSE; int _cmodeit=0, _ncmode=1; med_connectivite _cmode[2] = { MED_NO_CMODE, MED_NO_CMODE }; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , meshname ); 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(const, med_data_type , , meddatatype ); MED_VARGS_DECL(const, med_connectivity_mode , , cmode ); MED_VARGS_DECL(const, med_storage_mode , , storagemode ); MED_VARGS_DECL(, char *, const , profilename ); MED_VARGS_DECL(, med_int *, const , profilesize ); MED_VARGS_DECL(, med_bool *, const , changement ); MED_VARGS_DECL(, med_bool *, const , transformation ); 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 , meshname ); 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(const, med_data_type , , meddatatype ); MED_VARGS_DEF(const, med_connectivity_mode , , cmode ); MED_VARGS_DEF(const, med_storage_mode , , storagemode ); MED_VARGS_DEF(, char *, const , profilename ); MED_VARGS_DEF(, med_int *, const , profilesize ); MED_VARGS_DEF(, med_bool *, const , changement ); MED_VARGS_DEF(, med_bool *, const , transformation ); MED_VARGS_DEF(, med_int * ,, fret ); _meddatatype=meddatatype; if ( (numdt != MED_NO_DT) || (numit != MED_NO_IT) ) { MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_COMPUTINGSTEP,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } _cmode[0]= (med_connectivite) cmode; if ( entitytype == MED_UNDEF_ENTITY_TYPE ) goto SORTIE; /* * Gestion entitytype == MED_ALL_ENTITY_TYPE */ if ( entitytype == MED_ALL_ENTITY_TYPE ) { strcat(_meshpath,meshname); if ((_meshid = _MEDdatagroupOuvrir(fid,_meshpath)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_meshpath); ISCRUTE_id(_meshid);goto ERROR; } if( _MEDdatagroupExist(_meshid,MED_NOM_NOE,&_datagroupexist,&_isasoftlink) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDdatagroupExist"); SSCRUTE(MED_NOM_NOE);goto ERROR; } if ( _datagroupexist ) _nn++; if( _MEDdatagroupExist(_meshid,MED_NOM_MAI,&_datagroupexist,&_isasoftlink) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDdatagroupExist"); SSCRUTE(MED_NOM_MAI);goto ERROR; } if ( _datagroupexist ) _nn++; if( _MEDdatagroupExist(_meshid,MED_NOM_FAC,&_datagroupexist,&_isasoftlink) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDdatagroupExist"); SSCRUTE(MED_NOM_FAC);goto ERROR; } if ( _datagroupexist ) _nn++; if( _MEDdatagroupExist(_meshid,MED_NOM_ARE,&_datagroupexist,&_isasoftlink) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDdatagroupExist"); SSCRUTE(MED_NOM_ARE);goto ERROR; } if ( _datagroupexist ) _nn++; /* En 2.3.6 les familles, les équivalences ... sont stockées dans le groupe <meshname>*/ /* _err=_MEDnObjects(_meshid,".",&_nn); */ /* if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) { */ /* MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_meshid); */ /* goto ERROR; */ /* } */ _n = _nn; goto SORTIE; } if ( geotype == MED_GEO_ALL ) { strcat(_meshpath,meshname); if ((_meshid = _MEDdatagroupOuvrir(fid,_meshpath)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_meshpath); ISCRUTE_id(_meshid);goto ERROR; } if (_MEDgetEntityTypeName(_datagroupname1,entitytype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(entitytype);SSCRUTE(meshname);goto ERROR; } if ((_datagroup1 = _MEDdatagroupOuvrir(_meshid,_datagroupname1)) < 0) { _n=0;_datagroup1=0; goto SORTIE; } _err=_MEDnObjects(_datagroup1,".",&_nn); if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) { MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_datagroupname1); goto ERROR; } /* SSCRUTE(_datagroupname1);ISCRUTE_long(_nn); */ if ( ( entitytype == MED_NODE ) && (_nn > 0) ) _nn=1; /* SSCRUTE(_datagroupname1);ISCRUTE_long(_nn); */ _n = _nn; goto SORTIE; } switch( meddatatype ) { case MED_GLOBAL_NUMBER: case MED_NAME: case MED_NUMBER: case MED_FAMILY_NUMBER: switch (entitytype) { case MED_NODE: /*Pour connaître le nombre d'entités des attributs optionnels, on se base sur le tableau de coordonnées */ /* _meddatatype = MED_COORDINATE; */ break; case MED_CELL: case MED_DESCENDING_FACE: case MED_DESCENDING_EDGE: /*Pour connaître le nombre d'entités des attributs optionnels, on se base sur le tableau de connectivité */ /* _meddatatype = MED_CONNECTIVITY; */ /* * Positionne un mode de connectivité _cmode si le meddatatype demandé * est autre chose que des coordonnées ou des connectivités et le cmode non * positionné. * Cette Information est necessaire pour construire le nom du datatset. */ if ( _cmode[0] == MED_NO_CMODE ) { _ncmode =2;_cmode[0]=MED_NOD;_cmode[1]=MED_DESC; } break; default: MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(entitytype);goto ERROR; } goto CALL_NENT; case MED_COORDINATE: /*Par extension au CONNECTIVITY mais ne devrait pas être utilisé.*/ case MED_CONNECTIVITY: if ( geotype == MED_POLYGON2 ) {_n=0; break;} if ( geotype == MED_POLYGON ) { if ( MEDpolygoneInfo( fid,(char *)meshname, (med_entite_maillage) entitytype, (med_connectivite) _cmode[0], &_n) < 0) { /* MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDpolygoneInfo");SSCRUTE(meshname); */ /* ISCRUTE(meddatatype);ISCRUTE(entitytype);ISCRUTE(geotype);goto ERROR; */ _n=0; } break; } if ( geotype == MED_POLYHEDRON ) { if ( MEDpolyedreInfo(fid,(char *) meshname, (med_connectivite) _cmode[0] ,&_nfaces,&_n) < 0) { /* MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDpolyedreInfo");SSCRUTE(meshname); */ /* ISCRUTE(meddatatype);ISCRUTE(entitytype);ISCRUTE(geotype);goto ERROR; */ _n=0; } break; } goto CALL_NENT; case MED_INDEX_FACE: if ( geotype == MED_POLYHEDRON ) { _meddatatype = MED_CONNECTIVITY; _n=1 ; goto CALL_NENT; /* if ( (_n = MEDnEntMaa(fid,meshname,(med_table) MED_CONNECTIVITY, (med_entite_maillage) MED_CELL, */ /* (med_geometrie_element) MED_POLYHEDRON, (med_connectivite) MED_NOD)) < 0) { */ /* MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDnEntMaa");SSCRUTE(meshname); */ /* ISCRUTE(meddatatype);ISCRUTE(entitytype);ISCRUTE(geotype);goto ERROR; */ /* } */ _n+=1; break; } else { MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(geotype); goto ERROR; } case MED_INDEX_NODE: if ( geotype == MED_POLYHEDRON ) { if ( MEDpolyedreInfo(fid,(char *) meshname, (med_connectivite) _cmode[0],&_nfaces, &_n) < 0) { /* MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDpolyedreInfo");SSCRUTE(meshname); */ /* ISCRUTE(meddatatype);ISCRUTE(entitytype);ISCRUTE(geotype);goto ERROR; */ _nfaces=0; } _n=_nfaces; break; } else if ( (geotype == MED_POLYGON) || (geotype == MED_POLYGON2) ) { _meddatatype = MED_CONNECTIVITY; _n = 1; } else { MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(geotype);goto ERROR; } case MED_COORDINATE_AXIS1: case MED_COORDINATE_AXIS2: case MED_COORDINATE_AXIS3: CALL_NENT: for (_cmodeit=0; _cmodeit < _ncmode; ++_cmodeit) if ( (_tmpn = MEDnEntMaa( fid, (char *) meshname, (med_table) _meddatatype, (med_entite_maillage) entitytype, (med_geometrie_element) geotype, (med_connectivite) _cmode[_cmodeit]) ) > 0 ) break; if ( _tmpn < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDnEntMaa");SSCRUTE(meshname); ISCRUTE_int(_meddatatype);ISCRUTE_int(entitytype);ISCRUTE_int(geotype);goto ERROR; } _n+=_tmpn; break; default: MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_MEDDATATYPE,MED_ERR_VALUE_MSG); ISCRUTE_int(meddatatype);goto ERROR; } SORTIE: *transformation = MED_FALSE; /*TODO : 3.0.1 : Tester la présence d'autres datasets que les coord/conn/index pour positionner chgt TRUE uniquement dans ce cas de figure.*/ *changement = MED_TRUE; *profilesize = 0; profilename[0] = '\0'; _ret = _n; ERROR: if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname1); ISCRUTE_id(_datagroup1); } if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath); ISCRUTE_id(_meshid); } *fret = _ret; va_end(params); return; }
void _MEDequivalenceInfo30(int dummy, ...) { med_idt _eqid=0; med_err _ret=-1,_err=-1; char _path[MED_TAILLE_EQS+2*MED_NAME_SIZE+2]=MED_EQS; char _cstpname[2*MED_MAX_PARA+1]=""; int _num; int _pathreflen=0; med_size _nstep=0,_nocstpncorrespondence=0; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , meshname ); MED_VARGS_DECL(const, int , , equivit ); MED_VARGS_DECL(, char *, const , equivname ); MED_VARGS_DECL(, char *, const , equivdescription ); MED_VARGS_DECL(, med_int *, const , nstep ); MED_VARGS_DECL(, med_int *, const , nocstpncorrespondence ); MED_VARGS_DECL(, med_err * ,, fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , meshname ); MED_VARGS_DEF(const, int , , equivit ); MED_VARGS_DEF(, char *, const , equivname ); MED_VARGS_DEF(, char *, const , equivdescription ); MED_VARGS_DEF(, med_int *, const , nstep ); MED_VARGS_DEF(, med_int *, const , nocstpncorrespondence ); MED_VARGS_DEF(, med_err * ,, fret ); _num=equivit-1; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); /* * On recupere le nom de l'equivalence */ strcat(_path,meshname); _pathreflen=strlen(_path); if ( _MEDobjectGetName(fid, _path ,_num, equivname) < 0 ) { MED_ERR_(_ret,MED_ERR_ACCESS,MED_ERR_DATAGROUP,_path);ISCRUTE_int(equivit); goto ERROR; } _path[_pathreflen]='/'; strncpy(&_path[_pathreflen+1],equivname,MED_NAME_SIZE+1); if ((_eqid = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_EQUIVALENCE_MSG); SSCRUTE(_path); goto ERROR; } /* * L'attribut DES */ if ( _MEDattrStringLire(_eqid,MED_NOM_DES,MED_COMMENT_SIZE,equivdescription) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_EQUIVALENCE_MSG); SSCRUTE(equivname);SSCRUTE(_path);SSCRUTE(MED_NOM_DES); goto ERROR; } /* * Nombre d'$(0!;(Btapes de calcul */ if (_MEDnObjects(_eqid,".",&_nstep) <0) { MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_path); goto ERROR; } *nstep = (med_int) _nstep; /* * Nombre de correspondence pour <MED_NO_DT,MED_NO_IT> */ _MEDgetComputationStepName(MED_SORT_DTIT,MED_NO_DT,MED_NO_IT,_cstpname); if ( (_err=_MEDnObjects(_eqid, _cstpname, &_nocstpncorrespondence)) < 0 ) if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) { MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_cstpname); goto ERROR; } *nocstpncorrespondence = (med_int) _nocstpncorrespondence; _ret = 0; ERROR: if (_eqid>0) if (_MEDdatagroupFermer(_eqid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,&_path[_pathreflen]); ISCRUTE_id(_eqid); } va_end(params); *fret = _ret; return; }
void _MEDfieldCr31(int dummy, ...) { med_err _ret=-1; med_idt _root=0,_datagroup1=0; med_int _fieldtype ; char _datagroupname1[MED_NAME_SIZE+1]=""; med_access_mode _MED_ACCESS_MODE; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , fieldname ); MED_VARGS_DECL(const, med_field_type , , fieldtype ); MED_VARGS_DECL(const, med_int , , ncomponent ); MED_VARGS_DECL(const, char *, const , componentname ); MED_VARGS_DECL(const, char *, const , componentunit ); MED_VARGS_DECL(const, char *, const , dtunit ); MED_VARGS_DECL(const, char *, const , meshname ); MED_VARGS_DECL(, med_err * , , 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_field_type, , fieldtype ); MED_VARGS_DEF(const, med_int , , ncomponent ); MED_VARGS_DEF(const, char *, const , componentname ); MED_VARGS_DEF(const, char *, const , componentunit ); MED_VARGS_DEF(const, char *, const , dtunit ); MED_VARGS_DEF(const, char *, const , meshname ); MED_VARGS_DEF(, med_err * , , fret ); _MEDmodeErreurVerrouiller(); _fieldtype = (med_int) fieldtype; if (_MEDcheckVersion30(fid) < 0) goto ERROR; if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); ISCRUTE_int(_MED_ACCESS_MODE); goto ERROR; } /* * Si le DataGroup MED_FIELD_GRP n'existe pas, on le cree */ if ((_root = _MEDdatagroupOuvrir(fid,MED_FIELD_GRP)) < 0) if ((_root = _MEDdatagroupCreer(fid,MED_FIELD_GRP)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_FIELD_GRP); goto ERROR; } NOFINALBLANK(fieldname,ERROR); /* * Si le Data Group "/CHA/<fieldname>" n'existe pas, on le cree */ if ((_datagroup1 = _MEDdatagroupOuvrir(_root,fieldname)) < 0) if ((_datagroup1 = _MEDdatagroupCrOrderCr(_root,fieldname)) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_FIELD_GRP); SSCRUTE(fieldname);goto ERROR; } /* * Les infos sur les composantes du champ */ if ( _MEDattributeIntWr(_datagroup1,MED_NOM_NCO,&ncomponent) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NCO); ISCRUTE(ncomponent);goto ERROR; } /* Tous les types med_field_type sont autorisés dans MEDfieldCr mais : Avant la 3.3.0 seuls les types : MED_FLOAT64,MED_INT32 et MED_INT64 étaient autorisés dans MEDfieldValueAdvancedWr et seul le type med_int et med_float64 pouvaient être utilisés en C. A l'écriture, si med_int=int les champs MED_INT32 étaient stockés en interne en HDFINT32bits A l'écriture, si med_int=long les champs MED_INT32 étaient stockés en interne en HDFINT64bits A la lecture : - si med_int=int le champ MED_INT32 est relu en en HDFINT32bit avec conversion 64->32 si necessaire - si med_int=long le champ MED_INT32 est relu en en HDFINT64bit avec conversion 32->64 si necessaire A l'écriture, si med_int=int les champs MED_INT64 étaient interdits A l'écriture, si med_int=long les champs MED_INT64 étaient stockés en interne en HDFINT64bits A la lecture : - si med_int=int le champ MED_INT64 ne pouvait pas être relu (pour prevenir la perte d'information) - si med_int=long le champ MED_INT64 est relu sans conversion Depuis la 3.3.0 en plus des types MED_FLOAT64,MED_INT32 et MED_INT64 les types MED_FLOAT32 et MED_INT sont autorisés dans MEDfieldValueAdvancedWr et aux types med_int et med_float64 utilisés en C sont ajoutés les types med_float32, med_int32 et med_int64. MED_INT32 : A l'écriture : si med_int=int les champs MED_INT32 sont toujours stockés en interne en HDFINT32bits (utiliser med_int32 ou med_int(!)) si med_int=long les champs MED_INT32 sont désormais stockés en interne en HDFINT32bits (utiliser le type med_int64) et désormais A la lecture : si med_int=int les champs MED_INT32 sont toujours relus en HDFINT32bits sans conversion (utiliser med_int32 ou med_int(!)) si med_int=long les champs MED_INT32 sont désormais relus en HDFINT32bits sans conversion (utiliser le type med_int32) MED_INT64 : A l'écriture : si med_int=int les champs MED_INT64 sont désormais autorisés et stockés en interne en HDFINT64bits (utiliser le type med_int64) si med_int=long les champs MED_INT64 sont toujours autorisés et stockés en interne en HDFINT64bits (utiliser le type med_int64 ou med_int(!)) A la lecture : si med_int=int les champs MED_INT64 sont désormais relus en HDFINT64bits sans conversion (utiliser le type med_int64) si med_int=long les champs MED_INT64 sont toujours relus en HDFINT64bits sans conversion (utiliser le type med_int64 ou med_int(!)) MED_INT : A l'écriture : si med_int=int les champs MED_INT sont désormais acceptés et stockés en interne en HDFINT32bits (utiliser med_int ou med_int32(!)) si med_int=long les champs MED_INT sont désormais acceptés et stockés en interne en HDFINT64bits (utiliser med_int ou med_int64(!)) A la lecture : si med_int=int les champs MED_INT sont désormais acceptés et relus en HDFINT32bits avec conversion/maxint si necessaire (utiliser med_int ou med_int32(!)) si med_int=long les champs MED_INT sont désormais acceptés et relus en HDFINT64bits avec conversion si necessaire (utiliser le type med_int32) Plateforme 32 bits : TODO si la plateforme est 32 bits, il faut .... ? */ if ( _MEDattributeIntWr(_datagroup1,MED_NOM_TYP,&_fieldtype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_TYP); ISCRUTE(_fieldtype);goto ERROR; } if ( _MEDattributeStringWr(_datagroup1,MED_NOM_NOM, MED_SNAME_SIZE*ncomponent,componentname) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NOM); SSCRUTE(componentname);goto ERROR; } if ( _MEDattributeStringWr(_datagroup1,MED_NOM_UNI, MED_SNAME_SIZE*ncomponent,componentunit) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_UNI); SSCRUTE(componentunit);goto ERROR; } /*MODEL : MED_NOM_UNI vient du niveau en dessous Cree ou ouvre l'attribut MED_NOM_UNI pour écriture */ if ( _MEDattributeStringWr(_datagroup1,MED_NOM_UNT,MED_SNAME_SIZE,dtunit) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_UNT); SSCRUTE(dtunit);goto ERROR; } /*MODEL : MED_NOM_MAI est écrit dans l'API de création de champ * Si c'est la première référence à un maillage, initialise l'attribut MED_MAI à ce maillage */ NOFINALBLANK(meshname,ERROR); if (_MEDattributeStringWr(_datagroup1,MED_NOM_MAI,MED_NAME_SIZE,meshname) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_MAI); SSCRUTE(meshname); MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,meshname); goto ERROR; } /* * On ferme tout */ _ret=0; ERROR: if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname1); ISCRUTE_id(_datagroup1); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_FIELD_GRP); ISCRUTE_id(_root); } va_end(params); *fret = _ret; return; }
med_err MEDcoordLire(med_idt fid, char *maa, med_int mdim, med_float *coo, med_mode_switch mode_coo,med_int numco, med_int * pfltabtmp, med_size psize, med_repere *type_rep, char *nom, char *unit) { med_idt maaid, noeid, dataset; med_err ret; char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1]; int i,j; med_float *new_coo; med_int type_rep_int; med_size * pfltab; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * Si le maillage n'existe pas => erreur * Sinon on recupere sa dimension au passage */ strcpy(chemin,MED_MAA); strcat(chemin,maa); if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; /* * Si le Data Group "NOE" n'existe pas => erreur */ if ((noeid = _MEDdatagroupOuvrir(maaid,MED_NOM_NOE)) < 0) return -1; /* * Convertion de med_int en med_size */ if ( psize != MED_NOPF ) { pfltab = (med_size *) malloc (sizeof(med_size)*psize); for (i=0;i<psize;i++) pfltab[i] = (med_size) pfltabtmp[i]; } /* * Lecture du Data Set "COO" */ if ((ret = _MEDdatasetNumLire(noeid,MED_NOM_COO,MED_FLOAT64, mode_coo,mdim,numco, psize,MED_COMPACT,MED_PFL_NON_COMPACT,pfltab,MED_NOPG,0, (unsigned char*) coo)) < 0) return -1; /* * On re-ouvre le Data Set "COO" pour y lire des attributs */ if ((dataset = _MEDdatasetOuvrir(noeid,MED_NOM_COO)) < 0) return -1; /* * L'attribut "REP" */ if ((ret = _MEDattrEntierLire(dataset,MED_NOM_REP,&type_rep_int)) < 0) return -1; else *type_rep = (med_repere) type_rep_int; /* * Attribut "NOM" */ if ((ret = _MEDattrStringLire(dataset,MED_NOM_NOM,mdim*MED_TAILLE_PNOM, nom)) < 0) return -1; /* * Attribut "UNI" */ if ((ret = _MEDattrStringLire(dataset,MED_NOM_UNI,mdim*MED_TAILLE_PNOM, unit)) < 0) return -1; /* * On ferme tout */ if ( psize != MED_NOPF ) free(pfltab); if ((ret = _MEDdatasetFermer(dataset)) < 0) return -1; if ((ret = _MEDdatagroupFermer(noeid)) < 0) return -1; if ((ret = _MEDdatagroupFermer(maaid)) < 0) return -1; return 0; }
void MAJ_21_22_elements_maillage(med_idt mid, med_int dimension) { med_idt eid,gid,did,tid; med_err ret; int i,j; med_geometrie_element typmai[MED_NBR_GEOMETRIE_MAILLE] = {MED_POINT1,MED_SEG2, MED_SEG3,MED_TRIA3, MED_TRIA6,MED_QUAD4, MED_QUAD8,MED_TETRA4, MED_TETRA10,MED_HEXA8, MED_HEXA20,MED_PENTA6, MED_PENTA15,MED_PYRA5, MED_PYRA13}; int taille, edim; char *nom, *nouvelle_chaine; char nomgroup[MED_TAILLE_NOM_ENTITE+1]; med_int n; med_size dimd[1]; med_int *old_conn,*conn; /* On ne regarde que les mailles et la connectivité nodale */ eid = _MEDdatagroupOuvrir(mid,(char *)(MED_NOM_MAI)); EXIT_IF(eid < 0,"Ouverture du groupe HDF MED_NOM_MAI",NULL); /* On normalise selon tous les types geometriques */ for (i=0;i<MED_NBR_GEOMETRIE_MAILLE;i++) { /* On recupere le nom du groupe HDF */ _MEDnomGeometrie(nomgroup,typmai[i]); /* On accède au type s'il existe dans le fichier */ gid = _MEDdatagroupOuvrir(eid,nomgroup); if (gid < 0) continue; /* Nombre d'element ? */ did = _MEDdatasetOuvrir(gid,(char *)(MED_NOM_NOD)); EXIT_IF(did < 0,"Ouverture du dataset HDF MED_NOM_NOD",NULL); ret = _MEDattrEntierLire(did,(char *)(MED_NOM_NBR),&n); EXIT_IF(ret < 0,"Lecture du nombre d'elements",NULL); ret = _MEDdatasetFermer(did); EXIT_IF(ret < 0,"Fermeture du dataset HDF MED_NOM_NOD",NULL); /* on normalise la connectivité si edim < dimension */ edim = typmai[i] / 100; if (edim < dimension) { taille = typmai[i]%100 + 1; old_conn = (med_int *) malloc(sizeof(med_int)*taille*n); EXIT_IF(old_conn == NULL,NULL,NULL); #if defined(HAVE_F77INT64) ret = _MED21datasetNumLire(gid,(char *)(MED_NOM_NOD),MED_INT64, MED_NO_INTERLACE,(med_size)taille,MED_ALL, 0,NULL,MED_NOPG, (unsigned char*) old_conn,H5T_NATIVE_INT); #else ret = _MED21datasetNumLire(gid,(char *)(MED_NOM_NOD),MED_INT32, MED_NO_INTERLACE,(med_size) taille,MED_ALL, 0,NULL,MED_NOPG, (unsigned char*) old_conn,H5T_NATIVE_INT); #endif /* On recopie dans le bon tableau */ taille --; conn = (med_int *) malloc(sizeof(med_int)*taille*n); EXIT_IF(conn == NULL,NULL,NULL); for (j=0;j<n*taille;j++) *(conn+j) = *(old_conn+j); dimd[0] = n*taille; #if defined(HAVE_F77INT64) ret = _MED231datasetNumEcrire(gid,(char *) "TMP",MED_INT64,MED_NO_INTERLACE, taille,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,MED_NOPG,dimd, (unsigned char*) conn); #else ret = _MED231datasetNumEcrire(gid,(char *) "TMP",MED_INT32,MED_NO_INTERLACE, taille,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,MED_NOPG,dimd, (unsigned char*) conn); #endif EXIT_IF(ret < 0,"Ecriture de la nouvelle connectivité des mailles",NULL); /* Ecriture du nombre de mailles dans le dataset HDF TMP */ tid = _MEDdatasetOuvrir(gid,"TMP"); EXIT_IF(tid < 0,"Ouverture du dataset HDF TMP",NULL); ret = _MEDattrEntierEcrire(tid,(char *)(MED_NOM_NBR),&n); EXIT_IF(ret < 0,"Ecriture du nombre de noeuds dans le dataset HDF TMP",NULL); ret = _MEDdatasetFermer(tid); EXIT_IF(ret < 0,"Fermeture du dataset HDF TMP",NULL); /* Fermeture de l'accès aux connectivites */ ret = H5Gunlink(gid,(char *)(MED_NOM_NOD)); EXIT_IF(ret < 0,"Suppression des anciennes connectivités",NULL); ret = H5Gmove(gid,"TMP",(char *)(MED_NOM_NOD)); EXIT_IF(ret < 0,"Mise en place des nouvelles connectivités",NULL); /* on libere la memoire */ free(old_conn); free(conn); } /* Mise a niveau des noms */ nom = (char *) malloc(n*ANCIEN_MED_TAILLE_PNOM+1); EXIT_IF(nom == NULL,NULL,NULL); nouvelle_chaine = (char *) malloc(n*MED_TAILLE_PNOM+1); EXIT_IF(nouvelle_chaine == NULL,NULL,NULL); ret = _MEDdatasetStringLire(gid,(char *)(MED_NOM_NOM),nom); if (ret == 0) { _MED23v30stringConvert(nouvelle_chaine, MED_TAILLE_PNOM, nom, ANCIEN_MED_TAILLE_PNOM, n ); /* MAJ_21_22_chaine(nom,nouvelle_chaine,n); */ H5Gunlink(gid,(char *)(MED_NOM_NOM)); dimd[0] = n*MED_TAILLE_PNOM+1; ret = _MEDdatasetStringEcrire(gid,(char *)(MED_NOM_NOM),dimd,nouvelle_chaine); EXIT_IF(ret < 0,"Ecriture des nouveaux noms des éléments",NULL); did = _MEDdatasetOuvrir(gid,(char *)(MED_NOM_NOM)); ret = _MEDattrEntierEcrire(did,(char *)(MED_NOM_NBR),&n); ret = _MEDdatasetFermer(did); } free(nom); free(nouvelle_chaine); /* on ferme avant de passer au type geometrique suivant */ ret = _MEDdatagroupFermer(gid); EXIT_IF(ret < 0,"Fermeture de l'accès aux mailles",NULL); } /* On ferme tout */ ret = _MEDdatagroupFermer(eid); EXIT_IF(ret < 0,"Fermeture de l'accès aux mailles",NULL); }
void _MEDfield23ComputingStepMeshInfo236(int dummy,...) { med_err _ret=-1,_err=0; med_size _num,_nmesh=0; med_idt _datagroup1=0,_meshgid=0,_linkgid=0; char _datagroupname1[2*MED_MAX_PARA+1] =""; char _ent_geo [2*MED_TAILLE_NOM_ENTITE+2]=""; char _path [(MED_TAILLE_CHA+MED_TAILLE_NOM+1)+ (2*MED_TAILLE_NOM_ENTITE+1)+1+(2*MED_MAX_PARA)+1]=MED_CHA; char _meshpath [MED_TAILLE_MAA+MED_TAILLE_NOM+1]=MED_MAA; char _linkpath [MED_TAILLE_LIENS+MED_TAILLE_NOM+1]=MED_LIENS; med_size _ncpst=0; med_bool _checkmultiplemesh=MED_TRUE, _multiplemesh =MED_FALSE; med_bool _checkmeshname =MED_TRUE, _samedefaultmeshname=MED_FALSE; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , fieldname ); MED_VARGS_DECL(const, int , , csit ); MED_VARGS_DECL(, med_int *, const , numdt ); MED_VARGS_DECL(, med_int *, const , numit ); MED_VARGS_DECL(, med_float *, const , dt ); MED_VARGS_DECL(, med_int *, const , nmesh ); MED_VARGS_DECL(, char *, const , meshname ); MED_VARGS_DECL(, med_bool *, const , localmesh ); MED_VARGS_DECL(, med_int *, const , meshnumdt ); MED_VARGS_DECL(, med_int *, const , meshnumit ); MED_VARGS_DECL(, med_err * ,, 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, int , , csit ); MED_VARGS_DEF(, med_int *, const , numdt ); MED_VARGS_DEF(, med_int *, const , numit ); MED_VARGS_DEF(, med_float *, const , dt ); MED_VARGS_DEF(, med_int *, const , nmesh ); MED_VARGS_DEF(, char *, const , meshname ); MED_VARGS_DEF(, med_bool *, const , localmesh ); MED_VARGS_DEF(, med_int *, const , meshnumdt ); MED_VARGS_DEF(, med_int *, const , meshnumit ); MED_VARGS_DEF(, med_err * ,, fret ); _num=csit-1; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); /* * On construit le nom du datagroup */ strcat(_path,fieldname); /* if ( _MEDfieldComputingStepCheck236(fid, fieldname, */ /* &_ncpst, */ /* _checkmultiplemesh, &_multiplemesh, */ /* _checkmeshname, &_samedefaultmeshname) < 0) { */ /* MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_FIELD,fieldname); */ /* goto ERROR; */ /* } */ /* * On suppose que le modèle 2.3.6 est respecté : * Il y a les mêmes séquences de calcul pour tous les couples * (typent,typegeo). Autrement dit selon l'utilisation de l'API 2.3.6 : * A chaque séquence de calcul, on utilise le même ensemble de (typent,typegeo). * En conséquence si l'on fixe le (typeent,typegeo) les séquences * de calcul que l'on va trouver seront représentatives de celles * présentent dans tous les (typent,typegeo) utilisés. */ if ( _MEDobjectGetName(fid, _path ,0, _ent_geo) < 0 ) { MED_ERR_(_ret,MED_ERR_ACCESS,MED_ERR_DATAGROUP,_path); SSCRUTE(_path); SSCRUTE(_ent_geo); goto ERROR; } strcat(_path,"/"); strcat(_path,_ent_geo); if ( _MEDobjectGetName(fid, _path ,_num, _datagroupname1) < 0 ) { MED_ERR_(_ret,MED_ERR_ACCESS,MED_ERR_DATAGROUP,_path); SSCRUTE(_path); SSCRUTE(_ent_geo); goto ERROR; } strcat(_path,"/"); strcat(_path,_datagroupname1); if ((_datagroup1 = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path); goto ERROR; } /* * Lecture des attributs */ if (_MEDattrEntierLire(_datagroup1,MED_NOM_NDT,(med_int*) numdt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_NDT); SSCRUTE(_path);ISCRUTE(*numdt);goto ERROR; } if (_MEDattrFloatLire(_datagroup1,MED_NOM_PDT,(med_float*) dt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_PDT); SSCRUTE(_path);RSCRUTE(*dt);goto ERROR; } if (_MEDattrEntierLire(_datagroup1,MED_NOM_NOR,(med_int*) numit) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_NOR); SSCRUTE(_path);ISCRUTE(*numit);goto ERROR; } if (_MEDattrStringLire(_datagroup1,MED_NOM_MAI,MED_TAILLE_NOM,meshname) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_MAI); SSCRUTE(_path);SSCRUTE(meshname);goto ERROR; } /* Nombre de maillages * La gestion d'une incohérence sur le nombre de séquences de calcul par couple (entitytype,geotype) * se fait à partir des appels : * MEDfieldnProfile,MEDfieldnValue* * La vérification complémentaire que l'ensemble des maillages utilisés sont les mêmes pour toutes les séquences * de calcul identiques est effectué dans MEDfield23nValue */ if ( (_err=_MEDnObjects(_datagroup1,".",&_nmesh)) <0) if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) { MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_path); goto ERROR; } *nmesh = (med_int) _nmesh; /* Maillage local ou distant */ strcat(_meshpath,meshname); /* Le maillage est il distant */ if ( (_meshgid = _MEDdatagroupOuvrir(fid,_meshpath)) < 0) { /* Verifie que le maillage est bien référencé comme distant */ strcat(_linkpath,meshname); if ((_linkgid = _MEDdatagroupOuvrir(fid,_linkpath)) < 0) { /* MED_ERR_(_ret,MED_ERR_DOESNTEXIST,MED_ERR_MESH,MED_ERR_FIELD_MSG); */ /* SSCRUTE(fieldname);SSCRUTE(_meshpath);SSCRUTE(_linkpath); */ /* goto ERROR; */ *localmesh = MED_FALSE; } *localmesh = MED_FALSE; } else *localmesh = MED_TRUE; *meshnumdt=MED_NO_DT; *meshnumit=MED_NO_IT; _ret = 0; ERROR: if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_datagroup1); } if (_meshgid>0) if (_MEDdatagroupFermer(_meshgid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath); ISCRUTE_id(_meshgid); } if (_linkgid>0) if (_MEDdatagroupFermer(_linkgid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_linkpath); ISCRUTE_id(_linkgid); } va_end(params); *fret = _ret; return; }
med_err MEDprofileWr(const med_idt fid, const char* const profilename, const med_int profilesize, const med_int* const profilearray) { med_access_mode _MED_ACCESS_MODE; med_idt _root=0,_pfid=0; med_err _ret=-1; char _path[MED_TAILLE_PROFILS+MED_NAME_SIZE+1]=MED_PROFILS; med_filter _filter = MED_FILTER_INIT; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (_MEDcheckVersion30(fid) < 0) goto ERROR; if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); ISCRUTE_int(_MED_ACCESS_MODE); goto ERROR; } /* * Si le DataGroup /PROFILS/ n'existe pas, on le cree */ if ((_root = _MEDdatagroupOuvrir(fid,_path)) < 0) if ((_root = _MEDdatagroupCreer(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_path); goto ERROR; } NOFINALBLANK(profilename,ERROR); /* * Si le DataGroup /PROFILS/<profilename> n'existe pas, on le cree */ if ((_pfid = _MEDdatagroupOuvrir(_root,profilename)) < 0) if ((_pfid = _MEDdatagroupCreer(_root,profilename)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,profilename); SSCRUTE(_path);goto ERROR; } strcat(_path,profilename); /* * On stocke "profilesize" sous forme d'attribut */ if (_MEDattributeIntWr(_pfid,MED_NOM_NBR,&profilesize) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PROFILE_MSG); SSCRUTE(profilename);SSCRUTE(MED_NOM_NBR);ISCRUTE(profilesize); goto ERROR; } /* * On stocke le profil dans un dataset */ if ( MEDfilterEntityCr(fid, profilesize, 1, 1, MED_ALL_CONSTITUENT, MED_NO_INTERLACE,MED_UNDEF_PFLMODE, MED_NO_PROFILE, MED_UNDEF_SIZE, NULL, &_filter) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILTER,MED_ERR_INTERNAL_MSG); goto ERROR; } if ( _MEDdatasetWr(_pfid,MED_NOM_PFL,MED_INTERNAL_INT,&_filter, profilearray) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,MED_NOM_PFL);SSCRUTE(_path); goto ERROR; } if ( MEDfilterClose(&_filter) < 0 ) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_FILTER,MED_ERR_PROFILE_MSG); SSCRUTE(_path); goto ERROR; } _ret = 0; ERROR: if (_pfid>0) if (_MEDdatagroupFermer(_pfid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,profilename); ISCRUTE_id(_pfid); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_PROFILS); ISCRUTE_id(_root); } return _ret; }
med_err MEDscalaireCr(med_idt fid,char *scalaire, med_type_champ type, char *desc) { med_err ret=-1; med_idt root=0,gid=0; char chemin[MED_TAILLE_NUM_DATA+1]; med_int _type = (med_int) type; med_mode_acces MED_MODE_ACCES; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) { MESSAGE("Impossible de déterminer le mode d'acces au fichier."); goto ERROR; } if ( MED_MODE_ACCES == MED_LECTURE ) { MESSAGE("Impossible de créer une variable scalaire en mode MED_LECTURE."); goto ERROR; }; /* * Si le Groupe HDF "/NUM_DATA" n'existe pas, on le cree */ strncpy(chemin,MED_NUM_DATA,MED_TAILLE_NUM_DATA-1); chemin[MED_TAILLE_NUM_DATA-1] = '\0'; if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0) if ((root = _MEDdatagroupCreer(fid,chemin)) < 0){ MESSAGE("Erreur à la création du datagroup : "); SSCRUTE(chemin); goto ERROR; } /* * Si le groupe HDF "scalaire" n'existe pas, on le cree * Sinon => erreur */ NOFINALBLANK(scalaire,ERROR); if ((gid = _MEDdatagroupCreer(root,scalaire)) < 0) { MESSAGE("Erreur à la création de la variable scalaire : "); SSCRUTE(scalaire); goto ERROR; } /* * On stocke l'unite, et le type de la valeur scalaire */ if ((ret = _MEDattrEntierEcrire(gid,MED_NOM_TYP,&_type)) < 0) { MESSAGE("Erreur à l'écriture du type de la varaible scalaire : "); ISCRUTE(_type); goto ERROR; } if ((ret = _MEDattrStringEcrire(gid,MED_NOM_DES,MED_TAILLE_DESC,desc)) < 0) { MESSAGE("Erreur à l'écriture de la description de la variable scalaire : "); SSCRUTE(desc); goto ERROR; } /* * On ferme tout */ ret = 0; ERROR: if (gid>0) if (_MEDdatagroupFermer(gid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(gid);ret=-1; } if (root>0) if (_MEDdatagroupFermer(root) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(root);ret=-1; } return ret; }
void _MEDfieldInfoByName30(int dummy, ...) { med_err _ret=-1,_err=-1; med_idt _fieldgid=0,_meshgid=0,_linkgid=0; char _fieldpath[MED_TAILLE_CHA+MED_NAME_SIZE+1]=MED_CHA; char _meshpath [MED_TAILLE_MAA+MED_NAME_SIZE+1]=MED_MAA; char _linkpath [MED_TAILLE_LIENS+MED_NAME_SIZE+1]=MED_LIENS; med_size _ncstp=0; med_int _n=0; med_int _intfieldtype=0; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , fieldname ); MED_VARGS_DECL(, char *, const , meshname ); MED_VARGS_DECL(, med_bool *, const , localmesh ); MED_VARGS_DECL(, med_field_type *, const , fieldtype ); MED_VARGS_DECL(, char *, const , componentname ); MED_VARGS_DECL(, char *, const , componentunit ); MED_VARGS_DECL(, char *, const , dtunit ); MED_VARGS_DECL(, med_int *, const , ncstp ); MED_VARGS_DECL(, med_err * ,, 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(, char *, const , meshname ); MED_VARGS_DEF(, med_bool *, const , localmesh ); MED_VARGS_DEF(, med_field_type *, const , fieldtype ); MED_VARGS_DEF(, char *, const , componentname ); MED_VARGS_DEF(, char *, const , componentunit ); MED_VARGS_DEF(, char *, const , dtunit ); MED_VARGS_DEF(, med_int *, const , ncstp ); MED_VARGS_DEF(, med_err * ,, fret ); /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); strcat(_fieldpath,fieldname); /* * On recupere le nombre de composants */ if ((_fieldgid = _MEDdatagroupOuvrir(fid,_fieldpath)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_fieldpath); goto ERROR; } if ( _MEDattrEntierLire(_fieldgid,MED_NOM_NCO,&_n) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_NOM_NCO); SSCRUTE(_fieldpath);goto ERROR; } /* * La liste des attributs */ /* Lecture de l'attribut MED_NOM_TYP */ if ( _MEDattrEntierLire(_fieldgid,MED_NOM_TYP,&_intfieldtype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(MED_NOM_TYP); goto ERROR; } *fieldtype = (med_field_type) (_intfieldtype); /* * Les infos sur les composantes du champ */ if (_MEDattrStringLire(_fieldgid,MED_NOM_NOM,_n*MED_SNAME_SIZE, componentname) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_fieldpath);SSCRUTE(MED_NOM_NOM); SSCRUTE(componentname);goto ERROR; } if (_MEDattrStringLire(_fieldgid,MED_NOM_UNI,_n*MED_SNAME_SIZE, componentunit) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_fieldpath);SSCRUTE(MED_NOM_UNI); SSCRUTE(componentunit);goto ERROR; } /*MODEL : MED_NOM_UNI vient du niveau en dessous Cree ou ouvre l'attribut MED_NOM_UNI pour écriture */ if ( _MEDattrStringLire(_fieldgid,MED_NOM_UNT,MED_SNAME_SIZE,dtunit) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_fieldpath);SSCRUTE(MED_NOM_UNT); SSCRUTE(dtunit);goto ERROR; } /* Lecture de l'attribut MED_NOM_MAI */ if ( _MEDattrStringLire(_fieldgid,MED_NOM_MAI,MED_NAME_SIZE,meshname) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(MED_NOM_MAI);SSCRUTE(meshname); goto ERROR; } /* Maillage local ou distant */ strcat(_meshpath,meshname); /* Le maillage est il distant */ if ( (_meshgid = _MEDdatagroupOuvrir(fid,_meshpath)) < 0) { /* Verifie que le maillage est bien référencé comme distant */ strcat(_linkpath,meshname); if ((_linkgid = _MEDdatagroupOuvrir(fid,_linkpath)) < 0) { /* MED_ERR_(_ret,MED_ERR_DOESNTEXIST,MED_ERR_MESH,MED_ERR_FIELD_MSG); */ /* SSCRUTE(fieldname);SSCRUTE(_meshpath);SSCRUTE(_linkpath); */ /* goto ERROR; */ *localmesh = MED_FALSE; } *localmesh = MED_FALSE; } else *localmesh = MED_TRUE; /* Nombre d'étapes de calcul*/ if ( (_err=_MEDnObjects(_fieldgid,".",&_ncstp)) <0) if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) { MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_fieldpath); goto ERROR; } *ncstp = (med_int) _ncstp; _ret = 0; ERROR: if (_fieldgid>0) if (_MEDdatagroupFermer(_fieldgid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_fieldpath); ISCRUTE_id(_fieldgid); } if (_meshgid>0) if (_MEDdatagroupFermer(_meshgid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath); ISCRUTE_id(_meshgid); } if (_linkgid>0) if (_MEDdatagroupFermer(_linkgid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_linkpath); ISCRUTE_id(_linkgid); } va_end(params); *fret = _ret; return; }