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