16#include <Schema_Adams_Bashforth_order_3.h>
17#include <Equation_base.h>
75static double Ln02(
const double time_n_plus_1,
const double time_n,
const double time_n_minus_1,
const double time_n_minus_2)
84 double midpoint = (time_n_plus_1+time_n);
87 double scaling_coeff = (time_n_plus_1-time_n);
90 double denominator = (time_n-time_n_minus_1);
91 denominator *= (time_n-time_n_minus_2);
92 denominator = 1./denominator;
94 double numerator = (time_n-time_n_minus_1)*(time_n-time_n_minus_2);
95 numerator += 4*(midpoint-time_n_minus_1)*(midpoint-time_n_minus_2);
96 numerator += (time_n_plus_1-time_n_minus_1)*(time_n_plus_1-time_n_minus_2);
98 result = scaling_coeff * numerator * denominator;
102static double Ln12(
const double time_n_plus_1,
const double time_n,
const double time_n_minus_1,
const double time_n_minus_2)
111 double midpoint = (time_n_plus_1+time_n);
114 double scaling_coeff = (time_n_plus_1-time_n);
117 double denominator = (time_n_minus_1-time_n);
118 denominator *= (time_n_minus_1-time_n_minus_2);
119 denominator = 1./denominator;
121 double numerator = 0.;
122 numerator += 4*(midpoint-time_n)*(midpoint-time_n_minus_2);
123 numerator += (time_n_plus_1-time_n)*(time_n_plus_1-time_n_minus_2);
125 result = scaling_coeff * numerator * denominator;
134 Cerr <<
"********************* Warning (printed only on the first 100 time steps) **********************"<< finl;
135 Cerr <<
"The Adams Bashforth order 3 scheme is recommended with a facsec lower than 1.0 for example 0.5."<< finl;
136 Cerr <<
"***********************************************************************************************"<< finl;
147 double inv_time_step = 1./time_step;
148 double time_n_minus_2 = times[0];
149 double time_n_minus_1 = times[1];
150 double time_n = times[2];
151 double time_n_plus_1 = times[3];
153 coefficients()[2] = Ln02(time_n_plus_1,time_n,time_n_minus_1,time_n_minus_2) * inv_time_step;
154 coefficients()[1] = Ln12(time_n_plus_1,time_n,time_n_minus_1,time_n_minus_2) * inv_time_step;
Class defining operators and methods for all reading operation in an input flow (file,...
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.
Schema_Adams_Bashforth_base.
const DoubleTab & coefficients() const override
class Schema_Adams_Bashforth_order_3 This class represents a variable time-step third-order Adams-Bas...
int nb_valeurs_passees() const override
Returns the number of past temporal values.
int nb_pas_dt_seuil() const override
Returns the number of time steps strictly beyond which the Adams-Bashforth scheme is applied.
int nb_valeurs_temporelles() const override
Returns the number of temporal values to keep.
void compute_adams_bashforth_coefficients(double time_step, const DoubleTab ×) override
int limpr() const
Returns 1 if there is a need to perform a print (cf dt_impr) Returns 0 otherwise.
int nb_pas_dt() const
Returns the number of time steps performed.
double facteur_securite_pas() const
Returns the safety factor or multiplier of delta_t.
Base class for output streams.
_SIZE_ size_array() const
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)