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();
357 assert(le_dom_Cl_dis);
358 return le_dom_Cl_dis.valeur();
367 return solveur_masse;
378 return solveur_masse;
classe Champ_base Cette classe est la base de la hierarchie des champs.
classe Champs_Fonc Liste de OWN_PTR(Champ_Fonc_base) declaree grace a la macro LIST(X)
classe Champs_compris_interface Cette classe contient une interface de methodes destinees a gerer
classe Cond_lim_base Classe de base pour la hierarchie des classes qui representent les differentes c...
classe Discretisation_base Cette classe represente un schema de discretisation en espace,...
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
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
Renvoie le nom de l'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 &)
Lecture des conditions initiales dans un flot d'entree.
int reprendre(Entree &) override
On reprend l'inconnue a partir d'un flot d'entree.
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 &)
Associe le domaine discretise a l'equation.
void set_residuals(const DoubleTab &residual)
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 dimensionner_matrice_sans_mem(Matrice_Morse &mat_morse)
virtual int verif_Cl() const
Verifie la compatibilite des conditions limites avec l'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
Imprime les operateurs de l'equation si le schema en temps indique que c'est necessaire.
virtual void associer_pb_base(const Probleme_base &)
S'associe au Probleme passe en parametre.
virtual DoubleTab & derivee_en_temps_inco_transport(DoubleTab &derivee)
Sources & sources()
Renvoie les termes sources asssocies a l'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
Renvoie la discretisation associee a l'equation.
void init_champ_conserve() const
Champ_Inc_base & champ_conserve() const
Solveur_Masse_base & solv_masse()
Renvoie le solveur de masse associe a l'equation.
virtual void valider_iteration()
methode virtuelle permettant de corriger l'onconnue lors d'iterations implicites par exemple K-eps do...
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 &)
Lecture des conditions limites sur un flot d'entree.
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)
La valeur de l'inconnue sur le pas de temps a ete calculee.
virtual int impr(Sortie &os) const
Imprime les operateurs de l'equation sur un flot de sortie, de facon inconditionnelle.
virtual void abortTimeStep()
Reinitialiser ce qui doit l'etre.
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()
Complete la construction (initialisation) des objets associes a l'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()
Tout ce qui ne depend pas des autres problemes eventuels.
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
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.
virtual const Champ_Inc_base & derivee_en_temps() const
virtual Champ_Inc_base & inconnue()=0
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.
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 associer_sch_tps_base(const Schema_Temps_base &)
S'associe au schema_en_temps.
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
Demande au schema en temps si il faut effectuer une impression.
void creer_champ(const Motcle &motlu) override
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
void Gradient_conjugue_diff_impl(DoubleTrav &secmem, DoubleTab &solution)
virtual bool initTimeStep(double dt)
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
virtual void dimensionner_matrice(Matrice_Morse &mat_morse)
virtual const Operateur & operateur_fonctionnel(int) const
virtual void discretiser()
Discretise l'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 &)
Lecture des termes sources dans un flot d'entree.
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()
Renvoie le domaine discretise associe a l'equation.
virtual const Motcle & domaine_application() const
Renvoie "indetermine" Navier_Stokes_standard par exemple surcharge cette methode.
virtual double calculer_pas_de_temps() const
Calcul du prochain pas de temps.
virtual Nom expression_residu()
bool diffusion_multi_scalaire_
OWN_PTR(Champ_Inc_base) derivee_en_temps_
const Nom & le_nom() const override
Renvoie le nom du champ.
Classe Matrice_Morse_Diag Represente une matrice M (creuse) symetrique stockee au format Morse.
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
Une chaine de caractere (Nom) en majuscules.
class Nom Une chaine de caractere pour nommer les objets de TRUST
const std::string & getString() const
Un tableau de chaine de caracteres (VECT(Nom)).
classe Objet_U Cette classe est la classe de base des Objets de TRUST
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
classe Operateur Classe generique de la hierarchie des operateurs.
Helper class to factorize the readOn method of Objet_U classes.
classe Parametre_equation_base Un objet Parametre_equation_base est un objet regroupant les different...
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
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...
classe Solveur_Masse_base Represente la matrice de masse d'une equation.
Classe de base des flux de sortie.
class Sources Sources represente une liste de Source.
_SIZE_ dimension_tot(int) const override