00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MESGERR
00020 #define MESGERR 1
00021 #endif
00022
00023
00024 #include "med_config.h"
00025 #include "med_outils.h"
00026
00027
00028
00029
00030
00031 #include "med_hdfi21.h"
00032 #include "med_hdfi231.h"
00033 #include "med21.h"
00034 #include "MAJ_21_22.h"
00035
00036 void MAJ_21_22_elements_maillage(med_idt mid, med_int dimension)
00037 {
00038 med_idt eid,gid,did,tid;
00039 med_err ret;
00040 int i,j;
00041 med_geometrie_element typmai[MED_NBR_GEOMETRIE_MAILLE] = {MED_POINT1,MED_SEG2,
00042 MED_SEG3,MED_TRIA3,
00043 MED_TRIA6,MED_QUAD4,
00044 MED_QUAD8,MED_TETRA4,
00045 MED_TETRA10,MED_HEXA8,
00046 MED_HEXA20,MED_PENTA6,
00047 MED_PENTA15,MED_PYRA5,
00048 MED_PYRA13};
00049 int taille, edim;
00050 char *nom, *nouvelle_chaine;
00051 char nomgroup[MED_TAILLE_NOM_ENTITE+1];
00052 med_int n;
00053 med_size dimd[1];
00054 med_int *old_conn,*conn;
00055
00056
00057 eid = _MEDdatagroupOuvrir(mid,(char *)(MED_NOM_MAI));
00058 EXIT_IF(eid < 0,"Ouverture du groupe HDF MED_NOM_MAI",NULL);
00059
00060
00061 for (i=0;i<MED_NBR_GEOMETRIE_MAILLE;i++) {
00062
00063
00064 _MEDnomGeometrie(nomgroup,typmai[i]);
00065
00066
00067 gid = _MEDdatagroupOuvrir(eid,nomgroup);
00068 if (gid < 0)
00069 continue;
00070
00071
00072 did = _MEDdatasetOuvrir(gid,(char *)(MED_NOM_NOD));
00073 EXIT_IF(did < 0,"Ouverture du dataset HDF MED_NOM_NOD",NULL);
00074 ret = _MEDattrEntierLire(did,(char *)(MED_NOM_NBR),&n);
00075 EXIT_IF(ret < 0,"Lecture du nombre d'elements",NULL);
00076 ret = _MEDdatasetFermer(did);
00077 EXIT_IF(ret < 0,"Fermeture du dataset HDF MED_NOM_NOD",NULL);
00078
00079
00080 edim = typmai[i] / 100;
00081 if (edim < dimension) {
00082 taille = typmai[i]%100 + 1;
00083 old_conn = (med_int *) malloc(sizeof(med_int)*taille*n);
00084 EXIT_IF(old_conn == NULL,NULL,NULL);
00085 #if defined(HAVE_F77INT64)
00086 ret = _MED21datasetNumLire(gid,(char *)(MED_NOM_NOD),MED_INT64,
00087 MED_NO_INTERLACE,(med_size)taille,MED_ALL,
00088 0,NULL,MED_NOPG,
00089 (unsigned char*) old_conn,H5T_NATIVE_INT);
00090 #else
00091 ret = _MED21datasetNumLire(gid,(char *)(MED_NOM_NOD),MED_INT32,
00092 MED_NO_INTERLACE,(med_size) taille,MED_ALL,
00093 0,NULL,MED_NOPG,
00094 (unsigned char*) old_conn,H5T_NATIVE_INT);
00095 #endif
00096
00097 taille --;
00098 conn = (med_int *) malloc(sizeof(med_int)*taille*n);
00099 EXIT_IF(conn == NULL,NULL,NULL);
00100 for (j=0;j<n*taille;j++)
00101 *(conn+j) = *(old_conn+j);
00102 dimd[0] = n*taille;
00103 #if defined(HAVE_F77INT64)
00104 ret = _MED231datasetNumEcrire(gid,(char *) "TMP",MED_INT64,MED_NO_INTERLACE,
00105 taille,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,MED_NOPG,dimd,
00106 (unsigned char*) conn);
00107 #else
00108 ret = _MED231datasetNumEcrire(gid,(char *) "TMP",MED_INT32,MED_NO_INTERLACE,
00109 taille,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,MED_NOPG,dimd,
00110 (unsigned char*) conn);
00111 #endif
00112 EXIT_IF(ret < 0,"Ecriture de la nouvelle connectivité des mailles",NULL);
00113
00114
00115 tid = _MEDdatasetOuvrir(gid,"TMP");
00116 EXIT_IF(tid < 0,"Ouverture du dataset HDF TMP",NULL);
00117 ret = _MEDattrEntierEcrire(tid,(char *)(MED_NOM_NBR),&n);
00118 EXIT_IF(ret < 0,"Ecriture du nombre de noeuds dans le dataset HDF TMP",NULL);
00119 ret = _MEDdatasetFermer(tid);
00120 EXIT_IF(ret < 0,"Fermeture du dataset HDF TMP",NULL);
00121
00122
00123 ret = H5Gunlink(gid,(char *)(MED_NOM_NOD));
00124 EXIT_IF(ret < 0,"Suppression des anciennes connectivités",NULL);
00125 ret = H5Gmove(gid,"TMP",(char *)(MED_NOM_NOD));
00126 EXIT_IF(ret < 0,"Mise en place des nouvelles connectivités",NULL);
00127
00128
00129 free(old_conn);
00130 free(conn);
00131 }
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(gid,(char *)(MED_NOM_NOM),nom);
00139 if (ret == 0) {
00140 _MED23v30stringConvert(nouvelle_chaine, MED_TAILLE_PNOM,
00141 nom, ANCIEN_MED_TAILLE_PNOM, n );
00142
00143 H5Gunlink(gid,(char *)(MED_NOM_NOM));
00144 dimd[0] = n*MED_TAILLE_PNOM+1;
00145 ret = _MEDdatasetStringEcrire(gid,(char *)(MED_NOM_NOM),dimd,nouvelle_chaine);
00146 EXIT_IF(ret < 0,"Ecriture des nouveaux noms des éléments",NULL);
00147 did = _MEDdatasetOuvrir(gid,(char *)(MED_NOM_NOM));
00148 ret = _MEDattrEntierEcrire(did,(char *)(MED_NOM_NBR),&n);
00149 ret = _MEDdatasetFermer(did);
00150 }
00151 free(nom);
00152 free(nouvelle_chaine);
00153
00154
00155 ret = _MEDdatagroupFermer(gid);
00156 EXIT_IF(ret < 0,"Fermeture de l'accès aux mailles",NULL);
00157 }
00158
00159
00160 ret = _MEDdatagroupFermer(eid);
00161 EXIT_IF(ret < 0,"Fermeture de l'accès aux mailles",NULL);
00162 }