00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <med.h>
00025 #define MESGERR 1
00026 #include <med_utils.h>
00027
00028 #include <string.h>
00029
00030 int main (int argc, char **argv) {
00031 med_idt fid;
00032 char meshname[MED_NAME_SIZE+1]="";
00033 char meshdescription[MED_COMMENT_SIZE+1]="";
00034 med_int meshdim=0;
00035 med_int spacedim=0;
00036 med_sorting_type sortingtype;
00037 med_int nstep;
00038 med_mesh_type meshtype;
00039 med_axis_type axistype;
00040 char *axisname="";
00041 char *unitname="";
00042 char dtunit[MED_SNAME_SIZE+1]="";
00043 med_float *coordinates = NULL;
00044 med_int nnodes = 0;
00045 med_int ngeo = 0;
00046 med_int nelt=0;
00047 med_int *connectivity = NULL;
00048 med_bool coordinatechangement;
00049 med_bool geotransformation;
00050 med_int i, j, it, nmesh;
00051 med_geometry_type geotype;
00052 med_geometry_type *geotypes = MED_GET_CELL_GEOMETRY_TYPE;
00053 char geotypename[MED_NAME_SIZE+1];
00054 int ret=-1;
00055
00056
00057
00058 fid = MEDfileOpen("UsesCase_MEDmesh_1.med",MED_ACC_RDONLY);
00059 if (fid < 0) {
00060 MESSAGE("ERROR : open file in READ ONLY ACCESS mode ...");
00061 goto ERROR;
00062 }
00063
00064
00065 if ((nmesh = MEDnMesh(fid)) < 0) {
00066 MESSAGE("ERROR : read how many mesh ...");
00067 goto ERROR;
00068 }
00069
00070 for (i=0;i<nmesh;i++) {
00071
00072
00073 if ((spacedim = MEDmeshnAxis(fid, i+1)) < 0) {
00074 MESSAGE("ERROR : read computation space dimension ...");
00075 goto ERROR;
00076 }
00077
00078
00079 if ((axisname = (char*) malloc(MED_SNAME_SIZE*spacedim+1)) == NULL) {
00080 MESSAGE("ERROR : memory allocation ...");
00081 goto ERROR;
00082 }
00083 if ((unitname = (char*) malloc(MED_SNAME_SIZE*spacedim+1)) == NULL) {
00084 MESSAGE("ERROR : memory allocation ...");
00085 goto ERROR;
00086 }
00087
00088
00089 if (MEDmeshInfo(fid, i+1, meshname, &spacedim, &meshdim, &meshtype, meshdescription,
00090 dtunit, &sortingtype, &nstep, &axistype, axisname, unitname) < 0) {
00091 MESSAGE("ERROR : mesh info ...");
00092 free(axisname); free(unitname);
00093 goto ERROR;
00094 }
00095
00096 free(axisname);
00097 free(unitname);
00098
00099
00100 if ((nnodes = MEDmeshnEntity(fid, meshname, MED_NO_DT, MED_NO_IT, MED_NODE, MED_NO_GEOTYPE,
00101 MED_COORDINATE, MED_NO_CMODE,&coordinatechangement,
00102 &geotransformation)) < 0) {
00103 MESSAGE("ERROR : number of nodes ...");
00104 goto ERROR;
00105 }
00106
00107
00108 if ((coordinates = (med_float*) malloc(sizeof(med_float)*nnodes*spacedim)) == NULL) {
00109 MESSAGE("ERROR : memory allocation ...");
00110 goto ERROR;
00111 }
00112
00113 if (MEDmeshNodeCoordinateRd(fid, meshname, MED_NO_DT, MED_NO_IT, MED_FULL_INTERLACE,
00114 coordinates) < 0) {
00115 MESSAGE("ERROR : nodes coordinates ...");
00116 free(coordinates);
00117 goto ERROR;
00118 }
00119
00120 if (coordinates)
00121 free(coordinates);
00122
00123
00124 if ((ngeo = MEDmeshnEntity(fid, meshname, MED_NO_DT, MED_NO_IT, MED_CELL,MED_GEO_ALL,
00125 MED_CONNECTIVITY, MED_NODAL,&coordinatechangement,
00126 &geotransformation)) < 0) {
00127 MESSAGE("ERROR : number of cell ...");
00128 ISCRUTE(geotype);
00129 goto ERROR;
00130 }
00131
00132 for (it=1; it<=ngeo; it++) {
00133
00134
00135 if ((nelt = MEDmeshEntityInfo(fid, meshname, MED_NO_DT, MED_NO_IT,MED_CELL,it,
00136 geotypename,&geotype)) < 0) {
00137 MESSAGE("ERROR : number of cell ...");
00138 ISCRUTE(it);
00139 goto ERROR;
00140 }
00141
00142
00143 if ((nelt = MEDmeshnEntity(fid, meshname, MED_NO_DT, MED_NO_IT, MED_CELL,geotype,
00144 MED_CONNECTIVITY, MED_NODAL,&coordinatechangement,
00145 &geotransformation)) < 0) {
00146 MESSAGE("ERROR : number of cell ...");
00147 goto ERROR;
00148 }
00149
00150
00151 if ((connectivity = (med_int *) malloc(sizeof(med_int)*nelt*(geotype%100))) == NULL) {
00152 MESSAGE("ERROR : memory allocation ...");
00153 goto ERROR;
00154 }
00155
00156 if (MEDmeshElementConnectivityRd(fid, meshname, MED_NO_DT, MED_NO_IT, MED_CELL,
00157 geotype, MED_NODAL, MED_FULL_INTERLACE, connectivity) < 0) {
00158 MESSAGE("ERROR : cellconnectivity ...");
00159 ISCRUTE(geotype);
00160 free(connectivity);
00161 goto ERROR;
00162 }
00163
00164
00165 if (connectivity) {
00166 free(connectivity);
00167 connectivity = NULL;
00168 }
00169
00170
00171 }
00172
00173 }
00174
00175
00176
00177
00178 ret=0;
00179 ERROR:
00180
00181
00182 if (MEDfileClose(fid) < 0) {
00183 MESSAGE("ERROR : close file");
00184 ret=-1;
00185 }
00186
00187 return ret;
00188 }
00189