16#ifndef Tetra_VEF_included
17#define Tetra_VEF_included
19#include <Elem_VEF_base.h>
24 Declare_instanciable_sans_constructeur(
Tetra_VEF);
34 const DoubleTab& ,
const DoubleVect& ,
const Domaine&)
const override ;
38 void calcul_vc(
const ArrOfInt& ,ArrOfDouble& ,
const ArrOfDouble& ,
39 const DoubleTab& ,
const Champ_Inc_base& ,
int,
const DoubleVect& )
const override ;
40 void calcul_xg(DoubleVect& ,
const DoubleTab& ,
const int ,
int& ,
41 int& ,
int& ,
int& )
const override ;
43 const IntTab& ,
const Domaine& )
const override ;
46KOKKOS_INLINE_FUNCTION
void calcul_vc_tetra(
const int* Face,
double *vc,
const double * vs,
const double * vsom,
47 const double* vitesse,
int type_cl,
const double* poro)
56 for (comp=0; comp<3; comp++)
57 vc[comp] = 0.25*vs[comp];
63 for (comp=0; comp<3; comp++)
64 vc[comp] = vitesse[9+comp] * poro[3];
70 for (comp=0; comp<3; comp++)
71 vc[comp] = vitesse[6+comp] * poro[2];
77 for (comp=0; comp<3; comp++)
78 vc[comp] = vitesse[3+comp] * poro[1];
84 for (comp=0; comp<3; comp++)
85 vc[comp] = vitesse[comp] * poro[0];
91 for (comp=0; comp<3; comp++)
92 vc[comp] = 0.5* (vsom[comp] + vsom[3+comp]);
98 for (comp=0; comp<3; comp++)
99 vc[comp] = 0.5* (vsom[comp] + vsom[6+comp]);
105 for (comp=0; comp<3; comp++)
106 vc[comp] = 0.5* (vsom[comp] + vsom[9+comp]);
112 for (comp=0; comp<3; comp++)
113 vc[comp] = 0.5* (vsom[3+comp] + vsom[6+comp]);
119 for (comp=0; comp<3; comp++)
120 vc[comp] = 0.5* (vsom[3+comp] + vsom[9+comp]);
126 for (comp=0; comp<3; comp++)
127 vc[comp] = 0.5*(vsom[6+comp] + vsom[9+comp]);
133 for (comp=0; comp<3; comp++)
134 vc[comp] = vsom[comp];
140 for (comp=0; comp<3; comp++)
141 vc[comp] = vsom[3+comp];
147 for (comp=0; comp<3; comp++)
148 vc[comp] = vsom[6+comp];
154 for (comp=0; comp<3; comp++)
155 vc[comp] = vsom[9+comp];
163KOKKOS_INLINE_FUNCTION
void calcul_vc_tetra_views(
const int* Face,
double *vc,
const double * vs,
const double * vsom,
164 CDoubleTabView vitesse,
int type_cl, CDoubleArrView porosite_face)
173 for (comp=0; comp<3; comp++)
174 vc[comp] = 0.25*vs[comp];
180 for (comp=0; comp<3; comp++)
181 vc[comp] = vitesse(Face[3], comp) * porosite_face(Face[3]);
187 for (comp=0; comp<3; comp++)
188 vc[comp] = vitesse(Face[2], comp) * porosite_face(Face[2]);
194 for (comp=0; comp<3; comp++)
195 vc[comp] = vitesse(Face[1], comp) * porosite_face(Face[1]);
201 for (comp=0; comp<3; comp++)
202 vc[comp] = vitesse(Face[0], comp) * porosite_face(Face[0]);
208 for (comp=0; comp<3; comp++)
209 vc[comp] = 0.5* (vsom[comp] + vsom[3+comp]);
215 for (comp=0; comp<3; comp++)
216 vc[comp] = 0.5* (vsom[comp] + vsom[6+comp]);
222 for (comp=0; comp<3; comp++)
223 vc[comp] = 0.5* (vsom[comp] + vsom[9+comp]);
229 for (comp=0; comp<3; comp++)
230 vc[comp] = 0.5* (vsom[3+comp] + vsom[6+comp]);
236 for (comp=0; comp<3; comp++)
237 vc[comp] = 0.5* (vsom[3+comp] + vsom[9+comp]);
243 for (comp=0; comp<3; comp++)
244 vc[comp] = 0.5*(vsom[6+comp] + vsom[9+comp]);
250 for (comp=0; comp<3; comp++)
251 vc[comp] = vsom[comp];
257 for (comp=0; comp<3; comp++)
258 vc[comp] = vsom[3+comp];
264 for (comp=0; comp<3; comp++)
265 vc[comp] = vsom[6+comp];
271 for (comp=0; comp<3; comp++)
272 vc[comp] = vsom[9+comp];
283KOKKOS_INLINE_FUNCTION
284void calcul_xg_tetra(
double * xg,
const double *x,
const int type_elem_Cl,
int& idirichlet,
int& n1,
int& n2,
int& n3)
292 for (
int j=0; j<dim; j++)
293 xg[j]=0.25*(x[j]+x[dim+j]+x[2*dim+j]+x[3*dim+j]);
308 for (
int j=0; j<dim; j++)
309 xg[j]=(x[j]+x[dim+j]+x[2*dim+j])/3.;
324 for (
int j=0; j<dim; j++)
325 xg[j]=(x[j]+x[dim+j]+x[3*dim+j])/3.;
339 for (
int j=0; j<dim; j++)
340 xg[j]=(x[j]+x[2*dim+j]+x[3*dim+j])/3.;
354 for (
int j=0; j<dim; j++)
355 xg[j]=(x[dim+j]+x[2*dim+j]+x[3*dim+j])/3.;
366 for (
int j=0; j<dim; j++)
367 xg[j]= 0.5*(x[j]+x[dim+j]);
380 for (
int j=0; j<dim; j++)
381 xg[j]= 0.5*(x[j]+x[2*dim+j]);
393 for (
int j=0; j<dim; j++)
394 xg[j]= 0.5*(x[j]+x[3*dim+j]);
406 for (
int j=0; j<dim; j++)
407 xg[j]= 0.5*(x[dim+j]+x[2*dim+j]);
419 for (
int j=0; j<dim; j++)
420 xg[j]= 0.5*(x[dim+j]+x[3*dim+j]);
433 for (
int j=0; j<dim; j++)
434 xg[j]= 0.5*(x[2*dim+j]+x[3*dim+j]);
445 for (
int j=0; j<dim; j++)
460 for (
int j=0; j<dim; j++)
475 for (
int j=0; j<dim; j++)
489 for (
int j=0; j<dim; j++)
void modif_volumes_entrelaces_faces_joints(int, int, const Domaine_VEF &, DoubleVect &, int) const override
void modif_volumes_entrelaces(int, int, const Domaine_VEF &, DoubleVect &, int) 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 calcul_vc(const ArrOfInt &, ArrOfDouble &, const ArrOfDouble &, const DoubleTab &, const Champ_Inc_base &, int, const DoubleVect &) const override
Tetra_VEF()
renvoie pour la facette fa7 : pour j=0,j=1 : les numeros locaux des 2 faces qui entourent fa7
void modif_normales_facettes_Cl(DoubleTab &, int, int, int, int, int, int) const override
int nb_facette() 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_facette_normales(const Domaine_VEF &, const IntVect &) const override
remplit le tableau face_normales dans le Domaine_VEF
void creer_face_normales(DoubleTab &, const IntTab &, const IntTab &, const IntTab &, const Domaine &) const override