25 #ifndef CASADI_FMU_IMPL_HPP
26 #define CASADI_FMU_IMPL_HPP
29 #include "importer.hpp"
30 #include "shared_object_internal.hpp"
37 class DaeBuilderInternal;
49 class CASADI_EXPORT FmuInternal :
public SharedObjectInternal {
53 FmuInternal(
const std::string& name,
54 const std::vector<std::string>& scheme_in,
const std::vector<std::string>& scheme_out,
55 const std::map<std::string, std::vector<size_t>>& scheme,
const std::vector<std::string>& aux);
58 ~FmuInternal()
override;
61 virtual void init(
const DaeBuilderInternal* dae) = 0;
64 virtual void finalize() = 0;
69 void disp(std::ostream& stream,
bool more)
const override;
74 size_t n_in()
const {
return iind_.size();}
79 size_t n_out()
const {
return oind_.size();}
82 size_t index_in(
const std::string& n)
const;
85 size_t index_out(
const std::string& n)
const;
88 virtual bool has_ad()
const = 0;
91 Sparsity jac_sparsity(
const std::vector<size_t>& osub,
const std::vector<size_t>& isub)
const;
94 Sparsity hess_sparsity(
const std::vector<size_t>& r,
const std::vector<size_t>& c)
const;
100 std::vector<double> all_nominal_in(
size_t i)
const;
101 std::vector<double> all_nominal_out(
size_t i)
const;
105 std::string desc_in(FmuMemory* m,
size_t id,
bool more =
true)
const;
109 T* load_function(
const std::string& symname);
114 virtual int init_mem(FmuMemory* m)
const = 0;
117 virtual void free_instance(
void* c)
const = 0;
120 void set(FmuMemory* m,
size_t ind,
const double* value)
const;
123 void request(FmuMemory* m,
size_t ind)
const;
126 virtual int eval(FmuMemory* m)
const = 0;
129 void get(FmuMemory* m,
size_t id,
double* value)
const;
132 void set_seed(FmuMemory* m, casadi_int nseed,
133 const casadi_int*
id,
const double* v)
const;
136 void request_sens(FmuMemory* m, casadi_int nsens,
const casadi_int*
id,
137 const casadi_int* wrt_id)
const;
140 void set_fwd(FmuMemory* m,
size_t ind,
const double* v)
const;
143 void request_fwd(FmuMemory* m, casadi_int ind)
const;
146 void get_fwd(FmuMemory* m,
size_t ind,
double* v)
const;
149 int eval_derivative(FmuMemory* m,
bool independent_seeds)
const;
152 virtual int eval_ad(FmuMemory* m)
const = 0;
155 virtual int eval_fd(FmuMemory* m,
bool independent_seeds)
const = 0;
158 void get_sens(FmuMemory* m, casadi_int nsens,
159 const casadi_int*
id,
double* v)
const;
162 void gather_sens(FmuMemory* m)
const;
165 void gather_io(FmuMemory* m)
const;
170 virtual void get_stats(FmuMemory* m,
Dict* stats,
171 const std::vector<std::string>& name_in,
const InputStruct* in)
const = 0;
173 void serialize(SerializingStream& s)
const;
175 virtual void serialize_type(SerializingStream& s)
const;
176 virtual void serialize_body(SerializingStream& s)
const;
178 static FmuInternal* deserialize(DeserializingStream& s);
181 explicit FmuInternal(DeserializingStream& s);
187 std::vector<std::string> scheme_in_, scheme_out_;
188 std::map<std::string, std::vector<size_t>> scheme_;
191 std::vector<std::string> aux_;
197 std::vector<size_t> iind_, iind_map_, oind_, oind_map_;
200 std::vector<double> nominal_in_, nominal_out_;
201 std::vector<double> min_in_, min_out_;
202 std::vector<double> max_in_, max_out_;
203 std::vector<std::string> vn_in_, vn_out_;
204 std::vector<unsigned int> vr_in_, vr_out_;
207 std::vector<double> value_in_;
210 std::vector<std::vector<size_t>> ired_, ored_;
213 Sparsity jac_sp_, hess_sp_;
217 T* FmuInternal::load_function(
const std::string& symname) {
219 signal_t f = li_.get_function(symname);
221 casadi_assert(f != 0,
"Cannot retrieve '" + symname +
"'");
223 return reinterpret_cast<T*
>(f);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.