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