16#include <TRUSTTabs_forward.h>
17#include <Source_Transport_K_Eps_VEF_Face.h>
18#include <Modele_turbulence_hyd_K_Eps.h>
19#include <VEF_discretisation.h>
20#include <Transport_K_Eps.h>
21#include <Schema_Temps_base.h>
22#include <Milieu_base.h>
23#include <Domaine_VEF.h>
26 "Source_Transport_K_Eps_VEF_P1NC",
53 1,
equation().schema_temps().temps_courant(), production_k_face_);
63 if (opt == DESCRIPTION)
64 Cerr <<
que_suis_je() <<
" : " << noms_compris << finl;
66 nom.add(noms_compris);
71 return mon_eq_transport_K_Eps->modele_turbulence().viscosite_turbulente().valeurs();
76 const Modele_turbulence_hyd_K_Eps& mod = ref_cast(Modele_turbulence_hyd_K_Eps, mon_eq_transport_K_Eps->modele_turbulence());
82 return mon_eq_transport_K_Eps->inconnue().valeurs();
87 return ref_cast(Modele_turbulence_hyd_K_Eps,
88 mon_eq_transport_K_Eps->modele_turbulence()).associe_modele_fonction();
91void Source_Transport_K_Eps_VEF_Face::calcul_tabs_bas_reyn(
const DoubleTrav& P,
const DoubleTab& vit,
const DoubleTab& visco_turb,
const Champ_Don_base& ch_visco_cin,
92 const Champ_base& ch_visco_cin_ou_dyn, DoubleTab& D, DoubleTab& E, DoubleTab& F1, DoubleTab& F2)
const
94 const DoubleTab& K_eps = mon_eq_transport_K_Eps->inconnue().valeurs();
95 get_modele_fonc_bas_reyn()->Calcul_D(D, mon_eq_transport_K_Eps->domaine_dis(),
96 mon_eq_transport_K_Eps->domaine_Cl_dis(),
97 vit, K_eps, ch_visco_cin);
100 get_modele_fonc_bas_reyn()->Calcul_E(E, mon_eq_transport_K_Eps->domaine_dis(),
101 mon_eq_transport_K_Eps->domaine_Cl_dis(),
102 vit, K_eps, ch_visco_cin, visco_turb);
105 get_modele_fonc_bas_reyn()->Calcul_F1(F1, mon_eq_transport_K_Eps->domaine_dis(),
106 mon_eq_transport_K_Eps->domaine_Cl_dis(),
107 P, K_eps, ch_visco_cin_ou_dyn);
108 get_modele_fonc_bas_reyn()->Calcul_F2(F2, D, mon_eq_transport_K_Eps->domaine_dis(),
109 K_eps, ch_visco_cin_ou_dyn);
114 const Modele_turbulence_hyd_K_Eps& mod = ref_cast(Modele_turbulence_hyd_K_Eps,mon_eq_transport_K_Eps->modele_turbulence());
118void Source_Transport_K_Eps_VEF_Face::calcul_tenseur_reyn(
const DoubleTab& visco_turb,
119 const DoubleTab& gradient_elem,
122 get_modele_fonc_bas_reyn()->calcul_tenseur_Re(visco_turb, gradient_elem, Re);
125void Source_Transport_K_Eps_VEF_Face::fill_resu_bas_rey(
const DoubleVect& tab_volumes_entrelaces,
126 const DoubleTrav& tab_prod,
const DoubleTab& tab_D,
127 const DoubleTab& tab_E,
const DoubleTab& tab_F1,
128 const DoubleTab& tab_F2, DoubleTab& tab_resu)
const
130 const double LeK_MIN = mon_eq_transport_K_Eps->modele_turbulence().get_K_MIN();
131 const double _C1_ =
C1;
132 const double _C2_ =
C2;
133 CDoubleTabView K_eps = mon_eq_transport_K_Eps->inconnue().valeurs().
view_ro();
134 CDoubleArrView volumes_entrelaces = tab_volumes_entrelaces.view_ro();
135 CDoubleArrView prod =
static_cast<const ArrOfDouble&
>(tab_prod).view_ro();
136 CDoubleArrView D =
static_cast<const ArrOfDouble&
>(tab_D).view_ro();
137 CDoubleArrView E =
static_cast<const ArrOfDouble&
>(tab_E).view_ro();
138 CDoubleArrView F1 =
static_cast<const ArrOfDouble&
>(tab_F1).view_ro();
139 CDoubleArrView F2 =
static_cast<const ArrOfDouble&
>(tab_F2).view_ro();
140 DoubleTabView resu = tab_resu.
view_rw();
141 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), le_dom_VEF->nb_faces(), KOKKOS_LAMBDA(
const int fac)
143 const double tke = K_eps(fac, 0);
144 const double eps = K_eps(fac, 1);
145 resu(fac, 0) += (prod(fac) - eps - D(fac))*volumes_entrelaces(fac);
147 resu(fac, 1) += ((_C1_*prod(fac)*F1(fac) - _C2_*eps*F2(fac))*eps/tke + E(fac))*volumes_entrelaces(fac);
149 end_gpu_timer(__KERNEL_NAME__);
152void Source_Transport_K_Eps_VEF_Face::fill_resu(
const DoubleVect& tab_volumes_entrelaces,
153 const DoubleTrav& tab_prod, DoubleTab& tab_resu)
const
155 const double LeK_MIN = mon_eq_transport_K_Eps->modele_turbulence().get_K_MIN();
156 const double _C1_ =
C1;
157 const double _C2_ =
C2;
158 CDoubleTabView K_eps = mon_eq_transport_K_Eps->inconnue().valeurs().view_ro();
159 CDoubleArrView volumes_entrelaces = tab_volumes_entrelaces.view_ro();
160 CDoubleArrView prod =
static_cast<const ArrOfDouble&
>(tab_prod).view_ro();
161 DoubleArrView production_k_face =
static_cast<ArrOfDouble&
>(ref_cast_non_const(DoubleTab,production_k_face_->valeurs())).view_wo();
162 DoubleTabView resu = tab_resu.
view_rw();
163 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), le_dom_VEF->nb_faces(), KOKKOS_LAMBDA(
const int fac)
165 const double tke = K_eps(fac, 0);
166 const double eps = K_eps(fac, 1);
167 production_k_face(fac)=prod(fac);
168 resu(fac, 0) += (prod(fac) - eps)*volumes_entrelaces(fac);
169 if (K_eps(fac, 0) >= LeK_MIN)
170 resu(fac, 1) += (_C1_*prod(fac) - _C2_*eps)*eps/tke*volumes_entrelaces(fac);
172 end_gpu_timer(__KERNEL_NAME__);
183 const double LeK_MIN = mon_eq_transport_K_Eps->modele_turbulence().get_K_MIN();
184 const double _C2_ =
C2;
185 CDoubleArrView porosite_face = mon_eq_transport_K_Eps->milieu().porosite_face().view_ro();
186 CDoubleArrView volumes_entrelaces = le_dom_VEF->volumes_entrelaces().view_ro();
187 CDoubleTabView K_eps = mon_eq_transport_K_Eps->inconnue().valeurs().view_ro();
188 Matrice_Morse_View matrice;
189 matrice.set(matrice_morse);
191 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), K_eps.extent(0), KOKKOS_LAMBDA(
const int face)
193 if (K_eps(face, 0) >= LeK_MIN)
195 const double tke = K_eps(face, 0);
196 const double eps = K_eps(face, 1);
197 const double volporo = porosite_face(face) * volumes_entrelaces(face);
199 const double coef_k = eps / tke * volporo;
200 matrice.add(face * 2, face * 2, coef_k);
202 const double coef_eps = _C2_ * eps / tke * volporo;
203 matrice.add(face * 2 + 1, face * 2 + 1, coef_eps);
206 end_gpu_timer(__KERNEL_NAME__);
classe Champ_Don_base classe de base des Champs donnes (non calcules)
classe Champ_base Cette classe est la base de la hierarchie des champs.
virtual void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const =0
classe Discretisation_base Cette classe represente un schema de discretisation en espace,...
void discretiser_champ(const Motcle &directive, const Domaine_dis_base &z, const Nom &nom, const Nom &unite, int nb_comp, int nb_pas_dt, double temps, OWN_PTR(Champ_Inc_base)&champ, const Nom &sous_type=NOM_VIDE) const
Class defining operators and methods for all reading operation in an input flow (file,...
const Discretisation_base & discretisation() const
Renvoie la discretisation associee a l'equation.
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
const Turbulence_paroi_base & loi_paroi() const
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
class Nom Une chaine de caractere pour nommer les objets de TRUST
Un tableau de chaine de caracteres (VECT(Nom)).
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 Probleme_base C'est un Probleme_U qui n'est pas un couplage.
Classe de base des flux de sortie.
class Source_Transport_K_Eps_VEF_Face Cette classe represente le terme source qui figure dans l'equat...
void associer_pb(const Probleme_base &pb) override
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
DoubleTab & ajouter(DoubleTab &) const override
void contribuer_a_avec(const DoubleTab &, Matrice_Morse &) const override
contribution a la matrice implicite des termes sources par defaut pas de contribution
void discretiser() override
DoubleTab & ajouter_keps(DoubleTab &) const
virtual const Nom get_type_paroi() const
virtual const DoubleTab & get_visc_turb() const
void associer_pb(const Probleme_base &pb) override
virtual const DoubleTab & get_cisaillement_paroi() const
virtual const DoubleTab & get_K_pour_production() const
Champs_compris champs_compris_
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()
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")
classe Transport_K_Eps Cette classe represente l'equation de transport de l'energie cinetique
const DoubleTab & Cisaillement_paroi() const
void verifier_pb_keps(const Probleme_base &, const Nom &)