TVM  0.9.4
Function.h
Go to the documentation of this file.
1 
3 #pragma once
4 
7 
8 #include <Eigen/Core>
9 
10 #include <map>
11 
12 namespace tvm
13 {
14 
15 namespace function
16 {
17 
18 namespace abstract
19 {
20 
45 {
46 public:
47  SET_OUTPUTS(Function, Velocity, NormalAcceleration, JDot)
48 
49 
54  virtual const Eigen::VectorXd & velocity() const;
55  virtual const Eigen::VectorXd & normalAcceleration() const;
56  virtual MatrixConstRef JDot(const Variable & x) const;
57 
58 protected:
59  struct slice_jdot
60  {
61  using Type = MatrixRef;
63  static Type get(Eigen::MatrixXd & M, const Range & r) { return M.middleCols(r.start, r.dim); }
64  static ConstType get(const Eigen::MatrixXd & M, const Range & r) { return M.middleCols(r.start, r.dim); }
65  };
72  Function(int m = 0);
73 
78  Function(Space image);
79 
81  void resizeCache() override;
85 
86  void addVariable_(VariablePtr v) override;
87  void removeVariable_(VariablePtr v) override;
88 
89  // cache
90  Eigen::VectorXd velocity_;
91  Eigen::VectorXd normalAcceleration_;
92  utils::internal::MapWithVariableAsKey<Eigen::MatrixXd, slice_jdot> JDot_;
93 
94 private:
95  // we retain the variables' derivatives shared_ptr to ensure the reference is never lost
96  std::vector<VariablePtr> variablesDot_;
97 };
98 
99 inline const Eigen::VectorXd & Function::velocity() const { return velocity_; }
100 
101 inline const Eigen::VectorXd & Function::normalAcceleration() const { return normalAcceleration_; }
102 
103 inline MatrixConstRef Function::JDot(const Variable & x) const
104 { return JDot_.at(&x, tvm::utils::internal::with_sub{}); }
105 
106 } // namespace abstract
107 
108 } // namespace function
109 
110 } // namespace tvm
#define SET_OUTPUTS(SelfT,...)
Definition: Outputs.h:113
#define TVM_DLLAPI
Definition: api.h:35
Definition: Range.h:19
int dim
Definition: Range.h:24
int start
Definition: Range.h:23
Definition: Space.h:33
Definition: Variable.h:49
Definition: Function.h:45
utils::internal::MapWithVariableAsKey< Eigen::MatrixXd, slice_jdot > JDot_
Definition: Function.h:92
Eigen::VectorXd normalAcceleration_
Definition: Function.h:91
virtual const Eigen::VectorXd & normalAcceleration() const
Definition: Function.h:101
void removeVariable_(VariablePtr v) override
virtual MatrixConstRef JDot(const Variable &x) const
Definition: Function.h:103
void addVariable_(VariablePtr v) override
Eigen::VectorXd velocity_
Definition: Function.h:90
virtual const Eigen::VectorXd & velocity() const
Definition: Function.h:99
Definition: FirstOrderProvider.h:43
Definition: Clock.h:12
std::shared_ptr< Variable > VariablePtr
Definition: defs.h:65
Eigen::Ref< Eigen::MatrixXd > MatrixRef
Definition: defs.h:49
Eigen::Ref< const Eigen::MatrixXd > MatrixConstRef
Definition: defs.h:48
static ConstType get(const Eigen::MatrixXd &M, const Range &r)
Definition: Function.h:64
static Type get(Eigen::MatrixXd &M, const Range &r)
Definition: Function.h:63
MatrixConstRef ConstType
Definition: Function.h:62
MatrixRef Type
Definition: Function.h:61