16#include <Modifier_pour_fluide_dilatable.h>
17#include <Fluide_Dilatable_base.h>
18#include <Modele_turbulence_hyd_base.h>
19#include <Equation_base.h>
20#include <Probleme_base.h>
21#include <Domaine_VF.h>
24static void multiplier_ou_diviser(DoubleVect& x,
const DoubleVect& y,
int diviser)
27 tab_multiply_any_shape(x, y, VECT_REAL_ITEMS);
29 tab_divide_any_shape(x, y, VECT_REAL_ITEMS);
39 const Domaine& domaine = zvf.
domaine();
40 const MD_Vector& md_elem = domaine.les_elems().get_md_vector();
52 multiplier_ou_diviser(tab, rho_bord, diviser);
59 multiplier_ou_diviser(tab, rho_faces, diviser);
66 multiplier_ou_diviser(tab, rho, diviser);
73 DoubleTrav tab_rho_elem;
74 domaine.creer_tableau_elements(tab_rho_elem, RESIZE_OPTIONS::NOCOPY_NOINIT);
75 const int nb_elem_tot = domaine.nb_elem_tot();
77 const double facteur = 1. / nfe;
78 CDoubleArrView tab_rho =
static_cast<const DoubleVect&
>(le_fluide.
masse_volumique().valeurs()).view_ro();
79 CIntTabView elem_faces = zvf.
elem_faces().view_ro();
80 DoubleArrView rho_elem =
static_cast<DoubleVect&
>(tab_rho_elem).view_wo();
81 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), nb_elem_tot, KOKKOS_LAMBDA(
const int elem)
84 for (
int face = 0; face < nfe; face++)
86 int f = elem_faces(elem, face);
89 rho_elem[elem] = x * facteur;
91 end_gpu_timer(__KERNEL_NAME__);
92 multiplier_ou_diviser(tab, tab_rho_elem, diviser);
96 Cerr <<
"Error in Modifier_pour_fluide_dilatable.cpp: multiplier_rho. Invalid discretization of tab and rho." << finl;
106void multiplier_par_rho_si_dilatable(DoubleVect& val,
const Milieu_base& mil)
112 Cerr <<
"What ?? The method multiplier_par_rho_si_dilatable should not be called since your fluid is not dilatable !!" << finl;
120void diviser_par_rho_si_dilatable(DoubleVect& val,
const Milieu_base& mil)
126 Cerr <<
"What ?? The method diviser_par_rho_si_dilatable should not be called since your fluid is not dilatable !!" << finl;
140 multiplier_diviser_rho(nut, le_fluide, 0 );
144 DoubleTab& cisaillement = ref_cast_non_const(DoubleTab, cisaillement_paroi);
145 multiplier_diviser_rho(cisaillement, le_fluide, 0 );
150 Cerr <<
"What ?? The method Correction_nut_et_cisaillement_paroi_si_qc should not be called since your fluid is not dilatable !!" << finl;
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
const Domaine_dis_base & domaine_dis_base() const override
virtual DoubleTab & valeurs()=0
const MD_Vector & md_vector_faces() const
void creer_tableau_faces_bord(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
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 MD_Vector & md_vector_faces_bord() const
const Domaine & domaine() const
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
classe Fluide_Dilatable_base Cette classe represente un d'un fluide dilatable,
const Champ_Inc_base & vitesse() const
: Cette classe est un OWN_PTR mais l'objet pointe est partage entre plusieurs
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
Classe Modele_turbulence_hyd_base Cette classe sert de base a la hierarchie des classes.
const Turbulence_paroi_base & loi_paroi() const
const Champ_Fonc_base & viscosite_turbulente() const
Equation_base & equation()
Renvoie l'equation associee au modele de turbulence.
virtual const Milieu_base & milieu() const
Renvoie le milieu physique associe au probleme.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
TRUSTArray & inject_array(const TRUSTArray &source, _SIZE_ nb_elements=-1, _SIZE_ first_element_dest=0, _SIZE_ first_element_source=0)
virtual const MD_Vector & get_md_vector() const
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")
const DoubleTab & Cisaillement_paroi() const