26 #ifndef CASADI_MADNLP_INTERFACE_HPP
27 #define CASADI_MADNLP_INTERFACE_HPP
31 #include "casadi/core/nlpsol_impl.hpp"
32 #include "casadi/core/timing.hpp"
36 #include "madnlp_runtime.hpp"
41 #define __attribute__((visibility("default")))
47 struct MadnlpMemory :
public NlpsolMemory {
57 class MadnlpInterface :
public Nlpsol {
62 explicit MadnlpInterface(
const std::string& name,
const Function& nlp);
63 ~MadnlpInterface()
override;
66 const char* plugin_name()
const override {
return "madnlp";}
69 std::string class_name()
const override {
return "MadnlpInterface";}
72 static Nlpsol* creator(
const std::string& name,
const Function& nlp) {
73 return new MadnlpInterface(name, nlp);
78 static const Options options_;
79 const Options& get_options()
const override {
return options_;}
83 void init(
const Dict& opts)
override;
86 void* alloc_mem()
const override {
return new MadnlpMemory();}
89 int init_mem(
void* mem)
const override;
92 void free_mem(
void *mem)
const override;
95 Dict get_stats(
void* mem)
const override;
98 void set_work(
void* mem,
const double**& arg,
double**& res,
99 casadi_int*& iw,
double*& w)
const override;
102 int solve(
void* mem)
const override;
111 static const std::string meta_doc;
116 ConvexifyData convexify_data_;
121 void set_madnlp_prob();
122 void set_madnlp_prob(CodeGenerator& g)
const;
125 void codegen_body(CodeGenerator& g)
const override;
128 void codegen_declarations(CodeGenerator& g)
const override;
131 void codegen_init_mem(CodeGenerator& g)
const override;
134 void codegen_free_mem(CodeGenerator& g)
const override;
137 std::string codegen_mem_type()
const override {
return "struct casadi_madnlp_data"; }
140 bool codegen_needs_mem()
const override {
return true; }
143 void serialize_body(SerializingStream &s)
const override;
146 static ProtoFunction* deserialize(DeserializingStream& s) {
return new MadnlpInterface(s); }
150 explicit MadnlpInterface(DeserializingStream& s);
156 std::vector<libmad_int> nws_;
157 std::vector<libmad_int> ngs_;
159 std::vector<libmad_int> nzj_i_;
160 std::vector<libmad_int> nzj_j_;
161 std::vector<libmad_int> nzh_i_;
162 std::vector<libmad_int> nzh_j_;
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.