1 /* This file is part of MED.
2 *
3 * COPYRIGHT (C) 1999 - 2019 EDF R&D, CEA/DEN
4 * MED is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * MED is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with MED. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18
19 #include <med.h>
20 #include <med_config.h>
21 #include <med_outils.h>
22 #include <string.h>
23
24 /**\ingroup MEDfield
25 \brief \MEDfieldComputingStepMeshWrBrief
26 \param fid \fid
27 \param fieldname \fieldname
28 \param numdt \numdt
29 \param numit \numit
30 \param meshnumdt \meshnumdt
31 \param meshnumit \meshnumit
32 \retval med_err \error
33 \details \MEDfieldComputingStepMeshWrDetails
34 */
35 med_err
MEDfieldComputingStepMeshWr(const med_idt fid,const char * const fieldname,const med_int numdt,const med_int numit,const med_int meshnumdt,const med_int meshnumit)36 MEDfieldComputingStepMeshWr(const med_idt fid,
37 const char * const fieldname,
38 const med_int numdt,
39 const med_int numit,
40 const med_int meshnumdt,
41 const med_int meshnumit) {
42
43 med_access_mode _MED_ACCESS_MODE;
44 med_err _ret=-1;
45 med_idt _gid=0;
46 char _path [(MED_FIELD_GRP_SIZE+MED_NAME_SIZE+1)+2*MED_MAX_PARA+1]=MED_FIELD_GRP;
47
48 /* char _datagroupname1[2*MED_MAX_PARA+1]=""; */
49 /* char _cstpname[2*MED_MAX_PARA+1]=""; */
50
51 /*
52 * On inhibe le gestionnaire d'erreur HDF 5
53 */
54 _MEDmodeErreurVerrouiller();
55 if (_MEDcheckVersion30(fid) < 0) goto ERROR;
56
57 if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
58 MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
59 goto ERROR;
60 }
61
62 if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) {
63 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
64 ISCRUTE_int(_MED_ACCESS_MODE);
65 goto ERROR;
66 }
67
68 /*
69 * On construit le nom du datagroup
70 */
71 strcat(_path,fieldname);
72 strcat(_path,"/");
73 _MEDgetComputationStepName(MED_SORT_DTIT,numdt,numit,&_path[strlen(_path)]);
74
75
76 if ((_gid = _MEDdatagroupOuvrir(fid,_path)) < 0) {
77 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path);
78 goto ERROR;
79 }
80
81
82 /*
83 * Ecriture des attributs
84 */
85
86 if (_MEDattributeIntWr(_gid,MED_NOM_RDT, &meshnumdt) < 0) {
87 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_RDT);
88 SSCRUTE(_path);ISCRUTE(meshnumdt);goto ERROR;
89 }
90
91 if (_MEDattributeIntWr(_gid,MED_NOM_ROR, &meshnumit) < 0) {
92 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_ROR);
93 SSCRUTE(_path);ISCRUTE(meshnumit);goto ERROR;
94 }
95
96
97 _ret = 0;
98
99 ERROR:
100
101
102 if (_gid>0) if (_MEDdatagroupFermer(_gid) < 0) {
103 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path);
104 ISCRUTE_id(_gid);
105 }
106
107 return _ret;
108 }
109