From 7029982d34cb773dfdeff01a5d525d95c1de8ac2 Mon Sep 17 00:00:00 2001 From: Andreas Fischle <andreas.fischle@uni-due.de> Date: Sun, 5 Apr 2015 21:24:56 +0200 Subject: [PATCH] Allow to select between different energies via a run-time parameter --- src/finite-strain-elasticity.cc | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/finite-strain-elasticity.cc b/src/finite-strain-elasticity.cc index 5ee163bb..1bd5fd14 100644 --- a/src/finite-strain-elasticity.cc +++ b/src/finite-strain-elasticity.cc @@ -33,6 +33,9 @@ #include <dune/gfe/localadolcstiffness.hh> #include <dune/gfe/stvenantkirchhoffenergy.hh> +#include <dune/gfe/henckyenergy.hh> +#include <dune/gfe/exphenckyenergy.hh> +#include <dune/gfe/neohookeenergy.hh> #include <dune/gfe/neumannenergy.hh> #include <dune/gfe/sumenergy.hh> #include <dune/gfe/feassembler.hh> @@ -249,9 +252,33 @@ int main (int argc, char *argv[]) try } // Assembler using ADOL-C - auto elasticEnergy = std::make_shared<StVenantKirchhoffEnergy<GridView, - FEBasis::LocalView::Tree::FiniteElement, - adouble> >(materialParameters); + std::cout << "Selected energy is: " << parameterSet.get<std::string>("energy") << std::endl; + std::shared_ptr<LocalFEStiffness<GridView, + FEBasis::LocalView::Tree::FiniteElement, + std::vector<Dune::FieldVector<adouble, 3> > > > elasticEnergy; + + if (parameterSet.get<std::string>("energy") == "stvenantkirchhoff") + elasticEnergy = std::make_shared<StVenantKirchhoffEnergy<GridView, + FEBasis::LocalView::Tree::FiniteElement, + adouble> >(materialParameters); + + if (parameterSet.get<std::string>("energy") == "neohooke") + elasticEnergy = std::make_shared<NeoHookeEnergy<GridView, + FEBasis::LocalView::Tree::FiniteElement, + adouble> >(materialParameters); + + if (parameterSet.get<std::string>("energy") == "hencky") + elasticEnergy = std::make_shared<HenckyEnergy<GridView, + FEBasis::LocalView::Tree::FiniteElement, + adouble> >(materialParameters); + + if (parameterSet.get<std::string>("energy") == "exphencky") + elasticEnergy = std::make_shared<ExpHenckyEnergy<GridView, + FEBasis::LocalView::Tree::FiniteElement, + adouble> >(materialParameters); + + if(!elasticEnergy) + DUNE_THROW(Exception, "Error: Selected energy not available!"); auto neumannEnergy = std::make_shared<NeumannEnergy<GridView, FEBasis::LocalView::Tree::FiniteElement, -- GitLab