29static int faces_sommets_hexa[6][4] =
47template <
typename _SIZE_>
59template <
typename _SIZE_>
67template <
typename _SIZE_>
72 Cerr <<
"This mesh is not composed of regular hexahedra\n";
73 Cerr <<
"This seems to be VEF hexahedra (Hexaedre_VEF)\n";
74 Cerr <<
"Check your mesh." << finl;
82template <
typename _SIZE_>
85 Domaine_t& domaine = this->mon_dom.valeur();
86 const DoubleTab_t& dom_coord = domaine.les_sommets();
87 IntTab_t& elem = domaine.les_elems();
92 const int_t nb_elem = domaine.nb_elem();
93 const int delta[3] = {1, 2, 4};
94 trustIdType changed_count = 0;
96 for (
int_t num_poly = 0; num_poly < nb_elem; num_poly++)
98 xmin[0] = xmin[1] = xmin[2] = 1e40;
99 for(
int i=0; i<8; i++)
101 int_t s = elem(num_poly,i);
104 for(
int j=0; j<3; j++)
106 double x = dom_coord(s, j);
115 for (
int i=0; i<8; i++)
118 for (
int j=0; j<3; j++)
120 double x = coord[i][j];
121 if (!est_egal(x, xmin[j]))
122 num_sommet += delta[j];
124 if (NS[num_sommet] == -1)
125 NS[num_sommet] = S[i];
130 if (min_array(NS)==-1)
134 for(
int i=0; i<8; i++)
138 elem(num_poly, i) = NS[i];
145 Cerr <<
"Hexaedre_32_64<_SIZE_>::reordonner : " << changed_count <<
" elements reversed" << finl;
153template <
typename _SIZE_>
156 static Nom nom=
"VOXEL8";
170template <
typename _SIZE_>
174 const Domaine_t& dom=this->mon_dom.valeur();
177 if ( inf_ou_egal(dom.
coord(som0,0),pos[0]) && inf_ou_egal(pos[0],dom.
coord(som7,0))
178 && inf_ou_egal(dom.
coord(som0,1),pos[1]) && inf_ou_egal(pos[1],dom.
coord(som7,1))
179 && inf_ou_egal(dom.
coord(som0,2),pos[2]) && inf_ou_egal(pos[2],dom.
coord(som7,2)) )
194template <
typename _SIZE_>
197 const Domaine_t& domaine=this->mon_dom.valeur();
198 if((domaine.sommet_elem(element,0)==som[0])&&
199 (domaine.sommet_elem(element,1)==som[1])&&
200 (domaine.sommet_elem(element,2)==som[2])&&
201 (domaine.sommet_elem(element,3)==som[3])&&
202 (domaine.sommet_elem(element,4)==som[4])&&
203 (domaine.sommet_elem(element,5)==som[5])&&
204 (domaine.sommet_elem(element,6)==som[6])&&
205 (domaine.sommet_elem(element,7)==som[7]))
215template <
typename _SIZE_>
218 const Domaine_t& domaine=this->mon_dom.valeur();
222 int_t size_tot = domaine.nb_elem_tot();
224 for (
int_t num_poly=0; num_poly<size_tot; num_poly++)
226 S1 = domaine.sommet_elem(num_poly,0);
227 S2 = domaine.sommet_elem(num_poly,1);
228 S3 = domaine.sommet_elem(num_poly,2);
229 S4 = domaine.sommet_elem(num_poly,4);
230 dx = domaine.coord(S2,0) - domaine.coord(S1,0);
231 dy = domaine.coord(S3,1) - domaine.coord(S1,1);
232 dz = domaine.coord(S4,2) - domaine.coord(S1,2);
233 volumes[num_poly]= dx*dy*dz;
242template <
typename _SIZE_>
245 const Domaine_t& domaine_geom = this->mon_dom.valeur();
248 double x1,y1,z1,x2,y2,z2;
250 for (
int numface=0; numface<nbfaces; numface++)
253 n0 = Face_sommets(numface,0);
254 n1 = Face_sommets(numface,1);
255 n2 = Face_sommets(numface,2);
257 x1 = les_coords(n0,0) - les_coords(n1,0);
258 y1 = les_coords(n0,1) - les_coords(n1,1);
259 z1 = les_coords(n0,2) - les_coords(n1,2);
261 x2 = les_coords(n2,0) - les_coords(n1,0);
262 y2 = les_coords(n2,1) - les_coords(n1,1);
263 z2 = les_coords(n2,2) - les_coords(n1,2);
265 face_normales(numface,0) = (y1*z2 - y2*z1);
266 face_normales(numface,1) = (-x1*z2 + x2*z1);
267 face_normales(numface,2) = (x1*y2 - x2*y1);
275template <
typename _SIZE_>
278 faces_som_local.
resize(6,4);
279 for (
int i=0; i<6; i++)
280 for (
int j=0; j<4; j++)
281 faces_som_local(i,j) = faces_sommets_hexa[i][j];
291template <
typename _SIZE_>
const DoubleTab_t & coord_sommets() const
double coord(int_t i, int j) const
int_t sommet_elem(int_t i, int j) const
Renvoie le numero (global) du j-ieme sommet du i-ieme element.
Classe Elem_geom_base Cette classe est la classe de base pour la definition d'elements.
Class defining operators and methods for all reading operation in an input flow (file,...
Classe Hexaedre Cette represente un element geometrique a 6 faces, 8 sommets et.
int reordonner_elem()
Reordonne les sommets de l'hexaedre.
void calculer_normales(const IntTab_t &faces_sommets, DoubleTab_t &face_normales) const override
Calcule les normales aux faces des elements du domaine associe.
int contient(const ArrOfDouble &pos, int_t elem) const override
Renvoie 1 si l'element "elemen" du domaine associe a l'element geometrique contient le point.
DoubleVect_T< _SIZE_ > DoubleVect_t
int face_sommet1(int i) const
Renvoie le numero du i-ieme sommet de la face 1.
int face_sommet(int i, int j) const override
Renvoie le numero du j-ieme sommet de la i-ieme face de l'element.
int face_sommet2(int i) const
Renvoie le numero du i-ieme sommet de la face 2.
int face_sommet0(int i) const
Renvoie le numero du i-ieme sommet de la face 0.
void calculer_volumes(DoubleVect_t &vols) const override
Calcule les volumes des elements du domaine associe.
int face_sommet4(int i) const
Renvoie le numero du i-ieme sommet de la face 4.
int get_tab_faces_sommets_locaux(IntTab &faces_som_local) const override
voir ElemGeomBase::get_tab_faces_sommets_locaux
Domaine_32_64< _SIZE_ > Domaine_t
const Nom & nom_lml() const override
Renvoie le nom LML d'un triangle = "VOXEL8".
int face_sommet5(int i) const
Renvoie le numero du i-ieme sommet de la face 5.
void reordonner() override
Reordonne les sommets de l'hexaedre.
SmallArrOfTID_T< _SIZE_ > SmallArrOfTID_t
DoubleTab_T< _SIZE_ > DoubleTab_t
int face_sommet3(int i) const
Renvoie le numero du i-ieme sommet de la face 3.
IntTab_T< _SIZE_ > IntTab_t
class Nom Une chaine de caractere pour nommer les objets de TRUST
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
Classe de base des flux de sortie.
_SIZE_ size_array() const
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension(int d) const
_SIZE_ size_totale() const