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
Returns the array of field values at the current time.
const Probleme_U & probleme(int i) const
void calculer_derivee_en_temps(double t1, double t2)
Computes the growth rate of unsteady BCs between t1 and t2.
virtual void mettre_a_jour(double temps)
Performs a time update of all boundary conditions.
Class defining operators and methods for all reading operation in an input flow (file,...
class Equation_base The role of an equation is the calculation of one or more fields....
virtual int equation_non_resolue() const
virtual const Champ_Inc_base & inconnue() const =0
virtual void mettre_a_jour(double temps)
The value of the unknown at the time step has been calculated.
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()
Returns the discretized boundary condition domain associated with the equation.
virtual bool initTimeStep(double dt)
Allocation and initialization of the unknown and boundary conditions until present+dt.
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
Probleme_Couple This is the historical coupling class of TRUST.
class Probleme_base It is a Probleme_U that is not a coupling.
virtual int nombre_d_equations() const =0
virtual const Equation_base & equation(int) const =0
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
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 &)
: class RK3 This class represents a third-order Runge-Kutta time scheme, case 7 of Williamson,...
int & set_stationnaire_atteint()
OBS_PTR(Probleme_base) mon_probleme
double dt_
Computation time step.
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)
Updates stationnaire_atteint_ and residu_ (criterion: residu_ < seuil_statio_).
Base class for output streams.
_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