MEDparameterValueWr.c
Aller à la documentation de ce fichier.
/* This file is part of MED.
*
* COPYRIGHT (C) 1999 - 2020 EDF R&D, CEA/DEN
* MED is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MED is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with MED. If not, see <http://www.gnu.org/licenses/>.
*/
#include <med.h>
#include <med_config.h>
#include <med_outils.h>
#include <string.h>
#include <stdlib.h>
med_err
MEDparameterValueWr(const med_idt fid,
const char* const paramname,
const med_int numdt,
const med_int numit,
const med_float dt,
const unsigned char* const value)
{
med_err _ret = -1;
med_idt _paramidt = 0;
med_idt _cpstidt = 0;
char _parampath [MED_NUMERICAL_DATA_GRP_SIZE+MED_NAME_SIZE+1] = "";
char _cpstpath[MED_MESH_SUPPORT_GRP_SIZE+MED_NAME_SIZE+1+2*MED_MAX_PARA+1+1]="";
char _cpstname [2*MED_MAX_PARA+1]="";
med_access_mode _MED_ACCESS_MODE;
med_int _intparamtype = 0;
med_parameter_type _paramtype;
_MEDmodeErreurVerrouiller();
if (_MEDcheckVersion30(fid) < 0) goto ERROR;
/* Verification du mode d'acces aux donn�es */
if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
goto ERROR;
}
if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) {
MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
ISCRUTE_int(_MED_ACCESS_MODE);
goto ERROR;
}
/* Si le group HDF correspondant au parametre n'existe pas => erreur
Sinon on l'ouvre */
NOFINALBLANK(paramname,ERROR);
strcpy(_parampath, MED_NUMERICAL_DATA_GRP);
strcat(_parampath, paramname);
if ((_paramidt = _MEDdatagroupOuvrir(fid,_parampath)) < 0) {
MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_PARAM_MSG);
SSCRUTE(paramname);SSCRUTE(_parampath); goto ERROR;
}
/* On construit le nom du datagroup du pas de temps */
_MEDgetComputationStepName(MED_SORT_DTIT,numdt,numit,_cpstname);
strcpy( _cpstpath, _parampath);
strcat( _cpstpath, "/");
strcat( _cpstpath, _cpstname);
/* Si l'etape de calcul n'existe pas, on la cr�e */
if ((_cpstidt = _MEDdatagroupOuvrir(_paramidt, _cpstname)) < 0 )
if ((_cpstidt = _MEDdatagroupCreer(_paramidt,_cpstname)) < 0 ) {
MED_ERR_(_ret, MED_ERR_EXIST, MED_ERR_COMPUTINGSTEP, _cpstname);
SSCRUTE(paramname);goto ERROR;
}
/* ecriture de l'attribut MED_NOM_NDT pour �criture */
if ( _MEDattributeIntWr(_cpstidt,MED_NOM_NDT,&numdt) < 0) {
MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
SSCRUTE(paramname);SSCRUTE(_cpstname);SSCRUTE(MED_NOM_NDT);
ISCRUTE(numdt);goto ERROR;
}
/* ecriture de l'attribut MED_NOM_PDT */
if ( _MEDattrFloatEcrire(_cpstidt,MED_NOM_PDT,&dt) < 0) {
MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
SSCRUTE(paramname);SSCRUTE(_cpstname);SSCRUTE(MED_NOM_PDT);
RSCRUTE(dt);goto ERROR;
}
/* ecriture de l'attribut MED_NOM_NOR */
if ( _MEDattributeIntWr(_cpstidt,MED_NOM_NOR,&numit) < 0) {
MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
SSCRUTE(paramname);SSCRUTE(_cpstname);SSCRUTE(MED_NOM_NOR);
ISCRUTE(numit); goto ERROR;
}
/* on ecrit la valeur du parametre */
if ( _MEDattrEntierLire(_paramidt,MED_NOM_TYP,&_intparamtype) < 0) {
MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
SSCRUTE(paramname);SSCRUTE(MED_NOM_TYP);
goto ERROR;
}
_paramtype = (med_field_type) (_intparamtype);
if (_paramtype == MED_FLOAT64)
if (_MEDattrFloatEcrire(_cpstidt, MED_NOM_VAL, value) < 0) {
MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
SSCRUTE(paramname);SSCRUTE(MED_NOM_VAL);
}
if (_paramtype != MED_FLOAT64)
if (_MEDattributeIntWr(_cpstidt, MED_NOM_VAL, value) < 0) {
MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
SSCRUTE(paramname);SSCRUTE(MED_NOM_VAL);
}
_ret = 0;
ERROR:
/* on ferme tout */
if (_cpstidt > 0)
if (_MEDdatagroupFermer(_cpstidt) < 0) {
MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_cpstname);
ISCRUTE_id(_cpstidt);
}
if (_paramidt > 0)
if (_MEDdatagroupFermer(_paramidt) < 0) {
MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_parampath);
ISCRUTE_id(_paramidt);
}
return _ret;
}
MEDparameterValueWr
med_err MEDparameterValueWr(const med_idt fid, const char *const paramname, const med_int numdt, const med_int numit, const med_float dt, const unsigned char *const value)
Cette routine permet l'écriture de la valeur d'un paramètre numérique scalaire.
Definition MEDparameterValueWr.c:39
MED_NAME_SIZE
#define MED_NAME_SIZE
Definition med.h:81
med_parameter_type
med_field_type med_parameter_type
Definition med.h:178
med_field_type
med_field_type
Definition med.h:165
MED_FLOAT64
@ MED_FLOAT64
Definition med.h:166
MED_MAX_PARA
#define MED_MAX_PARA
Definition med.h:76
MED_SORT_DTIT
@ MED_SORT_DTIT
Definition med.h:300
med_int
int med_int
Definition med.h:333
med_float
double med_float
Definition med.h:327
med_err
herr_t med_err
Definition med.h:323
med_access_mode
med_access_mode
Definition med.h:120
MED_ACC_UNDEF
@ MED_ACC_UNDEF
Definition med.h:124
MED_ACC_RDONLY
@ MED_ACC_RDONLY
Definition med.h:120
med_idt
hid_t med_idt
Definition med.h:322
med.h
med_config.h
MED_ERR_OPEN
#define MED_ERR_OPEN
Definition med_err.h:37
MED_ERR_ACCESSMODE
#define MED_ERR_ACCESSMODE
Definition med_err.h:104
MED_ERR_PARAM_MSG
#define MED_ERR_PARAM_MSG
Definition med_err.h:175
MED_ERR_DATAGROUP
#define MED_ERR_DATAGROUP
Definition med_err.h:99
MED_ERR_CLOSE
#define MED_ERR_CLOSE
Definition med_err.h:30
MED_ERR_INVALID
#define MED_ERR_INVALID
Definition med_err.h:40
MED_ERR_ATTRIBUTE
#define MED_ERR_ATTRIBUTE
Definition med_err.h:100
MED_ERR_EXIST
#define MED_ERR_EXIST
Definition med_err.h:43
MED_ERR_COMPUTINGSTEP
#define MED_ERR_COMPUTINGSTEP
Definition med_err.h:113
MED_ERR_READ
#define MED_ERR_READ
Definition med_err.h:28
MED_ERR_FILE_MSG
#define MED_ERR_FILE_MSG
Definition med_err.h:132
MED_ERR_WRITE
#define MED_ERR_WRITE
Definition med_err.h:29
MED_ERR_UNRECOGNIZED
#define MED_ERR_UNRECOGNIZED
Definition med_err.h:39
_MEDattrEntierLire
#define _MEDattrEntierLire(x, y, z)
Definition med_hdfi.h:68
_MEDdatagroupCreer
MEDC_EXPORT med_idt _MEDdatagroupCreer(med_idt pid, const char *const nom)
_MEDattributeIntWr
#define _MEDattributeIntWr(w, x, y)
Definition med_hdfi.h:45
_MEDmodeErreurVerrouiller
MEDC_EXPORT void _MEDmodeErreurVerrouiller(void)
_MEDattrFloatEcrire
#define _MEDattrFloatEcrire(w, x, y)
Definition med_hdfi.h:48
_MEDdatagroupFermer
MEDC_EXPORT med_err _MEDdatagroupFermer(med_idt id)
_MEDgetComputationStepName
MEDC_EXPORT med_err _MEDgetComputationStepName(const med_sorting_type sortingtype, const med_int numdt, const med_int numit, char *const datagroupname)
_MEDdatagroupOuvrir
MEDC_EXPORT med_idt _MEDdatagroupOuvrir(med_idt pid, const char *const nom)
_MEDcheckVersion30
MEDC_EXPORT med_err _MEDcheckVersion30(med_idt fid)
_MEDmodeAcces
MEDC_EXPORT med_access_mode _MEDmodeAcces(med_idt oid)
MED_NOM_NOR
#define MED_NOM_NOR
Definition med_outils.h:145
MED_MESH_SUPPORT_GRP_SIZE
#define MED_MESH_SUPPORT_GRP_SIZE
Definition med_outils.h:165
MED_NOM_VAL
#define MED_NOM_VAL
Definition med_outils.h:53
MED_NOM_TYP
#define MED_NOM_TYP
Definition med_outils.h:65
MED_NOM_NDT
#define MED_NOM_NDT
Definition med_outils.h:142
MED_NUMERICAL_DATA_GRP
#define MED_NUMERICAL_DATA_GRP
Definition med_outils.h:243
MED_NUMERICAL_DATA_GRP_SIZE
#define MED_NUMERICAL_DATA_GRP_SIZE
Definition med_outils.h:244
MED_NOM_PDT
#define MED_NOM_PDT
Definition med_outils.h:144
med_outils.h
MED_ERR_
#define MED_ERR_(rt, r1, r2, r3)
Definition med_utils.h:160
SSCRUTE
#define SSCRUTE(chaine)
Definition med_utils.h:323
RSCRUTE
#define RSCRUTE(reel)
Definition med_utils.h:321
ISCRUTE
#define ISCRUTE(entier)
Definition med_utils.h:313
ISCRUTE_id
#define ISCRUTE_id(entier)
Definition med_utils.h:319
NOFINALBLANK
#define NOFINALBLANK(chaine, label)
Definition med_utils.h:311
ISCRUTE_int
#define ISCRUTE_int(entier)
Definition med_utils.h:314