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>
35 #define CASADI_LAPACK_CHARLEN_2 , 1, 1
36 #define CASADI_LAPACK_CHARLEN_4 , 1, 1, 1, 1
37 #define CASADI_LAPACK_CHARLEN_DECL_2 , size_t len1, size_t len2
38 #define CASADI_LAPACK_CHARLEN_DECL_4 , size_t len1, size_t len2, size_t len3, size_t len4
40 #define CASADI_LAPACK_CHARLEN_2
41 #define CASADI_LAPACK_CHARLEN_4
42 #define CASADI_LAPACK_CHARLEN_DECL_2
43 #define CASADI_LAPACK_CHARLEN_DECL_4
48 void dgeqrf_(
int *m,
int *n,
double *a,
int *lda,
double *tau,
49 double *work,
int *lwork,
int *info);
52 void dormqr_(
char *side,
char *trans,
int *n,
int *m,
int *k,
double *a,
53 int *lda,
double *tau,
double *c,
int *ldc,
54 double *work,
int *lwork,
int *info
55 CASADI_LAPACK_CHARLEN_DECL_2);
58 void dtrsm_(
char *side,
char *uplo,
char *transa,
char *diag,
int *m,
int *n,
59 double *alpha,
double *a,
int *lda,
double *b,
int *ldb
60 CASADI_LAPACK_CHARLEN_DECL_4);
75 struct LapackQrMemory :
public LinsolMemory {
77 std::vector<double> mat;
80 std::vector<double> tau;
83 std::vector<double> work;
92 class LapackQr :
public LinsolInternal {
95 LapackQr(
const std::string& name,
const Sparsity& sp);
98 static LinsolInternal* creator(
const std::string& name,
const Sparsity& sp) {
99 return new LapackQr(name, sp);
103 ~LapackQr()
override;
106 void init(
const Dict& opts)
override;
110 static const Options options_;
111 const Options& get_options()
const override {
return options_;}
115 void* alloc_mem()
const override {
return new LapackQrMemory();}
118 int init_mem(
void* mem)
const override;
121 void free_mem(
void *mem)
const override {
delete static_cast<LapackQrMemory*
>(mem);}
124 int nfact(
void* mem,
const double* A)
const override;
127 int solve_batch(
void* mem,
const double* A,
double* x, casadi_int nrhs,
bool tr)
const;
130 int solve(
void* mem,
const double* A,
double* x, casadi_int nrhs,
bool tr)
const override;
133 static const std::string meta_doc;
136 const char* plugin_name()
const override {
return "lapackqr";}
139 std::string class_name()
const override {
return "LapackQr";}
142 casadi_int max_nrhs_;
145 void serialize_body(SerializingStream &s)
const override;
148 static ProtoFunction* deserialize(DeserializingStream& s) {
return new LapackQr(s); }
152 explicit LapackQr(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.