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;
63 int init_mem(FmuMemory* m)
const override;
68 FmuMemory* alloc_mem(
const FmuFunction& f)
const override;
73 void free_mem(
void *mem)
const override;
76 void finalize()
override;
79 void load_functions()
override;
82 std::vector<fmi2ValueReference> vr_real_, vr_integer_, vr_boolean_, vr_string_;
83 std::vector<fmi2Real> init_real_;
84 std::vector<fmi2Integer> init_integer_;
85 std::vector<fmi2Boolean> init_boolean_;
86 std::vector<std::string> init_string_;
89 std::vector<std::string> vn_aux_real_, vn_aux_integer_, vn_aux_boolean_, vn_aux_string_;
90 std::vector<fmi2ValueReference> vr_aux_real_, vr_aux_integer_, vr_aux_boolean_, vr_aux_string_;
95 fmi2InstantiateTYPE* instantiate_;
96 fmi2FreeInstanceTYPE* free_instance_;
97 fmi2ResetTYPE* reset_;
98 fmi2SetupExperimentTYPE* setup_experiment_;
99 fmi2EnterInitializationModeTYPE* enter_initialization_mode_;
100 fmi2ExitInitializationModeTYPE* exit_initialization_mode_;
101 fmi2EnterContinuousTimeModeTYPE* enter_continuous_time_mode_;
102 fmi2GetDerivativesTYPE* get_derivatives_;
103 fmi2SetTimeTYPE* set_time_;
104 fmi2GetRealTYPE* get_real_;
105 fmi2SetRealTYPE* set_real_;
106 fmi2GetBooleanTYPE* get_boolean_;
107 fmi2SetBooleanTYPE* set_boolean_;
108 fmi2GetIntegerTYPE* get_integer_;
109 fmi2SetIntegerTYPE* set_integer_;
110 fmi2GetStringTYPE* get_string_;
111 fmi2SetStringTYPE* set_string_;
112 fmi2GetDirectionalDerivativeTYPE* get_directional_derivative_;
113 fmi2NewDiscreteStatesTYPE* new_discrete_states_;
116 fmi2CallbackFunctions functions_;
120 std::vector<fmi2Real> v_real;
121 std::vector<fmi2Integer> v_integer;
122 std::vector<fmi2Boolean> v_boolean;
123 std::vector<std::string> v_string;
129 std::string system_infix()
const override;
132 void* instantiate()
const override;
135 void free_instance(
void* instance)
const override;
138 int reset(
void* instance);
141 int enter_initialization_mode(
void* instance)
const override;
144 int exit_initialization_mode(
void* instance)
const override;
147 int enter_continuous_time_mode(
void* instance)
const override;
150 int update_discrete_states(
void* instance, EventMemory* eventmem)
const override;
152 int get_derivatives(
void* instance,
double* derivatives,
size_t nx)
const override;
155 int set_real(
void* instance,
const unsigned int* vr,
size_t n_vr,
156 const double* values,
size_t n_values)
const override;
159 int get_real(
void* instance,
const unsigned int* vr,
size_t n_vr,
160 double* values,
size_t n_values)
const override;
163 int get_directional_derivative(
void* instance,
const unsigned int* vr_out,
size_t n_out,
164 const unsigned int* vr_in,
size_t n_in,
const double* seed,
size_t n_seed,
165 double* sensitivity,
size_t n_sensitivity)
const override;
168 int set_values(
void* instance)
const override;
171 int get_aux(
void* instance)
override;
174 int get_aux_impl(
void* instance, Value& aux_value)
const;
179 void get_stats(FmuMemory* m,
Dict* stats,
180 const std::vector<std::string>& name_in,
const InputStruct* in)
const override;
183 static void logger(fmi2ComponentEnvironment componentEnvironment,
184 fmi2String instanceName,
187 fmi2String message, ...);
189 void serialize_body(SerializingStream& s)
const override;
191 static Fmu2* deserialize(DeserializingStream& s);
194 explicit Fmu2(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.