26 #include "dae_builder_internal.hpp"
36 #include "casadi_misc.hpp"
37 #include "exception.hpp"
38 #include "code_generator.hpp"
39 #include "calculus.hpp"
40 #include "xml_file.hpp"
41 #include "external.hpp"
42 #include "integrator.hpp"
47 #define THROW_ERROR(FNAME, WHAT) \
48 throw CasadiException("Error in DaeBuilder::" FNAME " for '" + this->name() \
49 + "' at " + CASADI_WHERE + ":\n" + std::string(WHAT));
60 return (*this)->name_;
65 return (*this)->time();
66 }
catch (std::exception&
e) {
67 THROW_ERROR(
"time",
e.what());
75 return (*this)->name((*this)->outputs_);
76 }
catch (std::exception&
e) {
77 THROW_ERROR(
"y",
e.what());
85 }
catch (std::exception&
e) {
86 THROW_ERROR(
"ode",
e.what());
94 }
catch (std::exception&
e) {
95 THROW_ERROR(
"alg",
e.what());
103 }
catch (std::exception&
e) {
104 THROW_ERROR(
"quad",
e.what());
112 }
catch (std::exception&
e) {
113 THROW_ERROR(
"zero",
e.what());
120 }
catch (std::exception&
e) {
121 THROW_ERROR(
"ydef",
e.what());
128 return (*this)->cdef();
129 }
catch (std::exception&
e) {
130 THROW_ERROR(
"cdef",
e.what());
138 }
catch (std::exception&
e) {
139 THROW_ERROR(
"ddef",
e.what());
147 }
catch (std::exception&
e) {
148 THROW_ERROR(
"wdef",
e.what());
154 return (*this)->init_lhs();
158 return (*this)->init_rhs();
163 return (*this)->name((*this)->outputs_);
164 }
catch (std::exception&
e) {
165 THROW_ERROR(
"outputs",
e.what());
172 return (*this)->name((*this)->derivatives_);
173 }
catch (std::exception&
e) {
174 THROW_ERROR(
"derivatives",
e.what());
181 return (*this)->name((*this)->initial_unknowns_);
182 }
catch (std::exception&
e) {
183 THROW_ERROR(
"initial_unknowns",
e.what());
190 return (*this)->has_t();
191 }
catch (std::exception&
e) {
192 THROW_ERROR(
"has_t",
e.what());
210 return (*this)->event_indicators_.size();
214 return (*this)->outputs_.size();
239 (*this)->load_fmi_description(
filename);
240 }
catch (std::exception&
e) {
241 THROW_ERROR(
"load_fmi_description",
e.what());
247 casadi_assert(!(*this)->symbolic_,
"Functionality only applies to imported standard FMUs");
248 return (*this)->provides_directional_derivatives_;
249 }
catch (std::exception&
e) {
250 THROW_ERROR(
"provides_directional_derivatives",
e.what());
257 return (*this)->export_fmu(opts);
258 }
catch (std::exception&
e) {
259 THROW_ERROR(
"export_fmu",
e.what());
265 (*this)->prune(prune_p, prune_u);
266 }
catch (std::exception&
e) {
267 THROW_ERROR(
"prune",
e.what());
274 }
catch (std::exception&
e) {
275 THROW_ERROR(
"tear",
e.what());
281 return (*this)->has(
name);
282 }
catch (std::exception&
e) {
283 THROW_ERROR(
"has",
e.what());
290 return (*this)->all();
291 }
catch (std::exception&
e) {
292 THROW_ERROR(
"all",
e.what());
299 return (*this)->all(to_enum<Category>(cat));
300 }
catch (std::exception&
e) {
301 THROW_ERROR(
"all",
e.what());
306 #ifdef WITH_DEPRECATED_FEATURES
309 return (*this)->new_variable(
name, {numel});
310 }
catch (std::exception&
e) {
311 THROW_ERROR(
"new_variable",
e.what());
317 return (*this)->variable(
name);
318 }
catch (std::exception&
e) {
319 THROW_ERROR(
"variable",
e.what());
325 return (*this)->variable(
name);
326 }
catch (std::exception&
e) {
327 THROW_ERROR(
"variable",
e.what());
333 return (*this)->variable(ind);
334 }
catch (std::exception&
e) {
335 THROW_ERROR(
"variable",
e.what());
341 return (*this)->variable(ind);
342 }
catch (std::exception&
e) {
343 THROW_ERROR(
"variable",
e.what());
349 return (*this)->find(
name);
350 }
catch (std::exception&
e) {
351 THROW_ERROR(
"find",
e.what());
358 return (*this)->find(
name);
359 }
catch (std::exception&
e) {
360 THROW_ERROR(
"find",
e.what());
367 return (*this)->name(ind);
368 }
catch (std::exception&
e) {
369 THROW_ERROR(
"name",
e.what());
370 static std::string dummy;
377 return (*this)->name(ind);
378 }
catch (std::exception&
e) {
379 THROW_ERROR(
"name",
e.what());
385 return (*this)->var(ind);
386 }
catch (std::exception&
e) {
387 THROW_ERROR(
"var",
e.what());
395 return (*this)->var(ind);
396 }
catch (std::exception&
e) {
397 THROW_ERROR(
"var",
e.what());
435 casadi_assert(!
has_t(),
"'t' already defined");
472 (*this)->outputs_.push_back(
find(
name));
476 (*this)->event_indicators_.push_back(
find(
name));
482 }
catch (std::exception&
e) {
483 THROW_ERROR(
"eliminate_d",
e.what());
490 }
catch (std::exception&
e) {
491 THROW_ERROR(
"eliminate_w",
e.what());
498 }
catch (std::exception&
e) {
499 THROW_ERROR(
"eliminate_quad",
e.what());
506 }
catch (std::exception&
e) {
507 THROW_ERROR(
"sort_d",
e.what());
514 }
catch (std::exception&
e) {
515 THROW_ERROR(
"sort_w",
e.what());
522 }
catch (std::exception&
e) {
523 THROW_ERROR(
"sort_z",
e.what());
529 (*this)->clear_cache_ =
true;
530 (*this)->indices(to_enum<Category>(v)).clear();
531 }
catch (std::exception&
e) {
532 THROW_ERROR(
"clear_all",
e.what());
538 (*this)->clear_cache_ =
true;
539 const std::vector<size_t>& new_ind = (*this)->find(
name);
541 (*this)->outputs_ = new_ind;
543 (*this)->indices(to_enum<Category>(v)) = new_ind;
545 }
catch (std::exception&
e) {
546 THROW_ERROR(
"set_all",
e.what());
554 auto vind = (*this)->find(v);
557 (*this)->reorder(
"y", (*this)->outputs_, vind);
560 (*this)->reorder(to_enum<Category>(cat), vind);
562 }
catch (std::exception&
e) {
563 THROW_ERROR(
"reorder",
e.what());
568 const std::string& variability,
const Dict& opts) {
572 }
catch (std::exception&
e) {
573 THROW_ERROR(
"add",
e.what());
580 return (*this)->add(
name, to_enum<Causality>(
causality), opts).v;
581 }
catch (std::exception&
e) {
582 THROW_ERROR(
"add",
e.what());
589 return (*this)->add(
name, opts).v;
590 }
catch (std::exception&
e) {
591 THROW_ERROR(
"add",
e.what());
597 const std::string& variability,
const MX& expr,
const Dict& opts) {
600 casadi_assert(expr.
is_symbolic(),
"Expression must be symbolic");
602 casadi_assert(
name == expr.
name(),
"Name must match expression");
606 }
catch (std::exception&
e) {
607 THROW_ERROR(
"add",
e.what());
611 #ifdef WITH_DEPRECATED_FEATURES
613 return add(
name,
"independent");
617 casadi_assert(!
name.empty(),
"Variable name is required");
618 return add(
name,
"parameter",
"tunable");
622 casadi_assert(!
name.empty(),
"Variable name is required");
627 casadi_assert(!
name.empty(),
"Variable name is required");
632 casadi_assert(!
name.empty(),
"Variable name is required");
637 casadi_assert(!
name.empty(),
"Variable name is required");
648 MX v =
add(
name,
"calculatedParameter",
"fixed");
668 }
catch (std::exception&
e) {
669 THROW_ERROR(
"set_beq",
e.what());
677 (*this)->eq(lhs, rhs, opts);
678 }
catch (std::exception&
e) {
679 THROW_ERROR(
"eq",
e.what());
685 (*this)->when(cond, eqs, opts);
686 }
catch (std::exception&
e) {
687 THROW_ERROR(
"when",
e.what());
693 return (*this)->assign(
name, val).name;
694 }
catch (std::exception&
e) {
695 THROW_ERROR(
"assign",
e.what());
696 return std::string();
702 return (*this)->reinit(
name, val).name;
703 }
catch (std::exception&
e) {
704 THROW_ERROR(
"reinit",
e.what());
705 return std::string();
712 }
catch (std::exception&
e) {
713 THROW_ERROR(
"set_init",
e.what());
719 (*this)->sanity_check();
720 }
catch (std::exception&
e) {
721 THROW_ERROR(
"sanity_check",
e.what());
727 return (*this)->variable(
name).v;
728 }
catch (std::exception&
e) {
729 THROW_ERROR(
"var",
e.what());
737 size_t ind = (*this)->find(
name);
739 ind = (*this)->variable(ind).der;
740 casadi_assert(ind !=
size_t(-1),
"No derivative expression for " +
name);
742 return (*this)->variable(ind).name;
743 }
catch (std::exception&
e) {
744 THROW_ERROR(
"der",
e.what());
745 return std::string();
752 static bool warned =
false;
754 casadi_warning(
"DaeBuilder::pre has not been implemented: Returning identity mapping");
758 }
catch (std::exception&
e) {
759 THROW_ERROR(
"pre",
e.what());
760 return std::string();
767 static bool warned =
false;
769 casadi_warning(
"DaeBuilder::pre has not been implemented: Returning identity mapping");
773 }
catch (std::exception&
e) {
774 THROW_ERROR(
"pre",
e.what());
779 std::vector<std::string>
DaeBuilder::der(
const std::vector<std::string>& name)
const {
781 std::vector<std::string> r(
name.size());
782 for (
size_t i = 0; i < r.size(); ++i) r[i] =
der(
name[i]);
784 }
catch (std::exception&
e) {
785 THROW_ERROR(
"der",
e.what());
790 std::vector<std::string>
DaeBuilder::pre(
const std::vector<std::string>& name)
const {
792 std::vector<std::string> r(
name.size());
793 for (
size_t i = 0; i < r.size(); ++i) r[i] =
pre(
name[i]);
795 }
catch (std::exception&
e) {
796 THROW_ERROR(
"pre",
e.what());
803 return !(*this)->variable(
name).has_beq();
804 }
catch (std::exception&
e) {
805 THROW_ERROR(
"has_beq",
e.what());
813 return (*this)->variable(v.
bind).
v;
814 }
catch (std::exception&
e) {
815 THROW_ERROR(
"beq",
e.what());
822 return (*this)->eliminate(to_enum<Category>(cat));
823 }
catch (std::exception&
e) {
824 THROW_ERROR(
"eliminate",
e.what());
830 return (*this)->sort(to_enum<Category>(cat));
831 }
catch (std::exception&
e) {
832 THROW_ERROR(
"sort",
e.what());
838 (*this)->lift(lift_shared, lift_calls);
839 }
catch (std::exception&
e) {
840 THROW_ERROR(
"lift",
e.what());
845 return (*this)->variable(
name).value_reference;
849 (*this)->variable(
name).value_reference = val;
853 return (*this)->variable(
name).description;
857 (*this)->variable(
name).description = val;
862 casadi_assert(fmi_version == 2 || fmi_version == 3,
"Only FMI version 2 or 3 supported");
864 if (fmi_version == 2) {
873 if (has_enum<TypeFmi2>(val) && !has_enum<Type>(val)) {
874 (*this)->variable(
name).type =
from_fmi2(to_enum<TypeFmi2>(val));
877 (*this)->variable(
name).type = to_enum<Type>(val);
883 }
catch (std::exception&
e) {
884 THROW_ERROR(
"causality",
e.what());
885 return std::string();
891 (*this)->set_causality((*this)->find(
name), to_enum<Causality>(val));
892 }
catch (std::exception&
e) {
893 THROW_ERROR(
"set_causality",
e.what());
900 }
catch (std::exception&
e) {
901 THROW_ERROR(
"variability",
e.what());
902 return std::string();
908 (*this)->set_variability((*this)->find(
name), to_enum<Variability>(val));
909 }
catch (std::exception&
e) {
910 THROW_ERROR(
"set_variability",
e.what());
917 }
catch (std::exception&
e) {
918 THROW_ERROR(
"category",
e.what());
919 return std::string();
925 (*this)->set_category((*this)->find(
name), to_enum<Category>(val));
926 }
catch (std::exception&
e) {
927 THROW_ERROR(
"set_category",
e.what());
936 (*this)->variable(
name).initial = to_enum<Initial>(val);
940 return (*this)->variable(
name).unit;
944 (*this)->variable(
name).unit = val;
948 return (*this)->variable(
name).display_unit;
952 (*this)->variable(
name).display_unit = val;
956 return (*this)->variable(
name).numel;
960 return (*this)->variable(
name).dimension;
965 return (*this)->start_time_;
966 }
catch (std::exception&
e) {
967 THROW_ERROR(
"start_time",
e.what());
974 (*this)->start_time_ = val;
975 }
catch (std::exception&
e) {
976 THROW_ERROR(
"set_start_time",
e.what());
982 return (*this)->stop_time_;
983 }
catch (std::exception&
e) {
984 THROW_ERROR(
"stop_time",
e.what());
991 (*this)->stop_time_ = val;
992 }
catch (std::exception&
e) {
993 THROW_ERROR(
"set_stop_time",
e.what());
999 return (*this)->tolerance_;
1000 }
catch (std::exception&
e) {
1001 THROW_ERROR(
"tolerance",
e.what());
1008 (*this)->tolerance_ = val;
1009 }
catch (std::exception&
e) {
1010 THROW_ERROR(
"set_tolerance",
e.what());
1016 return (*this)->step_size_;
1017 }
catch (std::exception&
e) {
1018 THROW_ERROR(
"step_size",
e.what());
1025 (*this)->step_size_ = val;
1026 }
catch (std::exception&
e) {
1027 THROW_ERROR(
"set_step_size",
e.what());
1032 const std::vector<std::string>& f_out) {
1034 (*this)->add_lc(
name, f_out);
1035 }
catch (std::exception&
e) {
1036 THROW_ERROR(
"add_lc",
e.what());
1041 const std::vector<std::string>& name_in,
1042 const std::vector<std::string>& name_out,
bool sx,
bool lifted_calls)
const {
1044 return (*this)->create(fname, name_in, name_out,
Dict(), sx, lifted_calls);
1045 }
catch (std::exception&
e) {
1046 THROW_ERROR(
"create",
e.what());
1052 const std::vector<std::string>& name_in,
1053 const std::vector<std::string>& name_out,
const Dict& opts)
const {
1055 return (*this)->create(fname, name_in, name_out, opts,
false,
false);
1056 }
catch (std::exception&
e) {
1057 THROW_ERROR(
"create",
e.what());
1065 }
catch (std::exception&
e) {
1066 THROW_ERROR(
"create",
e.what());
1073 return (*this)->add_fun(f);
1074 }
catch (std::exception&
e) {
1075 THROW_ERROR(
"add_fun",
e.what());
1081 const std::vector<std::string>& res,
const Dict& opts) {
1083 return (*this)->add_fun(
name, arg, res, opts);
1084 }
catch (std::exception&
e) {
1085 THROW_ERROR(
"add_fun",
e.what());
1091 casadi_assert(!
has_fun(
name),
"Function '" +
name +
"' already exists");
1097 return (*this)->has_fun(
name);
1098 }
catch (std::exception&
e) {
1099 THROW_ERROR(
"has_fun",
e.what());
1106 return (*this)->fun(
name);
1107 }
catch (std::exception&
e) {
1108 THROW_ERROR(
"fun",
e.what());
1116 Function all_eq = (*this)->gather_eq();
1123 casadi_warning(
"Duplicate function: '" + f.name() +
"', ignored");
1129 }
catch (std::exception&
e) {
1130 THROW_ERROR(
"gather_fun",
e.what());
1135 return (*this)->fun_;
1140 return (*this)->
oracle(sx, elim_w, lifted_calls);
1141 }
catch (std::exception&
e) {
1142 THROW_ERROR(
"oracle",
e.what());
1148 const std::vector<std::string>& s_in,
1149 const std::vector<std::string>& s_out)
const {
1151 return (*this)->dependent_fun(fname, s_in, s_out);
1152 }
catch (std::exception&
e) {
1153 THROW_ERROR(
"dependent_fun",
e.what());
1160 return (*this)->transition(fname, index);
1161 }
catch (std::exception&
e) {
1162 THROW_ERROR(
"transition",
e.what());
1169 return (*this)->transition(fname);
1170 }
catch (std::exception&
e) {
1171 THROW_ERROR(
"transition",
e.what());
1190 return (*this)->der(v);
1191 }
catch (std::exception&
e) {
1192 THROW_ERROR(
"der",
e.what());
1199 return (*this)->der(v);
1200 }
catch (std::exception&
e) {
1201 THROW_ERROR(
"der",
e.what());
1208 return (*this)->attribute(to_enum<Attribute>(a),
name);
1209 }
catch (std::exception&
e) {
1210 THROW_ERROR(
"attribute",
e.what());
1216 const std::vector<std::string>& name)
const {
1218 return (*this)->attribute(to_enum<Attribute>(a),
name);
1219 }
catch (std::exception&
e) {
1220 THROW_ERROR(
"attribute",
e.what());
1227 (*this)->set_attribute(to_enum<Attribute>(a),
name, val);
1228 }
catch (std::exception&
e) {
1229 THROW_ERROR(
"set_attribute",
e.what());
1234 const std::vector<double>& val) {
1236 (*this)->set_attribute(to_enum<Attribute>(a),
name, val);
1237 }
catch (std::exception&
e) {
1238 THROW_ERROR(
"set_attribute",
e.what());
1244 return (*this)->variable(
name).min;
1245 }
catch (std::exception&
e) {
1246 THROW_ERROR(
"min",
e.what());
1254 }
catch (std::exception&
e) {
1255 THROW_ERROR(
"min",
e.what());
1262 (*this)->variable(
name).min = val;
1263 }
catch (std::exception&
e) {
1264 THROW_ERROR(
"set_min",
e.what());
1271 }
catch (std::exception&
e) {
1272 THROW_ERROR(
"set_min",
e.what());
1278 return (*this)->variable(
name).max;
1279 }
catch (std::exception&
e) {
1280 THROW_ERROR(
"max",
e.what());
1288 }
catch (std::exception&
e) {
1289 THROW_ERROR(
"max",
e.what());
1296 (*this)->variable(
name).max = val;
1297 }
catch (std::exception&
e) {
1298 THROW_ERROR(
"set_max",
e.what());
1305 }
catch (std::exception&
e) {
1306 THROW_ERROR(
"set_max",
e.what());
1312 return (*this)->variable(
name).nominal;
1313 }
catch (std::exception&
e) {
1314 THROW_ERROR(
"nominal",
e.what());
1322 }
catch (std::exception&
e) {
1323 THROW_ERROR(
"nominal",
e.what());
1330 (*this)->variable(
name).nominal = val;
1331 }
catch (std::exception&
e) {
1332 THROW_ERROR(
"set_nominal",
e.what());
1339 }
catch (std::exception&
e) {
1340 THROW_ERROR(
"set_mininal",
e.what());
1346 return (*this)->attribute(
Attribute::START, std::vector<std::string>{name});
1347 }
catch (std::exception&
e) {
1348 THROW_ERROR(
"start",
e.what());
1356 }
catch (std::exception&
e) {
1357 THROW_ERROR(
"start",
e.what());
1365 }
catch (std::exception&
e) {
1366 THROW_ERROR(
"set_start",
e.what());
1373 }
catch (std::exception&
e) {
1374 THROW_ERROR(
"set_start",
e.what());
1381 }
catch (std::exception&
e) {
1382 THROW_ERROR(
"set_start",
e.what());
1389 }
catch (std::exception&
e) {
1390 THROW_ERROR(
"reset",
e.what());
1397 }
catch (std::exception&
e) {
1398 THROW_ERROR(
"set",
e.what());
1405 }
catch (std::exception&
e) {
1406 THROW_ERROR(
"set",
e.what());
1410 void DaeBuilder::set(
const std::vector<std::string>& name,
const std::vector<double>& val) {
1413 }
catch (std::exception&
e) {
1414 THROW_ERROR(
"set",
e.what());
1419 const std::vector<std::string>& val) {
1422 }
catch (std::exception&
e) {
1423 THROW_ERROR(
"set",
e.what());
1428 return get(std::vector<std::string>{
name}).front();
1438 std::vector<GenericType> ret;
1439 ret.reserve(
name.size());
1440 for (
const std::string& n :
name) ret.push_back(stats.at(n));
1442 }
catch (std::exception&
e) {
1443 THROW_ERROR(
"get",
e.what());
1449 const std::vector<std::string>& inames)
const {
1451 return (*this)->jac_sparsity((*this)->find(onames), (*this)->find(inames));
1452 }
catch (std::exception&
e) {
1453 THROW_ERROR(
"jac_sparsity",
e.what());
double start_time() const
Get the start time.
void when(const MX &cond, const std::vector< std::string > &eqs, const Dict &opts=Dict())
Add when equations.
bool has_fun(const std::string &name) const
Does a particular function already exist?
void register_w(const std::string &name)
std::vector< Function > fun() const
Get all functions.
void set_stop_time(double val)
Set the stop time.
casadi_int nu() const
Free controls.
double nominal(const std::string &name) const
Get the nominal value, single variable.
void set_beq(const std::string &name, const MX &val)
[DEPRECATED] Replaced by eq
void sort_z(const std::vector< std::string > &z_order)
[DEPRECATED] Use reorder("z", new_order)
void sanity_check() const
Check if dimensions match.
Function add_fun(const std::string &name, const std::vector< std::string > &arg, const std::vector< std::string > &res, const Dict &opts=Dict())
Add a function from loaded expressions.
bool has(const std::string &name) const
Check if a particular variable exists.
const std::string & name() const
Name of instance.
MX add_variable(const std::string &name, casadi_int n=1)
[DEPRECATED] Use add
std::string variability(const std::string &name) const
Get the variability.
Variable & variable(const std::string &name)
void set_value_reference(const std::string &name, casadi_int val)
casadi_int nx() const
Differential states.
void set_start(const std::string &name, double val)
Set the start attribute, single variable.
void sort_d()
[DEPRECATED] Use sort("d")
static bool test_cast(const SharedObjectInternal *ptr)
Check if a particular cast is allowed.
double tolerance() const
Get the tolerance.
std::string initial(const std::string &name) const
std::vector< casadi_int > dimension(const std::string &name) const
Get the dimensions of a variable.
Function dependent_fun(const std::string &fname, const std::vector< std::string > &s_in, const std::vector< std::string > &s_out) const
Construct a function for evaluating dependent parameters.
double max(const std::string &name) const
Get the upper bound, single variable.
std::string unit(const std::string &name) const
void clear_all(const std::string &v)
[DEPRECATED] Use set_variability, set_causality or set_category to change variable category
std::vector< std::string > all() const
Get a list of all variables.
void set_max(const std::string &name, double val)
Set the upper bound, single variable.
std::vector< MX > quad() const
Quadrature equations.
Function oracle(bool sx=false, bool elim_w=false, bool lifted_calls=false) const
Get the (cached) oracle, SX or MX.
const MX & t() const
[DEPRECATED] Renamed "time"
MX add_t(const std::string &name="t")
[DEPRECATED] Replaced by add
std::string category(const std::string &name) const
Get the variable category.
void register_e(const std::string &name)
MX add_p(const std::string &name=std::string())
[DEPRECATED] Replaced by add
casadi_int nd() const
Dependent parameters.
void set_attribute(const std::string &a, const std::string &name, double val)
Set an attribute, single variable.
std::vector< MX > init_lhs() const
Initial conditions, left-hand-side.
void reorder(const std::string &cat, const std::vector< std::string > &v)
Reorder variables in a category.
double step_size() const
Get the step size.
MX add_c(const std::string &name, const MX &new_cdef)
[DEPRECATED] Replaced by add and eq
void gather_fun(casadi_int max_depth=-1)
Collect embedded functions from the expression graph.
const MX & time() const
Expression for independent variable (usually time)
std::string causality(const std::string &name) const
Get the causality.
casadi_int nc() const
Named constants.
bool provides_directional_derivatives() const
Does the FMU provide support for analytic derivatives.
void set_tolerance(double val)
Set the tolerance.
void register_c(const std::string &name)
void eliminate_w()
[DEPRECATED] Use eliminate("w")
void set_min(const std::string &name, double val)
Set the lower bound, single variable.
std::string assign(const std::string &name, const MX &val)
Assignment inside a when-equation or if-else equation.
void tear()
Identify iteration variables and residual equations using naming convention.
Function transition() const
Construct an event transition function, default naming.
std::vector< double > start(const std::string &name) const
Get the start attribute, single variable.
void eliminate_quad()
[DEPRECATED] Use eliminate("q")
void set_type(const std::string &name, const std::string &val)
double attribute(const std::string &a, const std::string &name) const
Get an attribute, single variable.
void set_unit(const std::string &name, const std::string &val)
std::vector< std::string > derivatives() const
Model structure: derivatives.
std::vector< std::string > e() const
[DEPRECATED] Use all("zero") */
void sort(const std::string &cat)
Sort dependent parameters.
double stop_time() const
Get the stop time.
Function create() const
Create a function with standard integrator DAE signature, default naming.
double min(const std::string &name) const
Get the lower bound, single variable.
void set_display_unit(const std::string &name, const std::string &val)
std::string reinit(const std::string &name, const MX &val)
Reinitialize a state inside when-equations.
void register_z(const std::string &name)
void set_init(const std::string &name, const MX &init_rhs)
Specify the initial equation for a variable.
void add_lc(const std::string &name, const std::vector< std::string > &f_out)
Add a named linear combination of output expressions.
void eq(const MX &lhs, const MX &rhs, const Dict &opts=Dict())
Add a simple equation.
MX add_u(const std::string &name=std::string())
[DEPRECATED] Replaced by add
void set_category(const std::string &name, const std::string &val)
Set the variable category, if permitted.
casadi_int nz() const
Algebraic variables.
std::vector< MX > zero() const
Zero-crossing functions.
bool has_beq(const std::string &name) const
Does a variable have a binding equation?
std::string display_unit(const std::string &name) const
void register_u(const std::string &name)
void set_nominal(const std::string &name, double val)
Set the nominal value, single variable.
std::vector< std::string > der(const std::vector< std::string > &name) const
Get the time derivative of model variables.
void set_causality(const std::string &name, const std::string &val)
Set the causality, if permitted.
void prune(bool prune_p=true, bool prune_u=true)
Prune unused controls.
casadi_int nq() const
Quadrature states.
std::vector< MX > ydef() const
Definitions of output variables.
std::vector< std::string > pre(const std::vector< std::string > &name) const
Get the pre-variables of model variables.
std::vector< MX > alg() const
Algebraic equations.
MX add_q(const std::string &name=std::string())
[DEPRECATED] Replaced by add
MX add_y(const std::string &name, const MX &new_ydef)
[DEPRECATED] Replaced by add and eq
std::vector< MX > init_rhs() const
Initial conditions, right-hand-side.
void set_variability(const std::string &name, const std::string &val)
Set the variability, if permitted.
MX add(const std::string &name, const std::string &causality, const std::string &variability, const Dict &opts=Dict())
Add a new model variable.
bool has_t() const
Is there a time variable?
void set_start_time(double val)
Set the start time.
DaeBuilder()
Default constructor.
void set(const std::string &name, double val)
void eliminate(const std::string &cat)
Eliminate all dependent parameters.
casadi_int value_reference(const std::string &name) const
MX add_z(const std::string &name=std::string())
[DEPRECATED] Replaced by add
std::vector< std::string > export_fmu(const Dict &opts=Dict())
Export instance into an FMU.
Sparsity jac_sparsity(const std::vector< std::string > &onames, const std::vector< std::string > &inames) const
Get Jacobian sparsity.
casadi_int np() const
Parameters.
void lift(bool lift_shared=true, bool lift_calls=true)
Lift problem formulation by extracting shared subexpressions.
std::vector< MX > ode() const
Ordinary differential equations (ODE)
void sort_w()
[DEPRECATED] Use sort("w")
MX var(const std::string &name) const
void register_y(const std::string &name)
MX add_x(const std::string &name=std::string())
[DEPRECATED] Replaced by add
void register_q(const std::string &name)
size_t add_variable_new(const std::string &name, casadi_int n=1)
[DEPRECATED] Use add
casadi_int ny() const
Output variables.
const DaeBuilderInternal * operator->() const
Access a member function or object.
std::vector< MX > cdef() const
Definitions of named constants.
void set_all(const std::string &v, const std::vector< std::string > &name)
[DEPRECATED] Use set_variability, set_causality, set_category and/or reorder
void register_t(const std::string &name)
void load_fmi_description(const std::string &filename)
Import problem description from FMI or XML.
void register_x(const std::string &name)
casadi_int numel(const std::string &name) const
Get the number of elements of a variable.
void register_p(const std::string &name)
casadi_int nw() const
Dependent variables.
MX add_w(const std::string &name, const MX &new_wdef)
[DEPRECATED] Replaced by add and eq
void set_step_size(double val)
Set the step size.
std::vector< MX > ddef() const
Definitions of dependent parameters.
std::vector< std::string > outputs() const
Model structure: outputs.
std::vector< std::string > initial_unknowns() const
Model structure: initial unknowns.
void register_d(const std::string &name)
Variable & new_variable(const std::string &name, casadi_int numel=1)
[DEPRECATED] Use add
casadi_int nzero() const
Zero-crossing functions.
std::string description(const std::string &name) const
void set_initial(const std::string &name, const std::string &val)
size_t find(const std::string &name) const
void eliminate_d()
[DEPRECATED] Use eliminate("d")
MX beq(const std::string &name) const
Get the binding equation for a variable.
std::vector< std::string > y() const
Outputs */.
std::string type(const std::string &name, casadi_int fmi_version=3) const
MX add_d(const std::string &name, const MX &new_ddef)
[DEPRECATED] Replaced by add and eq
std::vector< MX > wdef() const
Dependent variables and corresponding definitions.
void set_description(const std::string &name, const std::string &val)
virtual const Function & oracle() const
Get oracle.
std::vector< Function > find_functions(casadi_int max_depth=-1) const
Get all functions embedded in the expression graphs.
Dict stats(int mem=0) const
Get all statistics obtained at the end of the last evaluate call.
static MX sym(const std::string &name, casadi_int nrow=1, casadi_int ncol=1)
Create an nrow-by-ncol symbolic primitive.
SharedObjectInternal * get() const
Get a const pointer to the node.
void own(SharedObjectInternal *node)
SharedObjectInternal * operator->() const
Access a member function or object.
Generic data type, can hold different types such as bool, casadi_int, std::string etc.
std::string name() const
Get the name.
bool is_symbolic() const
Check if symbolic.
static Sparsity dense(casadi_int nrow, casadi_int ncol=1)
Create a dense rectangular sparsity pattern *.
std::vector< std::string > dyn_out()
Get output scheme of a DAE function.
std::vector< std::string > dyn_in()
Get input scheme of a DAE function.
Type from_fmi2(TypeFmi2 v)
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
std::string to_string(TypeFmi2 v)
const double nan
Not a number.
std::vector< casadi_int > path(const std::vector< casadi_int > &map, casadi_int i_start)
Function external(const std::string &name, const Importer &li, const Dict &opts)
Load a just-in-time compiled external function.
std::string filename(const std::string &path)
Holds expressions and meta-data corresponding to a physical quantity evolving in time.
casadi_int index
Location in variable vector.
MX v
Variable expression (always a vector)