From d6112e29bea617169ac761c3f442f142bcdbd2f1 Mon Sep 17 00:00:00 2001
From: Oliver Sander <oliver.sander@tu-dresden.de>
Date: Fri, 23 Nov 2018 11:14:13 +0100
Subject: [PATCH] Select finite element type at run-time

---
 src/harmonicmaps.cc | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/harmonicmaps.cc b/src/harmonicmaps.cc
index 21ffaea5..cf125c1f 100644
--- a/src/harmonicmaps.cc
+++ b/src/harmonicmaps.cc
@@ -279,9 +279,8 @@ int main (int argc, char *argv[])
     // ////////////////////////////////////////////////////////////
 
     typedef TargetSpace::rebind<adouble>::other ATargetSpace;
-    typedef LocalGeodesicFEFunction<dim, double, FEBasis::LocalView::Tree::FiniteElement, ATargetSpace> LocalInterpolationRule;
-    //typedef GFE::LocalProjectedFEFunction<dim, double, FEBasis::LocalView::Tree::FiniteElement, ATargetSpace> LocalInterpolationRule;
-    std::cout << "Using local interpolation: " << className<LocalInterpolationRule>() << std::endl;
+    using GeodesicInterpolationRule  = LocalGeodesicFEFunction<dim, double, FEBasis::LocalView::Tree::FiniteElement, ATargetSpace>;
+    using ProjectedInterpolationRule = GFE::LocalProjectedFEFunction<dim, double, FEBasis::LocalView::Tree::FiniteElement, ATargetSpace>;
 
     // Assembler using ADOL-C
     std::shared_ptr<LocalGeodesicFEStiffness<FEBasis,ATargetSpace> > localEnergy;
@@ -289,8 +288,12 @@ int main (int argc, char *argv[])
     std::string energy = parameterSet.get<std::string>("energy");
     if (energy == "harmonic")
     {
-
-      localEnergy.reset(new HarmonicEnergyLocalStiffness<FEBasis, LocalInterpolationRule, ATargetSpace>);
+        if (parameterSet["interpolationMethod"] == "geodesic")
+            localEnergy.reset(new HarmonicEnergyLocalStiffness<FEBasis, GeodesicInterpolationRule, ATargetSpace>);
+        else if (parameterSet["interpolationMethod"] == "projected")
+            localEnergy.reset(new HarmonicEnergyLocalStiffness<FEBasis, ProjectedInterpolationRule, ATargetSpace>);
+        else
+            DUNE_THROW(Exception, "Unknown interpolation method " << parameterSet["interpolationMethod"] << " requested!");
 
     } else if (energy == "chiral_skyrmion")
     {
-- 
GitLab