16#include <Convection_Diffusion_Temperature_FT_Disc.h>
17#include <Convection_Diffusion_Concentration.h>
18#include <Transport_Interfaces_FT_Disc.h>
19#include <Triple_Line_Model_FT_Disc.h>
20#include <Dirichlet_paroi_defilante.h>
21#include <Probleme_FT_Disc_gen.h>
22#include <Dirichlet_paroi_fixe.h>
23#include <Constituant.h>
24#include <TRUST_List.h>
56 la_chimie_ = ref_cast(
Chimie, ob);
67 Noms noms_eq, noms_eq_maj;
69 for (
auto &itr : noms_eq) noms_eq_maj.add(
Motcle(itr));
76 if (read_mc !=
"SOLVED_EQUATIONS")
78 Cerr <<
"Error in Probleme_FT_Disc_gen::lire_solved_equations !!! We expected reading the SOLVED_EQUATIONS bloc instead of " << read_mc <<
" !!!" << finl;
79 Cerr <<
"Fix your data file !!!" << finl;
86 Cerr <<
"Error in Probleme_FT_Disc_gen::lire_solved_equations !!! We expected { instead of " << read_mc <<
" !!!" << finl;
87 Cerr <<
"Fix your data file !!!" << finl;
91 std::vector<Nom> eq_types, eq_name;
93 for (is >> read_mc; read_mc !=
"}"; is >> read_mc)
95 if (noms_eq_maj.
rang(read_mc) == -1 || (!read_mc.
contient(
"_FT") && !read_mc.
debute_par(
"CONVECTION_DIFFUSION_CONCENTRATION") && !read_mc.
debute_par(
"CONVECTION_DIFFUSION_TEMPERATURE")))
97 Cerr <<
"Error in Probleme_FT_Disc_gen::lire_solved_equations !!! The equation " << read_mc <<
" could not be used with a problem of type " <<
que_suis_je() <<
" !!!" << finl;
98 Cerr <<
"You can only use the following equations :" << finl;
99 for (
auto &itr : noms_eq_maj)
100 if (itr.contient(
"_FT") || itr.debute_par(
"CONVECTION_DIFFUSION_CONCENTRATION") || itr.debute_par(
"CONVECTION_DIFFUSION_TEMPERATURE"))
101 Cerr <<
" - " << itr << finl;
105 eq_types.push_back(read_mc);
107 eq_name.push_back(nom_eq);
110 if (eq_types.size() != eq_name.size())
112 Cerr <<
"Error in Probleme_FT_Disc_gen::lire_solved_equations !!! The number of strings read in the bloc SOLVED_EQUATIONS is not correct !!!" << finl;
113 Cerr <<
"Fix your data file !!!" << finl;
119 for (
int i = 0; i < static_cast<int>(eq_types.size()); i++)
120 if (eq_types[i] ==
"NAVIER_STOKES_FT_DISC")
124 for (
int i = 0; i < static_cast<int>(eq_types.size()); i++)
125 if (eq_types[i].debute_par(
"TRANSPORT_INTERFACES"))
129 for (
int i = 0; i < static_cast<int>(eq_types.size()); i++)
130 if (eq_types[i] !=
"NAVIER_STOKES_FT_DISC" && !eq_types[i].debute_par(
"TRANSPORT_INTERFACES"))
168 bool needs_constituant =
false;
170 auto& list_stl = equations_.get_stl_list();
171 for (
auto& itr : list_stl)
174 needs_constituant =
true;
178 const int nb_milieu = needs_constituant ? 2 : 1;
181 for (
int i = 0; i < nb_milieu; i++)
195 equations_(0)->milieu().discretiser((*
this), la_discretisation_.valeur());
197 if (needs_constituant)
198 for (
auto& itr : equations_.get_stl_list())
201 itr->milieu().discretiser((*
this), la_discretisation_.valeur());
210 if (dernier_mot ==
"TRIPLE_LINE_MODEL_FT_DISC")
213 tcl_.associer_pb(*
this);
223 equations_.dernier().typer(eq_type);
228 Cerr <<
"Equation " << eq_type <<
" added to the list and renamed to : " << eq_name <<
" ..." << finl;
241 const int is_constituant = sub_type(
Constituant, un_milieu);
242 for (
int i = 0; i < n; i++)
246 if ((is_conv_diff && is_constituant) || (!is_conv_diff && !is_constituant))
256 for (i = 0; i < n; i++)
259 if (eq->
le_nom() == un_nom)
264 Cerr <<
"Erreur dans Probleme_FT_Disc_gen::get_equation_by_name : " << un_nom <<
" n'est pas le nom d'une equation !!" << finl;
265 Cerr <<
"Les equations du problemes sont les suivantes :" << finl;
266 for (i = 0; i < n; i++)
278 for (i = 0; i < n; i++)
286 Cerr <<
"Erreur dans Probleme_FT_Disc_gen::getset_equation_by_name : " << un_nom <<
" n'est pas le nom d'une equation !!" << finl;
287 Cerr <<
"Les equations du problemes sont les suivantes :" << finl;
288 for (i = 0; i < n; i++)
299 for (
int i = 0; i < n; i++)
312 Cerr <<
"Erreur dans Probleme_FT_Disc_gen::equation_interfaces : Le probleme ne contient pas d'equation Transport_Interfaces_FT_Disc de nom " << un_nom << finl;
313 Cerr <<
"Liste des equations du probleme:" << finl;
314 for (
int i = 0; i < n; i++)
329 for (
int i = 0; i < n; i++)
342 Cerr <<
"Erreur dans Probleme_FT_Disc_gen::equation_hydraulique : Le probleme ne contient pas d'equation Navier_Stokes_FT_Disc de nom " << un_nom << finl;
343 Cerr <<
"Liste des equations du probleme:" << finl;
344 for (
int i = 0; i < n; i++)
362 dt = std::min(dt, la_chimie_->calculer_pas_de_temps());
373 for (
int i = 2; i < nb_eqn; i++)
383 la_chimie_->mettre_a_jour(temps);
410 la_chimie_->discretiser(*
this);
411 la_chimie_->completer(*
this);
415 if (tcl_.is_activated() || tcl_.reinjection_tcl()) tcl_.completer();
422 if (
tcl().is_activated())
classe Constituant Cette classe represente le(s) constituant(s) d'un fluide.
classe Convection_Diffusion_Concentration Cas particulier de Convection_Diffusion_std
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....
const Nom & le_nom() const override
Renvoie le nom de l'equation.
virtual void associer_milieu_equation()
virtual void associer_milieu_base(const Milieu_base &)=0
void nommer(const Nom &nom) override
Methode appelee lorsqu'on cree l'instance de l'objet dans le jeu de donnees (Interprete::ajouter).
virtual void associer_pb_base(const Probleme_base &)
S'associe au Probleme passe en parametre.
virtual void mettre_a_jour(double temps)
La valeur de l'inconnue sur le pas de temps a ete calculee.
virtual void associer_sch_tps_base(const Schema_Temps_base &)
S'associe au schema_en_temps.
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
Une chaine de caractere (Nom) en majuscules.
int debute_par(const char *const n) const override
class Nom Une chaine de caractere pour nommer les objets de TRUST
bool contient(const Nom &nom) const
virtual int debute_par(const char *const n) const
Nom & majuscule()
Transforme le nom en majuscules Seules les lettres 'a'-'z' sont modifiees.
Un tableau de chaine de caracteres (VECT(Nom)).
int rang(const char *const ch) const
classe Objet_U Cette classe est la classe de base des 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 Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
classe Pb_Fluide_base Cette classe a pour but de disposer d une classe amont pour
void completer() override
Complete les equations associees au probleme.
OWN_PTR(Modele_rayo_transp) mod_rayo_transp_
virtual const Transport_Interfaces_FT_Disc & equation_interfaces(const Motcle &nom) const
virtual bool updateGivenFields() override
ATTENTION :
void mettre_a_jour(double temps) override
Effectue une mise a jour en temps du probleme.
Equation_base & getset_equation_by_name(const Nom &le_nom) override
(B. Math): Methode virtuelle ajoutee pour les problemes ayant plusieurs equations de meme type (Probl...
int nombre_d_equations() const override
void update_geometrical_quantities(double temps)
virtual const Navier_Stokes_FT_Disc & equation_hydraulique(const Motcle &nom) const
void preparer_calcul() override
Prepare le calcul: initialise les parametres du milieu et prepare le calcul de chacune des equations.
void lire_solved_equations(Entree &is) override
void typer_lire_milieu(Entree &is) override
void associer_milieu_base(const Milieu_base &milieu) override
Verifie que le milieu est de type Fluide_Diphasique et associe le milieu aux equations.
double calculer_pas_de_temps() const override
Calcul la valeur du prochain pas de temps du probleme.
Entree & lire_equations(Entree &is, Motcle &dernier_mot) override
Lecture des equations du probleme.
void update_composite_variables(double temps)
void add_FT_equation(const Nom &, const Nom &)
const Equation_base & equation(int i) const override
const Equation_base & get_equation_by_name(const Nom &le_nom) const override
(B. Math): Methode virtuelle ajoutee pour les problemes ayant plusieurs equations de meme type (Probl...
int associer_(Objet_U &ob) override
surcharge Objet_U::associer_(Objet_U& ob) Associe differents objets au probleme en controlant
void completer() override
Complete les equations associees au probleme.
const Triple_Line_Model_FT_Disc & tcl() const
virtual Entree & lire_equations(Entree &is, Motcle &dernier_mot)
Lecture des equations du probleme.
virtual void discretiser_equations()
int associer_(Objet_U &) override
surcharge Objet_U::associer_(Objet_U& ob) Associe differents objets au probleme en controlant
bool updateGivenFields() override
ATTENTION :
virtual void preparer_calcul()
Prepare le calcul: initialise les parametres du milieu et prepare le calcul de chacune des equations.
virtual double calculer_pas_de_temps() const
Calcul la valeur du prochain pas de temps du probleme.
Postraitements les_postraitements_
virtual void mettre_a_jour(double temps)
Effectue une mise a jour en temps du probleme.
std::vector< OWN_PTR(Milieu_base)> le_milieu_
const Schema_Temps_base & schema_temps() const
Renvoie le schema en temps associe au probleme.
static double mp_min(double)
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
double temps_courant() const
Renvoie le temps courant.
Classe de base des flux de sortie.
int preparer_calcul_anticipated()
void completer_maillage_et_changer_temps(double temps)
void mettre_a_jour_hors_deplacement(double temps, const bool update_statio=true, const bool update_indic=true)
bool injecter_supprimer_interfaces(double temps)
void compute_TCL_fluxes_in_all_boundary_cells()
static int les_sous_types(const Nom &, Noms &sous_types)
Donne les noms des sous-types, un type mere etant donne par son nom.