25 #ifndef CASADI_FMU_IMPL_HPP
26 #define CASADI_FMU_IMPL_HPP
29 #include "importer.hpp"
30 #include "shared_object.hpp"
31 #include "resource.hpp"
66 const std::vector<std::string>& scheme_in,
const std::vector<std::string>& scheme_out,
67 const std::map<std::string, std::vector<size_t>>& scheme,
const std::vector<std::string>& aux);
90 virtual int get_derivatives(
void* instance,
double* derivatives,
size_t nx)
const = 0;
93 virtual int set_time(
void* instance,
double t)
const = 0;
96 virtual int set_real(
void* instance,
const unsigned int* vr,
size_t n_vr,
97 const double* values,
size_t n_values)
const = 0;
100 virtual int get_real(
void* instance,
const unsigned int* vr,
size_t n_vr,
101 double* values,
size_t n_values,
FmuMemory* m =
nullptr)
const = 0;
105 const unsigned int* vr_in,
size_t n_in,
const double* seed,
size_t n_seed,
106 double* sensitivity,
size_t n_sensitivity)
const = 0;
109 virtual int get_adjoint_derivative(
void* instance,
const unsigned int* vr_out,
size_t n_out,
110 const unsigned int* vr_in,
size_t n_in,
const double* seed,
size_t n_seed,
111 double* sensitivity,
size_t n_sensitivity)
const;
120 virtual void finalize();
125 void disp(std::ostream& stream,
bool more)
const override;
130 size_t n_in()
const {
return iind_.size();}
135 size_t n_out()
const {
return oind_.size();}
138 size_t index_in(
const std::string& n)
const;
141 size_t index_out(
const std::string& n)
const;
144 Sparsity jac_sparsity(
const std::vector<size_t>& osub,
const std::vector<size_t>& isub)
const;
147 Sparsity hess_sparsity(
const std::vector<size_t>& r,
const std::vector<size_t>& c)
const;
153 std::vector<double> all_nominal_in(
size_t i)
const;
154 std::vector<double> all_nominal_out(
size_t i)
const;
158 std::string desc_in(
FmuMemory* m,
size_t id,
bool more =
true)
const;
164 static std::string dll_suffix();
169 static std::string fmi3_dll_infix();
174 static Dict compile_fmu(
const std::string& name,
const Dict& files,
const Dict& opts);
178 static std::string pack_fmu(
const Dict& files,
const std::string&
path);
182 T* load_function(
const std::string& symname);
185 int discrete_states_iter(
void* instance)
const;
190 virtual int init_mem(
FmuMemory* m)
const;
209 void set(
FmuMemory* m,
size_t ind,
const double* value)
const;
212 void request(
FmuMemory* m,
size_t ind)
const;
215 int set_all(
FmuMemory* m,
const double* values,
size_t n_values)
const;
218 int get_all(
FmuMemory* m,
double* values,
size_t n_values)
const;
224 void get(
FmuMemory* m,
size_t id,
double* value)
const;
227 void set_fwd(
FmuMemory* m, casadi_int nseed,
228 const casadi_int*
id,
const double* v)
const;
231 void set_fwd(
FmuMemory* m,
size_t ind,
const double* v)
const;
234 void request_fwd(
FmuMemory* m, casadi_int nsens,
const casadi_int*
id,
235 const casadi_int* wrt_id)
const;
238 void request_fwd(
FmuMemory* m, casadi_int ind)
const;
241 int eval_fwd(
FmuMemory* m,
bool independent_seeds)
const;
247 int eval_fd(
FmuMemory* m,
bool independent_seeds)
const;
250 void get_fwd(
FmuMemory* m, casadi_int nsens,
251 const casadi_int*
id,
double* v)
const;
254 void get_fwd(
FmuMemory* m,
size_t ind,
double* v)
const;
257 void set_adj(
FmuMemory* m, casadi_int nseed,
258 const casadi_int*
id,
const double* v)
const;
261 void set_adj(
FmuMemory* m,
size_t ind,
const double* v)
const;
264 void request_adj(
FmuMemory* m, casadi_int nsens,
const casadi_int*
id,
265 const casadi_int* wrt_id)
const;
268 void request_adj(
FmuMemory* m, casadi_int ind)
const;
274 void get_adj(
FmuMemory* m, casadi_int nsens,
275 const casadi_int*
id,
double* v)
const;
278 void get_adj(
FmuMemory* m,
size_t ind,
double* v)
const;
293 const std::vector<std::string>& name_in,
const InputStruct* in)
const = 0;
314 std::map<std::string, std::vector<size_t>>
scheme_;
350 std::vector<size_t>
iind_, iind_map_, oind_, oind_map_;
362 std::vector<std::string>
vn_in_, vn_out_;
363 std::vector<unsigned int>
vr_in_, vr_out_;
369 std::vector<std::vector<size_t>>
ired_, ored_;
390 casadi_assert(f !=
nullptr,
"Cannot retrieve '" + symname +
"'");
392 return reinterpret_cast<T*
>(f);
Helper class for Serialization.
bool warning_fired_values_of_continuous_states_changed_
std::string instantiation_token_
std::vector< double > max_in_
bool warning_fired_next_event_time_defined_
std::string name_
Instance name.
virtual int get_directional_derivative(void *instance, const unsigned int *vr_out, size_t n_out, const unsigned int *vr_in, size_t n_in, const double *seed, size_t n_seed, double *sensitivity, size_t n_sensitivity) const =0
bool provides_adjoint_derivatives_
virtual int set_time(void *instance, double t) const =0
bool warning_fired_nominals_of_continuous_states_changed_
virtual void free_instance(void *c) const =0
std::vector< size_t > iind_
std::vector< std::vector< size_t > > ired_
std::vector< std::string > aux_
std::map< std::string, std::vector< size_t > > scheme_
unsigned int independent_vr_
virtual int get_aux(void *instance)=0
bool warning_fired_terminate_simulation_
bool warning_fired_discrete_states_need_update_
std::vector< std::string > vn_in_
virtual void load_functions()=0
virtual int update_discrete_states(void *instance, EventMemory *eventmem) const =0
virtual void get_stats(FmuMemory *m, Dict *stats, const std::vector< std::string > &name_in, const InputStruct *in) const =0
Get stats.
std::vector< unsigned int > vr_in_
virtual void * instantiate() const =0
virtual int exit_initialization_mode(void *instance) const =0
virtual int set_values(void *instance) const =0
bool can_be_instantiated_only_once_per_process_
virtual void free_mem(void *mem) const =0
Free memory block.
T * load_function(const std::string &symname)
size_t n_in() const
Get the number of scheme inputs.
std::vector< double > nominal_in_
bool do_evaluation_dance_
std::string resource_loc_
std::vector< double > min_in_
std::vector< double > value_in_
virtual int set_real(void *instance, const unsigned int *vr, size_t n_vr, const double *values, size_t n_values) const =0
casadi_int number_of_event_indicators_
virtual int get_derivatives(void *instance, double *derivatives, size_t nx) const =0
size_t n_out() const
Get the number of scheme outputs.
virtual int get_real(void *instance, const unsigned int *vr, size_t n_vr, double *values, size_t n_values, FmuMemory *m=nullptr) const =0
virtual int enter_continuous_time_mode(void *instance) const =0
virtual int enter_initialization_mode(void *instance) const =0
virtual FmuMemory * alloc_mem(const FmuFunction &f) const =0
Create memory block.
std::vector< std::string > scheme_in_
std::string instance_name_
virtual std::string system_infix() const =0
signal_t get_function(const std::string &symname)
Get a function pointer for numerical evaluation.
RAII class for reading from a zip file.
Helper class for Serialization.
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
void(* signal_t)(void)
Function pointer types for the C API.
std::vector< casadi_int > path(const std::vector< casadi_int > &map, casadi_int i_start)
bool discrete_states_need_update
bool terminate_simulation
bool next_event_time_defined
bool nominals_of_continuous_states_changed
bool values_of_continuous_states_changed