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;
57 double *
aseed, *asens, *pert_asens;
65 std::vector<double>
ibuf_, obuf_;
79 std::vector<unsigned int>
vr_in_, vr_out_;
81 std::vector<double> v_in_, v_out_,
d_in_, d_out_, fd_out_, v_pert_;
103 std::vector<std::string>* name_in = 0,
104 std::vector<std::string>* name_out = 0);
122 std::vector<std::string>* name_in = 0,
123 std::vector<std::string>* name_out = 0);
125 OutputStruct() : ind(-1), wrt(-1), rbegin(-1), rend(-1), cbegin(-1), cend(-1) {}
129 CASADI_EXPORT
bool has_prefix(
const std::string& s);
132 CASADI_EXPORT std::string
pop_prefix(
const std::string& s, std::string* rem = 0);
140 std::vector<InputStruct>
in_;
143 std::vector<OutputStruct>
out_;
186 const std::vector<std::string>& name_in,
187 const std::vector<std::string>& name_out);
197 std::string
class_name()
const override {
return "FmuFunction";}
208 void init(
const Dict& opts)
override;
211 static void identify_io(
212 std::vector<std::string>* scheme_in,
213 std::vector<std::string>* scheme_out,
214 const std::vector<std::string>& name_in,
215 const std::vector<std::string>& name_out);
244 Sparsity get_sparsity_in(casadi_int i)
override;
245 Sparsity get_sparsity_out(casadi_int i)
override;
252 std::vector<double> get_nominal_in(casadi_int i)
const override;
253 std::vector<double> get_nominal_out(casadi_int i)
const override;
257 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w,
void* mem)
const override;
260 int eval_all(
FmuMemory* m, casadi_int n_task,
261 bool need_nondiff,
bool need_jac,
bool need_fwd,
bool need_adj,
bool need_hess)
const;
264 int eval_task(
FmuMemory* m, casadi_int task, casadi_int n_task,
265 bool need_nondiff,
bool need_jac,
bool need_fwd,
bool need_adj,
bool need_hess)
const;
268 void remove_nans(
double *hess_nz, casadi_int* iw)
const;
271 void check_hessian(
FmuMemory* m,
const double *hess_nz, casadi_int* iw)
const;
274 void make_symmetric(
double *hess_nz, casadi_int* iw)
const;
280 bool has_jac_sparsity(casadi_int oind, casadi_int iind)
const override;
281 Sparsity get_jac_sparsity(casadi_int oind, casadi_int iind,
bool symmetric)
const override;
285 bool all_regular()
const;
288 bool all_vectors()
const;
291 Function factory(
const std::string& name,
292 const std::vector<std::string>& s_in,
293 const std::vector<std::string>& s_out,
295 const Dict& opts)
const override;
301 bool has_jacobian()
const override;
302 Function get_jacobian(
const std::string& name,
303 const std::vector<std::string>& inames,
304 const std::vector<std::string>& onames,
305 const Dict& opts)
const override;
312 bool has_forward(casadi_int nfwd)
const override;
313 Function get_forward(casadi_int nfwd,
const std::string& name,
314 const std::vector<std::string>& inames,
315 const std::vector<std::string>& onames,
316 const Dict& opts)
const override;
323 bool has_reverse(casadi_int nadj)
const override;
324 Function get_reverse(casadi_int nadj,
const std::string& name,
325 const std::vector<std::string>& inames,
326 const std::vector<std::string>& onames,
327 const Dict& opts)
const override;
335 void check_mem_count(casadi_int n)
const override;
340 void* alloc_mem()
const override;
345 int init_mem(
void* mem)
const override;
350 void free_mem(
void *mem)
const override;
353 Dict get_stats(
void* mem)
const override;
368 void change_option(
const std::string& option_name,
const GenericType& option_value)
override;
Helper class for Serialization.
std::vector< InputStruct > in_
std::vector< casadi_int > sp_trans_map_
casadi_jac_prob< double > p_
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_
std::vector< Sparsity > sp_trans_
std::string class_name() const override
Get type name.
static const Options options_
Options.
std::vector< OutputStruct > out_
casadi_int max_hess_tasks_
static ProtoFunction * deserialize(DeserializingStream &s)
Deserialize without type information.
std::vector< size_t > jac_in_
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_
std::vector< bool > flip_
FmuMemory(const FmuFunction &self)
casadi_jac_data< double > d
std::vector< double > ibuf_
std::vector< FmuMemory * > slaves
std::vector< bool > imarked_
Function memory with temporary work vectors.
Options metadata for a class.