diff --git a/dune/gfe/chiralskyrmionenergy.hh b/dune/gfe/chiralskyrmionenergy.hh index 99ee3ca9da0fffb4d619051bc31e0e1b67736501..943e16ab588c8d462b874d895b7df655eec688f4 100644 --- a/dune/gfe/chiralskyrmionenergy.hh +++ b/dune/gfe/chiralskyrmionenergy.hh @@ -16,13 +16,15 @@ namespace GFE { * The energy is discussed in: * - Christof Melcher, "Chiral skyrmions in the plane", Proc. of the Royal Society, online DOI DOI: 10.1098/rspa.2014.0394 */ -template<class GridView, class LocalFiniteElement, class field_type> +template<class Basis, class field_type> class ChiralSkyrmionEnergy -: public LocalGeodesicFEStiffness<GridView,LocalFiniteElement,UnitVector<field_type,3> > +: public LocalGeodesicFEStiffness<Basis,UnitVector<field_type,3> > { // various useful types typedef UnitVector<field_type,3> TargetSpace; - typedef typename GridView::Grid::ctype DT; + typedef typename Basis::GridView GridView; + typedef typename Basis::LocalView::Tree::FiniteElement LocalFiniteElement; + typedef typename GridView::ctype DT; typedef typename TargetSpace::ctype RT; typedef typename GridView::template Codim<0>::Entity Entity; @@ -49,9 +51,9 @@ public: field_type kappa_; }; -template <class GridView, class LocalFiniteElement, class field_type> -typename ChiralSkyrmionEnergy<GridView, LocalFiniteElement, field_type>::RT -ChiralSkyrmionEnergy<GridView, LocalFiniteElement, field_type>:: +template <class Basis, class field_type> +typename ChiralSkyrmionEnergy<Basis, field_type>::RT +ChiralSkyrmionEnergy<Basis, field_type>:: energy(const Entity& element, const LocalFiniteElement& localFiniteElement, const std::vector<TargetSpace>& localConfiguration) const diff --git a/dune/gfe/geodesicfeassembler.hh b/dune/gfe/geodesicfeassembler.hh index 8528b9110871fc1b8761e83574275442e37792ae..42e67c44977e0c38a367e90b631a1914dec27bc6 100644 --- a/dune/gfe/geodesicfeassembler.hh +++ b/dune/gfe/geodesicfeassembler.hh @@ -32,15 +32,13 @@ public: protected: - LocalGeodesicFEStiffness<GridView, - typename Basis::LocalView::Tree::FiniteElement, - TargetSpace>* localStiffness_; + LocalGeodesicFEStiffness<Basis,TargetSpace>* localStiffness_; public: /** \brief Constructor for a given grid */ GeodesicFEAssembler(const Basis& basis, - LocalGeodesicFEStiffness<GridView,typename Basis::LocalView::Tree::FiniteElement, TargetSpace>* localStiffness) + LocalGeodesicFEStiffness<Basis, TargetSpace>* localStiffness) : basis_(basis), basisIndexSet_(basis_.indexSet()), localStiffness_(localStiffness) diff --git a/dune/gfe/harmonicenergystiffness.hh b/dune/gfe/harmonicenergystiffness.hh index bd9134007af5f9b2c75c6341b965a184508c6ce6..170973189ad4d2e710a47da1e491da7fa99d2f3f 100644 --- a/dune/gfe/harmonicenergystiffness.hh +++ b/dune/gfe/harmonicenergystiffness.hh @@ -7,12 +7,14 @@ #include "localgeodesicfestiffness.hh" #include "localgeodesicfefunction.hh" -template<class GridView, class LocalFiniteElement, class TargetSpace> +template<class Basis, class TargetSpace> class HarmonicEnergyLocalStiffness - : public LocalGeodesicFEStiffness<GridView,LocalFiniteElement,TargetSpace> + : public LocalGeodesicFEStiffness<Basis,TargetSpace> { // grid types - typedef typename GridView::Grid::ctype DT; + typedef typename Basis::GridView GridView; + typedef typename Basis::LocalView::Tree::FiniteElement LocalFiniteElement; + typedef typename GridView::ctype DT; typedef typename TargetSpace::ctype RT; typedef typename GridView::template Codim<0>::Entity Entity; @@ -31,9 +33,9 @@ public: }; -template <class GridView, class LocalFiniteElement, class TargetSpace> -typename HarmonicEnergyLocalStiffness<GridView, LocalFiniteElement, TargetSpace>::RT -HarmonicEnergyLocalStiffness<GridView, LocalFiniteElement, TargetSpace>:: +template <class Basis, class TargetSpace> +typename HarmonicEnergyLocalStiffness<Basis, TargetSpace>::RT +HarmonicEnergyLocalStiffness<Basis, TargetSpace>:: energy(const Entity& element, const LocalFiniteElement& localFiniteElement, const std::vector<TargetSpace>& localSolution) const diff --git a/dune/gfe/localgeodesicfeadolcstiffness.hh b/dune/gfe/localgeodesicfeadolcstiffness.hh index f31251cf858079fd621de379feed1b1fa52256e6..412a0948a0a1580b79a72b632ba0e63c689e9521 100644 --- a/dune/gfe/localgeodesicfeadolcstiffness.hh +++ b/dune/gfe/localgeodesicfeadolcstiffness.hh @@ -18,12 +18,14 @@ /** \brief Assembles energy gradient and Hessian with ADOL-C (automatic differentiation) */ -template<class GridView, class LocalFiniteElement, class TargetSpace> +template<class Basis, class TargetSpace> class LocalGeodesicFEADOLCStiffness - : public LocalGeodesicFEStiffness<GridView,LocalFiniteElement,TargetSpace> + : public LocalGeodesicFEStiffness<Basis,TargetSpace> { // grid types - typedef typename GridView::Grid::ctype DT; + typedef typename Basis::GridView GridView; + typedef typename Basis::LocalView::Tree::FiniteElement LocalFiniteElement; + typedef typename GridView::ctype DT; typedef typename TargetSpace::ctype RT; typedef typename GridView::template Codim<0>::Entity Entity; @@ -40,7 +42,7 @@ public: //! Dimension of the embedding space enum { embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension }; - LocalGeodesicFEADOLCStiffness(const LocalGeodesicFEStiffness<GridView, LocalFiniteElement, ATargetSpace>* energy) + LocalGeodesicFEADOLCStiffness(const LocalGeodesicFEStiffness<Basis, ATargetSpace>* energy) : localEnergy_(energy) {} @@ -67,14 +69,14 @@ public: const std::vector<TargetSpace>& localSolution, std::vector<typename TargetSpace::TangentVector>& localGradient); - const LocalGeodesicFEStiffness<GridView, LocalFiniteElement, ATargetSpace>* localEnergy_; + const LocalGeodesicFEStiffness<Basis, ATargetSpace>* localEnergy_; }; -template <class GridView, class LocalFiniteElement, class TargetSpace> -typename LocalGeodesicFEADOLCStiffness<GridView, LocalFiniteElement, TargetSpace>::RT -LocalGeodesicFEADOLCStiffness<GridView, LocalFiniteElement, TargetSpace>:: +template <class Basis, class TargetSpace> +typename LocalGeodesicFEADOLCStiffness<Basis, TargetSpace>::RT +LocalGeodesicFEADOLCStiffness<Basis, TargetSpace>:: energy(const Entity& element, const LocalFiniteElement& localFiniteElement, const std::vector<TargetSpace>& localSolution) const @@ -122,8 +124,8 @@ energy(const Entity& element, } -template <class GridView, class LocalFiniteElement, class TargetSpace> -void LocalGeodesicFEADOLCStiffness<GridView, LocalFiniteElement, TargetSpace>:: +template <class Basis, class TargetSpace> +void LocalGeodesicFEADOLCStiffness<Basis, TargetSpace>:: assembleGradient(const Entity& element, const LocalFiniteElement& localFiniteElement, const std::vector<TargetSpace>& localSolution, @@ -170,8 +172,8 @@ assembleGradient(const Entity& element, // To compute the Hessian we need to compute the gradient anyway, so we may // as well return it. This saves assembly time. // /////////////////////////////////////////////////////////// -template <class GridType, class LocalFiniteElement, class TargetSpace> -void LocalGeodesicFEADOLCStiffness<GridType, LocalFiniteElement, TargetSpace>:: +template <class Basis, class TargetSpace> +void LocalGeodesicFEADOLCStiffness<Basis, TargetSpace>:: assembleGradientAndHessian(const Entity& element, const LocalFiniteElement& localFiniteElement, const std::vector<TargetSpace>& localSolution, diff --git a/dune/gfe/localgeodesicfestiffness.hh b/dune/gfe/localgeodesicfestiffness.hh index a49e84cea5a96c4457d118c760a3701a8f92d347..ed782db175a0af8affa8e8e480f1d8e752313356 100644 --- a/dune/gfe/localgeodesicfestiffness.hh +++ b/dune/gfe/localgeodesicfestiffness.hh @@ -7,11 +7,13 @@ #include <dune/istl/matrix.hh> -template<class GridView, class LocalFiniteElement, class TargetSpace> +template<class Basis, class TargetSpace> class LocalGeodesicFEStiffness { // grid types - typedef typename GridView::Grid::ctype DT; + typedef typename Basis::GridView GridView; + typedef typename Basis::LocalView::Tree::FiniteElement LocalFiniteElement; + typedef typename GridView::ctype DT; typedef typename TargetSpace::ctype RT; typedef typename GridView::template Codim<0>::Entity Entity; @@ -63,8 +65,8 @@ public: }; -template <class GridView, class LocalFiniteElement, class TargetSpace> -void LocalGeodesicFEStiffness<GridView, LocalFiniteElement, TargetSpace>:: +template <class Basis, class TargetSpace> +void LocalGeodesicFEStiffness<Basis, TargetSpace>:: assembleGradient(const Entity& element, const LocalFiniteElement& localFiniteElement, const std::vector<TargetSpace>& localSolution, @@ -77,8 +79,8 @@ assembleGradient(const Entity& element, // /////////////////////////////////////////////////////////// // Compute gradient by finite-difference approximation // /////////////////////////////////////////////////////////// -template <class GridType, class LocalFiniteElement, class TargetSpace> -void LocalGeodesicFEStiffness<GridType, LocalFiniteElement, TargetSpace>:: +template <class Basis, class TargetSpace> +void LocalGeodesicFEStiffness<Basis, TargetSpace>:: assembleGradientAndHessian(const Entity& element, const LocalFiniteElement& localFiniteElement, const std::vector<TargetSpace>& localSolution, diff --git a/src/harmonicmaps.cc b/src/harmonicmaps.cc index 101bc48229a769cd8bc2ef39f14585a8849db02f..69f64917d23bb5d24503566f84e594ce426e7f36 100644 --- a/src/harmonicmaps.cc +++ b/src/harmonicmaps.cc @@ -177,25 +177,23 @@ int main (int argc, char *argv[]) try // Assembler using ADOL-C typedef TargetSpace::rebind<adouble>::other ATargetSpace; - std::shared_ptr<LocalGeodesicFEStiffness<GridType::LeafGridView,FEBasis::LocalView::Tree::FiniteElement,ATargetSpace> > localEnergy; + std::shared_ptr<LocalGeodesicFEStiffness<FEBasis,ATargetSpace> > localEnergy; std::string energy = parameterSet.get<std::string>("energy"); if (energy == "harmonic") { - localEnergy.reset(new HarmonicEnergyLocalStiffness<GridType::LeafGridView, FEBasis::LocalView::Tree::FiniteElement, ATargetSpace>); + localEnergy.reset(new HarmonicEnergyLocalStiffness<FEBasis, ATargetSpace>); } else if (energy == "chiral_skyrmion") { - localEnergy.reset(new GFE::ChiralSkyrmionEnergy<GridType::LeafGridView, FEBasis::LocalView::Tree::FiniteElement, adouble>(parameterSet.sub("energyParameters"))); + localEnergy.reset(new GFE::ChiralSkyrmionEnergy<FEBasis, adouble>(parameterSet.sub("energyParameters"))); } else DUNE_THROW(Exception, "Unknown energy type '" << energy << "'"); - LocalGeodesicFEADOLCStiffness<GridType::LeafGridView, - FEBasis::LocalView::Tree::FiniteElement, - TargetSpace> localGFEADOLCStiffness(localEnergy.get()); + LocalGeodesicFEADOLCStiffness<FEBasis,TargetSpace> localGFEADOLCStiffness(localEnergy.get()); GeodesicFEAssembler<FEBasis,TargetSpace> assembler(feBasis, &localGFEADOLCStiffness);