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.