1 #include "../include/dae_time_integrator.h"
2 #include "../include/ode_argument.h"
11 N_Vector rr,
void *user_data)
19 NV_LENGTH_S(rr) = NV_LENGTH_S(yy);
27 return solver.
residual(tt, residual, src_yy, src_yp);
83 return solver.
jacobian(tt, dst_v, src_yy, src_yp, src_v, alpha);
87 int dae_prec(realtype tt, N_Vector yy, N_Vector yp,
109 return solver.
jacobian_prec(tt, output, src_yy, src_yp, rhs, alpha);
116 is_initialized(false)
131 double initial_step_size,
132 double min_step_size,
137 unsigned int max_n_steps,
138 double outputs_period,
139 unsigned int ic_type,
142 bool provide_jac_prec) :
143 final_time(final_time),
144 initial_time(initial_time),
146 initial_step_size(initial_step_size),
147 min_step_size(min_step_size),
150 max_n_steps(max_n_steps),
151 outputs_period(outputs_period),
153 is_initialized(false),
154 use_iterative(use_iterative),
155 provide_jac(provide_jac),
156 provide_jac_prec(provide_jac_prec)
214 const unsigned int max_steps)
225 unsigned int step_number = 0;
234 NV_DATA_S(
yy) = solution.
begin();
237 NV_DATA_S(
yp) = solution_dot.
begin();
250 status += IDASetInitStep(
ida_mem, step_number);
259 double next_time = 0;
260 while ((t<
final_time) && (step_number < max_steps))
264 cout << t <<
"---->"<<next_time<<endl;
265 status = IDASolve(
ida_mem, next_time, &t,
yy,
yp, IDA_NORMAL);
267 status = IDAGetLastStep(
ida_mem, &h);
269 cout <<
"Step " << step_number
271 <<
", h = " << h << endl;
281 NV_LENGTH_S(
yy) = solution.
size();
282 NV_DATA_S(
yy) = solution.
begin();
283 NV_LENGTH_S(
yp) = solution_dot.
size();
284 NV_DATA_S(
yp) = solution_dot.
begin();
289 frac = std::pow((
double)k,2.);
299 N_VDestroy_Serial(
yy);
300 N_VDestroy_Serial(
yp);
311 double current_time_step,
312 unsigned int max_steps)
328 N_VDestroy_Serial(
yy);
330 N_VDestroy_Serial(
yp);
341 NV_DATA_S(
yy) = solution.
begin();
346 NV_DATA_S(
yp) = solution_dot.
begin();
361 status += IDASetInitStep(
ida_mem, current_time_step);
367 status += IDASetMaxNumSteps(
ida_mem, max_steps);
370 status += IDASetMaxNonlinIters(
ida_mem, 10);
386 status += IDASetMaxOrd(
ida_mem, 5);
395 if (current_time !=0)
396 IDACalcIC(
ida_mem, IDA_Y_INIT, current_time+current_time_step);
401 IDACalcIC(
ida_mem, IDA_YA_YDP_INIT, current_time+current_time_step);
407 std::cout <<
"Using consistent conditions type 3" << std::endl;
int dae_jtimes(realtype tt, N_Vector yy, N_Vector yp, N_Vector rr, N_Vector src, N_Vector dst, realtype alpha, void *user_data, N_Vector, N_Vector)
int dae_residual(realtype tt, N_Vector yy, N_Vector yp, N_Vector rr, void *user_data)
double rel_tol
Relative error tolerance for adaptive time stepping.
virtual unsigned int n_dofs() const =0
Returns the number of degrees of freedom.
bool use_iterative
If true, we use preconditioned gmres.
N_Vector diff_id
Ida differential components vector.
bool is_initialized
Initialization flag.
void parse_parameters(ParameterHandler &prm)
Parse a parameter handler.
double final_time
Final time.
unsigned int start_ode(Vector< double > &solution, Vector< double > &solution_dot, const unsigned int max_steps)
Evolve.
virtual Vector< double > & differential_components()
And an identification of the differential components.
bool provide_jac_prec
Provide preconditioning for Jacobian.
virtual void output_step(Vector< double > &solution, Vector< double > &solution_dot, const double t, const unsigned int step_number, const double h)=0
This function is called at the end of each iteration step for the ode solver.
void * ida_mem
Ida memory object.
#define AssertThrow(cond, exc)
virtual int residual(const double t, Vector< double > &dst, const Vector< double > &src_yy, const Vector< double > &src_yp)=0
For dae problems, we need a residual function.
N_Vector abs_tolls
Ida absolute tolerances vector.
real_type linfty_norm() const
void enter_subsection(const std::string &subsection)
virtual bool solution_check(Vector< double > &solution, Vector< double > &solution_dot, const double t, const unsigned int step_number, const double h)=0
This function will check the behaviour of the solution.
static::ExceptionBase & ExcMessage(std::string arg1)
DAETimeIntegrator(OdeArgument &solver)
Constructor for the DAETimeIntegrator class.
N_Vector yy
Ida solution vector.
virtual Vector< double > & get_diameters()
#define Assert(cond, exc)
static::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
double initial_step_size
Initial step size.
double min_step_size
Minimum step size.
virtual int setup_jacobian_prec(const double t, const Vector< double > &src_yy, const Vector< double > &src_yp, const double alpha)
Setup Jacobian preconditioner.
bool provide_jac
Provides the Jacobian vector product.
virtual int jacobian_prec(const double t, Vector< double > &dst, const Vector< double > &src_yy, const Vector< double > &src_yp, const Vector< double > &src, const double alpha)
Jacobian preconditioner vector product.
bool get_bool(const std::string &entry_name) const
~DAETimeIntegrator()
House cleaning.
int dae_prec(realtype tt, N_Vector yy, N_Vector yp, N_Vector rr, N_Vector rvec, N_Vector zvec, realtype alpha, realtype, void *user_data, N_Vector)
void reset_ode(Vector< double > &y, Vector< double > &yp, double t, double h, unsigned int max_steps)
Clear internal memory, and start with clean objects.
double get_double(const std::string &entry_name) const
double abs_tol
Absolute error tolerance for adaptive time stepping.
double initial_time
Initial time for the ode.
void declare_entry(const std::string &entry, const std::string &default_value, const Patterns::PatternBase &pattern=Patterns::Anything(), const std::string &documentation=std::string())
N_Vector yp
Ida solution derivative vector.
virtual int jacobian(const double t, Vector< double > &dst, const Vector< double > &src_yy, const Vector< double > &src_yp, const Vector< double > &src, const double alpha)
Jacobian vector product.
Base class that needs to be inherited by any function that wants to use the time integrator class...
int dae_setup_prec(realtype tt, N_Vector yy, N_Vector yp, N_Vector rr, realtype alpha, void *user_data, N_Vector, N_Vector, N_Vector)
long int get_integer(const std::string &entry_string) const
static void declare_parameters(ParameterHandler &prm)
Declare parameters for this class to function properly.
OdeArgument & solver
The bubble membrane poperties.