16#include <Check_espace_virtuel.h>
17#include <Discretisation_base.h>
18#include <Op_Dift_VEF_Face.h>
19#include <Milieu_base.h>
24Op_Dift_VEF_Face::Op_Dift_VEF_Face()
38 DoubleTrav nu, nu_turb_m, tab_inconnue;
42 flux_bords_.resize(le_dom_vef->nb_faces_bord(), nb_comp);
49 modif_par_porosite_si_flag(
nu_, nu, !marq, porosite_elem);
50 modif_par_porosite_si_flag(nu_turb, nu_turb_m, !marq, porosite_elem);
51 const DoubleTab& inconnue = modif_par_porosite_si_flag(inconnue_org, tab_inconnue, marq, porosite_face);
53 assert_espace_virtuel_vect(nu);
54 assert_espace_virtuel_vect(inconnue);
55 assert_espace_virtuel_vect(nu_turb_m);
59 Debog::verifier(
"Op_Dift_VEF_Face::ajouter inconnue_org", inconnue_org);
62 if (
equation().inconnue().nature_du_champ() == vectoriel)
85 DoubleTrav nu, nu_turb;
91 modif_par_porosite_si_flag(
nu_, nu, !marq, porosite_elem);
92 modif_par_porosite_si_flag(nu_turb_, nu_turb, !marq, porosite_elem);
94 DoubleTrav porosite_eventuelle(
equation().milieu().porosite_face());
96 if (!marq) porosite_eventuelle = 1;
98 if (
equation().inconnue().nature_du_champ() == vectoriel)
117 const IntTab& face_voisins = domaine_VEF.
face_voisins();
122 if (
equation().inconnue().nature_du_champ() == vectoriel)
125 DoubleTrav nu, nu_turb_m, tab_inconnue;
132 modif_par_porosite_si_flag(
nu_, nu, !marq, porosite_elem);
133 modif_par_porosite_si_flag(nu_turb, nu_turb_m, !marq, porosite_elem);
135 const DoubleTab& inconnue = modif_par_porosite_si_flag(inconnue_org, tab_inconnue, marq, porosite_face);
137 DoubleTab& grad =
grad_;
141 DoubleTrav gradsa(grad);
144 if (le_modele_turbulence->utiliser_loi_paroi())
149 ToDo_Kokkos(
"critical");
150 for (
int num_face = 0; num_face < nb_faces; num_face++)
151 for (
int kk = 0; kk < 2; kk++)
153 int elem = face_voisins(num_face, kk);
156 int ori = 1 - 2 * kk;
157 for (
int i = 0; i < nb_comp; i++)
158 for (
int j = 0; j < nb_comp; j++)
159 resu(num_face, i) -= ori * face_normale(num_face, j) * ((nu[elem] + nu_turb[elem]) * grad(elem, i, j) + (nu_turb[elem]) * grad(elem, j, i) );
164 for (
int n_bord = 0; n_bord < domaine_VEF.
nb_front_Cl(); n_bord++)
172 ToDo_Kokkos(
"critical");
173 for (
int face = ndeb; face < nfin; face++)
174 for (
int comp = 0; comp < nb_comp; comp++)
184 ToDo_Kokkos(
"critical");
185 for (
int face = ndeb; face < nfin; face++)
186 resu[face] += la_cl_paroi.
h_imp(face - ndeb) * (la_cl_paroi.
T_ext(face - ndeb)) * domaine_VEF.
face_surfaces(face);
189 Process::exit(
"Op_Dift_VEF_Face::contribuer_au_second_membre : Non code pour Echange_externe_impose !");
DoubleTab & valeurs() override
Overrides Champ_base::valeurs() Returns the array of values.
DoubleTab & valeurs() override
Returns the array of field values at the current time.
static DoubleTab & calcul_gradient(const DoubleTab &, DoubleTab &, const Domaine_Cl_VEF &)
static DoubleTab & calcul_duidxj_paroi(DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const Domaine_Cl_VEF &)
class Cond_lim Generic class used to represent any class
static void verifier(const char *const msg, double)
const Cond_lim & les_conditions_limites(int) const
Returns the i-th boundary condition.
virtual const DoubleVect & face_surfaces() const
int nb_faces() const
Returns the total number of faces.
virtual double face_normales(int face, int comp) const
int face_voisins(int num_face, int i) const
Returns the neighbouring element of num_face in direction i.
Classe Echange_externe_impose: This class represents the special case of the class.
virtual double h_imp(int num) const
Returns the value of the imposed heat exchange coefficient on the i-th component.
virtual double T_ext(int num) const
Returns the value of the imposed temperature on the i-th component of the boundary field.
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
int num_premiere_face() const
Matrice_Morse class - Represents a (sparse) matrix M, not necessarily square,.
DoubleVect & porosite_elem()
DoubleVect & porosite_face()
const Equation_base & equation() const
Returns the reference to the equation pointed to by MorEqn::mon_equation.
Classe Neumann_paroi This boundary condition corresponds to an imposed flux for the.
virtual double flux_impose(int i) const
Returns the value of the imposed flux on the i-th component of the field representing the flux at the...
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
const Champ_Fonc_base & diffusivite_turbulente() const
int phi_psi_diffuse(const Equation_base &eq) const
Determine whether to compute div(phi nu grad Psi) or div(nu grad Phi psi).
virtual void remplir_nu(DoubleTab &) const
const Domaine_VEF & domaine_vef() const
const Domaine_Cl_VEF & domaine_cl_vef() const
std::enable_if_t< _TYPE_==Type_Champ::VECTORIEL, void > ajouter_bord_gen(const DoubleTab &, DoubleTab &, DoubleTab &, const DoubleTab &, const DoubleTab &) const
void fill_grad_Re(const DoubleTab &, const 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
DoubleTab & ajouter(const DoubleTab &, DoubleTab &) const override
void contribuer_a_avec(const DoubleTab &, Matrice_Morse &) const override
DOES NOTHING - to override in derived classes.
void contribuer_au_second_membre(DoubleTab &resu) const override
DOES NOTHING - to override in derived classes.
void modifier_matrice_pour_periodique_apres_contribuer(Matrice_Morse &matrice, const Equation_base &) const
Sums the 2 rows of the associated periodic faces, allowing computations in the code without needing t...
void modifier_matrice_pour_periodique_avant_contribuer(Matrice_Morse &matrice, const Equation_base &) const
Divides the coefficients on the periodic face rows by 2 in preparation for applying modifier_matrice_...
void modifier_flux(const Operateur_base &) const
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Base class for output streams.
virtual void declare_support_masse_volumique(int ok)
The constructor of a derived class that uses the density field must call this function with the value...
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")