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