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
00023
00024
00025
00026
00027 #include "med_hdfi21.h"
00028 #include "med21.h"
00029 #include "med_hdfi231.h"
00030 #include "MAJ_21_22.h"
00031
00032 void MAJ_21_22_noeuds_maillage(med_idt mid, med_int dimension)
00033 {
00034 med_idt nid, gid, tid;
00035 med_float *coo;
00036 char *nom, *unit;
00037 char tmp[MED_TAILLE_PNOM+1];
00038 char *nouvelle_chaine;
00039 med_int n;
00040 med_size dimd[1];
00041 med_err ret;
00042 int i;
00043 hid_t hdf_type;
00044 med_repere repere;
00045
00046
00047 nid = _MEDdatagroupOuvrir(mid,(char *)(MED_NOM_NOE));
00048 EXIT_IF(nid < 0,"Ouverture du groupe HDF MED_NOM_NOE",NULL);
00049
00050
00051
00052
00053 gid = _MEDdatasetOuvrir(nid,(char *)(MED_NOM_COO));
00054 if (gid > 0)
00055 ret = _MEDattrEntierLire(gid,(char *)(MED_NOM_NBR),&n);
00056 EXIT_IF(gid < 0,"Lecture du nombre de noeuds",NULL);
00057
00058
00059
00060
00061 hdf_type = H5Dget_type(gid);
00062 EXIT_IF(hdf_type < 0,"Lecture du type HDF de stockage des coordonnées",NULL);
00063 coo = (med_float *) malloc(sizeof(med_float)*n*dimension);
00064 EXIT_IF(coo == NULL,NULL,NULL);
00065 ret = _MED21datasetNumLire(nid,(char *)(MED_NOM_COO),MED_FLOAT64,
00066 MED_FULL_INTERLACE,dimension,MED_ALL,
00067 0,NULL,MED_NOPG,
00068 (unsigned char*) coo,hdf_type);
00069 EXIT_IF(ret < 0,"Lecture des coordonnées des noeuds",NULL);
00070 dimd[0] = n*dimension;
00071
00072
00073 if (! H5Tequal(hdf_type,H5T_NATIVE_DOUBLE)) {
00074 ret = H5Tconvert(hdf_type,H5T_NATIVE_DOUBLE,(hsize_t)*dimd,(void *)coo,NULL,0);
00075
00076 EXIT_IF(ret < 0,"Conversion des coordonnées des noeuds",NULL);
00077 }
00078 ret = H5Tclose(hdf_type);
00079 EXIT_IF(ret < 0,"Fermeture du data type HDF",NULL);
00080
00081 ret = _MED231datasetNumEcrire(nid,"TMP",MED_FLOAT64,MED_FULL_INTERLACE,
00082 dimension,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,MED_NOPG,dimd,
00083 (unsigned char*) coo);
00084 EXIT_IF(ret < 0,"Ecriture des coordonnées des noeuds après conversion",NULL);
00085 free(coo);
00086
00087
00088 tid = _MEDdatasetOuvrir(nid,"TMP");
00089 EXIT_IF(tid < 0,"Ouverture du dataset HDF TMP",NULL);
00090 ret = _MEDattrEntierEcrire(tid,(char *)(MED_NOM_NBR),&n);
00091 EXIT_IF(ret < 0,"Ecriture du nombre de noeuds dans le dataset HDF TMP",NULL);
00092 ret = _MEDattrEntierLire(gid,(char *)(MED_NOM_REP),&repere);
00093 EXIT_IF(ret < 0,"Lecture du type de repere des coordonnées", NULL);
00094 ret = _MEDattrEntierEcrire(tid,(char *)(MED_NOM_REP),&repere);
00095 EXIT_IF(ret < 0,"Ecriture du type de répertoire dans le dataset HDF TMP",NULL);
00096
00097
00098 nom = (char *) malloc(dimension*ANCIEN_MED_TAILLE_PNOM+1);
00099 EXIT_IF(nom == NULL,NULL,NULL);
00100 unit = (char *) malloc(dimension*ANCIEN_MED_TAILLE_PNOM+1);
00101 EXIT_IF(unit == NULL,NULL,NULL);
00102 nouvelle_chaine = (char *) malloc(dimension*MED_TAILLE_PNOM+1);
00103 EXIT_IF(nouvelle_chaine == NULL,NULL,NULL);
00104 ret = _MEDattrStringLire(gid,(char *)(MED_NOM_NOM),dimension*ANCIEN_MED_TAILLE_PNOM,nom);
00105 EXIT_IF(ret < 0,"Lecture des noms des coordonnées des noeuds",NULL);
00106 ret = _MEDattrStringLire(gid,(char *)(MED_NOM_UNI),dimension*ANCIEN_MED_TAILLE_PNOM,unit);
00107 EXIT_IF(ret < 0,"Lecture des unités des coordonnées des noeuds",NULL);
00108
00109
00110 _MED23v30stringConvert(nouvelle_chaine, MED_TAILLE_PNOM,
00111 nom, ANCIEN_MED_TAILLE_PNOM, dimension );
00112 ret = _MEDattrStringEcrire(tid,(char *)(MED_NOM_NOM),dimension*MED_TAILLE_PNOM,nouvelle_chaine);
00113 EXIT_IF(ret < 0,"Ecriture des nouveaux noms des coordonnées des noeuds",NULL);
00114 _MED23v30stringConvert(nouvelle_chaine, MED_TAILLE_PNOM,
00115 unit, ANCIEN_MED_TAILLE_PNOM, dimension );
00116
00117 ret = _MEDattrStringEcrire(tid,(char *)(MED_NOM_UNI),dimension*MED_TAILLE_PNOM,nouvelle_chaine);
00118 EXIT_IF(ret < 0,"Ecriture des nouvelles unités des coordonnées des noeuds",NULL);
00119 free(nom);
00120 free(unit);
00121 free(nouvelle_chaine);
00122
00123
00124 ret = _MEDdatasetFermer(gid);
00125 EXIT_IF(ret < 0,"Fermeture du dataset HDF MED_NOM_COO",NULL);
00126 ret = H5Gunlink(nid,(char *)(MED_NOM_COO));
00127 EXIT_IF(ret < 0,"Suppression des anciennes coordonnées",NULL);
00128 ret = _MEDdatasetFermer(tid);
00129 EXIT_IF(ret < 0,"Fermeture du dataset HDF TMP",NULL);
00130 ret = H5Gmove(nid,"TMP",(char *)(MED_NOM_COO));
00131 EXIT_IF(ret < 0,"Mise en place des nouvelles coordonnées",NULL);
00132
00133
00134 nom = (char *) malloc(n*ANCIEN_MED_TAILLE_PNOM+1);
00135 EXIT_IF(nom == NULL,NULL,NULL);
00136 nouvelle_chaine = (char *) malloc(n*MED_TAILLE_PNOM+1);
00137 EXIT_IF(nouvelle_chaine == NULL,NULL,NULL);
00138 ret = _MEDdatasetStringLire(nid,(char *)(MED_NOM_NOM),nom);
00139 if (ret == 0) {
00140 MAJ_21_22_chaine(nom,nouvelle_chaine,n);
00141 H5Gunlink(nid,(char *)(MED_NOM_NOM));
00142 dimd[0] = n*MED_TAILLE_PNOM+1;
00143 ret = _MEDdatasetStringEcrire(nid,(char *)(MED_NOM_NOM),dimd,nouvelle_chaine);
00144 EXIT_IF(ret < 0,"Ecriture des nouveaux noms des noeuds",NULL);
00145 gid = _MEDdatasetOuvrir(nid,(char *)(MED_NOM_NOM));
00146 ret = _MEDattrEntierEcrire(gid,(char *)(MED_NOM_NBR),&n);
00147 ret = _MEDdatasetFermer(gid);
00148 }
00149 free(nom);
00150 free(nouvelle_chaine);
00151
00152
00153 ret = _MEDdatagroupFermer(nid);
00154 EXIT_IF(ret < 0,"Fermeture de l'accès aux noeuds",NULL);
00155 }