16#include <Champ_Post_Operateur_Eqn.h>
17#include <Probleme_base.h>
18#include <Postraitement.h>
19#include <Domaine_VF.h>
21#include <Champ_Generique_refChamp.h>
22#include <Discretisation_base.h>
23#include <Equation_base.h>
24#include <Operateur_base.h>
26#include <MD_Vector_composite.h>
27#include <Transport_K_Eps_base.h>
28#include <Transport_K_Omega_base.h>
29#include <Modele_turbulence_hyd_K_Eps.h>
30#include <Modele_turbulence_hyd_K_Eps_Realisable.h>
31#include <Modele_turbulence_hyd_RANS_K_Eps_base.h>
32#include <Modele_turbulence_hyd_K_Omega.h>
33#include <Modele_turbulence_hyd_RANS_K_Omega_base.h>
42Champ_Post_Operateur_Eqn::Champ_Post_Operateur_Eqn()
75 if ((!ref_eq_->inconnue().is_vectorial()) && (
compo_ != -1 ))
77 Cerr<<
"Error in Champ_Post_Operateur_Eqn::verification_cas_compo()"<<finl;
78 Cerr<<
"It isn't possible to get a component from a non vectoriel field " <<finl;
83 const int nb_compo= ref_eq_->inconnue().nb_comp();
86 Cerr<<
"Error in Champ_Post_Operateur_Eqn::verification_cas_compo()"<<finl;
87 Cerr<<
"compo="<<
compo_<<
" is not allowed."<<
" You must give a value between 0 and "<< nb_compo-1<<finl;
91 if (ref_eq_->discretisation().is_vdf() && (
compo_ != -1 ))
93 Cerr<<
"Error in Champ_Post_Operateur_Eqn::verification_cas_compo()"<<finl;
94 Cerr<<
"The option compo is not available in case of VDF discretization"<<finl;
104 const Probleme_base& Pb = ref_cast(Postraitement,post).probleme();
107 bool iskomega =
false;
108 if (sub_type(Champ_Generique_refChamp,
get_source(0)))
111 OWN_PTR(Champ_base) espace_stockage;
113 if (sub_type(Champ_Inc_base,mon_champ))
115 const Champ_Inc_base& mon_champ_inc = ref_cast(Champ_Inc_base,mon_champ);
127 const Equation_base& eq_test = Pb.
equation(i);
133 else if (mon_champ_inc.
le_nom() ==
"K_Eps" || mon_champ_inc.
le_nom() ==
"K_Omega")
135 const RefObjU& modele_turbulence = eq_test.
get_modele(TURBULENCE);
136 if (sub_type(Modele_turbulence_hyd_K_Eps, modele_turbulence.
valeur()) || sub_type(Modele_turbulence_hyd_K_Eps_Realisable, modele_turbulence.
valeur()))
138 const Modele_turbulence_hyd_RANS_K_Eps_base& le_mod_RANS = ref_cast(Modele_turbulence_hyd_RANS_K_Eps_base, eq_test.
get_modele(TURBULENCE).
valeur());
139 const Transport_K_Eps_base& transportkeps = ref_cast(Transport_K_Eps_base, le_mod_RANS.
get_eq_transport());
147 else if (sub_type(Modele_turbulence_hyd_K_Omega, modele_turbulence.
valeur()))
149 const Modele_turbulence_hyd_RANS_K_Omega_base& le_mod_RANS = ref_cast(Modele_turbulence_hyd_RANS_K_Omega_base, eq_test.
get_modele(TURBULENCE).
valeur());
150 const Transport_K_Omega_base& transportkomega = ref_cast(Transport_K_Omega_base, le_mod_RANS.
get_eq_transport());
166 Cerr<<
"Champ_Post_Operateur_Eqn can be applied only to equation unknown."<<finl;
170 if (!iskeps && !iskomega)
174 const Modele_turbulence_hyd_RANS_K_Eps_base& le_mod_RANS = ref_cast(Modele_turbulence_hyd_RANS_K_Eps_base, Pb.
equation(numero_eq_).
get_modele(TURBULENCE).
valeur());
175 const Transport_K_Eps_base& eqn = ref_cast(Transport_K_Eps_base, le_mod_RANS.
get_eq_transport());
176 ref_eq_ = ref_cast(Equation_base, eqn);
180 const Modele_turbulence_hyd_RANS_K_Omega_base& le_mod_RANS = ref_cast(Modele_turbulence_hyd_RANS_K_Omega_base, Pb.
equation(numero_eq_).
get_modele(TURBULENCE).
valeur());
181 const Transport_K_Omega_base& eqn = ref_cast(Transport_K_Omega_base, le_mod_RANS.
get_eq_transport());
182 ref_eq_ = ref_cast(Equation_base, eqn);
186 Cerr<<
"Error: unknown case !"<<finl;
191 const Equation_base& eqn=ref_eq_.valeur();
193 md = sub_type(MD_Vector_composite, mdf.
valeur()) ? ref_cast(MD_Vector_composite, mdf.
valeur()).get_desc_part(0) : mdf;
194 const Domaine_VF& zvf= ref_cast( Domaine_VF,ref_eq_->domaine_dis());
212 Cerr<<
"Error in "<<
que_suis_je()<<
" unknown localisation"<<finl;
220 espace_stockage = ref_eq_->inconnue();
221 return espace_stockage;
227 OWN_PTR(Champ_Fonc_base) espace_stockage_fonc;
235 case Entity::ELEMENT:
236 directive=
"CHAMP_ELEM";
239 directive=
"CHAMP_SOMMETS";
242 directive=
"CHAMP_FACE";
245 Cerr<<
"error in Champ_Post_Operateur_Eqn::get_champ"<<finl;
250 ref_eq_->discretisation().discretiser_champ(directive,ref_eq_->domaine_dis(),
"oooo",
"unit",
nb_comp,temps,espace_stockage_fonc);
251 espace_stockage = espace_stockage_fonc;
254 return espace_stockage;
260 OWN_PTR(Champ_base) espace_stockage_complet;
262 DoubleTab& es = (espace_stockage_complet->valeurs());
274 else if ((
numero_masse_!=-1) && ref_eq_->has_interface_blocs())
275 es=0, ref_eq_->schema_temps().ajouter_blocs({},es,ref_eq_.valeur());
277 ref_eq_->solv_masse().appliquer_impl(es);
279 if (ref_eq_->solv_masse().que_suis_je()==
"Masse_PolyMAC_CDO_Face")
282 Cerr <<
"Warning, source terms on faces with PolyMAC_CDO are post-processed as S*dV not as volumic source terms S." << finl;
283 Cerr <<
"Cause Masse_PolyMAC_CDO_Face::appliquer_impl do not divide per volume." << finl;
292 OWN_PTR(Champ_base) espace_stockage_compo;
294 DoubleTab& es_compo = (espace_stockage_compo->valeurs());
296 for (
int i=0; i<nb_pos; i++)
298 es_compo(i) = es(i,
compo_);
300 espace_stockage = espace_stockage_compo;
303 espace_stockage = espace_stockage_complet;
305 return espace_stockage;
313 motcles[0] =
"composantes";
314 motcles[1] =
"unites";
316 int rang = motcles.search(query);
324 int nb_comp= ref_eq_->inconnue().nb_comp();
345 int nb_comp= ref_eq_->inconnue().nb_comp();
381 nom_post_source =
"Eqn_s";
383 nom_post_source +=
"_o" ;
385 nom_post_source +=
"_m" ;
390 nom_post_source += nume;
398 return ref_eq_->operateur(
numero_op_).l_op_base();
403 return ref_eq_->operateur(
numero_op_).l_op_base();
const Noms get_property(const Motcle &query) const override
Renvoie la propriete demandee.
virtual OWN_PTR(Champ_Fonc_base) &creer_espace_stockage(const Nature_du_champ &nature
void completer(const Postraitement_base &post) override
virtual const Champ_Generique_base & get_source(int i) const
void set_param(Param ¶m) const override
virtual const int nb_comp
Classe Champ_Generique_Operateur_base Classe de base des classes de champs generiques dediees a l 'ap...
virtual const Champ_base & get_champ(OWN_PTR(Champ_base) &espace_stockage) const =0
void nommer(const Nom &nom) override
Donne un nom a l'Objet_U Methode virtuelle a surcharger.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
class Champ_Post_Operateur_Eqn OWN_PTR(Champ_base) destine a post-traiter le gradient d un champ gene...
void completer(const Postraitement_base &post) override
void nommer_source() override
Entity localisation_inco_
const Noms get_property(const Motcle &query) const override
Renvoie la propriete demandee.
const Champ_base & get_champ_compo_without_evaluation(OWN_PTR(Champ_base)&espace_stockage) const
const Champ_base & get_champ(OWN_PTR(Champ_base)&espace_stockage) const override
void set_param(Param ¶m) const override
void verification_cas_compo() const
Entity get_localisation(const int index=-1) const override
Renvoie le type des entites geometriques sur auxquelles les valeurs discretes sont attachees (NODE po...
const Champ_base & get_champ_without_evaluation(OWN_PTR(Champ_base)&espace_stockage) const override
const Operateur_base & Operateur() const override
classe Champ_base Cette classe est la base de la hierarchie des champs.
DoubleTab_t & les_sommets()
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const RefObjU & get_modele(Type_modele type) const
virtual const Champ_Inc_base & inconnue() const =0
const Nom & le_nom() const override
Renvoie le nom du champ.
virtual Nature_du_champ fixer_nature_du_champ(Nature_du_champ nat)
Fixer la nature d'un champ: scalaire, multiscalaire, vectoriel.
const MD_Vector_base & valeur() const
virtual const Transport_2eq_base & get_eq_transport() const
Une chaine de caractere (Nom) en majuscules.
Un tableau de chaine de caracteres (VECT(Nom)).
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 const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
classe Operateur_base Classe est la base de la hierarchie des objets representant un
virtual DoubleTab & ajouter(const DoubleTab &, DoubleTab &) const
Helper class to factorize the readOn method of Objet_U classes.
void ajouter_flag(const char *keyword, const bool *value)
Register a boolean flag whose mere presence switches it to true.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
Classe de base pour l'ensemble des postraitements.
virtual int nombre_d_equations() const =0
virtual const Equation_base & equation(int) const =0
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
_SIZE_ dimension(int d) const
virtual const MD_Vector & get_md_vector() const
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")
const Objet_U & valeur() const
const Champ_Inc_base & inconnue() const override
Renvoie le champ inconnue de l'equation.
const Champ_Inc_base & inconnue() const override
Renvoie le champ inconnue de l'equation.