Skip to content
Snippets Groups Projects
localisometrycomponentfunction.hh 1.71 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef DUNE_GFE_FUNCTIONS_LOCALISOMETRYCOMPONENTFUNCTION_HH
    #define DUNE_GFE_FUNCTIONS_LOCALISOMETRYCOMPONENTFUNCTION_HH
    
    #include <dune/gfe/bendingisometryhelper.hh>
    
    namespace Dune::GFE::Impl
    {
      /**
       * \brief Local isometry component function that can be used as a Dune::Functions::DifferentiableFunction
       *
       * \tparam ctype Type used for coordinates on the reference element
       * \tparam LocalInterpolation Local function mapping into a product manifold of type RealTuple x Rotations
       */
      template<class ctype, class LocalInterpolation>
      class LocalIsometryComponentFunction
      {
      public:
        LocalIsometryComponentFunction(LocalInterpolation& localInterpolation,
                                       const int component)
          : localInterpolation_(localInterpolation),
          component_(component)
        {}
    
        auto operator() (const Dune::FieldVector<ctype,2>& x) const
        {
          return localInterpolation_.evaluate(x)[Dune::Indices::_0].globalCoordinates()[component_];
        }
    
        /**
         * \brief Obtain derivative function
         */
        friend auto derivative(const LocalIsometryComponentFunction& p)
        {
          return [&p](const Dune::FieldVector<ctype,2>& x)
                 {
                   auto derivativeQuaternion = p.localInterpolation_.evaluate(x)[Dune::Indices::_1];
                   auto derivativeMatrix = Rotation<ctype,3>::quaternionToMatrix(derivativeQuaternion);
                   auto reducedDerivativeMatrix = cancelLastMatrixColumn(derivativeMatrix);
                   return reducedDerivativeMatrix[p.component_];
                 };
        }
        LocalInterpolation& localInterpolation_;
        const int component_;
      };
    
    } // end namespace Dune::GFE::Impl
    
    #endif   //#ifndef DUNE_GFE_FUNCTIONS_LOCALISOMETRYCOMPONENTFUNCTION_HH