26 #ifndef CASADI_LAPACK_QR_HPP
27 #define CASADI_LAPACK_QR_HPP
29 #include "casadi/core/linsol_internal.hpp"
30 #include <casadi/interfaces/lapack/casadi_linsol_lapackqr_export.h>
34 void dgeqrf_(
int *m,
int *n,
double *a,
int *lda,
double *tau,
35 double *work,
int *lwork,
int *info);
38 void dormqr_(
char *side,
char *trans,
int *n,
int *m,
int *k,
double *a,
39 int *lda,
double *tau,
double *c,
int *ldc,
40 double *work,
int *lwork,
int *info);
43 void dtrsm_(
char *side,
char *uplo,
char *transa,
char *diag,
int *m,
int *n,
44 double *alpha,
double *a,
int *lda,
double *b,
int *ldb);
59 struct LapackQrMemory :
public LinsolMemory {
61 std::vector<double> mat;
64 std::vector<double> tau;
67 std::vector<double> work;
76 class LapackQr :
public LinsolInternal {
79 LapackQr(
const std::string& name,
const Sparsity& sp);
82 static LinsolInternal* creator(
const std::string& name,
const Sparsity& sp) {
83 return new LapackQr(name, sp);
90 void init(
const Dict& opts)
override;
94 static const Options options_;
95 const Options& get_options()
const override {
return options_;}
99 void* alloc_mem()
const override {
return new LapackQrMemory();}
102 int init_mem(
void* mem)
const override;
105 void free_mem(
void *mem)
const override {
delete static_cast<LapackQrMemory*
>(mem);}
108 int nfact(
void* mem,
const double* A)
const override;
111 int solve_batch(
void* mem,
const double* A,
double* x, casadi_int nrhs,
bool tr)
const;
114 int solve(
void* mem,
const double* A,
double* x, casadi_int nrhs,
bool tr)
const override;
117 static const std::string meta_doc;
120 const char* plugin_name()
const override {
return "lapackqr";}
123 std::string class_name()
const override {
return "LapackQr";}
126 casadi_int max_nrhs_;
129 void serialize_body(SerializingStream &s)
const override;
132 static ProtoFunction* deserialize(DeserializingStream& s) {
return new LapackQr(s); }
136 explicit LapackQr(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.