26 #ifndef CASADI_LINSOL_INTERNAL_HPP
27 #define CASADI_LINSOL_INTERNAL_HPP
30 #include "function_internal.hpp"
31 #include "plugin_interface.hpp"
37 struct CASADI_EXPORT LinsolMemory :
public ProtoFunctionMemory {
39 bool is_sfact, is_nfact;
42 LinsolMemory() : is_sfact(false), is_nfact(false) {}
48 class CASADI_EXPORT LinsolInternal
49 :
public ProtoFunction,
public PluginInterface<LinsolInternal> {
52 LinsolInternal(
const std::string& name,
const Sparsity& sp);
55 ~LinsolInternal()
override;
60 void disp(std::ostream& stream,
bool more)
const override;
65 virtual void disp_more(std::ostream& stream)
const {}
68 void init(
const Dict& opts)
override;
73 void* alloc_mem()
const override {
return new LinsolMemory();}
78 int init_mem(
void* mem)
const override;
83 void free_mem(
void *mem)
const override {
delete static_cast<LinsolMemory*
>(mem);}
86 virtual void linsol_eval_sx(
const SXElem** arg, SXElem** res,
87 casadi_int* iw, SXElem* w,
void* mem,
88 bool tr, casadi_int nrhs)
const;
92 casadi_int factorize(
void* mem,
const double* A)
const;
95 virtual bool needs_sfact(
void* mem,
const double* A)
const;
98 virtual bool needs_nfact(
void* mem,
const double* A)
const;
102 virtual int sfact(
void* mem,
const double* A)
const {
return 0;}
105 virtual int nfact(
void* mem,
const double* A)
const;
108 virtual int solve(
void* mem,
const double* A,
double* x, casadi_int nrhs,
bool tr)
const;
111 virtual casadi_int neig(
void* mem,
const double* A)
const;
114 virtual casadi_int rank(
void* mem,
const double* A)
const;
117 virtual void generate(CodeGenerator& g,
const std::string& A,
const std::string& x,
118 casadi_int nrhs,
bool tr)
const;
121 typedef LinsolInternal* (*Creator)(
const std::string& name,
const Sparsity& sp);
127 static std::map<std::string, Plugin> solvers_;
130 static const std::string infix_;
133 const char* plugin_name()
const override = 0;
136 casadi_int nrow()
const {
return sp_.size1();}
137 casadi_int ncol()
const {
return sp_.size2();}
138 const casadi_int* colind()
const {
return sp_.colind();}
139 const casadi_int* row()
const {
return sp_.row();}
140 casadi_int nnz()
const {
return sp_.nnz();}
145 void serialize_type(SerializingStream &s)
const override;
149 void serialize_body(SerializingStream &s)
const override;
154 static ProtoFunction* deserialize(DeserializingStream& s);
163 explicit LinsolInternal(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.