25 #ifndef CASADI_FMU2_HPP
26 #define CASADI_FMU2_HPP
30 #include "fmu_impl.hpp"
32 #include <fmi2Functions.h>
44 class CASADI_EXPORT Fmu2 :
public FmuInternal {
47 Fmu2(
const std::string& name,
48 const std::vector<std::string>& scheme_in,
const std::vector<std::string>& scheme_out,
49 const std::map<std::string, std::vector<size_t>>& scheme,
const std::vector<std::string>& aux);
57 std::string class_name()
const override {
return "Fmu2";}
60 void init(
const DaeBuilderInternal* dae)
override;
63 void finalize()
override;
66 std::string resource_loc_;
72 std::string instance_name_;
81 std::vector<fmi2ValueReference> vr_real_, vr_integer_, vr_boolean_, vr_string_;
82 std::vector<fmi2Real> init_real_;
83 std::vector<fmi2Integer> init_integer_;
84 std::vector<fmi2Boolean> init_boolean_;
85 std::vector<std::string> init_string_;
88 std::vector<std::string> vn_aux_real_, vn_aux_integer_, vn_aux_boolean_, vn_aux_string_;
89 std::vector<fmi2ValueReference> vr_aux_real_, vr_aux_integer_, vr_aux_boolean_, vr_aux_string_;
97 fmi2InstantiateTYPE* instantiate_;
98 fmi2FreeInstanceTYPE* free_instance_;
99 fmi2ResetTYPE* reset_;
100 fmi2SetupExperimentTYPE* setup_experiment_;
101 fmi2EnterInitializationModeTYPE* enter_initialization_mode_;
102 fmi2ExitInitializationModeTYPE* exit_initialization_mode_;
103 fmi2EnterContinuousTimeModeTYPE* enter_continuous_time_mode_;
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_;
115 fmi2CallbackFunctions functions_;
119 std::vector<fmi2Real> v_real;
120 std::vector<fmi2Integer> v_integer;
121 std::vector<fmi2Boolean> v_boolean;
122 std::vector<std::string> v_string;
128 bool has_ad()
const override {
return get_directional_derivative_ !=
nullptr; }
131 fmi2Component instantiate()
const;
134 void free_instance(
void* c)
const override;
137 int reset(fmi2Component c);
140 void setup_experiment(fmi2Component c)
const;
143 int enter_initialization_mode(fmi2Component c)
const;
146 int exit_initialization_mode(fmi2Component c)
const;
149 int set_values(fmi2Component c)
const;
152 int get_in(fmi2Component c, std::vector<fmi2Real>* v)
const;
155 int get_aux(fmi2Component c, Value* v)
const;
160 void get_stats(FmuMemory* m,
Dict* stats,
161 const std::vector<std::string>& name_in,
const InputStruct* in)
const override;
166 int init_mem(FmuMemory* m)
const override;
169 int eval(FmuMemory* m)
const override;
172 int eval_ad(FmuMemory* m)
const override;
175 int eval_fd(FmuMemory* m,
bool independent_seeds)
const override;
178 static std::string system_infix();
181 static std::string dll_suffix();
184 static void logger(fmi2ComponentEnvironment componentEnvironment,
185 fmi2String instanceName,
188 fmi2String message, ...);
190 void serialize_body(SerializingStream& s)
const override;
192 static Fmu2* deserialize(DeserializingStream& s);
195 explicit Fmu2(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.