26 #ifndef CASADI_FMU_FUNCTION_HPP
27 #define CASADI_FMU_FUNCTION_HPP
29 #include "function_internal.hpp"
31 #include "finite_differences.hpp"
38 class DaeBuilderInternal;
55 double *
aseed, *asens, *pert_asens;
63 std::vector<double>
ibuf_, obuf_;
77 std::vector<unsigned int>
vr_in_, vr_out_;
79 std::vector<double> v_in_, v_out_,
d_in_, d_out_, fd_out_, v_pert_;
101 std::vector<std::string>* name_in =
nullptr,
102 std::vector<std::string>* name_out =
nullptr);
120 std::vector<std::string>* name_in =
nullptr,
121 std::vector<std::string>* name_out =
nullptr);
123 OutputStruct() : ind(-1), wrt(-1), rbegin(-1), rend(-1), cbegin(-1), cend(-1) {}
127 CASADI_EXPORT
bool has_prefix(
const std::string& s);
130 CASADI_EXPORT std::string
pop_prefix(
const std::string& s, std::string* rem =
nullptr);
138 std::vector<InputStruct>
in_;
141 std::vector<OutputStruct>
out_;
167 bool print_progress_, new_jacobian_, new_forward_, new_hessian_,
fd_flip_,
185 const std::vector<std::string>& name_in,
186 const std::vector<std::string>& name_out);
196 std::string
class_name()
const override {
return "FmuFunction";}
207 void init(
const Dict& opts)
override;
210 static void identify_io(
211 std::vector<std::string>* scheme_in,
212 std::vector<std::string>* scheme_out,
213 const std::vector<std::string>& name_in,
214 const std::vector<std::string>& name_out);
246 Sparsity get_sparsity_in(casadi_int i)
override;
247 Sparsity get_sparsity_out(casadi_int i)
override;
254 std::vector<double> get_nominal_in(casadi_int i)
const override;
255 std::vector<double> get_nominal_out(casadi_int i)
const override;
259 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w,
void* mem)
const override;
262 int eval_all(
FmuMemory* m, casadi_int n_task,
263 bool need_nondiff,
bool need_jac,
bool need_fwd,
bool need_adj,
bool need_hess)
const;
266 int eval_task(
FmuMemory* m, casadi_int task, casadi_int n_task,
267 bool need_nondiff,
bool need_jac,
bool need_fwd,
bool need_adj,
bool need_hess)
const;
270 void finalize_hessian(
FmuMemory* m,
double *hess_nz, casadi_int* iw)
const;
276 bool has_jac_sparsity(casadi_int oind, casadi_int iind)
const override;
277 Sparsity get_jac_sparsity(casadi_int oind, casadi_int iind,
bool symmetric)
const override;
281 bool all_regular()
const;
284 bool all_vectors()
const;
287 Function factory(
const std::string& name,
288 const std::vector<std::string>& s_in,
289 const std::vector<std::string>& s_out,
291 const Dict& opts)
const override;
297 bool has_jacobian()
const override;
298 Function get_jacobian(
const std::string& name,
299 const std::vector<std::string>& inames,
300 const std::vector<std::string>& onames,
301 const Dict& opts)
const override;
308 bool has_forward(casadi_int nfwd)
const override;
309 Function get_forward(casadi_int nfwd,
const std::string& name,
310 const std::vector<std::string>& inames,
311 const std::vector<std::string>& onames,
312 const Dict& opts)
const override;
319 bool has_reverse(casadi_int nadj)
const override;
320 Function get_reverse(casadi_int nadj,
const std::string& name,
321 const std::vector<std::string>& inames,
322 const std::vector<std::string>& onames,
323 const Dict& opts)
const override;
331 void check_mem_count(casadi_int n)
const override;
336 void* alloc_mem()
const override;
341 int init_mem(
void* mem)
const override;
346 void free_mem(
void *mem)
const override;
349 Dict get_stats(
void* mem)
const override;
364 void change_option(
const std::string& option_name,
const GenericType& option_value)
override;
Helper class for Serialization.
std::vector< InputStruct > in_
casadi_jac_prob< double > adj_prob_
std::vector< casadi_int > sp_trans_map_
size_t get_n_in() override
Number of function inputs and outputs.
const Options & get_options() const override
Options.
std::vector< casadi_int > nonlin_
Parallelization parallelization_
size_t get_n_out() override
Number of function inputs and outputs.
std::string validate_ad_file_
bool enable_adjoint_hessian_
std::vector< Sparsity > sp_trans_
std::string class_name() const override
Get type name.
bool asymmetric_hessian_coloring_
std::vector< casadi_int > which_hess_color_
static const Options options_
Options.
std::vector< OutputStruct > out_
static ProtoFunction * deserialize(DeserializingStream &s)
Deserialize without type information.
std::vector< size_t > jac_in_
casadi_int max_adj_tasks_
std::vector< double > jac_nom_in_
bool uses_adjoint_derivatives_
Internal class for Function.
std::map< std::string, std::vector< std::string > > AuxOut
Generic data type, can hold different types such as bool, casadi_int, std::string etc.
Base class for FunctionInternal and LinsolInternal.
Helper class for Serialization.
bool has_prefix(const std::string &s)
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
Parallelization
Type of parallelization.
std::string to_string(TypeFmi2 v)
std::string pop_prefix(const std::string &s, std::string *rem)
std::vector< double > d_in_
std::vector< size_t > id_in_
std::vector< double > isens_
std::vector< bool > in_bounds_
std::vector< size_t > wrt_
std::vector< unsigned int > vr_in_
casadi_jac_data< double > adj_data
std::vector< bool > flip_
FmuMemory(const FmuFunction &self)
std::vector< double > ibuf_
std::vector< FmuMemory * > slaves
std::vector< bool > imarked_
Function memory with temporary work vectors.
Options metadata for a class.