83 static const std::string TYPE;
113 inline Enode(
size_t index,
114 const std::string& name =
"") :
122 inline Enode(
size_t index,
132 inline virtual ~Enode() {
135 inline const std::vector<Vnode<Base>*>& variables()
const {
139 inline const std::vector<Vnode<Base>*>& originalVariables()
const {
143 inline void addVariable(Vnode<Base>* j) {
146 if (!j->isDeleted()) {
148 j->addEquation(
this);
153 inline Vnode<Base>* assignmentVariable()
const {
157 inline void setAssigmentVariable(Vnode<Base>& j) {
181 inline void deleteNode(Vnode<Base>* j) {
187 inline void setDerivative(Enode<Base>* difEq) {
191 virtual const std::string& name()
const {
195 virtual std::string nodeType() {
220 static const std::string TYPE;
258 inline Vnode(
size_t index,
260 const std::string& name) :
272 inline Vnode(
size_t index,
275 const std::string& name =
"") :
283 name_(name.empty() ?
"d" + derivativeOf->name() +
"dt" : name) {
289 inline virtual ~Vnode() {
292 inline virtual const std::string& name()
const {
296 inline size_t tapeIndex()
const {
300 inline void setTapeIndex(
size_t tapeIndex) {
304 inline std::vector<Enode<Base>*>& equations() {
308 inline const std::vector<Enode<Base>*>& equations()
const {
334 inline Vnode<Base>* originalVariable(
size_t origVarSize) {
342 inline bool isDeleted()
const {
346 inline void makeParameter(std::ostream& out = std::cout,
347 Verbosity verbosity = Verbosity::None) {
349 deleteNode(out, verbosity);
352 inline bool isParameter()
const {
356 inline void deleteNode(std::ostream& out = std::cout,
357 Verbosity verbosity = Verbosity::None) {
358 if (verbosity >= Verbosity::High)
359 out <<
"Deleting " << *
this <<
"\n";
362 for (Enode<Base>* i :
enodes_) {
368 inline Enode<Base>* assignmentEquation()
const {
372 inline void setAssignmentEquation(Enode<Base>& i,
373 std::ostream& out = std::cout,
374 Verbosity verbosity = Verbosity::None) {
375 if (verbosity >= Verbosity::High)
376 out <<
" Assigning " << *
this <<
" to " << i <<
"\n";
379 i.setAssigmentVariable(*
this);
382 virtual std::string nodeType() {
386 inline void setDerivative(Vnode<Base>* div) {
390 unsigned int order()
const {
400 inline void addEquation(Enode<Base>* i) {
407 friend class Enode<Base>;