00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <med.h>
00020 #include <med_config.h>
00021 #include <med_outils.h>
00022 #include <string.h>
00023 #include <stdlib.h>
00024
00036 med_err
00037 MEDmeshGridStructRd(const med_idt fid,
00038 const char* const meshname,
00039 const med_int numdt,
00040 const med_int numit,
00041 med_int * const gridstruct)
00042 {
00043 med_idt _meshid=0;
00044 med_err _ret = -1;
00045 med_data_type _datatype = MED_UNDEF_DATATYPE;
00046 med_grid_type _gridtype = MED_UNDEF_GRID_TYPE;
00047 med_int _intgridtype = 0;
00048 med_int _meshdim = 0;
00049 char _meshpath[MED_TAILLE_MAA+MED_NAME_SIZE+1]=MED_MAA;
00050 int _i=0;
00051
00052
00053
00054
00055 _MEDmodeErreurVerrouiller();
00056
00057
00058 strcat(_meshpath,meshname);
00059 if ((_meshid = _MEDdatagroupOuvrir(fid,_meshpath)) < 0) {
00060 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
00061 SSCRUTE(meshname);SSCRUTE(_meshpath); goto ERROR;
00062 }
00063
00064
00065 if (_MEDattrEntierLire(_meshid,MED_NOM_DIM,&_meshdim) < 0) {
00066 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00067 SSCRUTE(meshname);SSCRUTE(MED_NOM_DIM);ISCRUTE(_meshdim);goto ERROR;
00068 }
00069
00070
00071
00072
00073 if (_MEDattrEntierLire(_meshid,MED_NOM_GTY,&_intgridtype) < 0) {
00074 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00075 SSCRUTE(meshname);SSCRUTE(MED_NOM_GTY);ISCRUTE(_intgridtype);goto ERROR;
00076 }
00077 _gridtype=(med_grid_type) _intgridtype;
00078
00079 if (_gridtype != MED_CURVILINEAR_GRID) {
00080 MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_GRIDTYPE,MED_ERR_MESH_MSG);
00081 SSCRUTE(meshname);ISCRUTE_int(_gridtype);goto ERROR;
00082 }
00083
00084
00085
00086
00087
00088 for (_i=0;_i<_meshdim;++_i) {
00089
00090 switch(_i) {
00091 case 0 :
00092 _datatype = MED_COORDINATE_AXIS1;
00093 break;
00094 case 1 :
00095 _datatype = MED_COORDINATE_AXIS2;
00096 break;
00097 case 2 :
00098 _datatype = MED_COORDINATE_AXIS3;
00099 break;
00100 default :
00101 MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_GRIDTYPE,MED_ERR_MESH_MSG);
00102 SSCRUTE(meshname);ISCRUTE_int(_gridtype);goto ERROR;
00103 }
00104
00105 med_int * _ptr=gridstruct+_i;
00106 if (_MEDmeshAdvancedRd(fid,
00107 meshname,
00108 _datatype,
00109 MED_NO_NAME,
00110 MED_INT,
00111 numdt,
00112 numit,
00113 MED_NODE,
00114 MED_NONE,
00115 MED_NO_CMODE,
00116 MED_UNDEF_PFLMODE,
00117 MED_NO_PROFILE,
00118 MED_FULL_INTERLACE,
00119 MED_ALL_CONSTITUENT,
00120 NULL,
00121 (unsigned char* const) (_ptr)) < 0 ) {
00122 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDmeshAdvancedRd");
00123 goto ERROR;
00124 }
00125
00126 }
00127
00128 _ret = 0;
00129
00130 ERROR:
00131
00132 if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) {
00133 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath);
00134 ISCRUTE_id(_meshid);
00135 }
00136
00137 return _ret;
00138
00139 }