18#include <Domaine_VEF.h>
19#include <Champ_P1NC.h>
48 for (
int i=0; i<3; i++)
49 for (
int j=0; j<3; j++)
57 const IntTab& Face_sommets,
58 const IntTab& Face_voisins,
59 const IntTab& elem_faces,
60 const Domaine& domaine_geom)
const
64 for (
int num_Face=0; num_Face<nb_face_tot; num_Face++)
70 int n0 = Face_sommets(num_Face, 0);
71 int n1 = Face_sommets(num_Face, 1);
72 x1 = les_coords(n0, 0) - les_coords(n1, 0);
73 y1 = les_coords(n0, 1) - les_coords(n1, 1);
79 int elem1 = Face_voisins(num_Face, 0);
80 if ((f0 = elem_faces(elem1, 0)) == num_Face)
81 f0 = elem_faces(elem1, 1);
82 if ((no3 = Face_sommets(f0, 0)) != n0 && no3 != n1) { }
84 no3 = Face_sommets(f0, 1);
86 x1 = les_coords(no3, 0) - les_coords(n0, 0);
87 y1 = les_coords(no3, 1) - les_coords(n0, 1);
89 if ((nx * x1 + ny * y1) > 0)
91 Face_normales(num_Face, 0) = -nx;
92 Face_normales(num_Face, 1) = -ny;
96 Face_normales(num_Face, 0) = nx;
97 Face_normales(num_Face, 1) = ny;
105 const IntVect& rang_elem_non_std)
const
107 const Domaine& domaine_geom = dom_VEF.
domaine();
108 auto& facette_normales =
const_cast<Domaine_VEF&
>(dom_VEF).facette_normales();
110 const IntTab& les_Polys = domaine_geom.
les_elems();
123 if (facette_normales.dimension(0) != nb_elem_tot)
124 facette_normales.resize(nb_elem_tot,3,2);
126 for(i=0; i<nb_elem_tot; i++)
128 if (rang_elem_non_std(i)==-1)
130 num_som[0]=les_Polys(i,0);
131 num_som[1]=les_Polys(i,1);
132 num_som[2]=les_Polys(i,2);
133 x[0][0]=les_coords(num_som[0],0);
134 x[0][1]=les_coords(num_som[0],1);
135 x[1][0]=les_coords(num_som[1],0);
136 x[1][1]=les_coords(num_som[1],1);
137 x[2][0]=les_coords(num_som[2],0);
138 x[2][1]=les_coords(num_som[2],1);
139 xg[0]=(x[0][0]+x[1][0]+x[2][0])/3;
140 xg[1]=(x[0][1]+x[1][1]+x[2][1])/3;
141 for (fa7=0; fa7<3; fa7++)
144 u[0]= x[fa7][0]-xg[0];
145 u[1]= x[fa7][1]-xg[1];
151 xj0[0]= x[i0][0]-x[i1][0];
152 xj0[1]= x[i0][1]-x[i1][1];
153 psc=xj0[0]*v[0] + xj0[1]*v[1];
156 facette_normales(i,fa7,0) = -v[0];
157 facette_normales(i,fa7,1) = -v[1];
161 facette_normales(i,fa7,0) = v[0];
162 facette_normales(i,fa7,1) = v[1];
174 int num_elem,
const DoubleTab& x,
175 const DoubleVect& xg,
const Domaine& domaine_geom)
const
182 u[0]= x(fa7,0)-xg[0];
183 u[1]= x(fa7,1)-xg[1];
187 int i0 =
KEL_(0,fa7);
188 int i1 =
KEL_(1,fa7);
191 xj0[0]= x(i0,0)-x(i1,0);
192 xj0[1]= x(i0,1)-x(i1,1);
194 psc=xj0[0]*v[0] + xj0[1]*v[1];
197 normales_facettes_Cl(num_elem,fa7,0) = -v[0];
198 normales_facettes_Cl(num_elem,fa7,1) = -v[1];
202 normales_facettes_Cl(num_elem,fa7,0) = v[0];
203 normales_facettes_Cl(num_elem,fa7,1) = v[1];
213 DoubleVect& volumes_entrelaces_Cl,
218 const IntTab& elem_faces = le_dom_VEF.
elem_faces();
226 Cerr <<
"Tri_VEF::modif_volumes_entrelaces() type 0 impossible!\n";
232 surf_mod = volumes_entrelaces[j]/2 ;
233 volumes_entrelaces_Cl[elem_faces(elem,0)] += surf_mod;
234 volumes_entrelaces_Cl[elem_faces(elem,1)] += surf_mod;
240 surf_mod = volumes_entrelaces[j]/2 ;
241 volumes_entrelaces_Cl[elem_faces(elem,0)] += surf_mod;
242 volumes_entrelaces_Cl[elem_faces(elem,2)] += surf_mod;
248 surf_mod = volumes_entrelaces[j]/2 ;
249 volumes_entrelaces_Cl[elem_faces(elem,1)] += surf_mod;
250 volumes_entrelaces_Cl[elem_faces(elem,2)] += surf_mod;
256 surf_mod = volumes_entrelaces[elem_faces(elem,0)]
257 + volumes_entrelaces[elem_faces(elem,1)];
258 volumes_entrelaces_Cl[elem_faces(elem,2)] += surf_mod;
264 surf_mod = volumes_entrelaces[elem_faces(elem,2)]
265 + volumes_entrelaces[elem_faces(elem,1)];
266 volumes_entrelaces_Cl[elem_faces(elem,0)] += surf_mod;
272 surf_mod = volumes_entrelaces[elem_faces(elem,0)]
273 + volumes_entrelaces[elem_faces(elem,2)];
274 volumes_entrelaces_Cl[elem_faces(elem,1)] += surf_mod;
280 Cerr <<
"\n type inconnu Tri_VEF::modif_volumes_entrelaces: " << type_cl ;
293 DoubleVect& volumes_entrelaces_Cl,
298 const IntTab& elem_faces = le_dom_VEF.
elem_faces();
301 int nb_faces_cl = volumes_entrelaces_Cl.
size();
308 Cerr <<
"Tri_VEF::modif_volumes_entrelaces() type 0 impossible!\n";
314 surf_mod = volumes_entrelaces[j]/2 ;
315 face=elem_faces(elem,0);
317 volumes_entrelaces_Cl[face] += surf_mod;
318 face=elem_faces(elem,1);
320 volumes_entrelaces_Cl[face] += surf_mod;
326 surf_mod = volumes_entrelaces[j]/2 ;
327 face=elem_faces(elem,0);
329 volumes_entrelaces_Cl[face] += surf_mod;
330 face=elem_faces(elem,2);
332 volumes_entrelaces_Cl[face] += surf_mod;
338 surf_mod = volumes_entrelaces[j]/2 ;
339 face=elem_faces(elem,1);
341 volumes_entrelaces_Cl[face] += surf_mod;
342 face=elem_faces(elem,2);
344 volumes_entrelaces_Cl[face] += surf_mod;
350 surf_mod = volumes_entrelaces[elem_faces(elem,0)]
351 + volumes_entrelaces[elem_faces(elem,1)];
352 face=elem_faces(elem,2);
354 volumes_entrelaces_Cl[face] += surf_mod;
360 surf_mod = volumes_entrelaces[elem_faces(elem,2)]
361 + volumes_entrelaces[elem_faces(elem,1)];
362 face=elem_faces(elem,0);
364 volumes_entrelaces_Cl[face] += surf_mod;
370 surf_mod = volumes_entrelaces[elem_faces(elem,0)]
371 + volumes_entrelaces[elem_faces(elem,2)];
372 face=elem_faces(elem,1);
374 volumes_entrelaces_Cl[face] += surf_mod;
380 Cerr <<
"\n type inconnu Tri_VEF::modif_volumes_entrelaces: " << type_cl ;
392 const ArrOfDouble& vs,
const DoubleTab& vsom,
393 const Champ_Inc_base& vitesse,
int type_cl,
const DoubleVect& porosite_face)
const
406 vc[0]= vitesse.
valeurs()(Face[2],0)*porosite_face[Face[2]];
407 vc[1]= vitesse.
valeurs()(Face[2],1)*porosite_face[Face[2]];
415 vc[0]= vitesse.
valeurs()(Face[1],0)*porosite_face[Face[1]];
416 vc[1]= vitesse.
valeurs()(Face[1],1)*porosite_face[Face[1]];
424 vc[0]= vitesse.
valeurs()(Face[0],0)*porosite_face[Face[0]];
425 vc[1]= vitesse.
valeurs()(Face[0],1)*porosite_face[Face[0]];
462 const int type_elem_Cl,
int& idirichlet,
int& n1,
int& ,
int& )
const
471 for (
int j=0; j<dim; j++)
472 xg[j]=(x(0,j)+x(1,j)+x(2,j))/3;
482 for (
int j=0; j<dim; j++)
483 xg[j]=(x(0,j)+x(1,j))/2;
493 for (
int j=0; j<dim; j++)
494 xg[j]=(x(0,j)+x(2,j))/2;
504 for (
int j=0; j<dim; j++)
505 xg[j]=(x(1,j)+x(2,j))/2;
515 for (
int j=0; j<dim; j++)
528 for (
int j=0; j<dim; j++)
541 for (
int j=0; j<dim; j++)
560 int fa7,
int num_elem,
561 int idirichlet,
int n1,
int ,
int )
const
579 normales_facettes_Cl(num_elem,n1,0) = 0;
580 normales_facettes_Cl(num_elem,n1,1) = 0;
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
int_t nb_elem_tot() const
const DoubleTab_t & coord_sommets() const
DoubleVect & volumes_entrelaces()
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
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 void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
_SIZE_ dimension_tot(int) const override
void calcul_xg(DoubleVect &, const DoubleTab &, const int, int &, int &, int &, int &) const override
calcule les coord xg du centre d'un element non standard calcule aussi idirichlet=nb de faces de Diri...
void creer_face_normales(DoubleTab &, const IntTab &, const IntTab &, const IntTab &, const Domaine &) const override
remplit le tableau face_normales dans le Domaine_VEF
void modif_normales_facettes_Cl(DoubleTab &, int, int, int, int, int, int) const override
modifie normales_facettes_Cl quand idirichlet=2 idirichlet=nb de faces de Dirichlet de l'element
void creer_facette_normales(const Domaine_VEF &, const IntVect &) const override
calcule les normales des facettes pour des elem standards
void modif_volumes_entrelaces_faces_joints(int, int, const Domaine_VEF &, DoubleVect &, int) const override
modifie les volumes entrelaces pour la face joint j d'un elem non standard
void calcul_vc(const ArrOfInt &, ArrOfDouble &, const ArrOfDouble &, const DoubleTab &, const Champ_Inc_base &, int, const DoubleVect &) const override
void creer_normales_facettes_Cl(DoubleTab &, int, int, const DoubleTab &, const DoubleVect &, const Domaine &) const override
remplit le tableau normales_facettes_Cl dans le Domaine_Cl_VEF pour la facette fa7 de l'element num_e...
void modif_volumes_entrelaces(int, int, const Domaine_VEF &, DoubleVect &, int) const override
modifie les volumes entrelaces pour la face j d'un elem non standard