26 #ifndef CASADI_LINSOL_QR_HPP
27 #define CASADI_LINSOL_QR_HPP
39 #include "casadi/core/linsol_internal.hpp"
40 #include <casadi/solvers/casadi_linsol_qr_export.h>
43 struct LinsolQrMemory :
public LinsolMemory {
44 std::vector<double> v, r, beta, w;
45 std::vector<double> cache;
48 std::vector<int> cache_loc;
55 class LinsolQr :
public LinsolInternal {
59 LinsolQr(
const std::string& name,
const Sparsity& sp);
62 static LinsolInternal* creator(
const std::string& name,
const Sparsity& sp) {
63 return new LinsolQr(name, sp);
70 void init(
const Dict& opts)
override;
73 void finalize()
override;
77 static const Options options_;
78 const Options& get_options()
const override {
return options_;}
82 void* alloc_mem()
const override {
return new LinsolQrMemory();}
85 int init_mem(
void* mem)
const override;
88 void free_mem(
void *mem)
const override {
delete static_cast<LinsolQrMemory*
>(mem);}
91 int nfact(
void* mem,
const double* A)
const override;
94 int sfact(
void* mem,
const double* A)
const override;
97 int solve(
void* mem,
const double* A,
double* x, casadi_int nrhs,
bool tr)
const override;
100 double det(
void* mem,
const double* A)
const override;
103 void generate(CodeGenerator& g,
const std::string& A,
const std::string& x,
104 casadi_int nrhs,
bool tr)
const override;
107 void generate_det(CodeGenerator& g,
const std::string& A,
108 const std::string& d)
const override;
112 void generate_factorize(CodeGenerator& g,
const std::string& A)
const;
115 size_t sz_w_fact()
const override {
116 return sp_v_.nnz() + sp_r_.nnz() + ncol() + nrow() + ncol();
120 const char* plugin_name()
const override {
return "qr";}
123 std::string class_name()
const override {
return "LinsolQr";}
126 static const std::string meta_doc;
129 std::vector<casadi_int> prinv_, pc_;
130 Sparsity sp_v_, sp_r_;
138 casadi_int cache_stride_;
141 void serialize_body(SerializingStream &s)
const override;
144 static ProtoFunction* deserialize(DeserializingStream& s) {
return new LinsolQr(s); }
148 explicit LinsolQr(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.