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; }
med_err MEDscalaireEntierEcr(med_idt fid, char *scalaire,med_int val, med_int numdt, char *dt_unit, med_float dt, med_int numo) { med_err ret = 0; med_idt gid,datagroup; char nomdatagroup[2*MED_MAX_PARA+1]; char chemin[MED_TAILLE_NUM_DATA+MED_TAILLE_NOM+1]; med_int type; med_mode_acces MED_MODE_ACCES; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _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 "); 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; /* Creation du groupe HDF correspondant au couple <numdt>.<numoo> */ sprintf(nomdatagroup,"%*li%*li",MED_MAX_PARA,(long ) numdt,MED_MAX_PARA,(long ) numo); /* Cree ou ouvre le datagroup nomdatagroup */ datagroup = 0; if (((datagroup = _MEDdatagroupOuvrir(gid,nomdatagroup)) > 0) && ( MED_MODE_ACCES == MED_LECTURE_AJOUT )) return -1; else if (datagroup < 0) if ((datagroup = _MEDdatagroupCreer(gid,nomdatagroup)) < 0) return -1; /* Cree ou ouvre l'attribut MED_NOM_NDT */ if ((ret = _MEDattrEntierEcrire(datagroup,MED_NOM_NDT,&numdt)) < 0) return -1; /* Cree ou ouvre l'attribut MED_NOM_PDT */ if ((ret = _MEDattrFloatEcrire(datagroup,MED_NOM_PDT,&dt)) < 0) return -1; /* Cree ou ouvre l'attribut MED_NOM_NOR */ if ((ret = _MEDattrEntierEcrire(datagroup,MED_NOM_NOR,&numo)) < 0) return -1; /* Cree ou ouvre l'attribut MED_NOM_UNI */ if ( numdt == MED_NOPDT ) { if ((ret = _MEDattrStringEcrire(datagroup,MED_NOM_UNI,MED_TAILLE_PNOM,MED_PNOM_BLANC)) < 0) return -1; } else if ((ret = _MEDattrStringEcrire(datagroup,MED_NOM_UNI,MED_TAILLE_PNOM,dt_unit)) < 0) return -1; /* * Ecriture de la valeur scalaire */ if ((ret = _MEDattrEntierLire(gid,MED_NOM_TYP,&type)) < 0) return -1; switch(type) { case MED_INT : case MED_INT32 : case MED_INT64 : if ((ret = _MEDattrEntierEcrire(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; }
void MEDjointCr231(int dummy,...) { med_idt fid ; char * maa_lcl ; char * jn ; char * desc ; med_int dom ; char * maa_dist ; med_err * fret ; med_idt root=0,jntid=0; med_err ret=-1; char chemin[MED_TAILLE_MAA+MED_TAILLE_JNT+MED_TAILLE_NOM+1]; char tmp[MED_TAILLE_JNT+1]; med_int nbc=0; med_mode_acces MED_MODE_ACCES; va_list params; va_start(params,dummy); fid = va_arg(params,med_idt); maa_lcl = va_arg(params,char *); jn = va_arg(params,char *); desc = va_arg(params,char *); dom = va_arg(params,med_int); maa_dist = va_arg(params,char*); fret = va_arg(params,med_err *); /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) {*fret=-1;return;} 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 un joint en mode MED_LECTURE."); goto ERROR; }; /* * Si le Data Group "JNT" n'existe pas, on le cree */ strcpy(chemin,MED_MAA); NOFINALBLANK(maa_lcl,ERROR); strcat(chemin,maa_lcl); strncpy(tmp,MED_JNT,MED_TAILLE_JNT-1); tmp[MED_TAILLE_JNT-1] = '\0'; strcat(chemin,tmp); if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0) if ((root = _MEDdatagroupCreer(fid,chemin)) < 0) { MESSAGE("Erreur à la création du datagroup : "); SSCRUTE(chemin); goto ERROR; } /* * Si un joint du meme nom existe => erreur * Sinon on le cree */ NOFINALBLANK(jn,ERROR); if ((jntid = _MEDdatagroupCreer(root,jn)) < 0) { MESSAGE("Erreur à la création du joint : "); SSCRUTE(jn); goto ERROR; } /* * L'attribut "DES" */ if ((ret = _MEDattrStringEcrire(jntid,MED_NOM_DES,MED_TAILLE_DESC,desc)) < 0) { MESSAGE("Erreur à l'écriture de la description du joint : "); SSCRUTE(desc); goto ERROR; } /* * L'attribut "MAI" */ /* BUG CORRIGE EN 232 MED_TAILLE_NOM au lieu de MED_TAILLE_MAA */ /* conservé ici pour éviter de reprendre en lib2.3.2 un fichier 2.3.1 en écrivant l'attribut avec une taille plus grande que celle des fichiers 2.3.1 */ if ((ret = _MEDattrStringEcrire(jntid,MED_NOM_MAI,MED_TAILLE_MAA,maa_dist)) < 0) { MESSAGE("Erreur à l'écriture du nom du maillage distant : "); SSCRUTE(maa_dist); goto ERROR; } /* * L'attribut "DOM" */ if ((ret = _MEDattrEntierEcrire(jntid,MED_NOM_DOM,&dom)) < 0) { MESSAGE("Erreur à l'écriture du domaine : "); ISCRUTE(dom); goto ERROR; } /* * On ferme tout */ ret=0; ERROR: if (jntid>0) if (_MEDdatagroupFermer(jntid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(jntid);ret = -1; } if (root>0) if (_MEDdatagroupFermer(root) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(root); ret = -1; } va_end(params); *fret = ret; return; }
med_err MEDindicesCoordEcr(med_idt fid,char *maillage,med_int mdim,med_float *indices, med_int n,med_int axe,char *comp,char *unit) { med_idt maaid, noeid, dataset; med_err ret; med_size dimd[1]; char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1]; char nom_dataset[MED_TAILLE_NOM_ENTITE+1]; med_int att; med_maillage maillage_type; med_type_grille type; /* * Si axe > mdim => erreur */ if (axe > mdim) return -1; /* * 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,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; /* * Si la grille n'est pas de type MED_GRILLE_CARTESIENNE ou * MED_GRILLE_POLAIRE => erreur */ if ((ret = _MEDattrEntierLire(maaid,MED_NOM_GTY,&att)) < 0) return -1; /* sizeof(enum) tjrs = sizeof(int) en C, or sur machines 64 bits par défaut med_int==long (normalement 64bits), du coup sur machines 64 bits _MEDattrEntierLire utilise le type hdf NATIVE_LONG, ce genere parfois un warning */ type = (med_type_grille) att; if ((type != MED_GRILLE_CARTESIENNE) && (type != MED_GRILLE_POLAIRE)) return -1; /* * Si le groupe HDF "NOE" n'existe pas => erreur */ if ((noeid = _MEDdatagroupOuvrir(maaid,MED_NOM_NOE)) < 0) if ((noeid = _MEDdatagroupCreer(maaid,MED_NOM_NOE)) < 0) return -1; /* * On ecrit le tableau d'indice dans un dataset HDF */ switch(axe) { case 1 : strcpy(nom_dataset,MED_NOM_IN1); break; case 2 : strcpy(nom_dataset,MED_NOM_IN2); break; case 3 : strcpy(nom_dataset,MED_NOM_IN3); break; default : return -1; } dimd[0] = n; if ((ret = _MEDdatasetNumEcrire(noeid,nom_dataset,MED_FLOAT64,MED_FULL_INTERLACE,1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0, MED_NOPG,dimd,(unsigned char*) indices)) < 0) return -1; /* * On re-ouvre le dataset HDF pour y placer des attributs */ if ((dataset = _MEDdatasetOuvrir(noeid,nom_dataset)) < 0) return -1; /* * Attribut NBR (taille du tableau d'indices) */ if ((ret = _MEDattrEntierEcrire(dataset,MED_NOM_NBR,&n)) < 0) return -1; /* * Attribut "NOM" (nom de la composante) */ if ((ret = _MEDattrStringEcrire(dataset,MED_NOM_NOM,MED_TAILLE_PNOM,comp)) < 0) return -1; /* * Attribut "UNI" (unite de la composante) */ if ((ret = _MEDattrStringEcrire(dataset,MED_NOM_UNI,MED_TAILLE_PNOM,unit)) < 0) return -1; /* * On ferme tout */ if ((ret = _MEDdatasetFermer(dataset)) < 0) return -1; if ((ret = _MEDdatagroupFermer(noeid)) < 0) return -1; if ((ret = _MEDdatagroupFermer(maaid)) < 0) return -1; return 0; }
med_err MED231champRefInfoEtRenMaa(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 datagroup2=0,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 chemini[(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]=""; char maai [MED_TAILLE_NOM+1]; char maaf [MED_TAILLE_NOM+1]=""; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); /* * 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 (_MEDnomGeometrie(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); /* * Modifie le nom de la première référence à un maillage * si besoin est */ if ( (datagroup2 = _MEDdatagroupOuvrir(fid,chemin)) < 0 ) { MESSAGE("Erreur à l'ouverture du datagroup : "); SSCRUTE(chemin); goto ERROR; } if ( _MEDattrStringLire(datagroup2,MED_NOM_MAI,MED_TAILLE_NOM,maai) < 0 ) { MESSAGE("Erreur de lecture de l'attribut MED_NOM_MAI : "); SSCRUTE(maai); goto ERROR; } if ( MAJ_231_232_chaine(maai,maaf) ) { fprintf(stdout," >>> Normalisation du nom de maillage par défaut [%s] associé au champ [%s] pour (n°dt,n°it) ("IFORMAT","IFORMAT")\n",maai,champ,numdt,numo); ret = _MEDattrStringEcrire(datagroup2,MED_NOM_MAI,MED_TAILLE_NOM,maaf); EXIT_IF(ret < 0,"Renommage du maillage en",maaf); fprintf(stdout," >>> Normalisation du nom du maillage par défaut [%s] ... OK ... \n",maaf); } if (_MEDdatagroupFermer(datagroup2) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_int(datagroup2); goto ERROR; } 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; }; if ( MAJ_231_232_chaine(maa,maaf) ) { fprintf(stdout," >>> Normalisation du nom de maillage [%s] associé au champ [%s] pour (n°dt,n°it) ("IFORMAT","IFORMAT")\n",maa,champ,numdt,numo); /* on accede au maillage */ strcpy(chemini,chemin); strcat(chemini,maa); strcat(chemin,maaf); ret = H5Gmove(fid, chemini, chemin ); EXIT_IF(ret < 0,"Renommage du maillage en",maaf); fprintf(stdout," >>> Normalisation du nom du maillage [%s] ... OK ... \n",maaf); } else 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 */ /* Les noms de maillages n'ayant pas encore été mis à jour on garde l'ancien nom pour le test local/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 retourne le nouveau nom de maillage*/ if ( strlen(maaf) ) strcpy(maa,maaf); /* * 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; }
void MAJ_21_22_maillages(med_idt fid) { med_idt gid; med_err ret; int n,i; char nom[MED_TAILLE_NOM+1]; char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1]; char description[MED_TAILLE_DESC+1] = "Maillage converti au format MED V2.2"; med_int type = (med_int) MED_NON_STRUCTURE; med_int dimension; /* Lecture du nombre de maillages */ n = 0; _MEDnObjets(fid,(char *) MED_MAA,&n); EXIT_IF(n < 0,"Erreur a la lecture du nombre de maillage",NULL); /* * Mise a jour des maillages : * - type : MED_NON_STRUCTURE * - description : "Maillage converti au format V2.2" */ for (i=0;i<n;i++) { /* on recupere le nom du maillage */ ret = _MEDobjetIdentifier(fid,(char *) MED_MAA,i,nom); EXIT_IF(ret < 0,"Identification d'un maillage",NULL); fprintf(stdout," >>> Normalisation du maillage [%s] \n",nom); /* on accede au maillage */ strcpy(chemin,MED_MAA); strcat(chemin,nom); gid = _MEDdatagroupOuvrir(fid,chemin); EXIT_IF(gid < 0,"Accès au maillage",nom); /* lecture de la dimension du maillage */ ret = _MEDattrEntierLire(gid,(char *)(MED_NOM_DIM),&dimension); EXIT_IF(ret < 0,"Lecture de la dimension du maillage",nom); /* Ecriture du type et de la description */ ret = _MEDattrStringEcrire(gid,(char *)(MED_NOM_DES),MED_TAILLE_DESC,description); EXIT_IF(ret < 0,"Ecriture de la description du maillage ",nom); ret = _MEDattrEntierEcrire(gid,(char *)(MED_NOM_TYP),&type); EXIT_IF(ret < 0,"Ecriture de la dimension du maillage ",nom); /* Mise a jour des noeuds du maillage */ MAJ_21_22_noeuds_maillage(gid,dimension); fprintf(stdout," ... Normalisation des noeuds effectuée ... \n"); /* Mise a jour des éléments du maillage */ MAJ_21_22_elements_maillage(gid,dimension); fprintf(stdout," ... Normalisation des éléments effectuée ... \n"); /* Mise a jour des familles du maillage */ MAJ_21_22_familles_maillage(gid); fprintf(stdout," ... Normalisation des familles effectuée ... \n"); /* On ferme tout */ ret = _MEDdatagroupFermer(gid); EXIT_IF(ret < 0,"Fermeture de l'accès au maillage",NULL); fprintf(stdout," >>> Normalisation du maillage [%s] ... OK ... \n",nom); } }
med_err MEDchampCr( med_idt fid, char * champ, med_type_champ type, char * comp, char * unit, med_int ncomp) { med_err ret=-1; med_idt root=0,gid=0; char chemin[MED_TAILLE_CHA+1]; med_size dimd[1]; med_int _type = (med_int) type; med_mode_acces MED_MODE_ACCES; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _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 un champ en mode MED_LECTURE."); goto ERROR; }; /* * Si le Data Group "/CHA/" n'existe pas, on le cree */ strncpy(chemin,MED_CHA,MED_TAILLE_CHA-1); chemin[MED_TAILLE_CHA-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 Data Group cha n'existe pas, on le cree * Sinon => erreur */ NOFINALBLANK(champ,ERROR); if ((gid = _MEDdatagroupCreer(root,champ)) < 0) { MESSAGE("Erreur à la création du champ : "); SSCRUTE(champ); goto ERROR; } /* * Les infos sur les composants du champ */ if ( _MEDattrEntierEcrire(gid,MED_NOM_NCO,&ncomp) < 0 ) { MESSAGE("Erreur à l'écriture du nombre de composantes : "); ISCRUTE(ncomp); goto ERROR; } if ( _MEDattrEntierEcrire(gid,MED_NOM_TYP,&_type) < 0) { MESSAGE("Erreur à l'écriture du type du champ : "); ISCRUTE(_type); goto ERROR; } if ( _MEDattrStringEcrire(gid,MED_NOM_NOM,MED_TAILLE_PNOM*ncomp,comp) < 0) { MESSAGE("Erreur à l'écriture des noms des composantes : "); SSCRUTE(comp); goto ERROR; } if ( _MEDattrStringEcrire(gid,MED_NOM_UNI,MED_TAILLE_PNOM*ncomp,unit) < 0) { MESSAGE("Erreur à l'écriture des unités : "); SSCRUTE(unit); 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; }
med_err MEDmaaCr(med_idt fid, char *maillage, med_int dim, med_maillage type,char *desc) { med_idt maaid=0, root=0, entid=0, geoid=0 ; char chemin[MED_TAILLE_MAA+1]; char nom_ent[MED_TAILLE_NOM_ENTITE+1]; char nom_geo[MED_TAILLE_NOM_ENTITE+1]; med_err ret=-1; med_int tmp; 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 un maillage en mode MED_LECTURE."); goto ERROR; }; /* * Si la racine n'existe pas on la cree */ strncpy(chemin,MED_MAA,strlen(MED_MAA)-1); chemin[MED_TAILLE_MAA-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; } /* * Création du maillage */ NOFINALBLANK(maillage,ERROR); if ( (maaid = _MEDdatagroupCreer(root,maillage)) < 0) { MESSAGE("Erreur à la création du maillage : "); SSCRUTE(maillage); goto ERROR; } /* * Creation de l'attribut dimension */ if ((ret = _MEDattrEntierEcrire(maaid,MED_NOM_DIM,&dim)) < 0) { MESSAGE("Erreur à l'écriture de la dimension du maillage : "); ISCRUTE(dim); goto ERROR; } /* * La description associee au maillage */ if ((ret = _MEDattrStringEcrire(maaid,MED_NOM_DES,MED_TAILLE_DESC,desc)) < 0) { MESSAGE("Erreur à l'écriture de la description du maillage : "); SSCRUTE(desc); goto ERROR; } /* * Creation de l'attribut correspondant au type du maillage (MED_STRUCTURE, MED_NON_STRUCTURE) */ tmp = (med_int) type; if ((ret = _MEDattrEntierEcrire(maaid,MED_NOM_TYP,&tmp)) < 0) { MESSAGE("Erreur à l'écriture du type de maillage : "); ISCRUTE(tmp); goto ERROR; } if ( type == MED_STRUCTURE ) { strcpy(nom_ent,MED_NOM_MAI); if ((entid = _MEDdatagroupCreer(maaid,nom_ent)) < 0) { MESSAGE("Impossible de Cr\351er le datagroup :"); SSCRUTE(nom_ent); MESSAGE("pour le maillage structur\351 :"); SSCRUTE(maillage); goto ERROR; } switch ( dim ) { case 1 : strcpy(nom_geo,MED_NOM_SE2); break; case 2 : strcpy(nom_geo,MED_NOM_QU4); break; case 3 : strcpy(nom_geo,MED_NOM_HE8); break; case 0 : strcpy(nom_geo,MED_NOM_PO1); break; default : MESSAGE("La dimension doit être comprise entre 0 et 3"); goto ERROR; } if ((geoid = _MEDdatagroupCreer(entid,nom_geo)) < 0) { MESSAGE("Impossible de Créer le datagroup :"); SSCRUTE(nom_geo); MESSAGE("pour le maillage structuré :"); SSCRUTE(maillage); goto ERROR; } } /* * Nettoyages divers */ ret = 0; ERROR: if (geoid>0) if (_MEDdatagroupFermer(geoid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(geoid);ret = -1; } if (entid>0) if (_MEDdatagroupFermer(entid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(entid);ret = -1; } if (maaid>0) if (_MEDdatagroupFermer(maaid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(maaid);ret = -1; } if (root>0) if (_MEDdatagroupFermer(root) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(root); ret = -1; } return ret; }