MEDparameterValueWr.c

Aller à la documentation de ce fichier.
00001 /*  This file is part of MED.
00002  *
00003  *  COPYRIGHT (C) 1999 - 2015  EDF R&D, CEA/DEN
00004  *  MED is free software: you can redistribute it and/or modify
00005  *  it under the terms of the GNU Lesser General Public License as published by
00006  *  the Free Software Foundation, either version 3 of the License, or
00007  *  (at your option) any later version.
00008  *
00009  *  MED is distributed in the hope that it will be useful,
00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *  GNU Lesser General Public License for more details.
00013  *
00014  *  You should have received a copy of the GNU Lesser General Public License
00015  *  along with MED.  If not, see <http://www.gnu.org/licenses/>.
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   /* Verification du mode d'acces aux donn�es */
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   /* Si le group HDF correspondant au parametre n'existe pas => erreur
00071      Sinon on l'ouvre */
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   /* On construit le nom du datagroup du pas de temps */
00081   _MEDgetComputationStepName(MED_SORT_DTIT,numdt,numit,_cpstname);
00082   strcpy( _cpstpath, _parampath);
00083   strcat( _cpstpath, "/");
00084   strcat( _cpstpath, _cpstname);
00085 
00086   /* Si l'etape de calcul n'existe pas, on la cr�e */
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   /* ecriture de l'attribut MED_NOM_NDT pour �criture */
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   /* ecriture de l'attribut MED_NOM_PDT */
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   /* ecriture de l'attribut MED_NOM_NOR  */
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   /* on ecrit la valeur du parametre */
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   /* on ferme tout */
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 }

Généré le Thu Oct 8 14:26:16 2015 pour MED fichier par  doxygen 1.6.1