16#ifndef TRUSTSchema_RK_TPP_included
17#define TRUSTSchema_RK_TPP_included
19template <Ordre_RK _ORDRE_ >
template<Ordre_RK _O_>
20std::enable_if_t<_O_ == Ordre_RK::DEUX_WILLIAMSON || _O_ == Ordre_RK::TROIS_WILLIAMSON || _O_ == Ordre_RK::QUATRE_WILLIAMSON, int>
21TRUSTSchema_RK<_ORDRE_>::faire_un_pas_de_temps_eqn_base_generique(
Equation_base& eqn)
23 static constexpr int NB_PTS = (_ORDRE_ == Ordre_RK::DEUX_WILLIAMSON) ? 2 : 3;
26 if (nb_pas_dt() >= 0 && nb_pas_dt() <= NW && facsec_ == 1) print_warning(NW);
29 DoubleTrav present(xi), qi(xi);
33 for (
int i = 0; i < NB_PTS; i++)
36 qi *= get_a<_ORDRE_,NB_PTS>()[i];
40 xi.
ajoute(get_b<_ORDRE_,NB_PTS>()[i], qi);
46 update_critere_statio(xi, eqn);
50 xip1.echange_espace_virtuel();
58template <Ordre_RK _ORDRE_ >
template<Ordre_RK _O_>
59std::enable_if_t<_O_ == Ordre_RK::DEUX_CLASSIQUE || _O_ == Ordre_RK::TROIS_CLASSIQUE || _O_ == Ordre_RK::QUATRE_CLASSIQUE || _O_ == Ordre_RK::QUATRE_CLASSIQUE_3_8, int>
60TRUSTSchema_RK<_ORDRE_>::faire_un_pas_de_temps_eqn_base_generique(
Equation_base& eqn)
63 if (nb_pas_dt() >= 0 && nb_pas_dt() <= NW && facsec_ == 1) print_warning(NW);
65 static constexpr bool IS_DEUX = (_O_ == Ordre_RK::DEUX_CLASSIQUE) , IS_TROIS = (_O_ == Ordre_RK::TROIS_CLASSIQUE), IS_QUATRE = (_O_ == Ordre_RK::QUATRE_CLASSIQUE);
66 static constexpr int NB_PTS = IS_DEUX ? 2 : ( IS_TROIS ? 3 : 4);
67 static constexpr int NB_BUTCHER = IS_DEUX ? 0 : ( IS_TROIS ? 1 : ( IS_QUATRE ? 2 : 3 ));
70 if (ki_.size()!=NB_PTS)
74 for (
int i = 0; i < NB_PTS; i++) ki_[i] = present;
77 DoubleTrav sauv(present);
84 for (
int step = 1; step < NB_PTS; step++ )
87 for (
int i = 0; i < step; i++) present.
ajoute(get_butcher_coeff<_ORDRE_,NB_PTS-1>().at(step-1).at(i), ki_[i]);
94 for (
int i = 0; i < NB_PTS; i++) futur.
ajoute(BUTCHER_TAB.at(NB_BUTCHER).at(i), ki_[i]);
96 update_critere_statio(futur, eqn);
100 futur.echange_espace_virtuel();
DoubleTab & futur(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.
virtual void imposer_cond_lim(Champ_Inc_base &, double)=0
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.
void ajoute(_SCALAR_TYPE_ alpha, const TRUSTVect &y, Mp_vect_options opt=VECT_ALL_ITEMS)