00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "med_config.h"
00021 #include "med_outils.h"
00022 #include <string.h>
00023
00024
00025
00026
00027
00028 #include "med21.h"
00029 #include "med_hdfi21.h"
00030 #include "MAJ_21_22.h"
00031
00032 void MAJ_21_22_familles_maillage(med_idt mid)
00033 {
00034 med_idt fid, gid;
00035 char *nouvelle_chaine;
00036 int n;
00037 med_size dimd[1];
00038 med_err ret;
00039 int i;
00040 char chemin[MED_TAILLE_FAS+2*MED_TAILLE_NOM+1];
00041 char nom[MED_TAILLE_NOM+1];
00042 char *noeuds, *elements;
00043 int nnoeuds = 0;
00044 int nelements = 0;
00045 med_int numero;
00046 char *groupe_noeuds = "NOEUD";
00047 char *groupe_elements = "ELEME";
00048 char *nom_famille_zero = "FAMILLE_ZERO";
00049 char famille0[MED_TAILLE_NOM+1]="";
00050 med_int zero=0;
00051 int *index_noeuds, *index_elements;
00052 char stockage[MED_TAILLE_DESC]="";
00053 med_float *valr;
00054
00055
00056 fid = _MEDdatagroupOuvrir(mid,"FAS");
00057 if (fid < 0) {
00058 MESSAGE("Le datagroup contenant les familles n'existe pas, medimport le crée");
00059 fid = _MEDdatagroupCreer(mid,"FAS");
00060 EXIT_IF(fid < 0,"Creation du groupe HDF des familles",NULL);
00061 }
00062 n = 0;
00063 _MEDnObjets(fid,".",&n);
00064 EXIT_IF(n < 0,"Lecture du nombre de famille",NULL);
00065
00066 noeuds = (char *) malloc(n*MED_TAILLE_NOM+1);
00067 EXIT_IF(noeuds == NULL,NULL,NULL);
00068 index_noeuds = (int *) malloc(sizeof(int)*(n+1));
00069 EXIT_IF(index_noeuds == NULL,NULL,NULL);
00070 elements = (char *) malloc(n*MED_TAILLE_NOM+1);
00071 EXIT_IF(elements == NULL,NULL,NULL);
00072 index_elements = (int *) malloc(sizeof(int)*(n+1));
00073 EXIT_IF(index_elements == NULL,NULL,NULL);
00074
00075
00076
00077 for (i=0;i<n;i++) {
00078 ret = _MEDobjetIdentifier(fid,".",i,nom);
00079 EXIT_IF(ret < 0,"Identification d'une famille",NULL);
00080
00081
00082 gid = _MEDdatagroupOuvrir(fid,nom);
00083 EXIT_IF(gid < 0,"Ouverture de l'accès à la famille",nom);
00084
00085
00086 ret = _MEDattrEntierLire(gid,(char *)(MED_NOM_NUM),&numero);
00087 EXIT_IF(ret < 0,"Lecture du numéro de la famille",nom);
00088
00089
00090 ret = _MEDdatagroupFermer(gid);
00091 EXIT_IF(ret < 0,"Fermeture de l'accès à la famille",nom);
00092
00093 if (numero == 0)
00094 strcpy(famille0,nom);
00095
00096 if (numero < 0) {
00097 if (nelements == 0) {
00098 *(index_elements) = 0;
00099 strcpy(elements,nom);
00100 }
00101 else
00102 strcat(elements,nom);
00103 nelements ++;
00104 *(index_elements+nelements) = strlen(nom) + *(index_elements+nelements-1);
00105 }
00106
00107 if (numero > 0) {
00108 if (nnoeuds == 0) {
00109 strcpy(noeuds,nom);
00110 *(index_noeuds) = 0;
00111 }
00112 else
00113 strcat(noeuds,nom);
00114 nnoeuds++;
00115 *(index_noeuds+nnoeuds) = strlen(nom) + *(index_noeuds+nnoeuds-1);
00116 }
00117 }
00118
00119
00120 if ( strlen(famille0) ) {
00121 ret = H5Gmove(fid,famille0,nom_famille_zero);
00122 EXIT_IF(ret < 0,"Normalisation de la famille ZERO",NULL);
00123 } else {
00124 MESSAGE("La famille zéro n'existe pas, medimport la crée.");
00125 gid = _MEDdatagroupCreer(fid,nom_famille_zero);
00126 EXIT_IF(gid < 0,"Creation de la famille zéro",NULL);
00127 ret = _MEDattrEntierEcrire(gid,(char *)(MED_NOM_NUM),&zero);
00128 EXIT_IF(ret < 0,"Ecriture du numéro de la famille zéro",nom_famille_zero);
00129 ret = _MEDdatagroupFermer(gid);
00130 EXIT_IF(ret < 0,"Fermeture de l'accès à la famille zéro",nom);
00131 }
00132
00133
00134 gid = _MEDdatagroupCreer(fid,groupe_noeuds);
00135 EXIT_IF(gid < 0,"Creation du grupe HDF pour les familles de noeuds",NULL);
00136 ret = _MEDdatagroupFermer(gid);
00137 EXIT_IF(ret < 0,"Fermeture du groupe HDF pour les familles de noeuds",NULL);
00138 gid = _MEDdatagroupCreer(fid,groupe_elements);
00139 EXIT_IF(gid < 0,"Creation du groupe HDF pour les familles d'éléments",NULL);
00140 ret = _MEDdatagroupFermer(gid);
00141 EXIT_IF(ret < 0,"Fermeture du groupe HDF pour les familles d'éléments",NULL);
00142
00143
00144
00145 for (i=0;i<nnoeuds;i++) {
00146 strncpy(nom,noeuds+*(index_noeuds+i),*(index_noeuds+i+1)-*(index_noeuds+i));
00147 nom[*(index_noeuds+i+1)-*(index_noeuds+i)] = '\0';
00148 strcpy(stockage,groupe_noeuds);
00149 strcat(stockage,"/");
00150 strcat(stockage,nom);
00151 ret = H5Gmove(fid,nom,stockage);
00152 EXIT_IF(ret < 0,"Normalisation de la famille",nom);
00153 }
00154
00155 for (i=0;i<nelements;i++) {
00156 strncpy(nom,elements+*(index_elements+i),*(index_elements+i+1)-*(index_elements+i));
00157 nom[*(index_elements+i+1)-*(index_elements+i)] = '\0';
00158 strcpy(stockage,groupe_elements);
00159 strcat(stockage,"/");
00160 strcat(stockage,nom);
00161 ret = H5Gmove(fid,nom,stockage);
00162 EXIT_IF(ret < 0,"Normalisation de la famille",nom);
00163 }
00164
00165
00166 free(noeuds);
00167 free(index_noeuds);
00168 free(elements);
00169 free(index_elements);
00170
00171
00172 ret = _MEDdatagroupFermer(fid);
00173 EXIT_IF(ret < 0,"Fermeture du groupe HDF 'FAS'",NULL);
00174 }