16#include <Navier_Stokes_IBM_Turbulent.h>
17#include <Modele_turbulence_hyd_base.h>
18#include <Op_Diff_Turbulent_base.h>
19#include <Fluide_Incompressible.h>
20#include <Discretisation_base.h>
21#include <Schema_Temps_base.h>
22#include <Champ_Uniforme.h>
23#include <Probleme_base.h>
24#include <Discret_Thyd.h>
25#include <TRUST_2_PDI.h>
48 if (mot ==
"diffusion")
50 Cerr <<
"Reading and typing of the diffusion operator : ";
56 else if (mot ==
"modele_turbulence")
57 return typer_lire_mod_turb_hyd(is);
62int Navier_Stokes_IBM_Turbulent::typer_lire_mod_turb_hyd(
Entree& s)
64 Cerr <<
"Reading and typing of the turbulence model : ";
68 Motcle nom1(
"Modele_turbulence_hyd_");
72 if (typ.
debute_par(
"SOUS_MAILLE") || discr ==
"VDF_Hyper" || typ.
debute_par(
"LONGUEUR_MELANGE") || (typ ==
"K_Epsilon_V2"))
74 if (
dimension == 2 && discr !=
"VDF_Hyper")
76 Cerr <<
"Vous traitez un cas turbulent en dimension 2 avec un modele sous maille" << finl;
77 Cerr <<
"Attention a l'interpretation des resultats !!" << finl;
82 if (discr ==
"VEFPreP1B") discr =
"VEF";
85 if (nom1 ==
"MODELE_TURBULENCE_HYD_SOUS_MAILLE_LM_VEF")
87 Cerr <<
"Le mot cle Sous_maille_LM s'appelle desormais Longueur_Melange pour etre coherent en VDF et VEF." << finl;
88 Cerr <<
"Changer votre jeu de donnees." << finl;
94 le_modele_turbulence.typer(nom1);
95 le_modele_turbulence->associer_eqn(*
this);
97 s >> le_modele_turbulence.valeur();
99 le_modele_turbulence->discretiser();
101 le_modele = le_modele_turbulence.
valeur();
102 liste_modeles_.add_if_not(le_modele);
121 Motcle accouverte =
"{", accfermee =
"}";
122 Nom type =
"Op_Dift_";
126 if (discr ==
"VEFPreP1B") discr =
"VEF";
134 nb_inc =
"_Multi_inco_";
138 if (type_inco ==
"Champ_Q1_EF") type +=
"Q1";
139 else type += (type_inco.
suffix(
"Champ_"));
141 if (
axi) type +=
"_Axi";
145 if (motbidon != accouverte)
147 Cerr <<
"A { was expected while reading the turbulent diffusive term" << finl;
151 if (motbidon ==
"negligeable")
153 type =
"Op_Dift_negligeable";
159 if (motbidon != accfermee)
160 Cerr <<
" On ne peut plus entrer d option apres negligeable " << finl;
162 else if (motbidon ==
"tenseur_Reynolds_externe")
170 if (motbidon != accfermee)
171 Cerr <<
" On ne peut plus entrer d option apres tenseur_Reynolds_externe " << finl;
173 else if (motbidon ==
"standard")
181 else if (motbidon == accfermee)
188 else if (motbidon ==
"stab")
196 else if (motbidon ==
"option")
200 type =
"Op_Dift_EF_Q1_option";
208 if (motbidon != accfermee)
209 Cerr <<
" On ne peut plus entrer d option apres option " << finl;
215 if (motbidon != accfermee)
216 Cerr <<
" No option are now readable for the turbulent diffusive term" << finl;
239 if (le_modele_turbulence->has_loi_paroi_hyd())
243 le_modele_turbulence->preparer_calcul();
250 ok = ok && le_modele_turbulence->initTimeStep(dt);
260 std::vector<YAML_data> mod_turb = le_modele_turbulence->data_a_sauvegarder();
261 data.insert(data.end(), mod_turb.begin(), mod_turb.end());
274 assert(bytes % 4 == 0);
275 bytes += le_modele_turbulence->sauvegarder(os);
276 assert(bytes % 4 == 0);
292 Nom ident_modele(le_modele_turbulence->que_suis_je());
294 ident_modele +=
Nom(temps,
probleme().reprise_format_temps());
299 avancer_fichier_with_syno(is,ident_modele,field_tag_syno);
303 avancer_fichier(is,ident_modele);
305 le_modele_turbulence->reprendre(is);
318 le_modele_turbulence->completer();
319 le_modele_turbulence->loi_paroi().completer();
329 le_modele_turbulence->mettre_a_jour(temps);
337 if (le_modele_turbulence)
338 if (le_modele_turbulence->has_champ(nom, ref_champ))
349 if (le_modele_turbulence)
350 if (le_modele_turbulence->has_champ(nom))
363 if (le_modele_turbulence)
364 if (le_modele_turbulence->has_champ(nom, ref_champ))
367 throw std::runtime_error(std::string(
"Field ") + nom.
getString() + std::string(
" not found !"));
373 if (le_modele_turbulence)
374 le_modele_turbulence->get_noms_champs_postraitables(nom, opt);
380 le_modele_turbulence->imprimer(os);
385 for (
const auto &itr : liste_modeles_)
387 const RefObjU& mod = itr;
399 if (le_modele_turbulence) le_modele_turbulence->creer_champ(motlu);
classe Champ_Don_base classe de base des Champs donnes (non calcules)
classe Champ_base Cette classe est la base de la hierarchie des champs.
virtual void creer_champ(const Motcle &motlu)=0
virtual void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const =0
virtual bool has_champ(const Motcle &nom, OBS_PTR(Champ_base)&ref_champ) const =0
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Class defining operators and methods for all reading operation in an input flow (file,...
OBS_PTR(Equation_base) eq_IBM_
int reprendre(Entree &) override
On reprend l'inconnue a partir d'un flot d'entree.
virtual const RefObjU & get_modele(Type_modele type) const
virtual std::vector< YAML_data > data_a_sauvegarder() const
for PDI IO: retrieve name, type and dimensions of the data to save/restore. This has to be overrode f...
virtual void imprimer(Sortie &os) const
Imprime les operateurs de l'equation si le schema en temps indique que c'est necessaire.
const Discretisation_base & discretisation() const
Renvoie la discretisation associee a l'equation.
Nom create_polymacfamily_syno(const Nom &field_tag) const
Create a synonym of a field name in order to ensure backward compatibility with old names of the Poly...
virtual void mettre_a_jour(double temps)
La valeur de l'inconnue sur le pas de temps a ete calculee.
virtual void completer()
Complete la construction (initialisation) des objets associes a l'equation.
virtual void imprime_residu(SFichier &)
int sauvegarder(Sortie &) const override
On sauvegarde l'inconnue, puis les sources sur un flot de sortie.
virtual Domaine_Cl_dis_base & domaine_Cl_dis()
Renvoie le domaine des conditions aux limite discretisee associee a l'equation.
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
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.
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
virtual Nom expression_residu()
const Champ_Don_base & viscosite_cinematique() const
Classe Modele_turbulence_hyd_base Cette classe sert de base a la hierarchie des classes.
Une chaine de caractere (Nom) en majuscules.
int debute_par(const char *const n) const override
classe Navier_Stokes_IBM_Turbulent Cette classe represente l'equation de la dynamique pour un fluide
const RefObjU & get_modele(Type_modele type) const override
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
const Champ_base & diffusivite_pour_pas_de_temps() const override
Nom expression_residu() override
int sauvegarder(Sortie &) const override
Sauvegarde l'equation (et son modele de turbulence) sur un flot de sortie.
void mettre_a_jour(double) override
Effecttue une mise a jour en temps de l'equation.
void imprime_residu(SFichier &) override
void completer() override
Appels successifs a: Navier_Stokes_IBM::completer().
std::vector< YAML_data > data_a_sauvegarder() const override
for PDI IO: retrieve name, type and dimensions of the fields to save/restore
const Champ_base & get_champ(const Motcle &nom) const override
void creer_champ(const Motcle &motlu) override
void set_param(Param &titi) const override
int preparer_calcul() override
Prepare le calcul.
void imprimer(Sortie &) const override
Imprime les operateurs de l'equation si le schema en temps indique que c'est necessaire.
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
Entree & lire_op_diff_turbulent(Entree &is)
bool initTimeStep(double dt) override
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
const Champ_Don_base & diffusivite_pour_transport() const override
int reprendre(Entree &) override
Reprise de l'equation et de son modele de turbulence a partir d'un flot d'entree.
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.
bool initTimeStep(double dt) override
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
void set_param(Param &titi) const override
int preparer_calcul() override
Tout ce qui ne depend pas des autres problemes eventuels.
Operateur_Diff terme_diffusif
const Champ_Inc_base & inconnue() const override
Renvoie la vitesse (champ inconnue de l'equation) (version const).
const Fluide_base & fluide() const
Renvoie le fluide incompressible (milieu physique de l'equation) associe a l'equation.
class Nom Une chaine de caractere pour nommer les objets de TRUST
Nom & suffix(const char *const)
Extraction de suffixe : Nom x("azerty");.
const std::string & getString() const
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 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_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.
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.
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
double temps_courant() const
Renvoie le temps courant.
Classe de base des flux de sortie.
static int is_PDI_restart()
const Objet_U & valeur() const
Classe Turbulence_paroi_base Classe de base pour la hierarchie des classes representant les modeles.
virtual int init_lois_paroi()=0