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 std::vector<std::string>
u()
const {
return all(
"u");}
151 std::vector<std::string>
p()
const {
return all(
"p");}
156 std::vector<std::string>
c()
const {
return all(
"c");}
161 std::vector<MX> cdef()
const;
166 std::vector<std::string>
d()
const {
return all(
"d");}
173 std::vector<MX> ddef()
const;
178 std::vector<std::string>
w()
const {
return all(
"w");}
185 std::vector<MX> wdef()
const;
190 std::vector<MX> init_lhs()
const;
195 std::vector<MX> init_rhs()
const;
200 std::vector<std::string> outputs()
const;
205 std::vector<std::string> derivatives()
const;
210 std::vector<std::string> initial_unknowns()
const;
223 casadi_int nx()
const;
228 casadi_int nz()
const;
233 casadi_int nq()
const;
238 casadi_int nzero()
const;
243 casadi_int ny()
const;
248 casadi_int nu()
const;
253 casadi_int np()
const;
258 casadi_int nc()
const;
263 casadi_int nd()
const;
268 casadi_int nw()
const;
277 MX add(
const std::string& name,
278 const std::string& causality,
279 const std::string& variability,
283 MX add(
const std::string& name,
284 const std::string& causality,
288 MX add(
const std::string& name,
292 void add(
const std::string& name,
293 const std::string& causality,
294 const std::string& variability,
298 #ifdef WITH_DEPRECATED_FEATURES
300 const MX&
t()
const {
return time();}
303 MX add_t(
const std::string& name=
"t");
306 MX add_p(
const std::string& name=std::string());
309 MX add_u(
const std::string& name=std::string());
312 MX add_x(
const std::string& name=std::string());
315 MX add_z(
const std::string& name=std::string());
318 MX add_q(
const std::string& name=std::string());
321 MX add_c(
const std::string& name,
const MX& new_cdef);
324 MX add_d(
const std::string& name,
const MX& new_ddef);
327 MX add_w(
const std::string& name,
const MX& new_wdef);
330 MX add_y(
const std::string& name,
const MX& new_ydef);
333 void set_beq(
const std::string& name,
const MX& val);
338 void eq(
const MX& lhs,
const MX& rhs,
const Dict& opts=
Dict());
341 void when(
const MX& cond,
const std::vector<std::string>& eqs,
const Dict& opts=
Dict());
344 std::string assign(
const std::string& name,
const MX& val);
347 std::string reinit(
const std::string& name,
const MX& val);
350 void set_init(
const std::string& name,
const MX& init_rhs);
352 #ifdef WITH_DEPRECATED_FEATURES
354 void set_ode(
const std::string& name,
const MX& ode_rhs) {
355 eq(var(name), ode_rhs);
359 void set_alg(
const std::string& name,
const MX& alg_rhs) {
366 set_init(lhs.
name(), rhs);
370 casadi_int
ne()
const {
return nzero();}
373 std::vector<std::string>
e()
const {
return all(
"zero");}
378 void sanity_check()
const;
382 void reorder(
const std::string& cat,
const std::vector<std::string>& v);
384 #ifdef WITH_DEPRECATED_FEATURES
386 void clear_all(
const std::string& v);
389 void set_all(
const std::string& v,
const std::vector<std::string>& name);
393 void register_t(
const std::string& name);
394 void register_p(
const std::string& name);
395 void register_u(
const std::string& name);
396 void register_x(
const std::string& name);
397 void register_z(
const std::string& name);
398 void register_q(
const std::string& name);
399 void register_c(
const std::string& name);
400 void register_d(
const std::string& name);
401 void register_w(
const std::string& name);
402 void register_y(
const std::string& name);
403 void register_e(
const std::string& name);
413 void eliminate_quad();
422 void sort_z(
const std::vector<std::string>& z_order);
433 void eliminate(
const std::string& cat);
436 void sort(
const std::string& cat);
439 void lift(
bool lift_shared =
true,
bool lift_calls =
true);
442 void prune(
bool prune_p =
true,
bool prune_u =
true);
454 Function add_fun(
const std::string& name,
455 const std::vector<std::string>& arg,
456 const std::vector<std::string>& res,
const Dict& opts=
Dict());
466 bool has_fun(
const std::string& name)
const;
469 Function fun(
const std::string& name)
const;
472 std::vector<Function> fun()
const;
475 void gather_fun(casadi_int max_depth = -1);
485 bool provides_directional_derivatives()
const;
491 void load_fmi_description(
const std::string&
filename);
494 std::vector<std::string> export_fmu(
const Dict& opts=
Dict());
497 void add_lc(
const std::string& name,
const std::vector<std::string>& f_out);
500 Function create(
const std::string& fname,
501 const std::vector<std::string>& name_in,
502 const std::vector<std::string>& name_out,
bool sx,
bool lifted_calls =
false)
const;
512 Function create(
const std::string& name,
513 const std::vector<std::string>& name_in,
514 const std::vector<std::string>& name_out,
532 Function dependent_fun(
const std::string& fname,
533 const std::vector<std::string>& s_in,
534 const std::vector<std::string>& s_out)
const;
537 Function transition(
const std::string& fname, casadi_int index)
const;
540 Function transition(
const std::string& fname)
const;
547 MX var(
const std::string& name)
const;
552 std::vector<std::string> der(
const std::vector<std::string>& name)
const;
556 MX der(
const MX& v)
const;
561 std::vector<std::string> pre(
const std::vector<std::string>& name)
const;
564 MX pre(
const MX& v)
const;
567 bool has_beq(
const std::string& name)
const;
570 MX beq(
const std::string& name)
const;
574 casadi_int value_reference(
const std::string& name)
const;
575 void set_value_reference(
const std::string& name, casadi_int val);
580 std::string
description(
const std::string& name)
const;
581 void set_description(
const std::string& name,
const std::string& val);
586 std::string type(
const std::string& name, casadi_int fmi_version = 3)
const;
587 void set_type(
const std::string& name,
const std::string& val);
591 std::string causality(
const std::string& name)
const;
606 void set_causality(
const std::string& name,
const std::string& val);
609 std::string variability(
const std::string& name)
const;
621 void set_variability(
const std::string& name,
const std::string& val);
624 std::string category(
const std::string& name)
const;
636 void set_category(
const std::string& name,
const std::string& val);
640 std::string initial(
const std::string& name)
const;
641 void set_initial(
const std::string& name,
const std::string& val);
646 std::string unit(
const std::string& name)
const;
647 void set_unit(
const std::string& name,
const std::string& val);
652 std::string display_unit(
const std::string& name)
const;
653 void set_display_unit(
const std::string& name,
const std::string& val);
657 casadi_int numel(
const std::string& name)
const;
660 std::vector<casadi_int> dimension(
const std::string& name)
const;
663 double start_time()
const;
666 void set_start_time(
double val);
669 double stop_time()
const;
672 void set_stop_time(
double val);
675 double tolerance()
const;
678 void set_tolerance(
double val);
681 double step_size()
const;
684 void set_step_size(
double val);
688 #if !(defined(SWIG) && defined(SWIGMATLAB))
690 std::string der(
const std::string& name)
const;
693 std::string pre(
const std::string& name)
const;
696 double attribute(
const std::string& a,
const std::string& name)
const;
699 void set_attribute(
const std::string& a,
const std::string& name,
double val);
702 double min(
const std::string& name)
const;
705 void set_min(
const std::string& name,
double val);
708 double max(
const std::string& name)
const;
711 void set_max(
const std::string& name,
double val);
714 double nominal(
const std::string& name)
const;
717 void set_nominal(
const std::string& name,
double val);
720 std::vector<double> start(
const std::string& name)
const;
723 void set_start(
const std::string& name,
double val);
726 void set_start(
const std::string& name,
const std::vector<double>& val);
732 void set(
const std::string& name,
double val);
735 void set(
const std::string& name,
const std::string& val);
743 std::vector<double> attribute(
const std::string& a,
const std::vector<std::string>& name)
const;
746 void set_attribute(
const std::string& a,
const std::vector<std::string>& name,
747 const std::vector<double>& val);
750 std::vector<double> min(
const std::vector<std::string>& name)
const;
753 void set_min(
const std::vector<std::string>& name,
const std::vector<double>& val);
756 std::vector<double> max(
const std::vector<std::string>& name)
const;
759 void set_max(
const std::vector<std::string>& name,
const std::vector<double>& val);
762 std::vector<double> nominal(
const std::vector<std::string>& name)
const;
765 void set_nominal(
const std::vector<std::string>& name,
const std::vector<double>& val);
768 std::vector<double> start(
const std::vector<std::string>& name)
const;
771 void set_start(
const std::vector<std::string>& name,
const std::vector<double>& val);
774 void set(
const std::vector<std::string>& name,
const std::vector<double>& val);
777 void set(
const std::vector<std::string>& name,
const std::vector<std::string>& val);
780 std::vector<GenericType> get(
const std::vector<std::string>& name)
const;
783 bool has(
const std::string& name)
const;
786 std::vector<std::string>
all()
const;
789 std::vector<std::string>
all(
const std::string& cat)
const;
791 #ifdef WITH_DEPRECATED_FEATURES
802 size_t add_variable_new(
const std::string& name, casadi_int n=1);
805 size_t add_variable_new(
const std::string& name,
const Sparsity& sp);
808 size_t add_variable_new(
const MX& new_v);
818 Function oracle(
bool sx =
false,
bool elim_w =
false,
bool lifted_calls =
false)
const;
823 Sparsity jac_sparsity(
const std::vector<std::string>& onames,
824 const std::vector<std::string>& inames)
const;
827 #ifdef WITH_DEPRECATED_FEATURES
829 Variable& new_variable(
const std::string& name, casadi_int numel = 1);
833 Variable& variable(
const std::string& name);
834 const Variable& variable(
const std::string& name)
const;
836 const Variable& variable(
size_t ind)
const;
837 size_t find(
const std::string& name)
const;
838 std::vector<size_t>
find(
const std::vector<std::string>& name)
const;
839 const std::string& name(
size_t ind)
const;
840 std::vector<std::string> name(
const std::vector<size_t>& ind)
const;
845 const MX& var(
size_t ind)
const;
846 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.