16#include <Terme_Boussinesq_VEF_Face.h>
17#include <Fluide_Incompressible.h>
18#include <Champ_Uniforme.h>
19#include <Domaine_VEF.h>
20#include <Domaine_Cl_VEF.h>
21#include <Navier_Stokes_std.h>
22#include <Synonyme_info.h>
57 const Domaine_VEF& domaine_VEF = le_dom_VEF.valeur();
59 CDoubleArrView scalaire0 =
Scalaire0_.view_ro();
61 CDoubleArrView g =
static_cast<const DoubleVect&
>(
gravite().
valeurs()).view_ro();
62 CDoubleTabView xv = domaine_VEF.
xv().view_ro();
63 CDoubleTabView xp = domaine_VEF.
xp().view_ro();
65 CDoubleTabView face_normales = domaine_VEF.
face_normales().view_ro();
66 CDoubleTabView param = tab_param.
view_ro();
67 CIntTabView face_voisins = domaine_VEF.
face_voisins().view_ro();
68 DoubleTabView resu = tab_resu.
view_rw();
71 int nb_faces = domaine_VEF.
nb_faces();
76 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__),
78 KOKKOS_LAMBDA (
int face)
80 int elem1 = face_voisins(face,0);
81 int elem2 = face_voisins(face,1);
83 double delta_param = 0.0;
84 for (
int compo = 0; compo < nbcomp_param; compo++)
85 delta_param += valeur(beta_v,beta_dimension0,beta_nb_dim,elem1,elem2,compo,nbcomp_param)*(scalaire0(compo)-param(face,compo));
87 for (
int comp = 0; comp < dim; comp++)
91 delta_coord = xv(face,comp) - xp(elem1,comp);
93 delta_coord = xp(elem2,comp) - xp(elem1,comp);
95 for (
int compo = 0; compo < nbcomp; compo++)
96 resu(face,compo) += delta_param*delta_coord*face_normales(face,compo)*g(comp)*porosite_surf(face);
99 end_gpu_timer(__KERNEL_NAME__);
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
const Champ_Inc_base & inconnue() const override=0
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
int nb_faces() const
renvoie le nombre global de faces.
virtual double face_normales(int face, int comp) const
double xv(int num_face, int k) const
double xp(int num_elem, int k) const
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
DoubleVect & porosite_face()
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
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.
Classe de base des flux de sortie.
std::enable_if_t< is_default_exec_space< EXEC_SPACE >, ConstView< _TYPE_, _SHAPE_ > > view_ro() const
std::enable_if_t< is_default_exec_space< EXEC_SPACE >, View< _TYPE_, _SHAPE_ > > view_rw()
_SIZE_ dimension(int d) const
Terme Source de Boussinesq pour une dicretisation VEF.
DoubleTab & ajouter(DoubleTab &) const override
void associer_domaines(const Domaine_dis_base &, const Domaine_Cl_dis_base &) override
Classe Terme_Boussinesq_base Cette classe represente le terme de gravite qui figure dans l'equation.
const Convection_Diffusion_std & equation_scalaire() const
const Champ_Don_base & gravite() const
const ArrOfDouble & getScalaire0() const
const Champ_Don_base & beta() const