TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Prisme.h
1/****************************************************************************
2* Copyright (c) 2024, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#ifndef Prisme_included
17#define Prisme_included
18
19#include <Elem_geom_base.h>
20
21template <typename _SIZE_> class Domaine_32_64;
22
23/*! @brief Classe Prisme Cette represente l'element geometrique Prisme.
24 *
25 * Un prisme est un polyedre ayant 5 faces, 6 sommets et deux types
26 * de face:
27 * 2 triangles a 3 sommets
28 * 3 quadrangles a 4 sommets
29 *
30 * @sa Elem_geom_base Elem_geom
31 */
32template <typename _SIZE_>
33class Prisme_32_64 : public Elem_geom_base_32_64<_SIZE_>
34{
35
36 Declare_instanciable_32_64(Prisme_32_64);
37
38public :
39
40 using int_t = _SIZE_;
41 using IntTab_t = IntTab_T<_SIZE_>;
42 using SmallArrOfTID_t = SmallArrOfTID_T<_SIZE_>;
43 using DoubleVect_t = DoubleVect_T<_SIZE_>;
44 using DoubleTab_t = DoubleTab_T<_SIZE_>;
46
47 inline int face_sommet(int i, int j) const override;
48 inline int face_sommet0(int i) const;
49 inline int face_sommet1(int i) const;
50 inline int face_sommet2(int i) const;
51 inline int face_sommet3(int i) const;
52 inline int face_sommet4(int i) const;
53
54 inline int nb_som() const override { return 6; }
55 inline int nb_faces(int=0) const override;
56 inline int nb_som_face(int=0) const override;
57 inline bool est_structure() const override { return false; }
58 const Nom& nom_lml() const override;
59
60 int contient(const ArrOfDouble& pos, int_t elem) const override;
61 int contient(const SmallArrOfTID_t& soms, int_t elem) const override;
62 inline Type_Face type_face(int=0) const override;
63 void calculer_volumes(DoubleVect_t& vols) const override;
64
65 void reordonner() override ;
66
67 int nb_type_face() const override { return 2; }
68 int get_tab_faces_sommets_locaux(IntTab& faces_som_local) const override;
69};
70
71
72/*! @brief Renvoie le numero du j-ieme sommet de la i-ieme face de l'element.
73 *
74 * @param (int i) un numero de face
75 * @param (int j) un numero de sommet
76 * @return (int) le numero du j-ieme sommet de la i-ieme face
77 */
78template <typename _SIZE_>
79inline int Prisme_32_64<_SIZE_>::face_sommet(int face, int sommet) const
80{
81 assert(face<5);
82 switch(face)
83 {
84 case 0:
85 return face_sommet0(sommet);
86 case 1:
87 return face_sommet1(sommet);
88 case 2:
89 return face_sommet2(sommet);
90 case 3:
91 return face_sommet3(sommet);
92 case 4:
93 return face_sommet4(sommet);
94 default :
95 return -1;
96 }
97}
98
99
100/*! @brief Renvoie le nombre de faces du type specifie que possede l'element geometrique.
101 *
102 * Un Prisme a 2 types de faces: quadrangle ou triangle.
103 *
104 * @param (int i) le type de face
105 * @return (int) le nombre de faces de type i
106 */
107template <typename _SIZE_>
108inline int Prisme_32_64<_SIZE_>::nb_faces(int i) const
109{
110 assert(i < nb_type_face());
111 switch(i)
112 {
113 case 0:
114 return 3; //les quadrangles
115 case 1:
116 return 2; //les triangles
117 default :
118 Cerr << "Error, a prism has 2 types of faces and not " << i << finl;
120 return -1;
121 }
122
123}
124
125
126/*! @brief Renvoie le nombre de sommets des faces du type specifie.
127 *
128 * @param (int i) le type de face
129 * @return (int) le nombre de sommets des faces de type i
130 */
131template <typename _SIZE_>
133{
134 assert(i < nb_type_face());
135 switch(i)
136 {
137 case 0:
138 return 4;
139 case 1:
140 return 3;
141 default :
142 Cerr << "Error, a prism has 2 types of faces and not " << i << finl;
144 return -1;
145 }
146}
147
148
149/*! @brief Renvoie le numero du i-ieme sommet de la face 0
150 *
151 * @param (int i) le numero du sommet a renvoyer
152 * @return (int) le numero du i-ieme sommet de la face 0
153 */
154template <typename _SIZE_>
156{
157 //face_sommet0(0)=0;
158 //face_sommet0(1)=1;
159 //face_sommet0(2)=3;
160 //face_sommet0(3)=4;
161 assert(i>=0);
162 assert(i<4);
163 switch(i)
164 {
165 case 0:
166 return 0;
167 case 1:
168 return 1;
169 case 2:
170 return 3;
171 case 3:
172 return 4;
173 default :
174 Cerr << "Error in Prisme_32_64<_SIZE_>::face_sommet0" << finl;
176 // Pour qq compilos :
177 return -1;
178 }
179}
180
181
182/*! @brief Renvoie le numero du i-ieme sommet de la face 1
183 *
184 * @param (int i) le numero du sommet a renvoyer
185 * @return (int) le numero du i-ieme sommet de la face 1
186 */
187template <typename _SIZE_>
189{
190 //face_sommet0(0)=0;
191 //face_sommet0(1)=2;
192 //face_sommet0(2)=3;
193 //face_sommet0(3)=5;
194 assert(i>=0);
195 assert(i<4);
196 switch(i)
197 {
198 case 0:
199 return 0;
200 case 1:
201 return 2;
202 case 2:
203 return 3;
204 case 3:
205 return 5;
206 default :
207 Cerr << "Error in Prisme_32_64<_SIZE_>::face_sommet1" << finl;
209 // Pour qq compilos :
210 return -1;
211 }
212}
213
214
215/*! @brief Renvoie le numero du i-ieme sommet de la face 2
216 *
217 * @param (int i) le numero du sommet a renvoyer
218 * @return (int) le numero du i-ieme sommet de la face 2
219 */
220template <typename _SIZE_>
222{
223 //face_sommet0(0)=1;
224 //face_sommet0(1)=2;
225 //face_sommet0(2)=4;
226 //face_sommet0(3)=5;
227 assert(i>=0);
228 assert(i<4);
229 switch(i)
230 {
231 case 0:
232 return 1;
233 case 1:
234 return 2;
235 case 2:
236 return 4;
237 case 3:
238 return 5;
239 default :
240 Cerr << "Error in Prisme_32_64<_SIZE_>::face_sommet2" << finl;
242 // Pour qq compilos :
243 return -1;
244 }
245}
246
247
248/*! @brief Renvoie le numero du i-ieme sommet de la face 3
249 *
250 * @param (int i) le numero du sommet a renvoyer
251 * @return (int) le numero du i-ieme sommet de la face 3
252 */
253template <typename _SIZE_>
255{
256 //face_sommet0(0)=0;
257 //face_sommet0(1)=1;
258 //face_sommet0(2)=2;
259 assert(i>=0);
260 assert(i<3);
261 return i;
262}
263
264
265/*! @brief Renvoie le numero du i-ieme sommet de la face 4
266 *
267 * @param (int i) le numero du sommet a renvoyer
268 * @return (int) le numero du i-ieme sommet de la face 4
269 */
270template <typename _SIZE_>
272{
273 //face_sommet0(0)=0;
274 //face_sommet0(1)=1;
275 //face_sommet0(2)=2;
276 assert(i>=0);
277 assert(i<3);
278 return i+3;
279}
280
281/*! @brief Renvoie le i-ieme type de face.
282 *
283 * Un prisme a 2 types de face: quadrangle et triangle
284 *
285 * @param (int i) le rang du type de face a renvoyer
286 * @return (Type_Face) le type de la face i
287 */
288template <typename _SIZE_>
289inline Type_Face Prisme_32_64<_SIZE_>::type_face(int i) const
290{
291 assert(i<=1);
292 switch(i)
293 {
294 case 0:
295 return Type_Face::quadrangle_3D;
296 case 1:
297 return Type_Face::triangle_3D;
298 default :
299 Cerr << "Error, a prism has 2 types of faces and not " << i << finl;
301 return Type_Face::quadrangle_3D;
302 }
303}
304
305
306using Prisme = Prisme_32_64<int>;
307using Prisme_64 = Prisme_32_64<trustIdType>;
308
309#endif
classe Domaine_32_64 un Domaine est un maillage compose d'un ensemble d'elements geometriques de meme...
Definition Domaine.h:62
Classe Elem_geom_base Cette classe est la classe de base pour la definition d'elements.
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Classe Prisme Cette represente l'element geometrique Prisme.
Definition Prisme.h:34
bool est_structure() const override
Definition Prisme.h:57
DoubleTab_T< _SIZE_ > DoubleTab_t
Definition Prisme.h:44
const Nom & nom_lml() const override
Renvoie le nom LML d'un prisme = "PRISM6".
Definition Prisme.cpp:71
int nb_faces(int=0) const override
Renvoie le nombre de faces du type specifie que possede l'element geometrique.
Definition Prisme.h:108
int face_sommet4(int i) const
Renvoie le numero du i-ieme sommet de la face 4.
Definition Prisme.h:271
IntTab_T< _SIZE_ > IntTab_t
Definition Prisme.h:41
int contient(const SmallArrOfTID_t &soms, int_t elem) const override
NE FAIT RIEN: A CODER, renvoie toujours 0 Renvoie 1 si les sommets specifies par le parametre "pos".
Definition Prisme.cpp:187
int face_sommet(int i, int j) const override
Renvoie le numero du j-ieme sommet de la i-ieme face de l'element.
Definition Prisme.h:79
int nb_som_face(int=0) const override
Renvoie le nombre de sommets des faces du type specifie.
Definition Prisme.h:132
int face_sommet2(int i) const
Renvoie le numero du i-ieme sommet de la face 2.
Definition Prisme.h:221
void reordonner() override
Reordonne les sommets du Prisme.
Definition Prisme.cpp:58
void calculer_volumes(DoubleVect_t &vols) const override
NE FAIT RIEN: A CODER Calcule les volumes des elements du domaine associe.
Definition Prisme.cpp:200
int face_sommet3(int i) const
Renvoie le numero du i-ieme sommet de la face 3.
Definition Prisme.h:254
SmallArrOfTID_T< _SIZE_ > SmallArrOfTID_t
Definition Prisme.h:42
Type_Face type_face(int=0) const override
Renvoie le i-ieme type de face.
Definition Prisme.h:289
int face_sommet0(int i) const
Renvoie le numero du i-ieme sommet de la face 0.
Definition Prisme.h:155
Domaine_32_64< _SIZE_ > Domaine_t
Definition Prisme.h:45
_SIZE_ int_t
Definition Prisme.h:40
int face_sommet1(int i) const
Renvoie le numero du i-ieme sommet de la face 1.
Definition Prisme.h:188
int contient(const ArrOfDouble &pos, int_t elem) const override
NE FAIT RIEN: A CODER, renvoie toujours 0.
Definition Prisme.cpp:90
int nb_type_face() const override
Nb of face types of the elemnt (for example 2 for a prism).
Definition Prisme.h:67
DoubleVect_T< _SIZE_ > DoubleVect_t
Definition Prisme.h:43
int get_tab_faces_sommets_locaux(IntTab &faces_som_local) const override
remplit le tableau faces_som_local(i,j) qui donne pour 0 <= i < nb_faces() et 0 <= j < nb_som_face(i)...
Definition Prisme.cpp:263
int nb_som() const override
Nb of vertices for the element.
Definition Prisme.h:54
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455