16#include <Milieu_composite_Euler.h>
17#include <Schema_Temps_base.h>
18#include <Champ_Composite.h>
19#include <TRUSTTab_parts.h>
20#include <Momentum_Euler.h>
21#include <Discret_Thyd.h>
22#include <Fluide_base.h>
37 assert(l_inco_ch_ && le_fluide);
47 const bool is_single_phase = (ref_cast(Pb_Euler,
probleme()).nb_phases() == 1);
50 EChaine str(
" { negligeable } ");
56 Cerr <<
"Error while reading " <<
que_suis_je() <<
" !!! non_conservative_terms operator is not read although it is required !!! Fix your data file ..." << finl;
61 terme_convectif.set_description(
"Momentum flow rate=Integral(rho*u*u*ndS) [N] if SI units used");
64 terme_nconserv_.set_description(
"Conribution of non_conservative operator in QDM equation");
73 param.
ajouter_non_std(
"termes_non_conservatifs|non_conservative_terms", (
this));
78 if (mot ==
"termes_non_conservatifs|non_conservative_terms")
80 Cerr <<
"Reading and typing of the termes_non_conservatifs operator : " << finl;
98 Cerr <<
"Error for Momentum_Euler::operateur(int i)" << finl;
100 Cerr <<
"and you are trying to access the " << i <<
" th one."<< finl;
116 Cerr <<
"Error for Momentum_Euler::operateur(int i)" << finl;
118 Cerr <<
"and you are trying to access the " << i <<
" th one."<< finl;
144 Process::exit(
"Momentum_Euler::diffusivite_pour_transport() should not be called !!! \n");
145 return le_fluide->viscosite_dynamique();
150 Process::exit(
"Momentum_Euler::diffusivite_pour_transport() should not be called !!! \n");
151 return le_fluide->viscosite_cinematique();
156 Cerr <<
" Momentum_Euler::completer" << finl;
158 la_pression->associer_domaine_cl_dis(le_dom_Cl_dis);
183 if (opt == DESCRIPTION)
184 Cerr <<
" Momentum_Euler : " << noms_compris << finl;
186 noms.add(noms_compris);
206 if (nature == vectoriel)
210 Cerr <<
"The nature of the field " << nom <<
" unknown to the equation name " <<
le_nom() <<
" is vector." << finl;
211 Cerr <<
"The number of components readed for this field " << nb_comp <<
" is not compatible with its nature." << finl;
222 Cerr <<
"Reading of initial conditions\n";
227 Cerr <<
que_suis_je() <<
": expected { instead of " << nom << finl;
230 int vit_lu = 0, press_lu = 0;
231 for (is >> nom; nom !=
"}"; is >> nom)
232 if (nom ==
"vitesse" || nom ==
"velocity")
236 if (src->que_suis_je() ==
"Champ_Composite")
239 if (nb_dim != nb_phases)
241 Cerr <<
que_suis_je() <<
": velocity initial condition Champ_Composite should have " << nb_phases <<
" fields and not " << nb_dim <<
" !" << finl;
247 la_vitesse->affecter(src), vit_lu = 1;
248 la_vitesse->passe() = la_vitesse->valeurs();
250 else if (nom ==
"pression" || nom ==
"pressure")
260 Cerr <<
que_suis_je() <<
": expected vitesse|velocity|pression|pressure instead of " << nom << finl;
266 Cerr <<
que_suis_je() <<
": velocity initial condition not found." << finl;
271 Cerr <<
que_suis_je() <<
": pressure initial condition not found." << finl;
299 Cerr <<
"Momentum_Euler discretization" << finl;
308 la_vitesse->fixer_nature_du_champ(vectoriel);
309 la_vitesse->add_synonymous(
Nom(
"velocity"));
316 for (
int i = 0; i < N; i++)
326 Cerr <<
"Pressure discretization" << finl;
328 la_pression->fixer_nature_du_champ(N == 1 ? scalaire : multi_scalaire);
340 Cerr <<
"Unknown alpha_rho_u discretization" << finl;
345 Cerr <<
"Momentum_Euler discretization ==> ok" << finl;
377 const DoubleVect& vol = dom.
volumes();
382 DoubleTrav dt_e(dom.
nb_elem());
383 for (
int n = 0; n < nb_phases; n++)
385 for (
int e = 0; e < dom.
nb_elem(); e++)
388 for (
int i = 0; i < elem_faces.
line_size(); i++)
390 int f = elem_faces(e, i);
391 som += (f >= 0) ? (fabs(u_n(f, n)) +
vitesse_son_(e, n)) * surf(f) : 0;
393 dt_e(e) = vol(e) / som;
395 dt = std::min(dt, mp_min_vect(dt_e));
403 const DoubleTab& alpha_rho = ref_cast(
Pb_Euler,
probleme()).equation_masse().inconnue().valeurs();
410 for (
int n = 0; n < Nb_phase; n++)
415 for (
int j = 0; j < dom.
nb_elem(); j++)
416 for (
int d = 0; d < D; d++)
418 vit_phase(j, d) = vit(j, Nb_phase * d + n);
419 alpha_rhoU(j, Nb_phase * d + n) = vit(j, Nb_phase * d + n) * alpha_rho(j, n);
430 const DoubleTab& alpha_rho = ref_cast(
Pb_Euler,
probleme()).equation_masse().inconnue().valeurs();
432 assert(alpha_rho_U.
line_size() == Nb_phase * D);
436 for (
int n = 0; n < Nb_phase; n++)
441 for (
int j = 0; j < dom.
nb_elem(); j++)
442 for (
int d = 0; d < D; d++)
444 vit_phase(j, d) = alpha_rho_U(j, Nb_phase * d + n) / alpha_rho(j, n);
445 vit(j, Nb_phase * d + n) = alpha_rho_U(j, Nb_phase * d + n) / alpha_rho(j, n);
471 for (
int n = 0; n < Nb_phase; n++)
472 for (
int f = 0; f < dom.
nb_faces(); f++)
476 int el = f_e(f, 0), er = f_e(f, 1);
479 vitesse_normale_(f, n) = (el >= 0) ? vit(el, n) * nx + vit(el, n + Nb_phase) * ny : -123.123;
480 vitesse_normale_(f, n + Nb_phase) = (er >= 0) ? vit(er, n) * nx + vit(er, n + Nb_phase) * ny : -123.123;
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
classe Champ_base Cette classe est la base de la hierarchie des champs.
classe Discret_Thyd Cette classe est la classe de base representant une discretisation
void vitesse(const Schema_Temps_base &, Domaine_dis_base &, OWN_PTR(Champ_Inc_base)&, int nb_comp=1) const
void discretiser_champ(const Motcle &directive, const Domaine_dis_base &z, const Nom &nom, const Nom &unite, int nb_comp, int nb_pas_dt, double temps, OWN_PTR(Champ_Inc_base)&champ, const Nom &sous_type=NOM_VIDE) const
virtual const DoubleVect & face_surfaces() const
int nb_faces() const
renvoie le nombre global de faces.
int nb_faces_tot() const
renvoie le nombre total de faces.
void creer_tableau_faces(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
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 face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
Class defining operators and methods for all reading operation in an input flow (file,...
virtual void set_param(Param &titi) const override
const Nom & le_nom() const override
Renvoie le nom de l'equation.
const Discretisation_base & discretisation() const
Renvoie la discretisation associee a l'equation.
virtual void mettre_a_jour_champs_conserves(double temps, int reset=0)
virtual void abortTimeStep()
Reinitialiser ce qui doit l'etre.
virtual void completer()
Complete la construction (initialisation) des objets associes a l'equation.
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
virtual int preparer_calcul()
Tout ce qui ne depend pas des autres problemes eventuels.
int sauvegarder(Sortie &) const override
On sauvegarde l'inconnue, puis les sources sur un flot de sortie.
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
virtual void verifie_ch_init_nb_comp(const Champ_Inc_base &ch_ref, const int nb_comp) const
Verification du nombre de composantes lues pour la specification d un champ.
void creer_champ(const Motcle &motlu) override
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
virtual bool initTimeStep(double dt)
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
virtual void discretiser()
Discretise l'equation.
Champs_compris champs_compris_
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
const Nom & le_nom() const override
Renvoie le nom du champ.
virtual Nature_du_champ nature_du_champ() const
DoubleTab vitesse_normale_
const DoubleTab & vitesse_normale() const
void verifie_ch_init_nb_comp(const Champ_Inc_base &ch_ref, const int nb_comp) const override
Verification du nombre de composantes lues pour la specification d un champ.
const Champ_Inc_base & vitesse() const override
const Champ_base & diffusivite_pour_pas_de_temps() const override
void discretiser() override
Discretise l'equation.
void set_param(Param ¶m) const override
int preparer_calcul() override
Tout ce qui ne depend pas des autres problemes eventuels.
Operateur_NConserv terme_nconserv_
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
const Champ_Inc_base & vitesse_phase(const int i) const
void completer() override
Complete la construction (initialisation) des objets associes a l'equation.
OWN_PTR(Champ_Inc_base) l_inco_ch_
void mettre_a_jour_champs_conserves(double temps, int reset) override
void calculer_vitesse_normale()
void creer_champ(const Motcle &motlu) override
int sauvegarder(Sortie &os) const override
On sauvegarde l'inconnue, puis les sources sur un flot de sortie.
const Champ_Don_base & diffusivite_pour_transport() const override
void abortTimeStep() override
Reinitialiser ce qui doit l'etre.
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.
const Champ_Inc_base & inconnue() const override
bool initTimeStep(double dt) override
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
double calculer_pas_de_temps() const override
Calcul du prochain pas de temps.
Entree & lire_cond_init(Entree &) override
Lecture des conditions initiales dans un flot d'entree.
int nombre_d_operateurs() const override
std::vector< OWN_PTR(Champ_Inc_base)> vit_phases_
const Operateur & operateur(int) const override
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
Une chaine de caractere (Nom) en majuscules.
classe Navier_Stokes_std Cette classe porte les termes de l'equation de la dynamique
const Milieu_base & milieu() const override
Renvoie le milieu physique de l'equation (le Fluide_base upcaste en Milieu_base).
Operateur_Conv terme_convectif
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.
virtual void sauver() const
class Nom Une chaine de caractere pour nommer les objets de TRUST
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.
classe Operateur Classe generique de la hierarchie des operateurs.
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 Nom & nom_phase(int i) const
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
double temps_courant() const
Renvoie le temps courant.
virtual double temps_futur(int i) const =0
double pas_temps_max() const
Renvoie le pas de temps maximum.
double temps_max() const
Renvoie une reference sur le temps maximum.
virtual int nb_valeurs_futures() const =0
virtual int nb_valeurs_temporelles() const =0
double facteur_securite_pas() const
Renvoie le facteur de securite ou multiplicateur de delta_t.
Classe de base des flux de sortie.
_SIZE_ dimension(int d) const
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")