17#include <Equation_base.h>
18#include <Probleme_base.h>
19#include <Transport_Interfaces_FT_Disc.h>
24Implemente_instanciable(
RK3_FT,
"RK3_FT",
RK3);
33 Cerr <<
"on ne devrait pas passer ds faire_un_pas_de_temps_eqn_base de RK3_FT" << finl;
61 for(i=0; i<nb_eqn; i++)
64 Cerr <<
"Option equation_non_resolue is not yet supported for the " <<
que_suis_je() <<
" scheme." << finl;
75 const double epsilon_dt =
dt_ * 0.001;
79 DoubleTab qNSi(inconnue_.valeurs());
80 DoubleTab qNSj(inconnue_.valeurs());
98 for(i=0; i<nb_eqn; i++)
116 inconnue_.futur() = inconnue_.valeurs();
139 for(i=0; i<nb_eqn; i++)
157 inconnue_.futur() = inconnue_.valeurs();
158 inconnue_.futur().ajoute_sans_ech_esp_virt(b2 *
dt_, qNSj, VECT_ALL_ITEMS);
181 for(i=0; i<nb_eqn; i++)
198 inconnue_.futur() = qNSi;
199 inconnue_.futur() *= b3 *
dt_;
201 inconnue_.futur() += inconnue_.valeurs();
219 inconnue_.valeurs() = 0;
232 int premiere_equation;
237 for(i=premiere_equation; i<nb_eqn; i++)
251 for(i=0; i<n_pb; i++)
257 Cerr <<
"RK3_FT gere au plus deux equations par pb, votre nb d'equations est : "
267 double a3=-153./128.;
273 VECT(DoubleTab) qNSi(n_pb);
274 VECT(DoubleTab) qNSj(n_pb);
277 for (i=0; i<n_pb; i++)
282 qNSi[i] = inconnues[i]->
valeurs();
283 qNSj[i] = inconnues[i]->valeurs();
288 for(i=0; i<n_pb; i++)
293 for(
int j=0; j<nb_eqn; j++)
304 for(i=0; i<n_pb; i++)
312 for(i=0; i<n_pb; i++)
321 inconnues[i]->futur() = inconnues[i]->valeurs();
322 inconnues[i]->futur().ajoute_sans_ech_esp_virt(b1 *
dt_, qNSi[i], VECT_ALL_ITEMS);
339 for(i=0; i<n_pb; i++)
344 for(
int j=0; j<nb_eqn; j++)
354 for(i=0; i<n_pb; i++)
361 for(i=0; i<n_pb; i++)
366 inconnues[i]->futur() = inconnues[i]->valeurs();
367 inconnues[i]->futur().ajoute(b2 *
dt_, qNSj[i], VECT_ALL_ITEMS);
385 for(i=0; i<n_pb; i++)
390 for(
int j=0; j<nb_eqn; j++)
400 for(i=0; i<n_pb; i++)
407 for(i=0; i<n_pb; i++)
412 inconnues[i]->futur() = inconnues[i]->valeurs();
413 inconnues[i]->futur().ajoute_sans_ech_esp_virt(b3 *
dt_, qNSi[i], VECT_ALL_ITEMS);
430 for(i=0; i<n_pb; i++)
437 inconnues[i]->valeurs() = 0;
443 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