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