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
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
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 &)
classe Cond_lim Classe generique servant a representer n'importe quelle classe
static void verifier(const char *const msg, double)
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
virtual const DoubleVect & face_surfaces() const
int nb_faces() const
renvoie le nombre global de faces.
virtual double face_normales(int face, int comp) const
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
Classe Echange_externe_impose: Cette classe represente le cas particulier de la classe.
virtual double h_imp(int num) const
Renvoie la valeur du coefficient d'echange de chaleur impose sur la i-eme composante.
virtual double T_ext(int num) const
Renvoie la valeur de la temperature imposee sur la i-eme composante du champ de frontiere.
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
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
DoubleVect & porosite_elem()
DoubleVect & porosite_face()
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
Classe Neumann_paroi Cette condition limite correspond a un flux impose pour l'equation de.
virtual double flux_impose(int i) const
Renvoie la valeur du flux impose sur la i-eme composante du champ representant le flux a la frontiere...
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.
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
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
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
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
virtual void declare_support_masse_volumique(int ok)
Le constructeur d'une classe derivee qui se sert de la masse volumique doit appeler cette fonction av...
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")