med_int MEDnJoint(med_idt fid, char *maa) { char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+MED_TAILLE_JNT+1]; int n; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; strcpy(chemin,MED_MAA); strcat(chemin,maa); strcat(chemin,MED_JNT); n = 0; _MEDnObjets(fid,chemin,&n); return (med_int) n; }
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 MEDnChamp(med_idt fid, int indice) { int n1; med_int n2; med_idt datagroup; med_err ret; char nomdatagroup[MED_TAILLE_NOM+1]; int num; char chemin[MED_TAILLE_CHA+MED_TAILLE_NOM+1]; if (indice < 0) return -1; /* * On inhibe le gestionnaire d'erreur HDF */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * Si le Data Group cha n'existe pas et indice == 0 => 0 * sinon erreur => erreur */ strcpy(chemin,MED_CHA); /* * Si indice == 0 => nombre de champs */ if (indice == 0) { n1 = 0; _MEDnObjets(fid,chemin,&n1); n2 = n1; } /* * Si indice > 0 => nbre de composants */ if (indice > 0) { /* * On recupere le nom du champ */ num = indice-1; if ((ret = _MEDobjetIdentifier(fid,chemin,num,nomdatagroup)) < 0) return -1; strcat(chemin,nomdatagroup); /* * On recupere le nombre de composants */ if ((datagroup = _MEDdatagroupOuvrir(fid,chemin)) < 0) return -1; if ((ret = _MEDattrEntierLire(datagroup,MED_NOM_NCO,&n2)) < 0) return -1; if ((ret = _MEDdatagroupFermer(datagroup)) < 0) return -1; } return n2; }
med_int MEDnGroupe(med_idt fid,char *maa, int indice) { med_idt datagroup,famid; med_err ret; char chemin[MED_TAILLE_MAA+MED_TAILLE_FAS+MED_TAILLE_FAS_ENTITE+2*MED_TAILLE_NOM+1]; char stockage[MED_TAILLE_MAA+MED_TAILLE_FAS+MED_TAILLE_FAS_ENTITE+2*MED_TAILLE_NOM+1]; med_int n; int n_tmp; int num; char famille[MED_TAILLE_NOM+1]; int nfamnoe,nfammai; /* * On inhibe le gestionnaire d'erreur HDF */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; strcpy(chemin,MED_MAA); strcat(chemin,maa); strcat(chemin,MED_FAS); num = indice - 1; /* Acces a la famille : * nfam = nfamnoe + 1 + nfammai * Repartition selon l'indice "num" dans le datagroup : * - 0..nfammai - 1 : familles des mailles/faces/aretes * - nfamai : famille 0 * - (nfamai + 1)..(nfammai+nfamnoe) : familles de noeuds */ /* On va compter les familles de mailles/faces/aretes */ strcpy(stockage,chemin); strcat(stockage,MED_FAS_ELEME_NOM); nfammai = 0; n_tmp = 0; if ((ret =_MEDnObjets(fid,stockage,&n_tmp)) == 0) nfammai = (med_int ) n_tmp; strcat(stockage,"/"); /* Pour la famille 0 */ if (num == nfammai) return 0; if (num > nfammai) { /* C'est une famille de noeuds */ strcpy(stockage,chemin); strcat(stockage,MED_FAS_NOEUD_NOM); strcat(stockage,"/"); num = num - nfammai - 1; } /* * Si le Data Group de la famille n'existe pas => erreur */ if ((ret = _MEDobjetIdentifier(fid,stockage,num, famille)) < 0) return -1; strcat(stockage,famille); if ((famid = _MEDdatagroupOuvrir(fid,stockage)) < 0) return -1; if ((datagroup = _MEDdatagroupOuvrir(famid,MED_NOM_GRO)) < 0) n = 0; else { if ((ret = _MEDattrEntierLire(datagroup,MED_NOM_NBR,&n)) < 0) return -1; if ((ret = _MEDdatagroupFermer(datagroup)) < 0) return -1; } if ((ret = _MEDdatagroupFermer(famid)) < 0) return -1; return (med_int) n; }
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); } }