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
00038 med_err
00039 MEDparameterValueWr(const med_idt fid,
00040 const char* const paramname,
00041 const med_int numdt,
00042 const med_int numit,
00043 const med_float dt,
00044 const unsigned char* const value)
00045 {
00046 med_err _ret = -1;
00047 med_idt _paramidt = 0;
00048 med_idt _cpstidt = 0;
00049 char _parampath [MED_TAILLE_NUM_DATA+MED_NAME_SIZE+1] = "";
00050 char _cpstpath[MED_TAILLE_SUP_MAA+MED_NAME_SIZE+1+2*MED_MAX_PARA+1+1]="";
00051 char _cpstname [2*MED_MAX_PARA+1]="";
00052 med_access_mode _MED_ACCESS_MODE;
00053 med_int _intparamtype = 0;
00054 med_parameter_type _paramtype;
00055
00056 _MEDmodeErreurVerrouiller();
00057 if (_MEDcheckVersion30(fid) < 0) goto ERROR;
00058
00059
00060 if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
00061 MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00062 goto ERROR;
00063 }
00064 if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) {
00065 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00066 ISCRUTE_int(_MED_ACCESS_MODE);
00067 goto ERROR;
00068 }
00069
00070
00071
00072 NOFINALBLANK(paramname,ERROR);
00073 strcpy(_parampath, MED_NUM_DATA);
00074 strcat(_parampath, paramname);
00075 if ((_paramidt = _MEDdatagroupOuvrir(fid,_parampath)) < 0) {
00076 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_PARAM_MSG);
00077 SSCRUTE(paramname);SSCRUTE(_parampath); goto ERROR;
00078 }
00079
00080
00081 _MEDgetComputationStepName(MED_SORT_DTIT,numdt,numit,_cpstname);
00082 strcpy( _cpstpath, _parampath);
00083 strcat( _cpstpath, "/");
00084 strcat( _cpstpath, _cpstname);
00085
00086
00087 if ((_cpstidt = _MEDdatagroupOuvrir(_paramidt, _cpstname)) < 0 )
00088 if ((_cpstidt = _MEDdatagroupCreer(_paramidt,_cpstname)) < 0 ) {
00089 MED_ERR_(_ret, MED_ERR_EXIST, MED_ERR_COMPUTINGSTEP, _cpstname);
00090 SSCRUTE(paramname);goto ERROR;
00091 }
00092
00093
00094 if ( _MEDattributeIntWr(_cpstidt,MED_NOM_NDT,&numdt) < 0) {
00095 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00096 SSCRUTE(paramname);SSCRUTE(_cpstname);SSCRUTE(MED_NOM_NDT);
00097 ISCRUTE(numdt);goto ERROR;
00098 }
00099
00100 if ( _MEDattrFloatEcrire(_cpstidt,MED_NOM_PDT,&dt) < 0) {
00101 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00102 SSCRUTE(paramname);SSCRUTE(_cpstname);SSCRUTE(MED_NOM_PDT);
00103 RSCRUTE(dt);goto ERROR;
00104 }
00105
00106 if ( _MEDattributeIntWr(_cpstidt,MED_NOM_NOR,&numit) < 0) {
00107 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00108 SSCRUTE(paramname);SSCRUTE(_cpstname);SSCRUTE(MED_NOM_NOR);
00109 ISCRUTE(numit); goto ERROR;
00110 }
00111
00112
00113 if ( _MEDattrEntierLire(_paramidt,MED_NOM_TYP,&_intparamtype) < 0) {
00114 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00115 SSCRUTE(paramname);SSCRUTE(MED_NOM_TYP);
00116 goto ERROR;
00117 }
00118 _paramtype = (med_field_type) (_intparamtype);
00119 if (_paramtype == MED_FLOAT64)
00120 if (_MEDattrFloatEcrire(_cpstidt, MED_NOM_VAL, value) < 0) {
00121 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00122 SSCRUTE(paramname);SSCRUTE(MED_NOM_VAL);
00123 }
00124 if (_paramtype != MED_FLOAT64)
00125 if (_MEDattributeIntWr(_cpstidt, MED_NOM_VAL, value) < 0) {
00126 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00127 SSCRUTE(paramname);SSCRUTE(MED_NOM_VAL);
00128 }
00129
00130 _ret = 0;
00131 ERROR:
00132
00133
00134
00135 if (_cpstidt > 0)
00136 if (_MEDdatagroupFermer(_cpstidt) < 0) {
00137 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_cpstname);
00138 ISCRUTE_id(_cpstidt);
00139 }
00140
00141 if (_paramidt > 0)
00142 if (_MEDdatagroupFermer(_paramidt) < 0) {
00143 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_parampath);
00144 ISCRUTE_id(_paramidt);
00145 }
00146
00147 return _ret;
00148 }