25 #ifndef CASADI_FMU3_HPP
26 #define CASADI_FMU3_HPP
28 #include "fmu_impl.hpp"
30 #include <fmi3Functions.h>
42 class CASADI_EXPORT Fmu3 :
public FmuInternal {
45 Fmu3(
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 "Fmu3";}
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<fmi3ValueReference> vr_real_, vr_integer_, vr_boolean_, vr_string_;
83 std::vector<fmi3Float64> init_real_;
84 std::vector<fmi3Int32> init_integer_;
85 std::vector<fmi3Boolean> 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<fmi3ValueReference> vr_aux_real_, vr_aux_integer_, vr_aux_boolean_, vr_aux_string_;
95 fmi3InstantiateModelExchangeTYPE* instantiate_model_exchange_;
96 fmi3FreeInstanceTYPE* free_instance_;
97 fmi3ResetTYPE* reset_;
98 fmi3EnterInitializationModeTYPE* enter_initialization_mode_;
99 fmi3ExitInitializationModeTYPE* exit_initialization_mode_;
100 fmi3EnterContinuousTimeModeTYPE* enter_continuous_time_mode_;
101 fmi3SetTimeTYPE* set_time_;
102 fmi3GetFloat64TYPE* get_float64_;
103 fmi3SetFloat64TYPE* set_float64_;
104 fmi3GetBooleanTYPE* get_boolean_;
105 fmi3SetBooleanTYPE* set_boolean_;
106 fmi3GetInt32TYPE* get_int32_;
107 fmi3SetInt32TYPE* set_int32_;
108 fmi3GetStringTYPE* get_string_;
109 fmi3SetStringTYPE* set_string_;
110 fmi3GetDirectionalDerivativeTYPE* get_directional_derivative_;
111 fmi3GetAdjointDerivativeTYPE* get_adjoint_derivative_;
112 fmi3UpdateDiscreteStatesTYPE* update_discrete_states_;
116 std::vector<fmi3Float64> v_real;
117 std::vector<fmi3Int32> v_integer;
118 std::vector<fmi3Boolean> v_boolean;
119 std::vector<std::string> v_string;
125 std::string system_infix()
const override;
128 void* instantiate()
const override;
131 void free_instance(
void* instance)
const override;
134 int reset(
void* instance);
137 int enter_initialization_mode(
void* instance)
const override;
140 int exit_initialization_mode(
void* instance)
const override;
143 int enter_continuous_time_mode(
void* instance)
const override;
146 int update_discrete_states(
void* instance, EventMemory* eventmem)
const override;
148 int get_derivatives(
void* instance,
double* derivatives,
size_t nx)
const override;
151 int set_real(
void* instance,
const unsigned int* vr,
size_t n_vr,
152 const double* values,
size_t n_values)
const override;
155 int get_real(
void* instance,
const unsigned int* vr,
size_t n_vr,
156 double* values,
size_t n_values)
const override;
159 int get_directional_derivative(
void* instance,
const unsigned int* vr_out,
size_t n_out,
160 const unsigned int* vr_in,
size_t n_in,
const double* seed,
size_t n_seed,
161 double* sensitivity,
size_t n_sensitivity)
const override;
164 int get_adjoint_derivative(
void* instance,
const unsigned int* vr_out,
size_t n_out,
165 const unsigned int* vr_in,
size_t n_in,
const double* seed,
size_t n_seed,
166 double* sensitivity,
size_t n_sensitivity)
const override;
169 int set_values(
void* instance)
const override;
172 int get_aux(
void* instance)
override;
175 int get_aux_impl(
void* instance, Value& aux_value)
const;
180 void get_stats(FmuMemory* m,
Dict* stats,
181 const std::vector<std::string>& name_in,
const InputStruct* in)
const override;
184 static void log_message_callback(fmi3InstanceEnvironment instanceEnvironment,
185 fmi3Status status, fmi3String category, fmi3String message);
187 void serialize_body(SerializingStream& s)
const override;
189 static Fmu3* deserialize(DeserializingStream& s);
192 explicit Fmu3(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.