26 #ifndef CASADI_FATROP_CONIC_INTERFACE_HPP
27 #define CASADI_FATROP_CONIC_INTERFACE_HPP
29 #include "casadi/core/conic_impl.hpp"
30 #include "casadi/core/linsol.hpp"
31 #include <casadi/interfaces/fatrop/casadi_conic_fatrop_export.h>
61 #include "fatrop_conic_runtime.hpp"
64 #include <fatrop/ocp/OCPAbstract.hpp>
65 #include <fatrop/ocp/StageOCPApplication.hpp>
66 #include <fatrop/ocp/OCPCInterface.h>
74 class FatropConicInterface;
75 struct FatropConicMemory :
public ConicMemory {
97 class FatropConicInterface :
public Conic {
100 explicit FatropConicInterface();
103 static Conic* creator(
const std::string& name,
104 const std::map<std::string, Sparsity>& st) {
105 return new FatropConicInterface(name, st);
109 explicit FatropConicInterface(
const std::string& name,
110 const std::map<std::string, Sparsity>& st);
113 Dict get_stats(
void* mem)
const override;
116 ~FatropConicInterface()
override;
119 const char* plugin_name()
const override {
return "fatrop";}
122 std::string class_name()
const override {
return "FatropConicInterface";}
126 static const Options options_;
127 const Options& get_options()
const override {
return options_;}
130 void set_fatrop_conic_prob();
133 void init(
const Dict& opts)
override;
136 void* alloc_mem()
const override {
return new FatropConicMemory();}
139 int init_mem(
void* mem)
const override;
142 void free_mem(
void *mem)
const override {
delete static_cast<FatropConicMemory*
>(mem);}
145 void set_work(
void* mem,
const double**& arg,
double**& res,
146 casadi_int*& iw,
double*& w)
const override;
148 void set_temp(
void* mem,
const double** arg,
double** res,
149 casadi_int* iw,
double* w)
const override;
152 int solve(
const double** arg,
double** res,
153 casadi_int* iw,
double* w,
void* mem)
const override;
156 static void mproject(
double factor,
const double* x,
const casadi_int* sp_x,
157 double* y,
const casadi_int* sp_y,
double* w);
161 static void dense_transfer(
double factor,
const double* x,
const casadi_int* sp_x,
double* y,
162 const casadi_int* sp_y,
double* w);
165 static const std::string meta_doc;
167 void serialize_body(SerializingStream &s)
const override;
170 static ProtoFunction* deserialize(DeserializingStream& s) {
171 return new FatropConicInterface(s);
174 friend class CasadiStructuredQP;
177 explicit FatropConicInterface(DeserializingStream& s);
182 static Sparsity blocksparsity(casadi_int rows, casadi_int cols,
183 const std::vector<casadi_ocp_block>& blocks,
bool eye=
false);
184 static void blockptr(std::vector<double *>& vs, std::vector<double>& v,
185 const std::vector<casadi_ocp_block>& blocks,
bool eye=
false);
186 Sparsity Asp_, Bsp_, Csp_, Dsp_, Isp_, Rsp_, Ssp_, Qsp_, bsp_, lugsp_, usp_, xsp_;
187 Sparsity theirs_xsp_, theirs_usp_, theirs_Xsp_, theirs_Usp_;
188 Sparsity lamg_gapsp_;
189 Sparsity lam_cusp_, pisp_;
191 Sparsity ABsp_, CDsp_, RSQsp_;
193 std::vector< casadi_ocp_block > R_blocks, S_blocks, Q_blocks;
194 std::vector< casadi_ocp_block > b_blocks, lug_blocks;
195 std::vector< casadi_ocp_block > u_blocks, x_blocks;
196 std::vector< casadi_ocp_block > lam_ul_blocks, lam_xl_blocks,
197 lam_uu_blocks, lam_xu_blocks, lam_cl_blocks;
198 std::vector< casadi_ocp_block > lam_cu_blocks, A_blocks, B_blocks,
199 C_blocks, D_blocks, I_blocks;
202 std::vector< casadi_ocp_block > AB_blocks, CD_blocks, RSQ_blocks;
204 std::vector<int> nxs_;
205 std::vector<int> nus_;
206 std::vector<int> ngs_;
207 std::vector<int> zeros_;
209 casadi_int print_level_;
213 enum structure_detection {
218 structure_detection structure_detection_;
220 std::vector<casadi_int> AB_offsets_, CD_offsets_, RSQ_offsets_;
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.