26 #ifndef CASADI_DAE_BUILDER_HPP
27 #define CASADI_DAE_BUILDER_HPP
29 #include "function.hpp"
34 class DaeBuilderInternal;
70 public SWIG_IF_ELSE(PrintableCommon, Printable<DaeBuilder>) {
74 std::string
type_name()
const {
return "DaeBuilder";}
80 explicit DaeBuilder(
const std::string& name,
const std::string&
path =
"",
86 const std::string& name()
const;
93 const MX& time()
const;
98 std::vector<std::string>
t_new()
const {
return all(
"t");}
103 std::vector<std::string>
x()
const {
return all(
"x");}
106 std::vector<std::string> y()
const;
111 std::vector<MX> ode()
const;
116 std::vector<std::string>
z()
const {
return all(
"z");}
121 std::vector<MX> alg()
const;
126 std::vector<std::string>
q()
const {
return all(
"q");}
131 std::vector<MX> quad()
const;
136 std::vector<MX> zero()
const;
141 std::vector<MX> ydef()
const;
146 void set_y(
const std::vector<std::string>& name);
151 std::vector<std::string> rate()
const;
156 void set_rate(
const std::vector<std::string>& name);
161 std::vector<std::string>
u()
const {
return all(
"u");}
166 std::vector<std::string>
p()
const {
return all(
"p");}
171 std::vector<std::string>
c()
const {
return all(
"c");}
176 std::vector<MX> cdef()
const;
181 std::vector<std::string>
d()
const {
return all(
"d");}
188 std::vector<MX> ddef()
const;
193 std::vector<std::string>
w()
const {
return all(
"w");}
200 std::vector<MX> wdef()
const;
205 std::vector<MX> init_lhs()
const;
210 std::vector<MX> init_rhs()
const;
215 std::vector<std::string> outputs()
const;
220 std::vector<std::string> derivatives()
const;
225 std::vector<std::string> initial_unknowns()
const;
238 bool has_rate()
const;
243 casadi_int nx()
const;
248 casadi_int nz()
const;
253 casadi_int nq()
const;
258 casadi_int nzero()
const;
263 casadi_int ny()
const;
268 casadi_int nu()
const;
273 casadi_int np()
const;
278 casadi_int nc()
const;
283 casadi_int nd()
const;
288 casadi_int nw()
const;
297 MX add(
const std::string& name,
298 const std::string& causality,
299 const std::string& variability,
303 MX add(
const std::string& name,
304 const std::string& causality,
308 MX add(
const std::string& name,
312 void add(
const std::string& name,
313 const std::string& causality,
314 const std::string& variability,
318 #ifdef WITH_DEPRECATED_FEATURES
320 const MX&
t()
const {
return time();}
323 MX add_t(
const std::string& name=
"t");
326 MX add_p(
const std::string& name=std::string());
329 MX add_u(
const std::string& name=std::string());
332 MX add_x(
const std::string& name=std::string());
335 MX add_z(
const std::string& name=std::string());
338 MX add_q(
const std::string& name=std::string());
341 MX add_c(
const std::string& name,
const MX& new_cdef);
344 MX add_d(
const std::string& name,
const MX& new_ddef);
347 MX add_w(
const std::string& name,
const MX& new_wdef);
350 MX add_y(
const std::string& name,
const MX& new_ydef);
353 void set_beq(
const std::string& name,
const MX& val);
358 void eq(
const MX& lhs,
const MX& rhs,
const Dict& opts=
Dict());
361 void when(
const MX& cond,
const std::vector<std::string>& eqs,
const Dict& opts=
Dict());
364 std::string assign(
const std::string& name,
const MX& val);
367 std::string reinit(
const std::string& name,
const MX& val);
370 void set_init(
const std::string& name,
const MX& init_rhs);
372 #ifdef WITH_DEPRECATED_FEATURES
374 void set_ode(
const std::string& name,
const MX& ode_rhs) {
375 eq(var(name), ode_rhs);
379 void set_alg(
const std::string& name,
const MX& alg_rhs) {
386 set_init(lhs.
name(), rhs);
390 casadi_int
ne()
const {
return nzero();}
393 std::vector<std::string>
e()
const {
return all(
"zero");}
398 void sanity_check()
const;
402 void reorder(
const std::string& cat,
const std::vector<std::string>& v);
404 #ifdef WITH_DEPRECATED_FEATURES
406 void clear_all(
const std::string& v);
409 void set_all(
const std::string& v,
const std::vector<std::string>& name);
413 void register_t(
const std::string& name);
414 void register_p(
const std::string& name);
415 void register_u(
const std::string& name);
416 void register_x(
const std::string& name);
417 void register_z(
const std::string& name);
418 void register_q(
const std::string& name);
419 void register_c(
const std::string& name);
420 void register_d(
const std::string& name);
421 void register_w(
const std::string& name);
422 void register_y(
const std::string& name);
423 void register_e(
const std::string& name);
433 void eliminate_quad();
442 void sort_z(
const std::vector<std::string>& z_order);
453 void eliminate(
const std::string& cat);
456 void sort(
const std::string& cat);
459 void lift(
bool lift_shared =
true,
bool lift_calls =
true);
462 void prune(
bool prune_p =
true,
bool prune_u =
true);
474 Function add_fun(
const std::string& name,
475 const std::vector<std::string>& arg,
476 const std::vector<std::string>& res,
const Dict& opts=
Dict());
486 bool has_fun(
const std::string& name)
const;
489 Function fun(
const std::string& name)
const;
492 std::vector<Function> fun()
const;
495 void gather_fun(casadi_int max_depth = -1);
505 bool provides_directional_derivatives()
const;
511 void load_fmi_description(
const std::string&
filename);
514 std::vector<std::string> export_fmu(
const Dict& opts=
Dict());
517 void add_lc(
const std::string& name,
const std::vector<std::string>& f_out);
520 Function create(
const std::string& fname,
521 const std::vector<std::string>& name_in,
522 const std::vector<std::string>& name_out,
bool sx,
bool lifted_calls =
false)
const;
532 Function create(
const std::string& name,
533 const std::vector<std::string>& name_in,
534 const std::vector<std::string>& name_out,
552 Function dependent_fun(
const std::string& fname,
553 const std::vector<std::string>& s_in,
554 const std::vector<std::string>& s_out)
const;
557 Function transition(
const std::string& fname, casadi_int index)
const;
560 Function transition(
const std::string& fname)
const;
567 MX var(
const std::string& name)
const;
572 std::vector<std::string> der(
const std::vector<std::string>& name)
const;
576 MX der(
const MX& v)
const;
581 std::vector<std::string> pre(
const std::vector<std::string>& name)
const;
584 MX pre(
const MX& v)
const;
587 bool has_beq(
const std::string& name)
const;
590 MX beq(
const std::string& name)
const;
594 casadi_int value_reference(
const std::string& name)
const;
595 void set_value_reference(
const std::string& name, casadi_int val);
600 std::string
description(
const std::string& name)
const;
601 void set_description(
const std::string& name,
const std::string& val);
606 std::string type(
const std::string& name, casadi_int fmi_version = 3)
const;
607 void set_type(
const std::string& name,
const std::string& val);
611 std::string causality(
const std::string& name)
const;
626 void set_causality(
const std::string& name,
const std::string& val);
629 std::string variability(
const std::string& name)
const;
641 void set_variability(
const std::string& name,
const std::string& val);
644 std::string category(
const std::string& name)
const;
656 void set_category(
const std::string& name,
const std::string& val);
660 std::string initial(
const std::string& name)
const;
661 void set_initial(
const std::string& name,
const std::string& val);
666 std::string unit(
const std::string& name)
const;
667 void set_unit(
const std::string& name,
const std::string& val);
672 std::string display_unit(
const std::string& name)
const;
673 void set_display_unit(
const std::string& name,
const std::string& val);
677 casadi_int numel(
const std::string& name)
const;
680 std::vector<casadi_int> dimension(
const std::string& name)
const;
683 double start_time()
const;
686 void set_start_time(
double val);
689 double stop_time()
const;
692 void set_stop_time(
double val);
695 double tolerance()
const;
698 void set_tolerance(
double val);
701 double step_size()
const;
704 void set_step_size(
double val);
708 #if !(defined(SWIG) && defined(SWIGMATLAB))
710 std::string der(
const std::string& name)
const;
713 std::string pre(
const std::string& name)
const;
716 double attribute(
const std::string& a,
const std::string& name)
const;
719 void set_attribute(
const std::string& a,
const std::string& name,
double val);
722 double min(
const std::string& name)
const;
725 void set_min(
const std::string& name,
double val);
728 double max(
const std::string& name)
const;
731 void set_max(
const std::string& name,
double val);
734 double nominal(
const std::string& name)
const;
737 void set_nominal(
const std::string& name,
double val);
740 std::vector<double> start(
const std::string& name)
const;
743 void set_start(
const std::string& name,
double val);
746 void set_start(
const std::string& name,
const std::vector<double>& val);
752 void set(
const std::string& name,
double val);
755 void set(
const std::string& name,
const std::string& val);
763 std::vector<double> attribute(
const std::string& a,
const std::vector<std::string>& name)
const;
766 void set_attribute(
const std::string& a,
const std::vector<std::string>& name,
767 const std::vector<double>& val);
770 std::vector<double> min(
const std::vector<std::string>& name)
const;
773 void set_min(
const std::vector<std::string>& name,
const std::vector<double>& val);
776 std::vector<double> max(
const std::vector<std::string>& name)
const;
779 void set_max(
const std::vector<std::string>& name,
const std::vector<double>& val);
782 std::vector<double> nominal(
const std::vector<std::string>& name)
const;
785 void set_nominal(
const std::vector<std::string>& name,
const std::vector<double>& val);
788 std::vector<double> start(
const std::vector<std::string>& name)
const;
791 void set_start(
const std::vector<std::string>& name,
const std::vector<double>& val);
794 void set(
const std::vector<std::string>& name,
const std::vector<double>& val);
797 void set(
const std::vector<std::string>& name,
const std::vector<std::string>& val);
800 std::vector<GenericType> get(
const std::vector<std::string>& name)
const;
803 bool has(
const std::string& name)
const;
806 std::vector<std::string>
all()
const;
809 std::vector<std::string>
all(
const std::string& cat)
const;
811 #ifdef WITH_DEPRECATED_FEATURES
822 size_t add_variable_new(
const std::string& name, casadi_int n=1);
825 size_t add_variable_new(
const std::string& name,
const Sparsity& sp);
828 size_t add_variable_new(
const MX& new_v);
838 Function oracle(
bool sx =
false,
bool elim_w =
false,
bool lifted_calls =
false)
const;
843 Sparsity jac_sparsity(
const std::vector<std::string>& onames,
844 const std::vector<std::string>& inames)
const;
847 #ifdef WITH_DEPRECATED_FEATURES
849 Variable& new_variable(
const std::string& name, casadi_int numel = 1);
853 Variable& variable(
const std::string& name);
854 const Variable& variable(
const std::string& name)
const;
856 const Variable& variable(
size_t ind)
const;
857 size_t find(
const std::string& name)
const;
858 std::vector<size_t>
find(
const std::vector<std::string>& name)
const;
859 const std::string& name(
size_t ind)
const;
860 std::vector<std::string> name(
const std::vector<size_t>& ind)
const;
865 const MX& var(
size_t ind)
const;
866 std::vector<MX> var(
const std::vector<size_t>& ind)
const;
A symbolic representation of a differential-algebraic equations model.
std::vector< std::string > q() const
Quadrature states.
void set_alg(const std::string &name, const MX &alg_rhs)
[DEPRECATED] Replaced by eq
const MX & t() const
[DEPRECATED] Renamed "time"
void set_ode(const std::string &name, const MX &ode_rhs)
[DEPRECATED] Replaced by eq
std::vector< std::string > c() const
Named constants.
casadi_int ne() const
[DEPRECATED] Replaced by nzero()
void parse_fmi(const std::string &filename)
bool has_variable(const std::string &name) const
[DEPRECATED] Ranamed "has"
Function transition() const
Construct an event transition function, default naming.
std::string type_name() const
Readable name of the class.
std::vector< std::string > e() const
[DEPRECATED] Use all("zero") */
bool provides_directional_derivative() const
Does the FMU provide support for analytic derivatives (FMI 2 naming)
Function create() const
Create a function with standard integrator DAE signature, default naming.
MX operator()(const std::string &name) const
std::vector< std::string > x() const
Differential states.
std::vector< std::string > z() const
Algebraic variables.
std::vector< std::string > t_new() const
Independent variable (usually time)
void add_init(const MX &lhs, const MX &rhs)
[DEPRECATED] Replaced by set_init
std::vector< std::string > p() const
Parameters.
std::vector< std::string > d() const
Dependent parameters.
std::vector< std::string > w() const
Dependent variables.
std::vector< std::string > all_variables() const
Get a list of all variables.
std::vector< std::string > u() const
Free controls.
Generic data type, can hold different types such as bool, casadi_int, std::string etc.
std::string name() const
Get the name.
GenericShared implements a reference counting framework similar for efficient and.
void add_variable(Equation *e, Variable *v)
std::string description(Category v)
void sort(const std::vector< T > &values, std::vector< T > &sorted_values, std::vector< casadi_int > &indices, bool invert_indices=false)
Sort the data in a vector.
std::vector< casadi_int > find(const std::vector< T > &v)
find nonzeros
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
bool all(const std::vector< bool > &v)
Check if all arguments are true.
std::vector< casadi_int > path(const std::vector< casadi_int > &map, casadi_int i_start)
std::string filename(const std::string &path)
Holds expressions and meta-data corresponding to a physical quantity evolving in time.