TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Schema_Temps_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 Schema_Temps_base_included
17#define Schema_Temps_base_included
18
19#include <Interface_blocs.h>
20#include <TRUST_Deriv.h>
21#include <TRUST_Ref.h>
22#include <TRUSTTab.h>
23#include <Parser_U.h>
24#include <SFichier.h>
25#include <math.h>
26
27class Probleme_base;
28class Equation_base;
29class Matrice_Base;
30class SFichier;
31class Motcle;
32class Param;
33
34/*! @brief class Schema_Temps_base
35 *
36 * Cette classe represente un schema en temps, c'est-a-dire un
37 * algorithme de resolution particulier qui sera associe a un
38 * Probleme_base (un probleme simple et non un couplage).
39 * Schema_Temps_base est la classe abstraite qui est a la base de
40 * la hierarchie des schemas en temps.
41 *
42 * On note n le temps present, et n+1 le temps a l'issue du pas de temps.
43 * Un schema en temps permet de calculer u(n+1) connaissant u jusqu'a u(n).
44 * Il utilise u(n), mais peut aussi avoir besoin de valeurs passees de u,
45 * telles que u(n-1), ...
46 * Il peut aussi en cours de calcul utiliser des valeurs de u a des temps
47 * intermediaires entre n et n+1, par exemple n+1/2.
48 * nb_valeurs_temporelles compte toutes les valeurs allouees :
49 * n, n+1, les valeurs passees retenues etles valeurs intermediaires
50 * entre n et n+1.
51 * nb_valeurs_futures compte n+1 et les valeurs intermediaires entre n et n+1.
52 * C'est donc le nombre de crans dont tournent les roues en avancant d'un pas de temps.
53 * temps_futur(i) renvoie la i-eme valeur future du temps.
54 * Enfin temps_defaut est le temps que doivent rendre les champs a
55 * l'appel de valeurs() - donc notamment dans les operateurs.
56 * Pour le moment n'est respecte que par les Champ_Front des CLs.
57 *
58 * @sa Equation_base Probleme_base Algo_MG_base
59 *
60 * Classe abstraite dont tous les schemas en temps doivent deriver.
61 *
62 * Methodes abstraites:
63 * int faire_un_pas_de_temps_eqn_base(Equation_base&)
64 */
65
67{
68 Declare_base(Schema_Temps_base);
69
70public :
71 virtual void initialize();
72 virtual void terminate() ;
73 virtual double computeTimeStep(bool& stop) const;
74 virtual bool initTimeStep(double dt);
75 virtual void validateTimeStep();
76 virtual bool isStationary() const;
77 virtual void abortTimeStep();
78 virtual void resetTime(double time);
79
80 virtual bool iterateTimeStep(bool& converged);
81 int limpr() const;
82
83 ////////////////////////////////
84 // //
85 // Caracteristiques du schema //
86 // //
87 ////////////////////////////////
88
89 virtual int nb_valeurs_temporelles() const =0;
90 virtual int nb_valeurs_futures() const =0;
91 virtual double temps_futur(int i) const =0;
92 virtual double temps_defaut() const =0;
93
94 /////////////////////////////////////////
95 // //
96 // Fin des caracteristiques du schema //
97 // //
98 /////////////////////////////////////////
99
100 inline void nommer(const Nom&) override;
101 inline const Nom& le_nom() const override;
103
104 virtual void set_param(Param& titi) const override;
105 int sauvegarder(Sortie& ) const override;
106 int reprendre(Entree& ) override ;
107 virtual int mettre_a_jour();
108 virtual void mettre_a_jour_dt(double toto) { abort(); }
109 virtual void mettre_a_jour_dt_stab();
110
111 inline double pas_de_temps() const;
112 inline const DoubleTab& pas_de_temps_locaux() const;
113
114 virtual bool corriger_dt_calcule(double& dt) const;
115 virtual void imprimer(Sortie& os) const;
116 virtual int impr(Sortie& os) const;
117 void imprimer(Sortie& os,Probleme_base& pb) const;
118 void imprimer(Sortie& os,const Probleme_base& pb) const;
119 virtual int impr(Sortie& os,Probleme_base& pb) const;
120 virtual int impr(Sortie& os,const Probleme_base& pb) const;
121 void imprimer_temps_courant(SFichier&) const;
122 inline double pas_temps_min() const;
123 inline double& pas_temps_min();
124 inline double pas_temps_max() const;
125 inline double& pas_temps_max();
126 inline int nb_impr() const;
127 inline double temps_courant() const;
128 inline double temps_precedent() const;
129 inline double temps_calcul() const;
130 virtual inline void changer_temps_courant(const double );
131 void update_critere_statio(const DoubleTab& tab_critere, Equation_base& equation);
132 inline double facteur_securite_pas() const;
133 inline double& facteur_securite_pas();
134 inline void notify_failed_timestep();
135 virtual int stop() const;
136 int lsauv() const;
137 inline int temps_final_atteint() const;
138 inline int nb_pas_dt_max_atteint() const;
139 inline int temps_cpu_max_atteint() const;
140 inline int stationnaire_atteint() const
141 {
142 assert(stationnaire_atteint_ != -1);
143 return stationnaire_atteint_;
144 }
145 inline int stationnaire_atteint_safe() const { return stationnaire_atteint_; }
146 int stop_lu() const;
147 inline int diffusion_implicite() const;
148 inline double seuil_diffusion_implicite() const { return seuil_diff_impl_; }
149 inline int impr_diffusion_implicite() const { return impr_diff_impl_; }
150 inline int impr_extremums() const { return impr_extremums_; }
154 int lire_motcle_non_standard(const Motcle&, Entree&) override;
158 virtual Entree& lire_residuals(Entree&);
159
160 virtual void completer() =0;
161
162 inline double temps_init() const ;
163 inline double temps_max() const ;
164 inline double temps_sauv() const ;
165 inline int nb_sauv_max() const;
166 inline double temps_impr() const ;
167 inline int precision_impr() const { return precision_impr_; }
168 inline int wcol() const
169 {
170 // largeur minimale des colonnes des fichiers .out
171 // precision_impr_ + 9 car : -1.000e+150 on ajoute la longueur de "-1." et de "e+150" plus un espace
172 return precision_impr_ + 9;
173 }
174 inline int gnuplot_header() const { return gnuplot_header_; }
175 inline double seuil_statio() const ;
176 inline int nb_pas_dt_max() const ;
177 inline int nb_pas_dt() const ;
178 inline double mode_dt_start() const { return mode_dt_start_; }
179 inline int indice_tps_final_atteint() const { return ind_tps_final_atteint; }
181 inline int lu() const { return lu_; }
182 inline int file_allocation() const { return file_allocation_; }
183
184 inline double& set_temps_init() { return tinit_; }
185 inline double& set_temps_max() { return tmax_; }
186 inline double& set_temps_courant() { return temps_courant_; }
187 inline double& set_temps_precedent() { return temps_precedent_; }
188 inline int& set_nb_pas_dt() { return nb_pas_dt_; }
189 inline int& set_nb_pas_dt_max() { return nb_pas_dt_max_; }
190 inline double& set_dt_min() { return dt_min_; }
191 inline double& set_dt_max()
192 {
193 dt_max_str_ = Nom(); //desactive la fonction dt_max = f(t)
194 return dt_max_;
195 }
196 inline double& set_dt_sauv() { return dt_sauv_; }
197 inline double& set_dt_impr() { return dt_impr_; }
198 inline int& set_precision_impr() { return precision_impr_; }
199 inline double& set_dt() { return dt_; }
200 inline double& set_facsec() { return facsec_; }
201 inline double& set_seuil_statio() { return seuil_statio_; }
203 {
204 if (stationnaire_atteint_ == -1)
205 stationnaire_atteint_ = 1;
206 return stationnaire_atteint_;
207 }
208 inline void set_stationnaires_atteints(bool flag) { stationnaires_atteints_=flag; }
209 inline int& set_diffusion_implicite() { return ind_diff_impl_; }
212 inline double& set_mode_dt_start() { return mode_dt_start_; }
215 inline bool& set_lu() { return lu_; }
216 inline const double& residu() const { return residu_ ; }
217 inline double& residu() { return residu_ ; }
218 inline const Nom& norm_residu() const { return norm_residu_ ; }
219
220 inline int& schema_impr() { return schema_impr_ ; }
221 inline const int& schema_impr() const { return schema_impr_ ; }
222
223 virtual void associer_pb(const Probleme_base&);
225 const Probleme_base& pb_base() const;
226
227 //pour les schemas en temps a pas multiples
228 inline virtual void modifier_second_membre(const Equation_base& eqn, DoubleTab& secmem) { };
229
230 // pour implicite ajoute l'inertie a la matrice et au scd membre
231 virtual void ajouter_inertie(Matrice_Base& mat_morse,DoubleTab& secmem,const Equation_base& eqn) const;
232
233 //interface ajouter_blocs
234 virtual void ajouter_blocs(matrices_t matrices, DoubleTab& secmem, const Equation_base& eqn, const tabs_t& semi_impl = {}) const;
235
236 // Flag to disable the writing of the .progress file
237 inline bool disable_progress() const
238 {
239 return disable_progress_ ;
240 }
241 void write_dt_ev(bool init);
242 void write_progress(bool init);
243 // Flag to disable the writing of the .dt_ev file
244 inline bool disable_dt_ev() const
245 {
246 return disable_dt_ev_ ;
247 }
248 void finir() const;
249
250protected :
251 OBS_PTR(Probleme_base) mon_probleme;
253 double dt_ = 0.0; ///< Pas de temps de calcul
254 DoubleTab dt_locaux_; ///< Local time steps: Vector of size nb faces of the mesh
255
256 double temps_courant_ = -100.;
257 double temps_precedent_ = -100.;
258 double dt_failed_ = -100.; ///< Si on a rate un pas de temps, sa valeur
259 double dt_gf_ = DMAXFLOAT;
260 double tinit_ = -DMAXFLOAT;
261 double tmax_ = 1.e30;
262 double tcpumax_ = 1.e30;
263 int nb_pas_dt_ = 0;
264 int nb_pas_dt_max_ = std::numeric_limits<int>::max();
265 mutable int nb_impr_ = 0;
266 double dt_min_ = 1.e-16; ///< Pas de temps min fixe par l'utilisateur
267 mutable double dt_max_ = 1.e30; ///< Pas de temps max fixe par l'utilisateur
268 Nom dt_max_str_; ///< reglage de dt_max comme une fonction du temps
269 mutable Parser_U dt_max_fn_; ///< Parser_U associe
270 double dt_stab_=-100.; ///< Pas de temps de stabilite
271 mutable double facsec_ = 1.;
272 double seuil_statio_ = 1.e-12;
273 int seuil_statio_relatif_deconseille_ = 0; ///< Drapeau pour specifier si seuil_statio_ est une valeur absolue (defaut) ou relative
275 double dt_sauv_ = 1.e30;
276 mutable int nb_sauv_ = 0; ///< how many checkpoints have we performed so far?
277 int nb_sauv_max_ = 10; ///< Max number of checkpoints that will be performed (useful for PDI backup file)
278 double limite_cpu_sans_sauvegarde_ = 23 * 3600; ///< Par defaut 23 heures;
279 double periode_cpu_sans_sauvegarde_ = 23 * 3600; ///< Par defaut 23 heures;
281 double dt_impr_ = 1.e30; ///< Pas de temps d'impression
282 int precision_impr_ = 8; ///< Nombre de chiffres significatifs impression
283 double mode_dt_start_ = -2; ///< Mode calcul du pas de temps de depart - contient un double si option dt_init
284 double residu_ = 0;
285 double residu_old_slope_ = -1000;
286 double cumul_slope_ = 1e-20;
288
289 bool adapt_dt_tmax_ = false;
293 bool lu_ = false;
295 double seuil_diff_impl_ = 1.e-6; ///< Seuil pour implicitation de la diffusion par GC
298 int niter_max_diff_impl_ = 1000; ///< Iterations maximale pour GC implicitation - Above 1000 iterations, diffusion implicit algorithm may be diverging
301 int schema_impr_ = -1; // 1 si le schema a le droit d'imprimer dans le .out et dt_ev
302 int file_allocation_ = 0; // 1 = allocation espace disque (par defaut), 0 sinon
303 int max_length_cl_ = -10;
304private:
305 int stationnaire_atteint_ = 0; ///< Stationary reached by the problem using this scheme
306 int stationnaires_atteints_ = 0; ///< Stationary reached by the calculation (means all the problems reach stationary)
307 SFichier progress_;
308 bool disable_progress_ = false; ///< Flag to disable the writing of the .progress file
309 bool disable_dt_ev_ = false; ///< Flag to disable the writing of the .dt_ev file
310};
311
312/*! @brief surcharge Objet_U::nommer(const Nom&) Donne un nom au shema en temps
313 *
314 * @param (Nom& name) le nom a donner au shema en temps
315 */
316inline void Schema_Temps_base::nommer(const Nom& name)
317{
318 nom_=name;
319}
320
321/*! @brief surcharge Objet_U::le_nom() Renvoie le nom du shema en temps
322 *
323 * @return (Nom&) le nom du shema en temps
324 */
325inline const Nom& Schema_Temps_base::le_nom() const
326{
327 return nom_;
328}
329
334
335/*! @brief Renvoie une reference sur le nombre de pas maxi
336 *
337 * @return (double&)
338 */
340{
341 return nb_pas_dt_max_;
342}
343
344/*! @brief Renvoie une reference sur le seuil stationnaire
345 *
346 * @return (double&)
347 */
349{
350 return seuil_statio_;
351}
352
353/*! @brief Renvoie une reference sur le temps d'impression
354 *
355 * @return (double&)
356 */
357inline double Schema_Temps_base::temps_impr() const
358{
359 return dt_impr_;
360}
361
362/*! @brief Renvoie une reference sur le temps de sauvegarde
363 *
364 * @return (double&)
365 */
366inline double Schema_Temps_base::temps_sauv() const
367{
368 return dt_sauv_;
369}
370
371/*! @brief Renvoie le nb maximum de sauvegarde (estimation)
372 *
373 * @return (int)
374 */
376{
377 return nb_sauv_max_;
378}
379
380/*! @brief Renvoie une reference sur le temps maximum
381 *
382 * @return (double&)
383 */
384inline double Schema_Temps_base::temps_max() const
385{
386 return tmax_;
387}
388
389/*! @brief Renvoie le pas de temps (delta_t) courant.
390 *
391 * @return (double) le pas de temps courant
392 */
394{
395 return dt_;
396}
397inline const DoubleTab& Schema_Temps_base::pas_de_temps_locaux() const
398{
399 return dt_locaux_;
400}
401/*! @brief Renvoie le pas de temps minimum.
402 *
403 * (version const)
404 *
405 * @return (double) le pas de temps minimum du schema en temps
406 */
408{
409 return dt_min_;
410}
411
412/*! @brief Renvoie une reference sur le pas de temps minimum.
413 *
414 * @return (double&) le pas de temps minimum du schema en temps
415 */
417{
418 return dt_min_;
419}
420
421/*! @brief Renvoie le pas de temps maximum.
422 *
423 * (version const)
424 *
425 * @return (double) le pas de temps maximum du schema en temps
426 */
428{
429 return dt_max_;
430}
431
432/*! @brief Renvoie une reference sur le pas de temps maximum.
433 *
434 * @return (double&) le pas de temps maximum du schema en temps
435 */
437{
438 return dt_max_;
439}
440
441/*! @brief Renvoie le temps courant.
442 *
443 * @return (double) le temps courant du schema en temps
444 */
446{
447 return temps_courant_;
448}
449
450/*! @brief Renvoie le temps courant.
451 *
452 * @return (double) le temps courant du schema en temps
453 */
455{
456 return temps_precedent_;
457}
458
459/*! @brief Renvoie le temps de calcul ecoule i.
460 *
461 * e. (temps courant - temps initial).
462 *
463 * @return (double) le temps de calcul ecoule
464 */
466{
467 return temps_courant_ - tinit_;
468}
469
470/*! @brief Renvoie le temps initial.
471 *
472 * @return (double) le temps de calcul ecoule
473 */
474inline double Schema_Temps_base::temps_init() const
475{
476 return tinit_;
477}
478
479/*! @brief Renvoie le nombre de pas de temps effectues.
480 *
481 * @return (int) le nombre de pas de temps effectues
482 */
484{
485 return nb_pas_dt_;
486}
487
488/*! @brief Renvoie le nombre d'impressions effectuees.
489 *
490 * @return (int) le nombre d'impressions effectuees
491 */
493{
494 return nb_impr_;
495}
496
497/*! @brief Change le temps courant.
498 *
499 * @param (double& t) le nouveau temps courant
500 */
502{
503 temps_courant_ = t;
504}
505
506/*! @brief Renvoie le facteur de securite ou multiplicateur de delta_t.
507 *
508 * Ce facteur est utilise lors de la correction/verification du
509 * pas de temps. Voir Schema_Temps_base::corriger_dt_calcule(double&)
510 * (version const)
511 *
512 * @return (double) le facteur de securite du schema en temps
513 */
515{
516 return facsec_;
517}
518
519/*! @brief Renvoie une reference sur le facteur de securite ou multiplicateur de delta_t.
520 *
521 * Ce facteur est utilise lors de la correction/verification du
522 * pas de temps. Voir Schema_Temps_base::corriger_dt_calcule(double&)
523 *
524 * @return (double&) le facteur de securite du schema en temps
525 */
527{
528 return facsec_;
529}
530
531/*! @brief Renvoie 1 si le temps final est atteint (ou depasse).
532 *
533 * Renvoie 1 si temps_courant_ >= tmax
534 * Renvoie 0 sinon
535 *
536 * @return (int) 1 si le temps final est atteint 0 sinon
537 * @throws temps final atteint
538 */
540{
542}
543
544/*! @brief Renvoie 1 si (le nombre de pas de temps >= nombre de pas de temps maximum).
545 *
546 * Renvoie 0 sinon
547 *
548 * @return (int) 1 si le nombre de pas de temps maximum est depasse 0 sinon
549 * @throws nombre de pas de temps maximum atteint
550 */
555
560
561/*! @brief Renvoie 1 si le schema en temps a ete lu diffusion_implicite.
562 *
563 * @return (int) 1 si le schema en temps a ete lu 0 sinon.
564 */
566{
567 return ind_diff_impl_;
568}
569
570#endif /* Schema_Temps_base_included */
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
Classe Matrice_Base Classe de base de la hierarchie des matrices.
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
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
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
classe Parser_U Version de la classe Parser, derivant de Objet_U.
Definition Parser_U.h:32
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
static void abort()
Routine de sortie de Trio-U sur une erreur abort().
Definition Process.cpp:570
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
int seuil_statio_relatif_deconseille_
Drapeau pour specifier si seuil_statio_ est une valeur absolue (defaut) ou relative.
int diffusion_implicite() const
Renvoie 1 si le schema en temps a ete lu diffusion_implicite.
virtual Entree & lire_periode_sauvegarde_securite_en_heures(Entree &)
bool & set_indice_nb_pas_dt_max_atteint()
int precision_impr_
Nombre de chiffres significatifs impression.
int limpr() const
Renvoie 1 s'il y a lieu d'effectuer une impression (cf dt_impr) Renvoie 0 sinon.
virtual double computeTimeStep(bool &stop) const
int nb_impr() const
Renvoie le nombre d'impressions effectuees.
const Nom & le_nom() const override
surcharge Objet_U::le_nom() Renvoie le nom du shema en temps
virtual bool isStationary() const
Retourne 1 si lors du dernier pas de temps, le probleme n'a pas evolue.
int stationnaire_atteint_safe() const
double temps_courant() const
Renvoie le temps courant.
int impr_diffusion_implicite() const
virtual void resetTime(double time)
int no_error_if_not_converged_diffusion_implicite() const
Nom dt_max_str_
reglage de dt_max comme une fonction du temps
OBS_PTR(Probleme_base) mon_probleme
virtual bool corriger_dt_calcule(double &dt) const
Corrige le pas de temps calcule que l'on passe en parametre et verifie qu'il n'est pas "trop" petit (...
double temps_sauv() const
Renvoie une reference sur le temps de sauvegarde.
double temps_impr() const
Renvoie une reference sur le temps d'impression.
int sauvegarder(Sortie &) const override
Sauvegarde le temps courant et le nombre de pas de temps sur un flot de sortie.
int nb_pas_dt_max_atteint() const
Renvoie 1 si (le nombre de pas de temps >= nombre de pas de temps maximum).
Parser_U dt_max_fn_
Parser_U associe.
virtual void set_param(Param &titi) const override
int nb_sauv_
how many checkpoints have we performed so far?
const Nom & norm_residu() const
double dt_
Pas de temps de calcul.
virtual void ajouter_inertie(Matrice_Base &mat_morse, DoubleTab &secmem, const Equation_base &eqn) const
virtual double temps_futur(int i) const =0
bool disable_progress() const
double dt_failed_
Si on a rate un pas de temps, sa valeur.
double pas_temps_max() const
Renvoie le pas de temps maximum.
virtual void associer_pb(const Probleme_base &)
void write_dt_ev(bool init)
void nommer(const Nom &) override
surcharge Objet_U::nommer(const Nom&) Donne un nom au shema en temps
double temps_max() const
Renvoie une reference sur le temps maximum.
double dt_max_
Pas de temps max fixe par l'utilisateur.
double mode_dt_start_
Mode calcul du pas de temps de depart - contient un double si option dt_init.
virtual void abortTimeStep()
virtual void changer_temps_courant(const double)
Change le temps courant.
double periode_cpu_sans_sauvegarde_
Par defaut 23 heures;.
double limite_cpu_sans_sauvegarde_
Par defaut 23 heures;.
double temps_calcul() const
Renvoie le temps de calcul ecoule i.
int nb_sauv_max() const
Renvoie le nb maximum de sauvegarde (estimation).
int indice_tps_final_atteint() const
int temps_final_atteint() const
Renvoie 1 si le temps final est atteint (ou depasse).
virtual int stop() const
Renvoie 1 si il y lieu de stopper le calcul pour differente raisons: - le temps final est atteint.
int & set_niter_max_diffusion_implicite()
Probleme_base & pb_base()
bool disable_dt_ev() const
virtual void validateTimeStep()
void imprimer_temps_courant(SFichier &) const
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 int impr(Sortie &os) const
Impression du numero du pas de temps, la valeur du pas de temps.
double pas_temps_min() const
Renvoie le pas de temps minimum.
int niter_max_diff_impl_
Iterations maximale pour GC implicitation - Above 1000 iterations, diffusion implicit algorithm may b...
virtual void ajouter_blocs(matrices_t matrices, DoubleTab &secmem, const Equation_base &eqn, const tabs_t &semi_impl={}) const
double pas_de_temps() const
Renvoie le pas de temps (delta_t) courant.
double seuil_diffusion_implicite() const
double & set_temps_precedent()
DoubleTab dt_locaux_
Local time steps: Vector of size nb faces of the mesh.
const DoubleTab & pas_de_temps_locaux() const
virtual void imprimer(Sortie &os) const
Imprime le pas de temps sur un flot de sortie s'il y a lieu.
virtual void initialize()
virtual bool initTimeStep(double dt)
double seuil_statio() const
Renvoie une reference sur le seuil stationnaire.
virtual int nb_valeurs_futures() const =0
virtual Entree & lire_residuals(Entree &)
virtual void modifier_second_membre(const Equation_base &eqn, DoubleTab &secmem)
int nb_sauv_max_
Max number of checkpoints that will be performed (useful for PDI backup file).
virtual int faire_un_pas_de_temps_eqn_base(Equation_base &)=0
int niter_max_diffusion_implicite() const
int nb_pas_dt() const
Renvoie le nombre de pas de temps effectues.
const double & residu() const
double dt_impr_
Pas de temps d'impression.
int stop_lu() const
Renvoie 1 si le fichier (d'extension) .
double mode_dt_start() const
double dt_min_
Pas de temps min fixe par l'utilisateur.
int reprendre(Entree &) override
Reprise (lecture) du temps courant et du nombre de pas de temps effectues a partir d'un flot d'entree...
const int & schema_impr() const
virtual bool iterateTimeStep(bool &converged)
Calculate the U(n+1) unknown for each equation (if solved) of the problem with the selected time sche...
double temps_init() const
Renvoie le temps initial.
virtual int nb_valeurs_temporelles() const =0
virtual int mettre_a_jour()
Mise a jour du temps courant (t+=dt) et du nombre de pas de temps effectue (nb_pas_dt_++).
int stationnaire_atteint() const
double dt_stab_
Pas de temps de stabilite.
double & set_seuil_diffusion_implicite()
int indice_nb_pas_dt_max_atteint() const
int no_conv_subiteration_diffusion_implicite() const
virtual Entree & lire_temps_cpu_max(Entree &)
virtual void mettre_a_jour_dt_stab()
int temps_cpu_max_atteint() const
virtual void mettre_a_jour_dt(double toto)
virtual double temps_defaut() const =0
int file_allocation() const
virtual Entree & lire_nb_pas_dt_max(Entree &)
Lecture du nombre de pas de temps maximal.
bool & set_indice_tps_final_atteint()
int nb_pas_dt_max() const
Renvoie une reference sur le nombre de pas maxi.
double seuil_diff_impl_
Seuil pour implicitation de la diffusion par GC.
void update_critere_statio(const DoubleTab &tab_critere, Equation_base &equation)
//Actualisation de stationnaire_atteint_ et residu_ (critere residu_<seuil_statio_)
void write_progress(bool init)
Ecriture du fichier .progress (temps CPU estime restant).
double facteur_securite_pas() const
Renvoie le facteur de securite ou multiplicateur de delta_t.
virtual void completer()=0
void finir() const
Fermeture du fichier .dt_ev.
void set_stationnaires_atteints(bool flag)
double temps_precedent() const
Renvoie le temps courant.
Classe de base des flux de sortie.
Definition Sortie.h:52