16#ifndef Equation_base_included
17#define Equation_base_included
19#include <Ecrire_fichier_xyz_valeur.h>
20#include <Parametre_equation_base.h>
21#include <Domaine_Cl_dis_base.h>
22#include <Discretisation_base.h>
23#include <Solveur_Masse_base.h>
24#include <Matrice_Morse_Diag.h>
25#include <MD_Vector_tools.h>
26#include <Interface_blocs.h>
27#include <Value_Input_Int.h>
28#include <TRUSTTab_parts.h>
29#include <Champ_Inc_base.h>
30#include <Matrice_Morse.h>
31#include <Ecrire_YAML.h>
32#include <Champs_Fonc.h>
47enum Type_modele { TURBULENCE };
147 inline const Nom&
le_nom()
const override;
179 virtual void dimensionner_blocs(matrices_t matrices,
const tabs_t& semi_impl = {})
const;
180 virtual void assembler_blocs(matrices_t matrices, DoubleTab& secmem,
const tabs_t& semi_impl = {})
const;
237 virtual const RefObjU&
get_modele(Type_modele type)
const;
311 virtual void derivee_en_temps_inco_sources(DoubleTrav& ) { }
312 virtual void verify_scheme() { }
314 Ecrire_fichier_xyz_valeur xyz_field_values_file_;
319 DoubleVect residu_initial_;
321 OWN_PTR(Champ_Fonc_base) field_residu_;
323 mutable DoubleTab NULL_;
324 int disable_equation_residual_ = 0;
325 mutable Parser_U equation_non_resolue_;
326 Value_Input_Int eq_non_resolue_input_;
345 assert(le_dom_Cl_dis);
346 return le_dom_Cl_dis.valeur();
355 assert(le_dom_Cl_dis);
356 return le_dom_Cl_dis.valeur();
365 return solveur_masse;
374 return solveur_masse;
class Champ_base This class is the base of the fields hierarchy.
class Champs_Fonc List of OWN_PTR(Champ_Fonc_base) declared through the LIST(X) macro
class Champs_compris_interface This class contains an interface of methods intended to manage
class Cond_lim_base Base class for the hierarchy of classes that represent the different boundary con...
class Discretisation_base This class represents a spatial discretization scheme, which
class Domaine_Cl_dis_base Domaine_Cl_dis_base objects represent discretized boundary conditions
class Domaine_dis_base This class is the base of the hierarchy of discretized domains.
class Equation_base The role of an equation is the calculation of one or more fields....
virtual int equation_non_resolue() const
Matrice_Morse matrice_stockee
virtual void dimensionner_termes_croises(Matrice_Morse &matrice, const Probleme_base &autre_pb, int nl, int nc)
virtual void ajouter_termes_croises(const DoubleTab &inco, const Probleme_base &autre_pb, const DoubleTab &autre_inco, DoubleTab &resu) const
virtual void set_param(Param &titi) const override
void Gradient_conjugue_diff_impl(DoubleTrav &secmem, DoubleTab &solution, const DoubleTab &terme_mul)
const Nom & le_nom() const override
Returns the name of the equation.
const bool & diffusion_multi_scalaire() const
OWN_PTR(Champ_Inc_base) champ_conserve_
virtual void associer_milieu_equation()
virtual void associer_milieu_base(const Milieu_base &)=0
virtual Entree & lire_cond_init(Entree &)
Reading of initial conditions in an input stream.
int reprendre(Entree &) override
We resume the unknown from an input stream.
virtual const Milieu_base & milieu() const =0
virtual void init_save_file()
int has_champ_conserve() const
DoubleTab & derivee_en_temps_conv(DoubleTab &, const DoubleTab &)
Add convection term In: solution is the unknown I.
OBS_PTR(Domaine_dis_base) le_dom_dis
virtual const RefObjU & get_modele(Type_modele type) const
virtual void avancer(int i=1)
virtual void associer_domaine_dis(const Domaine_dis_base &)
Associates the discretized domain with the equation.
void set_residuals(const DoubleTab &residual)
void nommer(const Nom &nom) override
Method called when the object instance is created in the data file (Interprete::ajouter).
virtual void dimensionner_matrice_sans_mem(Matrice_Morse &mat_morse)
virtual int verif_Cl() const
Verifies the compatibility of boundary conditions with the equation.
virtual int has_champ_convecte() 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
Prints the equation operators if the time scheme indicates it is necessary.
virtual void associer_pb_base(const Probleme_base &)
Associates with the Problem passed as parameter.
virtual DoubleTab & derivee_en_temps_inco_transport(DoubleTab &derivee)
Sources & sources()
Returns the source terms associated with the equation.
OBS_PTR(Probleme_base) mon_probleme
OWN_PTR(Champ_Inc_base) champ_convecte_
void set_calculate_time_derivative(int i)
OWN_PTR(Parametre_equation_base) ¶metre_equation()
virtual void assembler_blocs_avec_inertie(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl={})
const Discretisation_base & discretisation() const
Returns the discretization associated with the equation.
void init_champ_conserve() const
Champ_Inc_base & champ_conserve() const
Solveur_Masse_base & solv_masse()
Returns the mass solver associated with the equation.
virtual void valider_iteration()
virtual method to correct the unknown during implicit iterations for example K-eps must remain positi...
virtual void mettre_a_jour_champs_conserves(double temps, int reset=0)
virtual const Champ_Inc_base & inconnue() const =0
void set_diffusion_multi_scalaire(bool flg=true)
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 verifie_ch_init_nb_comp_cl(const Champ_Inc_base &ch_ref, const int nb_comp, const Cond_lim_base &cl) const
OBS_PTR(Schema_Temps_base) le_schema_en_temps
const Champ_base & get_champ(const Motcle &nom) const override
virtual Entree & lire_cl(Entree &)
Reading of boundary conditions in an input stream.
int calculate_time_derivative_
void add_champs_compris(const Champ_base &ch)
LIST(RefObjU) liste_modeles_
virtual DoubleTab & corriger_derivee_expl(DoubleTab &)
DoubleVect & get_residu()
virtual void dimensionner_blocs(matrices_t matrices, const tabs_t &semi_impl={}) const
virtual void contribuer_termes_croises(const DoubleTab &inco, const Probleme_base &autre_pb, const DoubleTab &autre_inco, Matrice_Morse &matrice) const
const OWN_PTR(Parametre_equation_base) ¶metre_equation() const
virtual void mettre_a_jour(double temps)
The value of the unknown at the time step has been calculated.
virtual int impr(Sortie &os) const
Prints the equation operators to an output stream, unconditionally.
virtual void abortTimeStep()
Reinitialize what must be.
virtual void assembler_avec_inertie(Matrice_Morse &mat_morse, const DoubleTab &present, DoubleTab &secmem)
int calculate_time_derivative() const
virtual bool positive_unkown()
virtual void completer()
Completes the construction (initialization) of objects associated with the equation.
virtual int nombre_d_operateurs() const =0
Champs_Fonc list_champ_combi
virtual double get_time_factor() const
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
virtual int preparer_calcul()
Everything that does not depend on other possible problems.
virtual void imprime_residu(SFichier &)
virtual int nombre_d_operateurs_tot() const
OWN_PTR(Solveur_Masse_base) solveur_masse
virtual bool updateGivenFields()
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
virtual std::pair< std::string, fonc_calc_t > get_fonc_champ_conserve() const
void initialise_residu(int=0)
virtual void assembler(Matrice_Morse &mat_morse, const DoubleTab &present, DoubleTab &secmem)
virtual Milieu_base & milieu()=0
virtual void modifier_pour_Cl(Matrice_Morse &mat_morse, DoubleTab &secmem) const
virtual DoubleTab & derivee_en_temps_inco(DoubleTab &)
Returns the time derivative of the unknown I of the equation: dI/dt = M-1*(sum(operators(I) + sources...
int sauvegarder(Sortie &) const override
We save the unknown, then the source terms to an output stream.
virtual Domaine_Cl_dis_base & domaine_Cl_dis()
Returns the discretized boundary condition domain associated with the equation.
virtual const Champ_Inc_base & derivee_en_temps() const
virtual Champ_Inc_base & inconnue()=0
Probleme_base & probleme()
Returns the problem associated with the equation.
virtual void verifie_ch_init_nb_comp(const Champ_Inc_base &ch_ref, const int nb_comp) const
Verification of the number of components read for the specification of a field.
int lire_motcle_non_standard(const Motcle &, Entree &) override
Reads non-simple-type parameters of an Objet_U from an input stream.
virtual void associer_sch_tps_base(const Schema_Temps_base &)
Associates the time scheme with the equation.
virtual void close_save_file()
virtual void reculer(int i=1)
virtual void init_champ_convecte() const
virtual DoubleTab & corriger_derivee_impl(DoubleTab &)
DoubleVect & residu_initial()
int limpr() const
Ask the time scheme if an output is needed.
void creer_champ(const Motcle &motlu) override
Schema_Temps_base & schema_temps()
Returns the time scheme associated with the equation.
void Gradient_conjugue_diff_impl(DoubleTrav &secmem, DoubleTab &solution)
virtual bool initTimeStep(double dt)
Allocation and initialization of the unknown and boundary conditions until present+dt.
virtual void dimensionner_matrice(Matrice_Morse &mat_morse)
virtual const Operateur & operateur_fonctionnel(int) const
virtual void discretiser()
Discretizes the equation.
void calculer_pas_de_temps_locaux(DoubleTab &) const
virtual Champ_Inc_base & derivee_en_temps()
virtual Operateur & operateur(int)=0
virtual Entree & lire_sources(Entree &)
Reading of source terms in an input stream.
virtual int has_interface_blocs() const
virtual void resetTime(double time)
Reset current time of the equation. Used from ICoCo. See documentation of Problem_base::resetTime().
Champs_compris champs_compris_
virtual void assembler_blocs(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl={}) const
int disable_equation_residual() const
virtual const Operateur & operateur(int) const =0
static void calculer_champ_conserve(const Objet_U &obj, DoubleTab &val, DoubleTab &bval, tabs_t &deriv)
OWN_PTR(Parametre_equation_base) parametre_equation_
virtual Champ_Inc_base & champ_convecte() const
OWN_PTR(Domaine_Cl_dis_base) le_dom_Cl_dis
Domaine_dis_base & domaine_dis()
Returns the discretized domain associated with the equation.
virtual const Motcle & domaine_application() const
Returns "indeterminate" Navier_Stokes_standard for example overrides this method.
virtual double calculer_pas_de_temps() const
Calculation of the next time step.
virtual Nom expression_residu()
bool diffusion_multi_scalaire_
OWN_PTR(Champ_Inc_base) derivee_en_temps_
const Nom & le_nom() const override
Returns the name of the field.
Matrice_Morse_Diag class - Represents a sparse symmetric matrix M stored in Morse format.
Matrice_Morse class - Represents a (sparse) matrix M, not necessarily square,.
Milieu_base This class is the base of the (physical) medium hierarchy.
A character string (Nom) in uppercase.
class Nom: a character string for naming TRUST objects.
const std::string & getString() const
An array of character strings (VECT(Nom)).
Base class for TRUST objects (Objet_U).
Objet_U()
Default constructor: assigns a unique identifier to the object (object_id_) and registers the object ...
class Operateur Generic class of the operator hierarchy.
Helper class to factorize the readOn method of Objet_U classes.
Parametre_equation_base A Parametre_equation_base object groups the various.
class Probleme_base It is a Probleme_U that is not a coupling.
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
SFichier is to the C++ ofstream class what Sortie is to the C++ ostream class.
Solveur_Masse_base Represents the mass matrix of an equation.
Base class for output streams.
class Sources Sources represents a list of Source objects.
_SIZE_ dimension_tot(int) const override