26 #ifndef CASADI_KINSOL_INTERFACE_HPP
27 #define CASADI_KINSOL_INTERFACE_HPP
29 #include <casadi/interfaces/sundials/casadi_rootfinder_kinsol_export.h>
30 #include "casadi/core/rootfinder_impl.hpp"
31 #include <nvector/nvector_serial.h>
32 #include <sundials/sundials_dense.h>
33 #include <sundials/sundials_types.h>
34 #include <kinsol/kinsol.h>
35 #include <kinsol/kinsol_dense.h>
36 #include <kinsol/kinsol_band.h>
37 #include <kinsol/kinsol_spgmr.h>
38 #include <kinsol/kinsol_spbcgs.h>
39 #include <kinsol/kinsol_sptfqmr.h>
40 #include <kinsol/kinsol_impl.h>
41 #include <kinsol/kinsol_spils_impl.h>
55 class KinsolInterface;
103 void init(
const Dict& opts)
override;
106 int solve(
void* mem)
const override;
112 std::string
class_name()
const override {
return "KinsolInterface";}
159 void kinsol_error(
const std::string& module,
int flag,
bool fatal=
true)
const;
168 int init_mem(
void* mem)
const override;
174 void set_work(
void* mem,
const double**& arg,
double**& res,
175 casadi_int*& iw,
double*& w)
const override;
180 casadi_assert_dev(m);
185 void func(
KinsolMemory& m, N_Vector u, N_Vector fval)
const;
186 void djac(
KinsolMemory& m,
long N, N_Vector u, N_Vector fu,
187 DlsMat J, N_Vector tmp1, N_Vector tmp2)
const;
188 void bjac(
KinsolMemory& m,
long N,
long mupper,
long mlower, N_Vector u, N_Vector fu, DlsMat J,
189 N_Vector tmp1, N_Vector tmp2)
const;
190 void jtimes(
KinsolMemory& m, N_Vector v, N_Vector Jv, N_Vector u,
int* new_u)
const;
191 void psetup(
KinsolMemory& m, N_Vector u, N_Vector uscale, N_Vector fval, N_Vector fscale,
192 N_Vector tmp1, N_Vector tmp2)
const;
193 void psolve(
KinsolMemory& m, N_Vector u, N_Vector uscale,
194 N_Vector fval, N_Vector fscale, N_Vector v, N_Vector tmp)
const;
197 static int func_wrapper(N_Vector u, N_Vector fval,
void *user_data);
198 static int djac_wrapper(
long N, N_Vector u, N_Vector fu, DlsMat J,
void *user_data,
199 N_Vector tmp1, N_Vector tmp2);
200 static int bjac_wrapper(
long N,
long mupper,
long mlower, N_Vector u, N_Vector fu, DlsMat J,
201 void *user_data, N_Vector tmp1, N_Vector tmp2);
202 static int jtimes_wrapper(N_Vector v, N_Vector Jv, N_Vector u,
int* new_u,
void *user_data);
203 static int psetup_wrapper(N_Vector u, N_Vector uscale, N_Vector fval, N_Vector fscale,
204 void* user_data, N_Vector tmp1, N_Vector tmp2);
205 static int psolve_wrapper(N_Vector u, N_Vector uscale, N_Vector fval, N_Vector fscale,
206 N_Vector v,
void* user_data, N_Vector tmp);
209 static int lsetup(KINMem kin_mem);
210 static int lsolve(KINMem kin_mem, N_Vector x, N_Vector b,
double *sJpnorm,
double *sFdotJp);
211 static void ehfun(
int error_code,
const char *module,
const char *
function,
212 char *msg,
void *eh_data);
213 static void ihfun(
const char *module,
const char *
function,
char *msg,
void *ih_data);
'kinsol' plugin for Rootfinder
static const std::string meta_doc
A documentation string.
static const Options options_
Options.
static KinsolMemory * to_mem(void *mem)
Cast to memory object.
const char * plugin_name() const override
std::string class_name() const override
Readable name of the internal class.
LinsolType linear_solver_type_
casadi_int strategy_
Globalization strategy.
static Rootfinder * creator(const std::string &name, const Function &f)
Create a new Rootfinder.
IterativeSolver iterative_solver_
const Options & get_options() const override
Options.
void free_mem(void *mem) const override
Free memory block.
void * alloc_mem() const override
Create memory block.
casadi_int lower_bandwidth_
bool disable_internal_warnings_
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
void * mem
KINSOL memory block.
Options metadata for a class.