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