16#include <Op_Dift_standard_VEF_Face.h>
17#include <Dirichlet_paroi_defilante.h>
18#include <Dirichlet_paroi_fixe.h>
19#include <Dirichlet_homogene.h>
20#include <Champ_P1NC.h>
21#include <Periodique.h>
61 Motcle accfermee =
"}", motlu;
63 while (motlu != accfermee)
65 if (motlu ==
"defaut_bar")
70 else if (motlu ==
"grad_Ubar") is >> grad_Ubar;
71 else if (motlu ==
"nu") is >> nu_lu;
72 else if (motlu ==
"nut") is >> nut_lu;
73 else if (motlu ==
"nu_transp") is >> nu_transp_lu;
74 else if (motlu ==
"nut_transp") is >> nut_transp_lu;
75 else if (motlu ==
"filtrer_resu") is >> filtrer_resu;
78 Cerr << motlu <<
" n'est pas compris par " <<
que_suis_je() << finl;
86void Op_Dift_standard_VEF_Face::ajouter_cas_vectoriel(
const DoubleTab& vitesse, DoubleTab& resu,
const DoubleTab& nu,
const DoubleTab& nu_turb)
const
93 DoubleTab& grad = ref_cast_non_const(DoubleTab, grad_);
94 Debog::verifier(
"Op_Dift_standard_VEF_Face::ajouter_cas_vectoriel : resu 0 ", resu);
113 DoubleTab ubar(vitesse);
115 if (grad_Ubar) ref_cast(Champ_P1NC,inconnue_.valeur()).filtrer_L2(ubar);
119 if (le_modele_turbulence->utiliser_loi_paroi())
125 Debog::verifier(
"Op_Dift_standard_VEF_Face::ajouter_cas_vectoriel : grad 1 ", grad);
126 calcul_divergence(resu, grad, grad, nu, nu_turb);
128 Debog::verifier(
"Op_Dift_standard_VEF_Face::ajouter_cas_vectoriel : resu 1 ", resu);
130 if (filtrer_resu) ref_cast(Champ_P1NC,inconnue_.valeur()).filtrer_resu(resu);
133void Op_Dift_standard_VEF_Face::calcul_divergence(DoubleTab& dif,
const DoubleTab& grad,
const DoubleTab& gradt,
const DoubleTab& nu,
const DoubleTab& nu_turb)
const
137 const IntTab& face_voisins = domaine_VEF.
face_voisins();
140 double nu1 = -123., nu2 = -123., nu1t = -123., nu2t = -123., flux = -123.;
141 double c1 = 0., c2 = 0., c3 = 0., c4 = 0.;
145 if (nu_transp_lu) c3 = 1.;
146 if (nut_transp_lu) c4 = 1.;
149 Debog::verifier(
"Op_Dift_standard_VEF_Face::calcul_divergence dif 0 ", dif);
152 int nb_cl = les_cl.size();
153 for (
int num_cl = 0; num_cl < nb_cl; num_cl++)
156 const Front_VF& le_bord = ref_cast(Front_VF, la_cl->frontiere_dis());
157 const int nb_faces_b = le_bord.
nb_faces();
160 if (sub_type(Periodique, la_cl.valeur()))
162 const Periodique& la_cl_perio = ref_cast(Periodique, la_cl.valeur());
163 IntVect fait(nb_faces_b);
165 for (
int num_face0 = num1; num_face0 < num2; num_face0++)
167 int face_associee = la_cl_perio.
face_associee(num_face0 - num1);
168 if (fait(num_face0 - num1) == 0)
170 fait(num_face0 - num1) = 1;
171 fait(face_associee) = 1;
172 const int elem10 = face_voisins(num_face0, 0), elem2 = face_voisins(num_face0, 1);
173 nu1 = c1 * nu[elem10] + c2 * nu_turb[elem10];
174 nu2 = c1 * nu[elem2] + c2 * nu_turb[elem2];
175 nu1t = c3 * nu[elem10] + c4 * nu_turb[elem10];
176 nu2t = c3 * nu[elem2] + c4 * nu_turb[elem2];
178 for (
int i = 0; i < nbr_comp; i++)
179 for (
int j = 0; j < nbr_comp; j++)
180 dif(num_face0, i) -= face_normale(num_face0, j) * (nu1 * grad(elem10, i, j) + nu1t * gradt(elem10, j, i) - (nu2 * grad(elem2, i, j) + nu2t * gradt(elem2, j, i)));
182 for (
int i = 0; i < nbr_comp; i++)
183 dif(face_associee + num1, i) = dif(num_face0, i);
187 else if ((sub_type(Dirichlet, la_cl.valeur())) || (sub_type(Dirichlet_homogene, la_cl.valeur())))
189 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) || sub_type(Dirichlet_paroi_defilante, la_cl.valeur()))
191 for (
int num_face0 = num1; num_face0 < num2; num_face0++)
193 int elem1 = face_voisins(num_face0, 0);
194 nu1 = c1 * nu[elem1] + c2 * nu_turb[elem1];
195 nu1t = c3 * nu[elem1] + c4 * nu_turb[elem1];
197 for (
int i = 0; i < nbr_comp; i++)
200 for (
int j = 0; j < nbr_comp; j++)
201 flux += face_normale(num_face0, j) * (nu1 * grad(elem1, i, j) + nu1t * gradt(elem1, j, i));
203 dif(num_face0, i) = 0.;
211 for (
int num_face = num1; num_face < num2; num_face++)
213 int elem1 = face_voisins(num_face, 0);
214 nu1 = c1 * nu[elem1] + c2 * nu_turb[elem1];
215 nu1t = c3 * nu[elem1] + c4 * nu_turb[elem1];
217 for (
int i = 0; i < nbr_comp; i++)
220 for (
int j = 0; j < nbr_comp; j++)
221 flux += face_normale(num_face, j) * (nu1 * grad(elem1, i, j) + nu1t * gradt(elem1, j, i));
223 dif(num_face, i) = 0.;
231 Debog::verifier(
"Op_Dift_standard_VEF_Face::calcul_divergence dif 1 ", dif);
232 Debog::verifier(
"Op_Dift_standard_VEF_Face::calcul_divergence nu 1 ", nu);
233 Debog::verifier(
"Op_Dift_standard_VEF_Face::calcul_divergence nu_turb 1 ", nu_turb);
234 Debog::verifier(
"Op_Dift_standard_VEF_Face::calcul_divergence grad 1 ", grad);
235 Debog::verifier(
"Op_Dift_standard_VEF_Face::calcul_divergence gradt 1 ", gradt);
237 for (
int num_face0 = domaine_VEF.
premiere_face_int(); num_face0 < nb_faces; num_face0++)
239 const int elem10 = face_voisins(num_face0, 0), elem2 = face_voisins(num_face0, 1);
240 nu1 = c1 * nu[elem10] + c2 * nu_turb[elem10];
241 nu2 = c1 * nu[elem2] + c2 * nu_turb[elem2];
242 nu1t = c3 * nu[elem10] + c4 * nu_turb[elem10];
243 nu2t = c3 * nu[elem2] + c4 * nu_turb[elem2];
245 for (
int i = 0; i < nbr_comp; i++)
246 for (
int j = 0; j < nbr_comp; j++)
247 dif(num_face0, i) -= face_normale(num_face0, j) * (nu1 * grad(elem10, i, j) + nu1t * gradt(elem10, j, i) - (nu2 * grad(elem2, i, j) + nu2t * gradt(elem2, j, i)));
250 Debog::verifier(
"Op_Dift_standard_VEF_Face::calcul_divergence dif 2 ", dif);
254 Debog::verifier(
"Op_Dift_standard_VEF_Face::calcul_divergence dif 3 ", dif);
260 DoubleTab nu(nu_turb);
262 ajouter_cas_vectoriel(inconnue, resu, nu, nu_turb);
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
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 &)
static void verifier(const char *const msg, double)
virtual void creer_tableau_elements(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
creation d'un tableau parallele de valeurs aux elements.
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
int nb_faces() const
renvoie le nombre global de faces.
virtual double face_normales(int face, int comp) const
int premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
int nb_faces_bord() const
renvoie le nombre de faces sur lesquelles sont appliquees les conditions limites :
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
int num_premiere_face() const
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
virtual void remplir_nu(DoubleTab &) const
const Domaine_VEF & domaine_vef() const
const Domaine_Cl_VEF & domaine_cl_vef() const
DoubleTab & ajouter(const DoubleTab &, DoubleTab &) const override
void modifier_flux(const Operateur_base &) const
int face_associee(int i) const
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
virtual const MD_Vector & get_md_vector() const
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")