TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Equation_base.h
1/****************************************************************************
2* Copyright (c) 2026, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#ifndef Equation_base_included
17#define Equation_base_included
18
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>
33#include <TRUST_Ref.h>
34#include <TRUSTList.h>
35#include <TRUSTTrav.h>
36#include <Parser_U.h>
37#include <Sources.h>
38#include <vector>
39
41class Cond_lim_base;
42class Milieu_base;
43class Operateur;
44class Motcle;
45class Param;
46
47enum Type_modele { TURBULENCE };
48
49/*! @brief classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs. Cette classe est la base de la hierarchie des equations.
50 *
51 * Ses membres sont les attributs et les methodes communs a toutes les classes qui representent des equations.
52 * Une equation est modelisee de la facon suivante:
53 *
54 * M * dU_h/dt + Somme_i(Op_i(U_h)) = Somme(Sources);
55 *
56 * M est la matrice masse representee par un objet "Solveur_Masse"
57 * U_h est l'inconnue representee par un objet "Champ_Inc"
58 * Op_i est le i-eme operateur de l'equation represente par un objet "Operateur"
59 * Sources sont les termes sources (eventuellement inexistant) de l'equation represente par des objets "Source".
60 * Une equation est lie a un probleme par une reference contenue dans le membre OBS_PTR(Probleme_base) mon_probleme.
61 *
62 * Classe abstraite dont toutes les equations doivent deriver.
63 * Methodes abstraites:
64 * int nombre_d_operateurs() const
65 * const Operateur& operateur(int) const
66 * Operateur& operateur(int)
67 * const Champ_Inc_base& inconnue() const
68 * Champ_Inc_base& inconnue()
69 * void associer_milieu_base(const Milieu_base&)
70 * const Milieu_base& milieu() const
71 * Milieu_base& milieu()
72 * Entree& lire(const Motcle&, Entree&) [protegee]
73 *
74 */
76{
77 Declare_base(Equation_base);
78
79public :
80 // Methode surchargee de Objet_U:
81 void nommer(const Nom& nom) override;
82 // MODIF ELI LAUCOIN (22/11/2007) : je rajoute un avancer et un reculer
83 virtual void avancer(int i=1);
84 virtual void reculer(int i=1);
85 // FIN MODIF ELI LAUCOIN (22/11/2007)
86
87 virtual int nombre_d_operateurs() const =0;
88 virtual int nombre_d_operateurs_tot() const;
89 virtual const Operateur& operateur(int) const =0;
90 virtual Operateur& operateur(int) =0;
91 virtual const Operateur& operateur_fonctionnel(int) const;
92 virtual Operateur& operateur_fonctionnel(int);
93 virtual const Champ_Inc_base& inconnue() const =0;
94 virtual Champ_Inc_base& inconnue() =0;
95 virtual void associer_milieu_base(const Milieu_base&)=0;
96 virtual const Milieu_base& milieu() const =0;
97 virtual Milieu_base& milieu() =0;
98
99 virtual std::vector<YAML_data> data_a_sauvegarder() const;
100 int sauvegarder(Sortie&) const override;
101 int reprendre(Entree&) override;
102 Nom create_polymacfamily_syno(const Nom& field_tag) const;
103 // if some equations need to save some parts of their data in a different backup file, we need to override these 2 methods below
104 // (useful if some backup formats are not available for every equations)
105 virtual void init_save_file() { }
106 virtual void close_save_file() { }
107
108 int limpr() const;
109 virtual void imprimer(Sortie& os) const;
110 virtual int impr(Sortie& os) const;
111 virtual void associer_milieu_equation();
112
113 virtual DoubleTab& derivee_en_temps_inco(DoubleTab& );
114 virtual DoubleTab& derivee_en_temps_inco_transport(DoubleTab& derivee) { return derivee_en_temps_inco(derivee); }
115 virtual DoubleTab& corriger_derivee_expl(DoubleTab& );
116 virtual DoubleTab& corriger_derivee_impl(DoubleTab& );
117 virtual void mettre_a_jour(double temps);
118 virtual void abortTimeStep();
119 virtual void resetTime(double time);
120 virtual void valider_iteration();
121 virtual int preparer_calcul();
122 virtual bool initTimeStep(double dt);
123 virtual bool updateGivenFields();
124 virtual void discretiser();
125 virtual void associer_pb_base(const Probleme_base&);
126 virtual void completer();
127 virtual double calculer_pas_de_temps() const;
128 void calculer_pas_de_temps_locaux(DoubleTab&) const; //Computation of local time: Vect of size number of faces of the domain
129 Sources& sources();
130 const Sources& sources() const;
132 inline const Solveur_Masse_base& solv_masse() const;
134 const Probleme_base& probleme() const;
136 const Schema_Temps_base& schema_temps() const;
137 virtual void associer_sch_tps_base(const Schema_Temps_base&);
138 virtual void associer_domaine_dis(const Domaine_dis_base&);
139
140 const Discretisation_base& discretisation() const;
141
142 virtual inline Domaine_Cl_dis_base& domaine_Cl_dis();
143 virtual inline const Domaine_Cl_dis_base& domaine_Cl_dis() const;
145 const Domaine_dis_base& domaine_dis() const;
146 //
147 inline const Nom& le_nom() const override;
148 inline DoubleVect& get_residu() { return residu_; }
149 inline DoubleVect& residu_initial() { return residu_initial_; }
150 void initialise_residu(int=0);
151 virtual void imprime_residu(SFichier&);
152 virtual Nom expression_residu();
153
154 // methodes pour l'implicite
155 virtual void dimensionner_matrice(Matrice_Morse& mat_morse); //memorise le stencil de la matrice apres le 1er appel
156 virtual void dimensionner_matrice_sans_mem(Matrice_Morse& mat_morse); //methode interne appellee par celle ci-dessus
157
158 // ajoute les contributions des operateurs et des sources
159 virtual void assembler( Matrice_Morse& mat_morse, const DoubleTab& present, DoubleTab& secmem) ;
160 // modifie la matrice et le second mmebre en fonction des CL
161 virtual void modifier_pour_Cl( Matrice_Morse& mat_morse,DoubleTab& secmem) const;
162 // assemble, ajoute linertie,et modifie_pour_cl.
163 virtual void assembler_avec_inertie( Matrice_Morse& mat_morse, const DoubleTab& present, DoubleTab& secmem) ;
164 virtual void dimensionner_termes_croises(Matrice_Morse& matrice, const Probleme_base& autre_pb, int nl, int nc);
165 virtual void ajouter_termes_croises(const DoubleTab& inco, const Probleme_base& autre_pb, const DoubleTab& autre_inco, DoubleTab& resu) const;
166 virtual void contribuer_termes_croises(const DoubleTab& inco, const Probleme_base& autre_pb, const DoubleTab& autre_inco, Matrice_Morse& matrice) const;
167
168 /*
169 interface {dimensionner/ajouter/assembler}_blocs
170 specificites : - has_interface_blocs() renvoie 1 si tous les termes de l'equation supportent cette interface
171 - dimensionner_blocs() non memoize (a gerer par l'appelant) / appelable sur des matrices non vides
172 - assembler_blocs() utilise les valeurs des inconnues/champs a l'instant present (genre inconnue().valeurs())
173 - assembler_blocs_*() raisonne en increments : M.dInco = S -> attention aux seuils des solveurs
174 - certaines variables (ensemble semi_impl) peuvent etre traitees en "semi-implicite"
175 (on utilise des valeurs predites, pas de derivees renseignees)
176 */
177 virtual int has_interface_blocs() const;
178 virtual double get_time_factor() const { return 1.; }
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;
181 virtual void assembler_blocs_avec_inertie(matrices_t matrices, DoubleTab& secmem, const tabs_t& semi_impl = {});
182
183 /* methodes auxiliaires de l'interface _blocs : champ conserve par l'equation et ses valeurs sur les CLs de type Dirichlet ou Neumann_val_ext
184 par defaut, champ_conserve = coefficient_temporel * inconnue
185 ce champ est mutable pour que le schema en temps puisse le mettre a jour
186 */
187 //le champ : autant de valeurs spatiales / temporelles que l'inconnue
188 Champ_Inc_base& champ_conserve() const { return champ_conserve_.valeur(); }
189 int has_champ_conserve() const { return bool(champ_conserve_); }
190
191 void init_champ_conserve() const; //a appeller dans le completer() des operateurs/sources qui auront besoin de champ_conserve_
192 /* fonction de calcul par defaut de champ_conserve */
193 static void calculer_champ_conserve(const Objet_U& obj, DoubleTab& val, DoubleTab& bval, tabs_t& deriv);
194 /* renvoie le nom du champ conserve et la fonction pour le calculer -> a surcharger */
195 virtual std::pair<std::string, fonc_calc_t> get_fonc_champ_conserve() const
196 {
198 }
199
200 //par defaut le champ conserve
201 virtual Champ_Inc_base& champ_convecte() const { return champ_conserve_.valeur(); }
202 virtual int has_champ_convecte() const { return bool(champ_conserve_); }
203 virtual void init_champ_convecte() const { init_champ_conserve(); }
204 //mise a jour de champ_conserve / champ_convecte : appele par Probleme_base::mettre_a_jour() apres avoir mis a jour le milieu
205 //si reset = 1, force le calcul de toutes les valeurs temporelles (et pas seulement de la valeur courante)
206 virtual void mettre_a_jour_champs_conserves(double temps, int reset = 0);
207
208 //Methodes de l interface des champs postraitables
209 /////////////////////////////////////////////////////
210 void creer_champ(const Motcle& motlu) override;
211 const Champ_base& get_champ(const Motcle& nom) const override;
212 void get_noms_champs_postraitables(Noms& nom,Option opt=NONE) const override;
213 bool has_champ(const Motcle& nom, OBS_PTR(Champ_base) &ref_champ) const override;
214 bool has_champ(const Motcle& nom) const override;
215 /////////////////////////////////////////////////////
216
217 virtual const Motcle& domaine_application() const;
218 virtual void verifie_ch_init_nb_comp(const Champ_Inc_base& ch_ref, const int nb_comp) const;
219 virtual void verifie_ch_init_nb_comp_cl(const Champ_Inc_base& ch_ref, const int nb_comp, const Cond_lim_base& cl) const
220 {
221 verifie_ch_init_nb_comp(ch_ref, nb_comp);
222 }
223
224 DoubleTab& derivee_en_temps_conv(DoubleTab& , const DoubleTab& );
225 // Diffusion implicit scheme
227 void Gradient_conjugue_diff_impl(DoubleTrav& secmem, DoubleTab& solution)
228 {
229 return Gradient_conjugue_diff_impl(secmem,solution,0,NULL_);
230 }
231 void Gradient_conjugue_diff_impl(DoubleTrav& secmem, DoubleTab& solution, const DoubleTab& terme_mul)
232 {
233 return Gradient_conjugue_diff_impl(secmem,solution,terme_mul.dimension_tot(0),terme_mul);
234 }
235 inline OWN_PTR(Parametre_equation_base)& parametre_equation() { return parametre_equation_ ; }
236 inline const OWN_PTR(Parametre_equation_base)& parametre_equation() const { return parametre_equation_ ; }
237 virtual const RefObjU& get_modele(Type_modele type) const;
238 virtual int equation_non_resolue() const;
239 int disable_equation_residual() const { return disable_equation_residual_; };
240
241 //pour les schemas en temps a pas multiples
242 inline virtual const Champ_Inc_base& derivee_en_temps() const { return derivee_en_temps_; }
243 inline virtual Champ_Inc_base& derivee_en_temps() { return derivee_en_temps_; }
246
247 void set_residuals(const DoubleTab& residual);
248 virtual bool positive_unkown() { return false; }
249
250 inline void add_champs_compris(const Champ_base& ch) { champs_compris_.ajoute_champ(ch); };
251
252 // set to true if operator is multiscalar (mixes components together). Only coded for VDF-Elem at present !
253 inline void set_diffusion_multi_scalaire(bool flg = true)
254 {
255 if (flg) assert (discretisation().is_vdf());
257 }
258 inline const bool& diffusion_multi_scalaire() const { return diffusion_multi_scalaire_; }
259
260 public_for_cuda
261 void Gradient_conjugue_diff_impl(DoubleTrav& secmem, DoubleTab& solution, int size_terme_mul, const DoubleTab& term_mul);
262
263protected :
264
268 OBS_PTR(Schema_Temps_base) le_schema_en_temps;
271 OBS_PTR(Probleme_base) mon_probleme;
272 virtual void set_param(Param& titi) const override;
273 int lire_motcle_non_standard(const Motcle&, Entree&) override;
274 virtual Entree& lire_sources(Entree&);
275 virtual Entree& lire_cond_init(Entree&);
276 virtual Entree& lire_cl(Entree&);
277 virtual int verif_Cl() const;
278 mutable DoubleList dt_op_bak;
279 //Methode lire avec signature specifique pour faire echouer
280 //la compilation en cas de presence de l'ancienne methode lire
281 //virtual Entree& lire(const Motcle&, Entree&)
282 virtual void lire() { exit(); }
283
286 bool has_time_factor_; // Parameter set to 1 if convection has a prefactor (eg rhoCp in energy)
287 OWN_PTR(Parametre_equation_base) parametre_equation_;
288
289 LIST(RefObjU) liste_modeles_; //Le premier element de la liste est le modele nul
290 Champs_compris champs_compris_;
292
293 //memoization of the matrix for PolyMAC_HFV
295 mutable int matrice_init;
296
297 //pour l'interface assembler_blocs
298 mutable OWN_PTR(Champ_Inc_base) champ_conserve_;
299 mutable OWN_PTR(Champ_Inc_base) champ_convecte_;
300
301 // For multistep methods, store previous dI/dt(n), dI/dt(n-1),...
302 OWN_PTR(Champ_Inc_base) derivee_en_temps_;
304
305 // pour une positivation du terme en fin d'iteration si necessaire
306 // renvoie 1 pour un champ positif, 0 pour un champ negatif
307
309
310private :
311 virtual void derivee_en_temps_inco_sources(DoubleTrav& ) { /* Don nothing */ }
312 virtual void verify_scheme() { /* Don nothing */ }
313
314 Ecrire_fichier_xyz_valeur xyz_field_values_file_;
315
316 //!SC: passage en protected (surcharge de get_champ dans Equation_Diphasique_base)
317// Champs_Fonc list_champ_combi;
318 DoubleVect residu_;
319 DoubleVect residu_initial_;
320 // retourne le CHAMP (et non la norme) des residus de chaque inconnu du probleme
321 OWN_PTR(Champ_Fonc_base) field_residu_;
322
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_;
327};
328
329
330/*! @brief Renvoie le nom de l'equation.
331 *
332 * @return (Nom&) le nom de l'equation
333 */
334inline const Nom& Equation_base::le_nom() const
335{
336 return nom_;
337}
338
339/*! @brief Renvoie le domaine des conditions aux limite discretisee associee a l'equation
340 *
341 * @return (Domaine_Cl_dis_base&) Domaine de condition aux limites discretisee
342 */
344{
345 assert(le_dom_Cl_dis);
346 return le_dom_Cl_dis.valeur();
347}
348
349/*! @brief Renvoie le domaine des conditions aux limite discretisee associee a l'equation
350 *
351 * (version const)
352 *
353 * @return (Domaine_Cl_dis_base&) Domaine de condition aux limites discretisee
354 */
356{
357 assert(le_dom_Cl_dis);
358 return le_dom_Cl_dis.valeur();
359}
360
361/*! @brief Renvoie le solveur de masse associe a l'equation.
362 *
363 * @return (Solveur_Masse_base&) le solveur de masse associe a l'equation
364 */
366{
367 return solveur_masse;
368}
369
370/*! @brief Renvoie le solveur de masse associe a l'equation.
371 *
372 * (version const)
373 *
374 * @return (Solveur_Masse_base&) le solveur de masse associe a l'equation
375 */
377{
378 return solveur_masse;
379}
380
381#endif /* Equation_base_included */
Classe Champ_Inc_base.
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
classe Champs_Fonc Liste de OWN_PTR(Champ_Fonc_base) declaree grace a la macro LIST(X)
Definition Champs_Fonc.h:28
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) &parametre_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()
Matrice_Morse_Diag diag_
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) &parametre_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
Sources les_sources
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
DoubleList dt_op_bak
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 lire()
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)
Definition Milieu_base.h:50
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
const std::string & getString() const
Definition Nom.h:92
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
classe Objet_U Cette classe est la classe de base des Objets de TRUST
Definition Objet_U.h:73
friend class Entree
Definition Objet_U.h:76
friend class Sortie
Definition Objet_U.h:75
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55
classe Operateur Classe generique de la hierarchie des operateurs.
Definition Operateur.h:39
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
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.
Definition Process.cpp:455
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
Definition SFichier.h:27
class Schema_Temps_base
classe Solveur_Masse_base Represente la matrice de masse d'une equation.
Classe de base des flux de sortie.
Definition Sortie.h:52
class Sources Sources represente une liste de Source.
Definition Sources.h:31
_SIZE_ dimension_tot(int) const override
Definition TRUSTTab.tpp:160