26 #ifndef CASADI_FMU_HPP
27 #define CASADI_FMU_HPP
29 #include "shared_object.hpp"
30 #include "printable.hpp"
31 #include "sparsity.hpp"
38 class DaeBuilderInternal;
46 enum class FmuApi {FMI2,
NUMEL};
49 CASADI_EXPORT std::string to_string(FmuApi v);
59 class CASADI_EXPORT Fmu
60 :
public SharedObject,
61 public SWIG_IF_ELSE(PrintableCommon, Printable<Fmu>) {
66 static std::string type_name() {
return "Fmu";}
72 Fmu(
const std::string& name, FmuApi api,
const DaeBuilderInternal* dae,
73 const std::vector<std::string>& scheme_in,
74 const std::vector<std::string>& scheme_out,
75 const std::map<std::string, std::vector<size_t>>& scheme,
76 const std::vector<std::string>& aux);
81 const std::string& name()
const;
85 FmuInternal* operator->();
86 const FmuInternal* operator->()
const;
87 FmuInternal* get()
const;
101 size_t index_in(
const std::string& n)
const;
104 size_t index_out(
const std::string& n)
const;
107 const std::vector<size_t>& ired(
size_t ind)
const;
110 const std::vector<size_t>& ored(
size_t ind)
const;
113 double nominal_in(
size_t ind)
const;
116 double nominal_out(
size_t ind)
const;
119 double min_in(
size_t ind)
const;
122 double max_in(
size_t ind)
const;
125 std::vector<double> all_nominal_in(
size_t ind)
const;
128 std::vector<double> all_nominal_out(
size_t ind)
const;
131 std::string desc_in(FmuMemory* m,
size_t id,
bool more =
true)
const;
137 Sparsity jac_sparsity(
const std::vector<size_t>& osub,
const std::vector<size_t>& isub)
const;
140 Sparsity jac_sparsity(
size_t oind,
size_t iind)
const {
141 return jac_sparsity(ored(oind), ired(iind));
145 Sparsity hess_sparsity(
const std::vector<size_t>& r,
const std::vector<size_t>& c)
const;
148 Sparsity hess_sparsity(
size_t r,
size_t c)
const {
149 return hess_sparsity(ired(r), ired(c));
155 int init_mem(FmuMemory* m)
const;
158 void free_instance(
void* c)
const;
161 void set(FmuMemory* m,
size_t ind,
const double* value)
const;
164 void request(FmuMemory* m,
size_t ind)
const;
167 int eval(FmuMemory* m)
const;
170 void get(FmuMemory* m,
size_t ind,
double* value)
const;
173 void set_seed(FmuMemory* m, casadi_int nseed,
const casadi_int*
id,
const double* v)
const;
176 void request_sens(FmuMemory* m, casadi_int nsens,
const casadi_int*
id,
177 const casadi_int* wrt_id)
const;
180 int eval_derivative(FmuMemory* m,
bool independent_seeds)
const;
183 void get_sens(FmuMemory* m, casadi_int nsens,
const casadi_int*
id,
double* v)
const;
186 void set_fwd(FmuMemory* m,
size_t ind,
const double* v)
const;
189 void request_fwd(FmuMemory* m, casadi_int ind)
const;
192 void get_fwd(FmuMemory* m,
size_t ind,
double* v)
const;
197 void get_stats(FmuMemory* m,
Dict* stats,
198 const std::vector<std::string>& name_in,
const InputStruct* in)
const;
205 static Fmu create(FmuInternal* node);
212 void serialize(SerializingStream &s)
const;
217 static Fmu deserialize(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.