26 #ifndef CASADI_IDAS_INTERFACE_HPP
27 #define CASADI_IDAS_INTERFACE_HPP
29 #include <casadi/interfaces/sundials/casadi_integrator_idas_export.h>
30 #include "sundials_interface.hpp"
31 #include <idas/idas.h>
32 #include <idas/idas_dense.h>
33 #include <idas/idas_band.h>
34 #include <idas/idas_spgmr.h>
35 #include <idas/idas_spbcgs.h>
36 #include <idas/idas_sptfqmr.h>
37 #include <idas/idas_impl.h>
90 double t0,
const std::vector<double>& tout);
94 double t0,
const std::vector<double>& tout) {
105 std::string
class_name()
const override {
return "IdasInterface";}
114 void init(
const Dict& opts)
override;
120 int init_mem(
void* mem)
const override;
135 void z_impulseB(
IdasMemory* m,
const double* adj_z)
const;
138 int solve_transposed(
IdasMemory* m,
double t,
const double* xz,
const double* rxz,
139 const double* rhs,
double* sol)
const;
143 const double* adj_x,
const double* adj_z,
const double* adj_q)
const override;
147 double* adj_x,
double* adj_p,
double* adj_u)
const override;
152 casadi_assert_dev(m);
162 static int resF(
double t, N_Vector xz, N_Vector xzdot, N_Vector rr,
void *user_data);
163 static int resB(
double t, N_Vector xz, N_Vector xzdot, N_Vector rxz, N_Vector rxzdot,
164 N_Vector rr,
void *user_data);
165 static void ehfun(
int error_code,
const char *module,
const char *
function,
char *msg,
167 static int jtimesF(
double t, N_Vector xz, N_Vector xzdot, N_Vector rr, N_Vector v,
168 N_Vector Jv,
double cj,
void *user_data, N_Vector tmp1, N_Vector tmp2);
169 static int jtimesB(
double t, N_Vector xz, N_Vector xzdot, N_Vector xzB, N_Vector xzdotB,
170 N_Vector resvalB, N_Vector vB, N_Vector JvB,
double cjB,
171 void *user_data, N_Vector tmp1B, N_Vector tmp2B);
172 static int rhsQF(
double t, N_Vector xz, N_Vector xzdot, N_Vector qdot,
void *user_data);
173 static int rhsQB(
double t, N_Vector xz, N_Vector xzdot, N_Vector rxz,
174 N_Vector rxzdot, N_Vector ruqdot,
void *user_data);
175 static int psolveF(
double t, N_Vector xz, N_Vector xzdot, N_Vector rr, N_Vector rvec,
176 N_Vector zvec,
double cj,
double delta,
void *user_data, N_Vector tmp);
177 static int psetupF(
double t, N_Vector xz, N_Vector xzdot, N_Vector rr,
double cj,
178 void* user_data, N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);
179 static int psolveB(
double t, N_Vector xz, N_Vector xzdot, N_Vector rxz, N_Vector rxzdot,
180 N_Vector resvalB, N_Vector rvecB, N_Vector zvecB,
double cjB,
181 double deltaB,
void *user_dataB, N_Vector tmpB);
182 static int psetupB(
double t, N_Vector xz, N_Vector xzdot, N_Vector rxz, N_Vector rxzdot,
183 N_Vector resvalB,
double cjB,
void *user_dataB,
184 N_Vector tmp1B, N_Vector tmp2B, N_Vector tmp3B);
185 static int lsetupF(IDAMem IDA_mem, N_Vector xz, N_Vector xzdot, N_Vector resp,
186 N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
187 static int lsolveF(IDAMem IDA_mem, N_Vector b, N_Vector weight, N_Vector ycur,
188 N_Vector xzdotcur, N_Vector rescur);
189 static int lsetupB(IDAMem IDA_mem, N_Vector xz, N_Vector xzdot, N_Vector resp,
190 N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3);
191 static int lsolveB(IDAMem IDA_mem, N_Vector b, N_Vector weight, N_Vector ycur,
192 N_Vector xzdotcur, N_Vector rescur);
196 static void idas_error(
const char* module,
int flag);
Helper class for Serialization.
'idas' plugin for Integrator
std::string class_name() const override
Readable name of the internal class.
void * alloc_mem() const override
Create memory block.
const Options & get_options() const override
Options.
std::vector< double > init_xdot_
void free_mem(void *mem) const override
Free memory block.
const char * plugin_name() const override
static const std::string meta_doc
A documentation string.
std::vector< double > abstolv_
static const Options options_
Options.
static Integrator * creator(const std::string &name, const Function &dae, double t0, const std::vector< double > &tout)
Create a new integrator.
static IdasMemory * to_mem(void *mem)
Cast to memory object.
std::vector< casadi_int > y_c_
static ProtoFunction * deserialize(DeserializingStream &s)
Deserialize into MX.
Internal storage for integrator related data.
Base class for FunctionInternal and LinsolInternal.
Helper class for Serialization.
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
void * mem
Idas memory block.
int whichB
Ids of backward problem.
double cj_last
cj used in the last factorization
Options metadata for a class.