Geomi
EulerStepInternals.hpp
1 #ifndef DEF_VARIATIONAL_EULERSTEPINTERNALS
2 #define DEF_VARIATIONAL_EULERSTEPINTERNALS
3 
4 #include <vector>
5 
6 namespace Variational {
7 
8 template <typename T_M,
9  typename T_Q>
10 class EulerStepInternals : public Abstract::StepInternals<T_M,T_Q,Abstract::Problem<T_M,T_Q>>, public ::Abstract::NOXStep<T_Q,1>
11 {
12 protected:
17 
18 public:
21  { }
22 
24  getInitialGuess ()
25  {
26  NOXVector<T_Q::DOF> ret((1.0+1.0/m_h)*m_q1-(1.0/m_h)*m_q0);
27  return ret;
28  }
29 
30  T_Q
31  posFromVel (T_M h, T_Q q0, T_Q v0) const
32  { return q0+h*v0; }
33 
34  bool
35  computeF (NOXVector<T_Q::DOF>& f, const NOXVector<T_Q::DOF>& q)
36  {
37  f = m_problem.dLdv(m_q0,(m_q1-m_q0)/m_h)
38  + m_h * m_problem.dLdq(m_q1,(q-m_q1)/m_h)
39  - m_problem.dLdv(m_q1,(q-m_q1)/m_h);
40  return true;
41  }
42 
43  bool
44  computeJacobian (Eigen::Matrix<double,T_Q::DOF,T_Q::DOF>& J, const NOXVector<T_Q::DOF>& q)
45  {
46  J = m_problem.JvdLdq(m_q1,(q-m_q1)/m_h)
47  - m_problem.JvdLdv(m_q1,(q-m_q1)/m_h)/m_h;
48  return true;
49  }
50 };
51 } // namespace Variational
52 
53 #endif
Definition: Abstract_Problem.hpp:10
Definition: Abstract_LieProblem.hpp:6
Definition: EulerStepInternals.hpp:10
Definition: Abstract_StepInternals.hpp:13
Definition: NOXVector.hpp:14
Definition: Abstract_NOXStep.hpp:12