25 #ifndef CASADI_FMU3_HPP
26 #define CASADI_FMU3_HPP
28 #include "fmu_impl.hpp"
30 #include <fmi3Functions.h>
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";}
63 int init_mem(
FmuMemory* m)
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_;
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_;
125 static std::string dll_infix();
129 void* instantiate()
const override;
132 void free_instance(
void* instance)
const override;
135 int reset(
void* instance);
138 int enter_initialization_mode(
void* instance)
const override;
141 int exit_initialization_mode(
void* instance)
const override;
144 int enter_continuous_time_mode(
void* instance)
const override;
147 int update_discrete_states(
void* instance,
EventMemory* eventmem)
const override;
149 int get_derivatives(
void* instance,
double* derivatives,
size_t nx)
const override;
152 int set_time(
void* instance,
double t)
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,
FmuMemory* m =
nullptr)
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 get_adjoint_derivative(
void* instance,
const unsigned int* vr_out,
size_t n_out,
169 const unsigned int* vr_in,
size_t n_in,
const double* seed,
size_t n_seed,
170 double* sensitivity,
size_t n_sensitivity)
const override;
173 int set_values(
void* instance)
const override;
176 int get_aux(
void* instance)
override;
179 int get_aux_impl(
void* instance, Value& aux_value)
const;
185 const std::vector<std::string>& name_in,
const InputStruct* in)
const override;
188 static void log_message_callback(fmi3InstanceEnvironment instanceEnvironment,
189 fmi3Status status, fmi3String category, fmi3String message);
Helper class for Serialization.
Interface to a binary FMU, adhering to FMI version 2.0.
fmi3InstantiateModelExchangeTYPE * instantiate_model_exchange_
std::string system_infix() const override
fmi3ExitInitializationModeTYPE * exit_initialization_mode_
std::vector< std::string > vn_aux_boolean_
std::vector< fmi3ValueReference > vr_boolean_
fmi3GetStringTYPE * get_string_
fmi3SetFloat64TYPE * set_float64_
std::vector< fmi3Boolean > init_boolean_
fmi3SetInt32TYPE * set_int32_
std::vector< fmi3Int32 > init_integer_
fmi3EnterContinuousTimeModeTYPE * enter_continuous_time_mode_
std::vector< std::string > init_string_
fmi3GetInt32TYPE * get_int32_
fmi3SetStringTYPE * set_string_
fmi3SetTimeTYPE * set_time_
fmi3GetFloat64TYPE * get_float64_
fmi3SetBooleanTYPE * set_boolean_
std::vector< fmi3ValueReference > vr_aux_boolean_
fmi3GetDirectionalDerivativeTYPE * get_directional_derivative_
fmi3GetBooleanTYPE * get_boolean_
std::vector< fmi3Float64 > init_real_
fmi3GetAdjointDerivativeTYPE * get_adjoint_derivative_
fmi3UpdateDiscreteStatesTYPE * update_discrete_states_
std::string class_name() const override
Get type name.
fmi3FreeInstanceTYPE * free_instance_
fmi3EnterInitializationModeTYPE * enter_initialization_mode_
Helper class for Serialization.
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
std::vector< fmi3Float64 > v_real
std::vector< std::string > v_string
std::vector< fmi3Boolean > v_boolean
std::vector< fmi3Int32 > v_integer