16#include <Terme_Source_Qdm_lambdaup_VEF_Face.h>
17#include <Domaine_VEF.h>
18#include <Navier_Stokes_std.h>
19#include <Probleme_base.h>
20#include <Schema_Temps_base.h>
21#include <Champ_P1NC.h>
38 Motcle accouverte =
"{" , accfermee =
"}" ;
43 Cerr << motlu <<
" --> " << finl;
44 Cerr <<
"{ attendue a la lecture du terme source lambda uprime " << finl;
45 Cerr <<
"La syntaxe du mot cle Source_Qdm_lambdaup a change, voir le" << finl;
46 Cerr <<
"manuel utilisateur de la version 1.5.5 ou plus recent." << finl;
47 Cerr <<
"La valeur de lambda, qui peut etre desormais variable" << finl;
48 Cerr <<
"doit etre precedee d'un mot cle:" << finl;
49 Cerr <<
"Ainsi, Source_Qdm_lambdaup valeur devient:" <<finl;
50 Cerr <<
"Source_Qdm_lambdaup { lambda valeur }" <<finl;
55 les_mots[0] =
"lambda";
56 les_mots[1] =
"lambda_min";
57 les_mots[2] =
"lambda_max";
58 les_mots[3] =
"ubar_umprim_cible";
62 while(motlu!=accfermee)
65 int rang=les_mots.search(motlu);
95 <<
" non compris dans terme source lambda uprime "
106 Cerr <<
"Erreur a la lecture de lambda dans " <<
que_suis_je() << finl;
107 Cerr <<
" lambda doit etre defini et superieur a 0 " << finl;
110 Cerr <<
"Sortie du readOn " << finl;
118 for (
int i=0; i<nb_eqn; i++)
129 Cerr <<
"Lambdaup : " << eqn.
que_suis_je() << finl;
134 Cerr <<
"Erreur TRUST dans " <<
que_suis_je() << finl;
135 Cerr <<
"On ne trouve pas d'equation d'hydraulique dans le probleme" << finl;
150 static double rapport_old=1.;
151 const Domaine_VEF& domaine_VEF = le_dom_VEF.valeur();
154 const DoubleTab& vitesse=la_vitesse->valeurs();
155 DoubleTab ubar(vitesse);
156 DoubleTab uprime(vitesse);
157 const int nb_faces = domaine_VEF.
nb_faces();
162 la_vitesse->filtrer_L2(ubar);
165 double normbar_carre = local_carre_norme_vect(ubar);
166 double normprim_carre = local_carre_norme_vect(uprime);
168 double normbar = sqrt(normbar_carre);
169 double normprim = sqrt(normprim_carre);
171 double rapport=(normprim!=0?normbar/normprim:0);
173 if( (rapport <
cible) && (rapport<rapport_old) ) l*=2.;
174 if( (rapport <
cible) && (rapport>rapport_old) ) l*=1.1;
175 if( (rapport>
cible) && (rapport>rapport_old) ) l*=0.95;
178 Cerr <<
"|ubar| = " << normbar << finl;
179 Cerr <<
"|ubar|/|uprim| = " << rapport << finl;
180 Cerr <<
"lambda " <<
lambda << finl;
181 for(face=0; face<nb_faces; face++)
184 double v=volumes_entrelaces(face)*porosite_face(face);
195 double dt=la_vitesse->equation().schema_temps().pas_de_temps();
214 const Domaine_VEF& domaine_VEF = le_dom_VEF.valeur();
215 const Domaine& domaine = domaine_VEF.
domaine();
217 double dnorme_H1,norme_H1_comp,int_grad_elem,norme_grad_elem;
228 for (
int composante=0; composante<vitesse.
line_size(); composante++)
231 for (
int K=0; K<domaine.nb_elem(); K++)
237 for (
int face=0; face<domaine.nb_faces_elem(); face++)
239 face_globale = domaine_VEF.
elem_faces(K,face);
241 int_grad_elem += vitesse(face_globale,composante)*
246 norme_grad_elem += int_grad_elem*int_grad_elem;
249 norme_H1_comp += norme_grad_elem/domaine_VEF.
volumes(K);
252 dnorme_H1 += norme_H1_comp;
255 return sqrt(dnorme_H1);
260 double pas_de_temps = la_vitesse->equation().schema_temps().pas_de_temps();
267 const Domaine_VEF& domaine_VEF = le_dom_VEF.valeur();
269 const int nb_faces = domaine_VEF.
nb_faces();
275 for(; i<nb_faces; i++)
278 for(
int j=0; j<nb_compo_; j++)
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
int nb_faces() const
renvoie le nombre global de faces.
DoubleVect & volumes_entrelaces()
virtual double face_normales(int face, int comp) const
double volumes(int i) const
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
int oriente_normale(int f, int e) const
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual const Milieu_base & milieu() const =0
virtual const Champ_Inc_base & inconnue() const =0
virtual Domaine_Cl_dis_base & domaine_Cl_dis()
Renvoie le domaine des conditions aux limite discretisee associee a l'equation.
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
DoubleVect & porosite_face()
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
classe Navier_Stokes_std Cette classe porte les termes de l'equation de la dynamique
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.
virtual int nombre_d_equations() const =0
virtual const Equation_base & equation(int) const =0
static void mp_sum_for_each(T &arg1, T &arg2)
C++14 compatible mp_sum_for_each: combine multiple mp_sum calls into one collective operation Usage: ...
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
classe Source_base Un objet Source_base est un terme apparaissant au second membre d'une
void ajoute(_SCALAR_TYPE_ alpha, const TRUSTVect &y, Mp_vect_options opt=VECT_ALL_ITEMS)
class Terme_Source_Qdm_lambdaup_VEF_Face
void mettre_a_jour(double) override
DOES NOTHING - to override in derived classes.
double norme_L2(const DoubleTab &) const
DoubleTab & calculer(DoubleTab &) const override
void associer_domaines(const Domaine_dis_base &, const Domaine_Cl_dis_base &) override
double norme_L2_H1(const DoubleTab &) const
DoubleTab & ajouter(DoubleTab &) const override
double norme_H1(const DoubleTab &) const
void associer_pb(const Probleme_base &) override