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 #include <stdlib.h>
24
25 /**\ingroup MEDmesh
26 \brief \MEDmeshNodeCoordinateTrsfWrBrief
27 \param fid \fid
28 \param meshname \meshname
29 \param numdt \numdt
30 \param numit \numit
31 \param dt \dt
32 \param coordinatetrsf \coordinatetrsf
33 \retval med_err \error
34 \details \MEDmeshNodeCoordinateTrsfWrDetails
35 \remarks
36 \li \MEDmeshNodeCoordinateTrsfRm1
37 \li \MEDmeshNodeCoordinateTrsfRm2
38 \li \MEDmeshNodeCoordinateTrsfRm3
39 */
40
MEDmeshNodeCoordinateTrsfWr(const med_idt fid,const char * const meshname,const med_int numdt,const med_int numit,const med_float dt,const med_float * const coordinatetrsf)41 med_err MEDmeshNodeCoordinateTrsfWr(const med_idt fid,
42 const char* const meshname,
43 const med_int numdt,
44 const med_int numit,
45 const med_float dt,
46 const med_float* const coordinatetrsf)
47 {
48 med_err _ret = -1;
49 med_idt _meshid = 0,_datagroup1=0,_dataset_coo=0;
50 med_int _intmeshtype = 0;
51 char _meshpath [MED_MESH_SUPPORT_GRP_SIZE+MED_NAME_SIZE+1]="";
52 char _dataset_cooname[MED_TAILLE_NOM_ENTITE+1+3+1]=MED_NOM_NOE"/"MED_NOM_COO;
53 med_bool _isasupportmesh=MED_FALSE,_isasoftlink=MED_FALSE;
54
55 if (_MEDcheckVersion30(fid) < 0) goto ERROR;
56
57 /* Il ne peut pas y avoir de transformation géométrique à MED_NO_DT, MED_NO_IT */
58 if ( (numdt == MED_NO_DT) && (numit == MED_NO_IT) ) {
59 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_PARAMETER,MED_ERR_MESH_MSG);
60 SSCRUTE(_meshpath); ISCRUTE(numdt);ISCRUTE(numit);goto ERROR;
61 }
62
63 /* Maillage de calcul ou maillage support */
64 if ((_meshid=_MEDmeshDatagroupOpen(fid,meshname,_meshpath,&_isasupportmesh)) < 0) {
65 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG);
66 SSCRUTE(_meshpath); goto ERROR;
67 }
68
69 /* Lecture de l'attribut du type de maillage MED_NOM_TYP */
70 if (_MEDattrEntierLire(_meshid,MED_NOM_TYP,&_intmeshtype) < 0) {
71 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
72 SSCRUTE(meshname);SSCRUTE(MED_NOM_TYP);ISCRUTE(_intmeshtype);goto ERROR;
73 }
74
75 /* Accès (création éventuelle non attendue) du datagroup numdt,numit */
76 if ( _isasupportmesh ) {
77 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_PARAMETER,"");
78 SSCRUTE(meshname);goto ERROR;
79 } else
80 if ( (_datagroup1 =_MEDmeshAssociatedGroupCr(fid, MED_MESH_GRP,
81 meshname, numdt, numit, dt, MED_FALSE,
82 "." ) ) < 0 ) {
83 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDmeshAssociatedGroupCr");
84 goto ERROR;
85 }
86
87 /* Erreur si un un dataset MED_NODE/MED_COORDINATE existe */
88 if ( _MEDisasoftlink(_datagroup1, _dataset_cooname,MED_TRUE, &_isasoftlink ) < 0) {
89 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_LINK,MED_NOM_COO);
90 goto ERROR;
91 }
92 /* ISCRUTE_int(_isasoftlink);*/
93 if (!_isasoftlink) {
94 MED_ERR_(_ret,MED_ERR_NULL,MED_ERR_DATASET,MED_NOM_COO);
95 goto ERROR;
96 }
97
98 if ( ( (med_mesh_type) _intmeshtype ) == MED_UNSTRUCTURED_MESH ) {
99
100 if ( _MEDmeshAdvancedWr(fid,
101 meshname,
102 MED_COORDINATE_TRSF,
103 MED_NO_NAME,
104 MED_INTERNAL_UNDEF,
105 numdt,
106 numit,
107 dt,
108 MED_NODE,
109 MED_NONE,
110 MED_NO_CMODE,
111 MED_UNDEF_STMODE,
112 MED_NO_PROFILE,
113 MED_NO_INTERLACE,
114 MED_ALL_CONSTITUENT,
115 NULL,
116 7,
117 coordinatetrsf) < 0 ) {
118 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDmeshAdvancedWr");
119 goto ERROR;
120
121 }
122
123 } else {
124 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_MESHTYPE,MED_ERR_MESH_MSG);
125 SSCRUTE(meshname);SSCRUTE(MED_NOM_GTY);goto ERROR;
126 }
127
128 _ret = 0;
129
130 ERROR:
131 if (_dataset_coo>0) if (_MEDdatagroupFermer(_dataset_coo) < 0) {
132 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_dataset_cooname);
133 ISCRUTE_id(_dataset_coo);
134 }
135
136 if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) {
137 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath);
138 ISCRUTE_id(_datagroup1);ISCRUTE(numdt);ISCRUTE(numit);
139 }
140
141 if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) {
142 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,meshname);
143 ISCRUTE_id(_meshid);
144 }
145
146 return _ret;
147 }
148