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
_MEDgetGeometricParameter(const med_entity_type entitytype,const med_geometry_type geotype,med_int * const entdim,med_int * const nnodes,med_int * const nndes)23 med_err _MEDgetGeometricParameter(const med_entity_type entitytype,
24 const med_geometry_type geotype,
25 med_int * const entdim,
26 med_int * const nnodes,
27 med_int * const nndes)
28 {
29
30 med_err _ret=-1;
31
32 /* TODO : MED_NODE_ELEMENT */
33 if ( entitytype == MED_NODE ) {*nnodes=0;*nndes=0;*entdim=1; return 0;}
34 /*Le nombre de noeuds des polygones des utilisateurs est dynamiquement fixé.
35 Il n'y a donc pas de gestion d'entrelacement.
36 Le tableau d'index permettrait tout de même de developper une selection par filtre
37 en deux passes :
38 1) Filtre sur les indices 2) Création du tableau de filtre à partir de la selection des indices
39 */
40 if ( geotype == MED_POLYGON ) {*nnodes=1;*nndes=1;*entdim=-1;return 0;}
41 if ( geotype == MED_POLYGON2 ) {*nnodes=1;*nndes=1;*entdim=-1;return 0;}
42 if ( geotype == MED_POLYHEDRON ) {*nnodes=1;*nndes=1;*entdim=-1;return 0;}
43
44 *nnodes = geotype % 100;
45 *entdim = geotype / 100;
46
47 switch(entitytype)
48 {
49 case MED_CELL :
50 switch (geotype)
51 {
52 case MED_POINT1 :
53 *nndes = 0;
54 break;
55
56 case MED_SEG2 :
57 *nndes = 2;
58 break;
59
60 case MED_SEG3 :
61 *nndes = 3;
62 break;
63
64 case MED_SEG4 :
65 *nndes = 4;
66 break;
67
68 case MED_TRIA3 :
69 *nndes = 3;
70 break;
71
72 case MED_TRIA6 :
73 *nndes = 3;
74 break;
75
76 case MED_TRIA7 :
77 *nndes = 3;
78 break;
79
80 case MED_QUAD4 :
81 *nndes = 4;
82 break;
83
84 case MED_QUAD8 :
85 *nndes = 4;
86 break;
87
88 case MED_QUAD9 :
89 *nndes = 4;
90 break;
91
92 case MED_TETRA4 :
93 *nndes = 4;
94 break;
95
96 case MED_TETRA10 :
97 *nndes = 4;
98 break;
99
100 case MED_OCTA12 :
101 *nndes = 8;
102 break;
103
104 case MED_HEXA8 :
105 *nndes = 6;
106 break;
107
108 case MED_HEXA20 :
109 *nndes = 6;
110 break;
111
112 case MED_HEXA27 :
113 *nndes = 6;
114 break;
115
116 case MED_PENTA6 :
117 *nndes = 5;
118 break;
119
120 case MED_PENTA15 :
121 *nndes = 5;
122 break;
123
124 case MED_PENTA18 :
125 *nndes = 5;
126 break;
127
128 case MED_PYRA5 :
129 *nndes = 5;
130 break;
131
132 case MED_PYRA13 :
133 *nndes = 5;
134 break;
135
136 default :
137 return -1;
138 }
139 break;
140
141 case MED_DESCENDING_FACE :
142 switch(geotype)
143 {
144 case MED_TRIA3 :
145 *nndes = 3;
146 break;
147
148 case MED_TRIA6 :
149 *nndes = 3;
150 break;
151
152 case MED_QUAD4 :
153 *nndes = 4;
154 break;
155
156 case MED_QUAD8 :
157 *nndes = 4;
158 break;
159
160 default :
161 return -1;
162 }
163 break;
164
165 case MED_DESCENDING_EDGE :
166 switch(geotype)
167 {
168 case MED_SEG2 :
169 *nndes = 2;
170 break;
171
172 case MED_SEG3 :
173 *nndes = 3;
174 break;
175
176 default :
177 return -1;
178 }
179 break;
180
181 default :
182 MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_ENTITY,MED_ERR_VALUE_MSG);
183 ISCRUTE_int(entitytype); goto ERROR;
184 }
185
186 _ret = 0;
187 ERROR:
188 return _ret;
189 }
190