25 #ifndef CASADI_FMU2_HPP
26 #define CASADI_FMU2_HPP
28 #include "fmu_impl.hpp"
30 #include <fmi2Functions.h>
42 class CASADI_EXPORT Fmu2 :
public FmuInternal {
45 Fmu2(
const std::string& name,
46 const std::vector<std::string>& scheme_in,
const std::vector<std::string>& scheme_out,
47 const std::map<std::string, std::vector<size_t>>& scheme,
const std::vector<std::string>& aux);
55 std::string class_name()
const override {
return "Fmu2";}
58 void init(
const DaeBuilderInternal* dae)
override;
61 void load_functions()
override;
64 std::vector<fmi2ValueReference> vr_real_, vr_integer_, vr_boolean_, vr_string_;
65 std::vector<fmi2Real> init_real_;
66 std::vector<fmi2Integer> init_integer_;
67 std::vector<fmi2Boolean> init_boolean_;
68 std::vector<std::string> init_string_;
71 std::vector<std::string> vn_aux_real_, vn_aux_integer_, vn_aux_boolean_, vn_aux_string_;
72 std::vector<fmi2ValueReference> vr_aux_real_, vr_aux_integer_, vr_aux_boolean_, vr_aux_string_;
77 fmi2InstantiateTYPE* instantiate_;
78 fmi2FreeInstanceTYPE* free_instance_;
79 fmi2ResetTYPE* reset_;
80 fmi2SetupExperimentTYPE* setup_experiment_;
81 fmi2EnterInitializationModeTYPE* enter_initialization_mode_;
82 fmi2ExitInitializationModeTYPE* exit_initialization_mode_;
83 fmi2EnterContinuousTimeModeTYPE* enter_continuous_time_mode_;
84 fmi2GetRealTYPE* get_real_;
85 fmi2SetRealTYPE* set_real_;
86 fmi2GetBooleanTYPE* get_boolean_;
87 fmi2SetBooleanTYPE* set_boolean_;
88 fmi2GetIntegerTYPE* get_integer_;
89 fmi2SetIntegerTYPE* set_integer_;
90 fmi2GetStringTYPE* get_string_;
91 fmi2SetStringTYPE* set_string_;
92 fmi2GetDirectionalDerivativeTYPE* get_directional_derivative_;
93 fmi2NewDiscreteStatesTYPE* new_discrete_states_;
96 fmi2CallbackFunctions functions_;
100 std::vector<fmi2Real> v_real;
101 std::vector<fmi2Integer> v_integer;
102 std::vector<fmi2Boolean> v_boolean;
103 std::vector<std::string> v_string;
109 std::string system_infix()
const override;
112 void* instantiate()
const override;
115 void free_instance(
void* instance)
const override;
118 int reset(
void* instance);
121 int enter_initialization_mode(
void* instance)
const override;
124 int exit_initialization_mode(
void* instance)
const override;
127 int enter_continuous_time_mode(
void* instance)
const override;
130 int update_discrete_states(
void* instance, EventMemory* eventmem)
const override;
133 int set_real(
void* instance,
const unsigned int* vr,
size_t n_vr,
134 const double* values,
size_t n_values)
const override;
137 int get_real(
void* instance,
const unsigned int* vr,
size_t n_vr,
138 double* values,
size_t n_values)
const override;
141 int get_directional_derivative(
void* instance,
const unsigned int* vr_out,
size_t n_out,
142 const unsigned int* vr_in,
size_t n_in,
const double* seed,
size_t n_seed,
143 double* sensitivity,
size_t n_sensitivity)
const override;
146 int set_values(
void* instance)
const override;
149 int get_aux(
void* instance)
override;
154 void get_stats(FmuMemory* m,
Dict* stats,
155 const std::vector<std::string>& name_in,
const InputStruct* in)
const override;
158 static void logger(fmi2ComponentEnvironment componentEnvironment,
159 fmi2String instanceName,
162 fmi2String message, ...);
164 void serialize_body(SerializingStream& s)
const override;
166 static Fmu2* deserialize(DeserializingStream& s);
169 explicit Fmu2(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.