16#include <Navier_Stokes_std.h>
17#include <Sch_CN_iteratif.h>
18#include <communications.h>
19#include <Probleme_base.h>
20#include <Equation_base.h>
172 fic.
ouvrir(
"dt_CN",ios::app);
176 fic <<
"Sch_CN_iteratif : pb= " << pb.
le_nom()
185 for(
int i=0; i<nb_eqn && !diverged; i++)
189 converged = converged && cv;
197 assert(!(converged&&diverged));
211 <<
" result= CONVERGENCE" << finl;
224 <<
" result= DIVERGENCE" << finl;
236 <<
" result= NON_CONVERGENCE" << finl;
245 <<
" result= CONTINUE" << finl;
267 Cout<<
"====================================================" << finl;
268 Cout<< eqn.
que_suis_je()<<
" equation is not solved."<<finl;
269 Cout<<
"====================================================" << finl;
285 DoubleTab& intermediaire = eqn.
inconnue().
valeurs(temps_intermediaire);
288 DoubleTab dudt(present);
290 DoubleTab delta(intermediaire);
313 intermediaire = dudt;
314 intermediaire*= dt_intermediaire;
315 intermediaire+= present;
322 final.echange_espace_virtuel();
324 delta+=intermediaire;
355 Cerr <<
"Sch_CN_iteratif::faire_un_pas_de_temps_eqn_base non code!" << finl;
378 double a = mp_max_abs_vect(delta);
379 double b = mp_max_abs_vect(up1);
380 int resu = (2. * a) < (
seuil * b);
381 envoyer_broadcast(resu, 0);
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 int equation_non_resolue() const
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.
Schema_Temps_base & schema_temps()
Renvoie le schema en temps 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.
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
virtual int nombre_d_equations() const =0
virtual const Equation_base & equation(int) const =0
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
classe Sch_CN_iteratif Schema en temps alternant un demi-pas de temps d'Euler implicite et un demi-pa...
virtual bool iterateTimeStepOnEquation(int i, bool &converged)
Calcule une iteration de la resolution sur l'equation i.
bool initTimeStep(double dt) override
int faire_un_pas_de_temps_eqn_base(Equation_base &) override
virtual bool divergence(const DoubleTab &u0, const DoubleTab &up1, const DoubleTab &delta, int p) const
Indique si le calcul iteratif a diverge.
bool iterateTimeStep(bool &converged) override
Calculate the U(n+1) unknown for each equation (if solved) of the problem with the selected time sche...
virtual bool convergence(const DoubleTab &u0, const DoubleTab &up1, const DoubleTab &delta, int p) const
Indique si le calcul iteratif a converge.
int nb_valeurs_futures() const override
Renvoie le nombre de valeurs temporelles futures.
void set_param(Param &titi) const override
int nb_valeurs_temporelles() const override
Renvoie le nombre de valeurs temporelles a conserver.
double temps_futur(int i) const override
Renvoie le le temps a la i-eme valeur future.
double temps_defaut() const override
Renvoie le temps que doivent utiliser les champs a l'appel de valeurs().
virtual void ajuster_facsec(type_convergence cv)
int & set_stationnaire_atteint()
double temps_courant() const
Renvoie le temps courant.
virtual void set_param(Param &titi) const override
double dt_
Pas de temps de calcul.
Probleme_base & pb_base()
double pas_de_temps() const
Renvoie le pas de temps (delta_t) courant.
virtual bool initTimeStep(double dt)
int nb_pas_dt() const
Renvoie le nombre de pas de temps effectues.
virtual void mettre_a_jour_dt_stab()
void update_critere_statio(const DoubleTab &tab_critere, Equation_base &equation)
//Actualisation de stationnaire_atteint_ et residu_ (critere residu_<seuil_statio_)
virtual int ouvrir(const char *name, IOS_OPEN_MODE mode=ios::out)
Classe de base des flux de sortie.
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")