26 #include "linsol_internal.hpp"
64 void* mem,
bool tr, casadi_int nrhs)
const {
65 casadi_error(
"eval_sx not defined for " +
class_name());
69 casadi_error(
"'solve' not defined for " +
class_name());
73 casadi_int LinsolInternal::factorize(
void* mem,
const double* A)
const {
75 if (needs_sfact(mem, A)) {
76 if (
sfact(mem, A))
return 1;
80 if (needs_nfact(mem, A)) {
81 if (
nfact(mem, A))
return 1;
87 bool LinsolInternal::needs_sfact(
void* mem,
const double* A)
const {
88 auto m =
static_cast<LinsolMemory*
>(mem);
92 bool LinsolInternal::needs_nfact(
void* mem,
const double* A)
const {
93 auto m =
static_cast<LinsolMemory*
>(mem);
99 casadi_error(
"'nfact' not defined for " +
class_name());
103 casadi_error(
"'neig' not defined for " +
class_name());
107 casadi_error(
"'rank' not defined for " +
class_name());
111 casadi_int nrhs,
bool tr)
const {
112 g <<
"#error " <<
class_name() <<
" does not support code generation\n";
117 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
118 std::mutex LinsolInternal::mutex_solvers_;
131 s.
pack(
"LinsolInternal::sp",
sp_);
Helper class for C code generation.
Helper class for Serialization.
void unpack(Sparsity &e)
Reconstruct an object from the input stream.
virtual int solve(void *mem, const double *A, double *x, casadi_int nrhs, bool tr) const
void init(const Dict &opts) override
Initialize.
void disp(std::ostream &stream, bool more) const override
Display object.
virtual void linsol_eval_sx(const SXElem **arg, SXElem **res, casadi_int *iw, SXElem *w, void *mem, bool tr, casadi_int nrhs) const
Evaluate SX, possibly transposed.
static std::map< std::string, Plugin > solvers_
Collection of solvers.
virtual int nfact(void *mem, const double *A) const
Numeric factorization.
void serialize_body(SerializingStream &s) const override
Serialize an object without type information.
virtual int sfact(void *mem, const double *A) const
void serialize_type(SerializingStream &s) const override
Serialize type information.
virtual casadi_int rank(void *mem, const double *A) const
Matrix rank.
static ProtoFunction * deserialize(DeserializingStream &s)
Deserialize with type disambiguation.
virtual void disp_more(std::ostream &stream) const
Print more.
LinsolInternal(const std::string &name, const Sparsity &sp)
Constructor.
static const std::string infix_
Infix.
virtual void generate(CodeGenerator &g, const std::string &A, const std::string &x, casadi_int nrhs, bool tr) const
Generate C code.
~LinsolInternal() override
Destructor.
int init_mem(void *mem) const override
Initalize memory block.
virtual casadi_int neig(void *mem, const double *A) const
Number of negative eigenvalues.
void serialize_type(SerializingStream &s) const
Serialize type information.
static ProtoFunction * deserialize(DeserializingStream &s)
Deserialize with type disambiguation.
Base class for FunctionInternal and LinsolInternal.
virtual int init_mem(void *mem) const
Initalize memory block.
virtual void serialize_type(SerializingStream &s) const
Serialize type information.
virtual void serialize_body(SerializingStream &s) const
Serialize an object without type information.
virtual void init(const Dict &opts)
Initialize.
The basic scalar symbolic class of CasADi.
Helper class for Serialization.
void pack(const Sparsity &e)
Serializes an object to the output stream.
virtual std::string class_name() const =0
Readable name of the internal class.
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
void add_stat(const std::string &s)