17#include <Equation_base.h>
18#include <Probleme_base.h>
19#include <Transport_Interfaces_FT_Disc.h>
22Implemente_instanciable(
RK3_FT,
"RK3_FT",
RK3);
31 Cerr <<
"on ne devrait pas passer ds faire_un_pas_de_temps_eqn_base de RK3_FT" << finl;
59 for(i=0; i<nb_eqn; i++)
62 Cerr <<
"Option equation_non_resolue is not yet supported for the " <<
que_suis_je() <<
" scheme." << finl;
73 const double epsilon_dt =
dt_ * 0.001;
77 DoubleTab qNSi(inconnue_.valeurs());
78 DoubleTab qNSj(inconnue_.valeurs());
96 for(i=0; i<nb_eqn; i++)
114 inconnue_.futur() = inconnue_.valeurs();
137 for(i=0; i<nb_eqn; i++)
155 inconnue_.futur() = inconnue_.valeurs();
156 inconnue_.futur().ajoute_sans_ech_esp_virt(b2 *
dt_, qNSj, VECT_ALL_ITEMS);
179 for(i=0; i<nb_eqn; i++)
196 inconnue_.futur() = qNSi;
197 inconnue_.futur() *= b3 *
dt_;
199 inconnue_.futur() += inconnue_.valeurs();
217 inconnue_.valeurs() = 0;
230 int premiere_equation;
235 for(i=premiere_equation; i<nb_eqn; i++)
249 for(i=0; i<n_pb; i++)
255 Cerr <<
"RK3_FT gere au plus deux equations par pb, votre nb d'equations est : "
265 double a3=-153./128.;
271 VECT(DoubleTab) qNSi(n_pb);
272 VECT(DoubleTab) qNSj(n_pb);
275 for (i=0; i<n_pb; i++)
280 qNSi[i] = inconnues[i]->
valeurs();
281 qNSj[i] = inconnues[i]->valeurs();
286 for(i=0; i<n_pb; i++)
291 for(
int j=0; j<nb_eqn; j++)
302 for(i=0; i<n_pb; i++)
310 for(i=0; i<n_pb; i++)
319 inconnues[i]->futur() = inconnues[i]->valeurs();
320 inconnues[i]->futur().ajoute_sans_ech_esp_virt(b1 *
dt_, qNSi[i], VECT_ALL_ITEMS);
337 for(i=0; i<n_pb; i++)
342 for(
int j=0; j<nb_eqn; j++)
352 for(i=0; i<n_pb; i++)
359 for(i=0; i<n_pb; i++)
364 inconnues[i]->futur() = inconnues[i]->valeurs();
365 inconnues[i]->futur().ajoute(b2 *
dt_, qNSj[i], VECT_ALL_ITEMS);
383 for(i=0; i<n_pb; i++)
388 for(
int j=0; j<nb_eqn; j++)
398 for(i=0; i<n_pb; i++)
405 for(i=0; i<n_pb; i++)
410 inconnues[i]->futur() = inconnues[i]->valeurs();
411 inconnues[i]->futur().ajoute_sans_ech_esp_virt(b3 *
dt_, qNSi[i], VECT_ALL_ITEMS);
428 for(i=0; i<n_pb; i++)
435 inconnues[i]->valeurs() = 0;
441 int premiere_equation;
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
const Probleme_U & probleme(int i) const
void calculer_derivee_en_temps(double t1, double t2)
Calcule le taux d'accroissement des CLs instationnaires entre t1 et t2.
virtual void mettre_a_jour(double temps)
Effectue une mise a jour en temps de toutes les conditions aux limites.
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 void mettre_a_jour(double temps)
La valeur de l'inconnue sur le pas de temps a ete calculee.
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.
virtual bool initTimeStep(double dt)
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
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.
classe Probleme_Couple C'est la classe historique de couplage de TRUST.
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.
classe RK3 Cette classe represente un schema en temps de Runge Kutta d'ordre 3
bool iterateTimeStep(bool &converged) override
Effectue un pas de temps de Runge Kutta d'ordre 3, sur l'equation passee en parametre.
int faire_un_pas_de_temps_eqn_base(Equation_base &) override
int faire_un_pas_de_temps_pb_couple(Probleme_Couple &)
: classe RK3 Cette classe represente un schema en temps de Runge Kutta d'ordre 3, cas 7 de Williamson...
int & set_stationnaire_atteint()
OBS_PTR(Probleme_base) mon_probleme
double dt_
Pas de temps de calcul.
Probleme_base & pb_base()
virtual int faire_un_pas_de_temps_eqn_base(Equation_base &)=0
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.
_TYPE_ mp_max_abs_vect(Mp_vect_options opt=VECT_REAL_ITEMS) const
void ajoute_sans_ech_esp_virt(_SCALAR_TYPE_ alpha, const TRUSTVect &y, Mp_vect_options opt=VECT_REAL_ITEMS)
virtual void transporter_sans_changement_topologie(DoubleTab &vitesse, const double coeff, const double temps)
virtual void calculer_vitesse_transport_interpolee(const Champ_base &champ_vitesse, const Maillage_FT_Disc &m, DoubleTab &vitesse_noeuds, int nv_calc) const
const Maillage_FT_Disc & maillage_interface() const