26 #ifndef CASADI_INTEGRATOR_IMPL_HPP
27 #define CASADI_INTEGRATOR_IMPL_HPP
29 #include "integrator.hpp"
30 #include "oracle_function.hpp"
31 #include "plugin_interface.hpp"
32 #include "casadi_enum.hpp"
43 double *q, *x, *z, *p, *u, *
e, *edot, *old_e, *xdot, *zdot;
45 double *adj_x, *adj_z, *
adj_p, *adj_q;
104 double t0,
const std::vector<double>& tout);
123 Sparsity get_sparsity_in(casadi_int i)
override;
124 Sparsity get_sparsity_out(casadi_int i)
override;
138 int init_mem(
void* mem)
const override;
151 void init(
const Dict& opts)
override;
156 void set_work(
void* mem,
const double**& arg,
double**& res,
157 casadi_int*& iw,
double*& w)
const override;
197 casadi_int next_stop(casadi_int k,
const double* u)
const;
232 casadi_int next_stopB(casadi_int k,
const double* u)
const;
238 const double* adj_x,
const double* adj_z,
const double* adj_q)
const = 0;
244 double* adj_x,
double* adj_p,
double* adj_u)
const = 0;
249 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w,
void* mem)
const override;
278 casadi_int* iw,
bvec_t* w,
void* mem)
const override;
301 int sp_reverse(
bvec_t** arg,
bvec_t** res, casadi_int* iw,
bvec_t* w,
void* mem)
const override;
313 Function get_forward(casadi_int nfwd,
const std::string& name,
314 const std::vector<std::string>& inames,
315 const std::vector<std::string>& onames,
316 const Dict& opts)
const override;
324 Function get_reverse(casadi_int nadj,
const std::string& name,
325 const std::vector<std::string>& inames,
326 const std::vector<std::string>& onames,
327 const Dict& opts)
const override;
328 bool has_reverse(casadi_int nadj)
const override {
return ne_ == 0;}
334 virtual Dict getDerivativeOptions(
bool fwd)
const;
340 template<
typename MatType>
Function get_forward_dae(
const std::string& name)
const;
345 static bool all_zero(
const double* v, casadi_int n);
360 inline casadi_int
nt()
const {
return tout_.size();}
367 static std::vector<std::string>
dae_out() {
return {
"ode",
"alg"}; }
369 static std::vector<std::string>
quad_out() {
return {
"quad"}; }
372 BDYN_ADJ_ODE,
BDYN_ADJ_ALG, BDYN_ADJ_QUAD, BDYN_ADJ_ZERO, BDYN_NUM_IN};
373 static std::string bdyn_in(casadi_int i);
374 static std::vector<std::string> bdyn_in();
376 static std::string bdyn_out(casadi_int i);
377 static std::vector<std::string> bdyn_out();
379 static std::vector<std::string>
bdae_out() {
return {
"adj_x",
"adj_z"}; }
381 static std::vector<std::string>
bquad_out() {
return {
"adj_p",
"adj_u"}; }
397 casadi_int nx_, nz_, nq_, nx1_, nz1_,
nq1_;
400 casadi_int nrx_, nrz_, nrq_, nuq_, nrx1_, nrz1_,
nrq1_, nuq1_;
403 casadi_int np_, nrp_,
np1_, nrp1_;
443 double t0,
const std::vector<double>& tout);
451 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
452 static std::mutex mutex_solvers_;
459 template<
typename XType>
460 static Function map2oracle(
const std::string& name,
const std::map<std::string, XType>& d);
482 static bool grid_in(casadi_int i);
485 static bool grid_out(casadi_int i);
488 static casadi_int adjmap_out(casadi_int i);
571 double t0,
const std::vector<double>& tout);
585 void init(
const Dict& opts)
override;
590 void set_work(
void* mem,
const double**& arg,
double**& res,
591 casadi_int*& iw,
double*& w)
const override;
604 int init_mem(
void* mem)
const override;
629 const double* adj_x,
const double* adj_z,
const double* adj_q)
const override;
635 double* adj_x,
double* adj_p,
double* adj_u)
const override;
639 const double* x0,
const double* v0,
double* xf,
double* vf,
double* qf)
const;
643 const double* x0,
const double* xf,
const double* vf,
644 const double* adj_xf,
const double* rv0,
645 double* adj_x0,
double* adj_p,
double* adj_u)
const;
673 double t0,
const std::vector<double>& tout);
687 void init(
const Dict& opts)
override;
Helper class for Serialization.
std::vector< casadi_int > disc_
static const Options options_
Options.
void free_mem(void *mem) const override
Free memory block.
const Options & get_options() const override
Options.
void * alloc_mem() const override
Create memory block.
virtual void setup_step()=0
Setup step functions.
const Options & get_options() const override
Options.
static const Options options_
Options.
Internal storage for integrator related data.
virtual void reset(IntegratorMemory *mem, bool first_call) const
Reset the forward solver at the start or after an event.
static const Options options_
Options.
virtual void resetB(IntegratorMemory *mem) const =0
Reset the backward problem.
std::string get_name_out(casadi_int i) override
Names of function input and outputs.
const Options & get_options() const override
Options.
QuadOut
IO conventions for continuous time dynamics.
size_t get_n_in() override
Number of function inputs and outputs.
bool has_forward(casadi_int nfwd) const override
Generate a function that calculates nfwd forward derivatives.
BDynOut
IO conventions for continuous time dynamics.
std::vector< double > nom_x_
Function rdae_
Backwards DAE function.
Dict augmented_options_
Augmented user option.
DaeOut
IO conventions for continuous time dynamics.
casadi_int max_events_
Maximum total number of events during the simulation.
Sparsity sp_jac_dae_
Sparsity pattern of the extended Jacobians.
std::string get_name_in(casadi_int i) override
Names of function input and outputs.
virtual MX algebraic_state_output(const MX &Z) const
bool has_sprev() const override
bool has_reverse(casadi_int nadj) const override
Generate a function that calculates nadj adjoint derivatives.
virtual void retreat(IntegratorMemory *mem, const double *u, double *adj_x, double *adj_p, double *adj_u) const =0
Retreat solution in time.
casadi_int nt() const
Number of output times.
bool print_stats_
Options.
casadi_int ntmp_
Length of the tmp1, tmp2 vectors.
virtual void impulseB(IntegratorMemory *mem, const double *adj_x, const double *adj_z, const double *adj_q) const =0
Introduce an impulse into the backwards integration at the current time.
DAEBOut
IO conventions for continuous time dynamics.
static std::vector< std::string > quad_out()
IO conventions for continuous time dynamics.
BDynIn
IO conventions for continuous time dynamics.
virtual MX algebraic_state_init(const MX &x0, const MX &z0) const
virtual void print_stats(IntegratorMemory *mem) const
Print solver statistics.
static std::vector< std::string > bquad_out()
IO conventions for continuous time dynamics.
size_t get_n_out() override
Number of function inputs and outputs.
Dict opts_
Copy of the options.
static std::map< std::string, Plugin > solvers_
Collection of solvers.
std::vector< double > tout_
Output time grid.
double event_tol_
Termination tolerance for the event iteration.
std::string serialize_base_function() const override
String used to identify the immediate FunctionInternal subclass.
static std::vector< std::string > dae_out()
IO conventions for continuous time dynamics.
bool has_spfwd() const override
double event_acceptable_tol_
Acceptable tolerance for the event iteration.
virtual int advance_noevent(IntegratorMemory *mem) const =0
Advance solution in time, without events handling.
Function transition_
Function to be called at state events.
static std::vector< std::string > bdae_out()
IO conventions for continuous time dynamics.
casadi_int max_event_iter_
Maximum number of event iterations for a single event.
static const std::string infix_
Infix.
casadi_int ne_
Number of of zero-crossing functions.
QuadBOut
IO conventions for continuous time dynamics.
Base class for functions that perform calculation with an oracle.
Interface for accessing input and output data structures.
Base class for FunctionInternal and LinsolInternal.
Helper class for Serialization.
std::vector< std::string > integrator_out()
Get integrator output scheme of integrators.
std::vector< std::string > integrator_in()
Get input scheme of integrators.
StepIn
Input arguments of a forward stepping function.
@ STEP_NUM_IN
Number of arguments.
@ STEP_V0
Dependent variables.
@ INTEGRATOR_NUM_OUT
Number of output arguments of an integrator.
@ INTEGRATOR_NUM_IN
Number of input arguments of an integrator.
unsigned long long bvec_t
StepOut
Output arguments of a forward stepping function.
@ STEP_XF
State vector at next time.
@ STEP_QF
Quadrature state contribution.
@ STEP_VF
Dependent variables at next time.
@ STEP_NUM_OUT
Number of arguments.
BStepIn
Input arguments of a backward stepping function.
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
BStepOut
Output arguments of a backward stepping function.
casadi_int * event_triggered
Options metadata for a class.
Memory struct, forward sparsity pattern propagation.
Memory struct, backward sparsity pattern propagation.