16#include <Op_Diff_K_Omega_VEF_Face.h>
17#include <Modele_turbulence_hyd_K_Omega.h>
18#include <Champ_P1NC.h>
19#include <Periodique.h>
20#include <Neumann_paroi.h>
21#include <Paroi_hyd_base_VEF.h>
22#include <Discretisation_tools.h>
23#include <Champ_Uniforme.h>
24#include <Fluide_Incompressible.h>
27 "Op_Diff_K_Omega_VEF_P1NC",
39void Op_Diff_K_Omega_VEF_Face::compute(DoubleTab& tab_nu_turb_m)
const
41 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
49 if (turbulence_model->is_SST_or_BSL() != is_SST_or_BSL)
Process::exit(
"Error in Op_Diff_K_Omega_VEF_Face::ajouter");
50 DoubleTrav tab_F1elem(domaine_VEF.
nb_elem_tot(), 1);
51 CDoubleArrView F1elem;
55 F1elem =
static_cast<const ArrOfDouble&
>(tab_F1elem).view_ro();
57 const int nb_elem = domaine_VEF.
nb_elem();
59 DoubleTabView nu_turb_m = tab_nu_turb_m.
view_wo();
60 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(0, nb_elem), KOKKOS_LAMBDA(
const int elem)
62 double F1 = is_SST_or_BSL ? F1elem(elem) : 0;
63 nu_turb_m(elem,0) = nu_turb(elem) * (is_SST_or_BSL*(F1*Sigma_K1 + (1 - F1)*Sigma_K2) + (1 - is_SST_or_BSL)*Sigma_K);
64 nu_turb_m(elem,1) = nu_turb(elem) * (is_SST_or_BSL*(F1*Sigma_OMEGA1 + (1 - F1)*Sigma_OMEGA2)+ (1 - is_SST_or_BSL)*Sigma_Omega);
66 end_gpu_timer(__KERNEL_NAME__);
76 DoubleTab& nu_turb_m = ref_cast_non_const(DoubleTab,
nu_turb_m_);
80 if (
flux_bords_.dimension_tot(0)!=le_dom_vef->nb_faces_bord())
81 flux_bords_.resize(le_dom_vef->nb_faces_bord(), nb_comp);
105 DoubleTab& nu_turb_m = ref_cast_non_const(DoubleTab,
nu_turb_m_);
110 DoubleTrav porosite_eventuelle(
equation().milieu().porosite_face());
112 if (!marq) porosite_eventuelle = 1;
131 const ArrOfInt& tab_face_komega_imposee = paroi.face_keps_imposee();
135 const int size = tab_secmem.
dimension(0);
140 CIntArrView face_komega_imposee =
static_cast<const ArrOfInt&
>(tab_face_komega_imposee).view_ro();
141 auto tab1 = matrice.
get_tab1().view_ro();
143 DoubleTabView secmem = tab_secmem.
view_rw();
144 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(0, size), KOKKOS_LAMBDA(
const int face)
146 if (face_komega_imposee[face] != -2)
148 for (
int comp = 0; comp < nb_comp; comp++)
151 int j = face * nb_comp + comp;
152 const int idiag = tab1[j] - 1;
156 const int nbvois = tab1[j+1] - tab1[j];
157 for (
int k = 1; k < nbvois; k++)
158 coeff[idiag + k] = 0;
159 secmem(face, comp) = val(face, comp);
163 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.
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
virtual const Champ_Inc_base & inconnue() const =0
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
const auto & get_tab1() const
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.
void contribuer_a_avec(const DoubleTab &, Matrice_Morse &) const override
DOES NOTHING - to override in derived classes.
void modifier_pour_Cl(Matrice_Morse &matrice, DoubleTab &secmem) const override
On modifie le second membre et la matrice dans le cas des conditions de dirichlet.
DoubleTab & ajouter(const DoubleTab &, DoubleTab &) const override
class Op_Diff_K_Omega_VEF_Face Cette classe represente l'operateur de diffusion turbulente
const Champ_Fonc_base & diffusivite_turbulente() const
int phi_psi_diffuse(const Equation_base &eq) const
definit si on calcule div(phi nu grad Psi) ou div(nu grap Phi psi)
virtual void remplir_nu(DoubleTab &) const
std::enable_if_t< _TYPE_==Type_Champ::VECTORIEL, void > ajouter_bord_gen(const DoubleTab &, DoubleTab &, DoubleTab &, const DoubleTab &, const DoubleTab &) const
void ajouter_contribution_bord_gen(const DoubleTab &, Matrice_Morse &, const DoubleTab &, const DoubleTab &, const DoubleVect &) const
std::enable_if_t< _TYPE_==Type_Champ::VECTORIEL, void > ajouter_interne_gen(const DoubleTab &, DoubleTab &, DoubleTab &, const DoubleTab &, const DoubleTab &) const
void ajouter_contribution_interne_gen(const DoubleTab &inco, Matrice_Morse &mat, const DoubleTab &nu, const DoubleTab &nu_turb, const DoubleVect &porosite_eventuelle) const
void modifier_pour_Cl(Matrice_Morse &matrice, DoubleTab &secmem) const override
DOES NOTHING - to override in derived classes.
void modifier_matrice_pour_periodique_apres_contribuer(Matrice_Morse &matrice, const Equation_base &) const
Somme les 2 lignes des faces periodiques associees permet de calculer dans le code sans se poser de q...
void modifier_matrice_pour_periodique_avant_contribuer(Matrice_Morse &matrice, const Equation_base &) const
divise les coefficients sur les ligne des faces periodiques par 2 en prevision de l'application modif...
void modifier_flux(const Operateur_base &) const
CLASS: Paroi_hyd_base_VEF Classe de base des lois de paroi hydraulique en VEF.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
_SIZE_ size_array() const
std::enable_if_t< is_default_exec_space< EXEC_SPACE >, View< _TYPE_, _SHAPE_ > > view_wo()
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
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")
Classe Turbulence_paroi_base Classe de base pour la hierarchie des classes representant les modeles.