16#include <Perte_Charge_VEF.h>
17#include <Schema_Temps_base.h>
18#include <Domaine_VEF.h>
19#include <Fluide_Incompressible.h>
20#include <Probleme_base.h>
22#include <Champ_Uniforme.h>
23#include <Sous_Domaine.h>
24#include <Sous_domaine_VF.h>
25#include <Sous_domaine_dis_base.h>
26#include <Champ_P1NC.h>
27#include <Check_espace_virtuel.h>
28#include <Champ_Don_Fonc_xyz.h>
29#include <Champ_Don_Fonc_txyz.h>
34Perte_Charge_VEF::Perte_Charge_VEF():implicite_(1) { }
47 param.lire_avec_accolades_depuis(is);
48 Cerr <<
"Interpretation de la fonction " <<
lambda.getString() <<
" ... ";
50 Cerr <<
" Ok" << finl;
51 if (diam_hydr->nb_comp()!=1)
53 Cerr <<
"Il faut definir le champ diam_hydr a une composante" << finl;
83 else if (mot==
"sous_domaine")
91 Cerr <<
"Mot cle \"" << mot <<
"\" non compris lors de la lecture d'un "
106double valeur_a_la_face(
const Champ_Don_base& le_ch,
const IntTab& f_e,
int f)
109 double s = 0.0, val = 0.0;
110 for (
int i = 0, e; i < 2; i++)
111 if ((e = f_e(f, i)) > -1)
125 const DoubleTab& xv=zvef.
xv() ;
126 const DoubleTab& vit=la_vitesse->valeurs();
146 for (
int face=0; face<max_faces; face++)
157 u[dim]=vit(la_face,dim);
158 norme_u+=u[dim]*u[dim];
160 norme_u=sqrt(norme_u) ;
164 pos[i]=xv(la_face,i);
166 const double nu_valeur = nu_constant ? nu.
valeurs()(0,0) : (nu_xyz ? nu.
valeur_a_compo(pos,0) : ::valeur_a_la_face(nu, f_e, la_face));
167 const double dh_valeur = dh_constant ? diam_hydr->valeurs()(0,0) : (dh_xyz ? diam_hydr->valeur_a_compo(pos,0) : ::valeur_a_la_face(diam_hydr, f_e, la_face));
170 double reynolds=norme_u*dh_valeur/nu_valeur;
172 if (reynolds < 1.e-10)
182 double coeff_ortho,coeff_long,u_l;
183 coeffs_perte_charge(u,pos,t,norme_u,dh_valeur,nu_valeur,reynolds,coeff_ortho,coeff_long,u_l,v_valeur);
188 resu(la_face,dim)-=(coeff_ortho* u[dim] + (coeff_long-coeff_ortho)* u_l*v_valeur[dim])*volume;
204 const DoubleTab& xv=le_dom_VEF->xv() ;
205 const DoubleTab& vit=la_vitesse->
valeurs();
233 assert_espace_virtuel_vect(nu.
valeurs());
235 for (
int face=0; face<max_faces; face++)
251 u[dim]=vit(la_face,dim);
252 norme_u+=u[dim]*u[dim];
254 norme_u=sqrt(norme_u) ;
258 pos[i]=xv(la_face,i);
260 const double nu_valeur = nu_constant ? nu.
valeurs()(0,0) : (nu_xyz ? nu.
valeur_a_compo(pos,0) : ::valeur_a_la_face(nu, f_e, la_face));
261 const double dh_valeur = dh_constant ? diam_hydr->valeurs()(0,0) : (dh_xyz ? diam_hydr->valeur_a_compo(pos,0) : ::valeur_a_la_face(diam_hydr, f_e, la_face));
264 reynolds=norme_u*dh_valeur/nu_valeur;
266 if (reynolds < 1.e-10)
276 double coeff_ortho,coeff_long,u_l;
277 coeffs_perte_charge(u,pos,t,norme_u,dh_valeur,nu_valeur,reynolds,coeff_ortho,coeff_long,u_l,v_valeur);
282 matrice.
coef(n0,n0) += (coeff_ortho + (coeff_long-coeff_ortho)* v_valeur[dim]*v_valeur[dim])*volume;
317 Cerr <<
"On ne trouve pas le sous_domaine discretise associe a " <<
nom_sous_domaine << finl;
class Champ_Don_Fonc_txyz Cette classe represente un champ de donnees fonction
class Champ_Don_Fonc_xyz Cette classe represente un champ de donnees fonction
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
virtual double valeur_a_compo(const DoubleVect &position, int ncomp) const
Calcule la valeur ponctuelle de la composante "compo" du champ au point de coordonnees pos.
const Sous_Domaine_t & ss_domaine(int i) const
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()
double xv(int num_face, int k) const
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
int nombre_de_sous_domaines_dis() const
const Sous_domaine_dis_base & sous_domaine_dis(int i) const
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
double coef(int i, int j) const
DoubleVect & porosite_face()
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
Une chaine de caractere (Nom) en majuscules.
class Nom Une chaine de caractere pour nommer les objets de TRUST
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 int est_egal_a(const Objet_U &) const
Renvoie 1 si l'objet x et *this sont une seule et meme instance (meme adresse en memoire).
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
void ajouter_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
Factorise les fonctionnalites de plusieurs pertes de charge en VEF, vitesse aux faces.
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
DoubleTab & calculer(DoubleTab &) const override
virtual void set_param(Param ¶m) const override
void contribuer_a_avec(const DoubleTab &, Matrice_Morse &) const override
copie de ajouter sauf la derniere ligne
void associer_pb(const Probleme_base &) override
associe le_fluide et la_vitesse
DoubleTab & ajouter(DoubleTab &) const override
Appelle perte_charge pour chaque face ou cela est necessaire.
Nom nom_sous_domaine
Nom du sous-domaine, initialise dans readOn().
virtual void coeffs_perte_charge(const DoubleVect &u, const DoubleVect &pos, double t, double norme_u, double dh, double nu, double reynolds, double &coeff_ortho, double &coeff_long, double &u_l, DoubleVect &v_valeur) const =0
Appele pour chaque face par ajouter().
void associer_domaines(const Domaine_dis_base &, const Domaine_Cl_dis_base &) override
associe le_dom_VEF et le_dom_Cl_VEF
void completer() override
Met a jour les references internes a l'objet Source_base.
bool sous_domaine
Le terme est-il limite a un sous-domaine ?
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
const Domaine & domaine() const
Renvoie le domaine associe au probleme.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
double temps_courant() const
Renvoie le temps courant.
Classe de base des flux de sortie.
classe Source_base Un objet Source_base est un terme apparaissant au second membre d'une
virtual void completer()
Met a jour les references internes a l'objet Source_base.
Cette classe abstraite contient les informations geometrique de sous-domaine communes aux methodes de...
const IntTab & les_faces() const
double volumes_entrelaces(int) const
Renvoie le volume entrelace restreint au sous-domaine. face est l'indice dans le tableau les_faces_.
const Sous_Domaine & sous_domaine() const