diff --git a/dune/gfe/rodlocalstiffness.hh b/dune/gfe/rodlocalstiffness.hh index 2d18ec674c3a512a6b5ad773dd085e652d558208..aefa7887305bf63f921cfe82f2b04901abff6b4b 100644 --- a/dune/gfe/rodlocalstiffness.hh +++ b/dune/gfe/rodlocalstiffness.hh @@ -96,17 +96,9 @@ public: referenceConfiguration_ = referenceConfiguration; } - /** \brief Local element energy for a P1 element */ - virtual RT energy (const Entity& e, - const std::array<RigidBodyMotion<RT,3>, dim+1>& localSolution) const; - + /** \brief Compute local element energy */ virtual RT energy (const typename Basis::LocalView& localView, - const std::vector<RigidBodyMotion<RT,3> >& localSolution) const override - { - assert(localSolution.size()==2); - std::array<RigidBodyMotion<RT,3>, 2> localSolutionArray = {localSolution[0], localSolution[1]}; - return energy(localView.element(),localSolutionArray); - } + const std::vector<RigidBodyMotion<RT,3> >& localSolution) const override; /** \brief Assemble the element gradient of the energy functional */ void assembleGradient(const typename Basis::LocalView& localView, @@ -157,10 +149,12 @@ protected: template <class GridType, class RT> RT RodLocalStiffness<GridType, RT>:: -energy(const Entity& element, - const std::array<RigidBodyMotion<RT,3>, dim+1>& localSolution - ) const +energy(const typename Basis::LocalView& localView, + const std::vector<RigidBodyMotion<RT,3> >& localSolution) const { + assert(localSolution.size()==2); + const auto& element = localView.element(); + RT energy = 0; std::vector<RigidBodyMotion<RT,3> > localReferenceConfiguration;