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 \MEDmeshPolygon2WrBrief
27   \param fid \fid
28   \param meshname \meshname
29   \param numdt \numdt
30   \param numit \numit
31   \param dt \dt
32   \param entitype \entitype
33   \param polytype \polytype
34   \param cmode \cmode
35   \param indexsize \indexsize
36   \param polyindex \polyindex
37   \param connectivity \connectivity
38   \retval med_err \error
39   \details \MEDmeshPolygon2WrDetails
40   \remarks
41   \MEDmeshPolygon2Rem
42 
43  */
44 
45 med_err
MEDmeshPolygon2Wr(const med_idt fid,const char * const meshname,const med_int numdt,const med_int numit,const med_float dt,const med_entity_type entitype,const med_geometry_type polytype,const med_connectivity_mode cmode,const med_int indexsize,const med_int * const polyindex,const med_int * const connectivity)46 MEDmeshPolygon2Wr(const med_idt               fid,
47 		 const char*  const          meshname,
48 		 const med_int               numdt,
49 		 const med_int               numit,
50 		 const med_float             dt,
51 		 const med_entity_type       entitype,
52 		 const med_geometry_type     polytype,
53 		 const med_connectivity_mode cmode,
54 		 const med_int               indexsize,
55 		 const med_int * const       polyindex,
56 		 const med_int * const       connectivity )
57 {
58   med_access_mode _MED_ACCESS_MODE;
59   med_idt         _meshid=0;
60   med_err         _ret         = -1;
61   med_data_type   _datatype    = MED_UNDEF_DATATYPE;
62   med_int         _multi       = 1;
63   /*
64    * On inhibe le gestionnaire d'erreur HDF 5
65    */
66   _MEDmodeErreurVerrouiller();
67  if (_MEDcheckVersion30(fid) < 0) goto ERROR;
68 
69   if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
70     MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
71     goto ERROR;
72   }
73 
74   if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) {
75     MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
76     ISCRUTE_int(_MED_ACCESS_MODE);
77     goto ERROR;
78   }
79 
80 
81   /* Tester le type d'entité ?
82    * MAILLE Ok
83    * FACE   OK
84    * ARETE  ?
85    * NOEUD  KO
86    * NOEUD_MAILLE  ?
87    */
88 
89 /*   ISCRUTE(indexsize); */
90 /*   ISCRUTE(polyindex[indexsize-1] - polyindex[0]); */
91 
92   switch(polytype)
93     {
94     case MED_POLYGON:
95       break;
96     case MED_POLYGON2:
97       /*_multi est devenu inutile.*/
98       _multi=1;
99       break;
100     default:
101       MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG);
102       ISCRUTE_int(polytype);
103       goto ERROR;
104     }
105 
106   if (_MEDmeshAdvancedWr(fid,
107 			 meshname,
108 			 MED_CONNECTIVITY,
109 			 MED_NO_NAME,
110 			 MED_INTERNAL_UNDEF,
111 			 numdt,
112 			 numit,
113 			 dt,
114 			 entitype,
115 			 polytype,
116 			 cmode,
117 			 MED_UNDEF_STMODE,
118 			 MED_NO_PROFILE,
119 			 MED_FULL_INTERLACE,
120 			 MED_ALL_CONSTITUENT,
121 			 NULL,
122 			 _multi*(polyindex[indexsize-1] - polyindex[0]),
123 			 connectivity) < 0 ) {
124     MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDmeshAdvancedWr (MED_CONNECTIVITY) ");
125     goto ERROR;
126   }
127 
128   if (_MEDmeshAdvancedWr(fid,
129 			 meshname,
130 			 MED_INDEX_NODE,
131 			 MED_NO_NAME,
132 			 MED_INTERNAL_UNDEF,
133 			 numdt,
134 			 numit,
135 			 dt,
136 			 entitype,
137 			 polytype,
138 			 cmode,
139 			 MED_UNDEF_STMODE,
140 			 MED_SAME_PROFILE_INTERNAL,
141 			 MED_FULL_INTERLACE,
142 			 MED_ALL_CONSTITUENT,
143 			 NULL,
144 			 indexsize,
145 			 polyindex) < 0 ) {
146     MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDmeshAdvancedWr (MED_INDEX_NODES) ");
147     goto ERROR;
148   }
149 
150   _ret = 0;
151 
152  ERROR:
153 
154   return _ret;
155 
156 }
157