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