16#include <Schema_Euler_Semi_Implicite.h>
25 s <<
"----------> Coefficient theta for semi-implicit scheme = " <<
theta_ << finl;
33 Cout <<
"Semi-implicit Euler time scheme (theta interpolation) is chosen."<< finl;
34 Cout <<
"----------> Coefficient theta for semi-implicit scheme = " <<
theta_ << finl;
50 return abs(
theta_) < 1.e-16;
55 Cerr <<
"[Schema_Euler_Semi_Implicite] Coupled problems are not taken into account yet." << finl;
65 int compteur = 0, ok = 1;
66 bool convergence_eqn =
false;
78 while ((!convergence_eqn)&&(compteur<
nb_ite_max))
81 Cout<<
"==================================================================================" << finl;
82 Cout<<
"Schema_Euler_Semi_Implicite: Implicit iteration " << compteur <<
" on the "<<eqn.
que_suis_je() <<
" equation of the problem "<< eqn.
probleme().
le_nom()<<
" :" <<finl;
83 Cout<<
"==================================================================================" << finl;
84 const DoubleTab& inut=futur;
86 convergence_eqn=le_solveur->iterer_eqn(eqn, inut, present,
theta_*
dt_, compteur, ok);
92 DoubleTrav passe_with_theta(passe);
93 passe_with_theta = passe;
94 passe_with_theta *= (1 -
theta_);
95 present -= passe_with_theta;
102 Cout<<
"==================================================================================" << finl;
103 Cout<<
"Schema_Euler_Semi_Implicite: Explicit case on the "<<eqn.
que_suis_je() <<
" equation of the problem "<< eqn.
probleme().
le_nom()<<
" :" <<finl;
104 Cout<<
"==================================================================================" << finl;
106 DoubleTrav dudt(futur);
DoubleTab & futur(int i=1) override
Renvoie les valeurs du champs a l'instant t+i.
DoubleTab & passe(int i=1) override
Renvoie les valeurs du champs a l'instant t-i.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
Champ_Inc_base & avancer(int i=1)
Avance le pointeur courant de i pas de temps, dans la liste des valeurs temporelles conservees.
Champ_Inc_base & reculer(int i=1)
Recule le pointeur courant de i pas de temps, dans la liste des valeurs temporelles conservees.
virtual void imposer_cond_lim(Champ_Inc_base &, double)=0
Class defining operators and methods for all reading operation in an input flow (file,...
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual const Champ_Inc_base & inconnue() const =0
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...
virtual Domaine_Cl_dis_base & domaine_Cl_dis()
Renvoie le domaine des conditions aux limite discretisee associee a l'equation.
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
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.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
classe Probleme_Couple C'est la classe historique de couplage de TRUST.
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
void set_param(Param &) const override
class Schema_Euler_Semi_Implicite Il herite de schema Euler implicite et porte un solveur,...
void set_param(Param &) const override
int faire_un_pas_de_temps_eqn_base(Equation_base &) override
int faire_un_pas_de_temps_pb_couple(Probleme_Couple &, int &ok) override
bool is_explicit()
Renvoie TRUE si le schéma semi-implicite est totalement explicite (important, car theta = 0 pose prob...
double temps_courant() const
Renvoie le temps courant.
double dt_
Pas de temps de calcul.
double pas_de_temps() const
Renvoie le pas de temps (delta_t) courant.
void update_critere_statio(const DoubleTab &tab_critere, Equation_base &equation)
//Actualisation de stationnaire_atteint_ et residu_ (critere residu_<seuil_statio_)
Classe de base des flux de sortie.