From a8775dc93cb4f47628688fae3256225c01e39451 Mon Sep 17 00:00:00 2001
From: Oliver Sander <oliver.sander@tu-dresden.de>
Date: Mon, 7 Oct 2019 21:45:58 +0200
Subject: [PATCH] Have more energy implementations inherit from
 GFE::LocalEnergy

Previously, they all inherited from LocalGeodesicFEStiffness,
which was weird, because none of them implemented first or
second derivatives as you would expect from something called
'stiffness'.
---
 dune/gfe/chiralskyrmionenergy.hh         |  4 ++--
 dune/gfe/cosseratenergystiffness.hh      |  4 ++--
 dune/gfe/harmonicenergystiffness.hh      |  4 ++--
 dune/gfe/l2distancesquaredenergy.hh      |  4 ++--
 dune/gfe/nonplanarcosseratshellenergy.hh |  4 ++--
 dune/gfe/sumcosseratenergy.hh            | 12 ++++++------
 dune/gfe/surfacecosseratenergy.hh        |  3 ++-
 dune/gfe/weightedsumenergy.hh            |  8 ++++----
 src/cosserat-continuum.cc                | 24 +++++++++++-------------
 src/film-on-substrate.cc                 |  4 ++--
 src/gradient-flow.cc                     |  2 +-
 src/harmonicmaps.cc                      |  2 +-
 12 files changed, 37 insertions(+), 38 deletions(-)

diff --git a/dune/gfe/chiralskyrmionenergy.hh b/dune/gfe/chiralskyrmionenergy.hh
index 75b550b4..5756c3ec 100644
--- a/dune/gfe/chiralskyrmionenergy.hh
+++ b/dune/gfe/chiralskyrmionenergy.hh
@@ -4,7 +4,7 @@
 #include <dune/common/fmatrix.hh>
 #include <dune/geometry/quadraturerules.hh>
 
-#include <dune/gfe/localgeodesicfestiffness.hh>
+#include <dune/gfe/localenergy.hh>
 
 namespace Dune {
 
@@ -17,7 +17,7 @@ namespace GFE {
  */
 template<class Basis, class LocalInterpolationRule, class field_type>
 class ChiralSkyrmionEnergy
-: public LocalGeodesicFEStiffness<Basis,UnitVector<field_type,3> >
+: public GFE::LocalEnergy<Basis,UnitVector<field_type,3> >
 {
   // various useful types
   typedef UnitVector<field_type,3> TargetSpace;
diff --git a/dune/gfe/cosseratenergystiffness.hh b/dune/gfe/cosseratenergystiffness.hh
index bcc3b950..ead0fa54 100644
--- a/dune/gfe/cosseratenergystiffness.hh
+++ b/dune/gfe/cosseratenergystiffness.hh
@@ -8,7 +8,7 @@
 #include <dune/fufem/functions/virtualgridfunction.hh>
 #include <dune/fufem/boundarypatch.hh>
 
-#include "localgeodesicfestiffness.hh"
+#include <dune/gfe/localenergy.hh>
 #include <dune/gfe/mixedlocalgeodesicfestiffness.hh>
 #ifdef PROJECTED_INTERPOLATION
 #include <dune/gfe/localprojectedfefunction.hh>
@@ -58,7 +58,7 @@ public:
 
 template<class Basis, int dim, class field_type=double>
 class CosseratEnergyLocalStiffness
-    : public LocalGeodesicFEStiffness<Basis,RigidBodyMotion<field_type,dim> >,
+    : public Dune::GFE::LocalEnergy<Basis,RigidBodyMotion<field_type,dim> >,
       public MixedLocalGeodesicFEStiffness<Basis,
                                            RealTuple<field_type,dim>,
                                            Rotation<field_type,dim> >
diff --git a/dune/gfe/harmonicenergystiffness.hh b/dune/gfe/harmonicenergystiffness.hh
index 253bd102..b9f561c9 100644
--- a/dune/gfe/harmonicenergystiffness.hh
+++ b/dune/gfe/harmonicenergystiffness.hh
@@ -4,11 +4,11 @@
 #include <dune/common/fmatrix.hh>
 #include <dune/geometry/quadraturerules.hh>
 
-#include "localgeodesicfestiffness.hh"
+#include <dune/gfe/localenergy.hh>
 
 template<class Basis, class LocalInterpolationRule, class TargetSpace>
 class HarmonicEnergyLocalStiffness
-    : public LocalGeodesicFEStiffness<Basis,TargetSpace>
+    : public Dune::GFE::LocalEnergy<Basis,TargetSpace>
 {
     // grid types
     typedef typename Basis::GridView GridView;
diff --git a/dune/gfe/l2distancesquaredenergy.hh b/dune/gfe/l2distancesquaredenergy.hh
index 5e1e5a98..911abfab 100644
--- a/dune/gfe/l2distancesquaredenergy.hh
+++ b/dune/gfe/l2distancesquaredenergy.hh
@@ -5,12 +5,12 @@
 
 #include <dune/geometry/quadraturerules.hh>
 
-#include <dune/gfe/localgeodesicfestiffness.hh>
+#include <dune/gfe/localenergy.hh>
 #include <dune/gfe/localgeodesicfefunction.hh>
 
 template<class Basis, class TargetSpace>
 class L2DistanceSquaredEnergy
-  : public LocalGeodesicFEStiffness<Basis,TargetSpace>
+  : public Dune::GFE::LocalEnergy<Basis,TargetSpace>
 {
   // grid types
   typedef typename Basis::GridView GridView;
diff --git a/dune/gfe/nonplanarcosseratshellenergy.hh b/dune/gfe/nonplanarcosseratshellenergy.hh
index c8c48f7b..c1d09880 100644
--- a/dune/gfe/nonplanarcosseratshellenergy.hh
+++ b/dune/gfe/nonplanarcosseratshellenergy.hh
@@ -10,7 +10,7 @@
 #include <dune/fufem/functions/virtualgridfunction.hh>
 #include <dune/fufem/boundarypatch.hh>
 
-#include <dune/gfe/localgeodesicfestiffness.hh>
+#include <dune/gfe/localenergy.hh>
 #include <dune/gfe/localgeodesicfefunction.hh>
 #include <dune/gfe/rigidbodymotion.hh>
 #include <dune/gfe/unitvector.hh>
@@ -20,7 +20,7 @@
 
 template<class Basis, int dim, class field_type=double>
 class NonplanarCosseratShellEnergy
-  : public LocalGeodesicFEStiffness<Basis,RigidBodyMotion<field_type,dim> >
+  : public Dune::GFE::LocalEnergy<Basis,RigidBodyMotion<field_type,dim> >
 {
   // grid types
   typedef typename Basis::GridView GridView;
diff --git a/dune/gfe/sumcosseratenergy.hh b/dune/gfe/sumcosseratenergy.hh
index f3e1e090..2011d909 100644
--- a/dune/gfe/sumcosseratenergy.hh
+++ b/dune/gfe/sumcosseratenergy.hh
@@ -3,14 +3,14 @@
 
 #include <dune/elasticity/assemblers/localfestiffness.hh>
 
-#include <dune/gfe/localgeodesicfestiffness.hh>
+#include <dune/gfe/localenergy.hh>
 
 namespace Dune {
 
 namespace GFE {
 template<class Basis, class TargetSpace, class field_type=double>
 class SumCosseratEnergy
-: public LocalGeodesicFEStiffness<Basis, TargetSpace>
+: public GFE::LocalEnergy<Basis, TargetSpace>
 {
  // grid types
   typedef typename Basis::GridView GridView;
@@ -27,8 +27,8 @@ public:
    * \param elasticEnergy The elastic energy
    * \param cosseratEnergy The cosserat energy
    */
-  SumCosseratEnergy(std::shared_ptr<LocalFEStiffness<GridView,LocalFiniteElement,std::vector<Dune::FieldVector<field_type,dim> > > > elasticEnergy,
-            std::shared_ptr<LocalGeodesicFEStiffness<Basis, TargetSpace>> cosseratEnergy)
+  SumCosseratEnergy(std::shared_ptr<Elasticity::LocalEnergy<GridView,LocalFiniteElement,std::vector<Dune::FieldVector<field_type,dim> > > > elasticEnergy,
+            std::shared_ptr<GFE::LocalEnergy<Basis, TargetSpace>> cosseratEnergy)
 
   : elasticEnergy_(elasticEnergy),
     cosseratEnergy_(cosseratEnergy)
@@ -49,9 +49,9 @@ public:
 
 private:
 
-  std::shared_ptr<LocalFEStiffness<GridView,LocalFiniteElement,std::vector<Dune::FieldVector<field_type,dim> > > > elasticEnergy_;
+  std::shared_ptr<Elasticity::LocalEnergy<GridView,LocalFiniteElement,std::vector<Dune::FieldVector<field_type,dim> > > > elasticEnergy_;
 
-  std::shared_ptr<LocalGeodesicFEStiffness<Basis, TargetSpace> > cosseratEnergy_;
+  std::shared_ptr<GFE::LocalEnergy<Basis, TargetSpace> > cosseratEnergy_;
 };
 
 }  // namespace GFE
diff --git a/dune/gfe/surfacecosseratenergy.hh b/dune/gfe/surfacecosseratenergy.hh
index 905ab45d..7d8e85c1 100644
--- a/dune/gfe/surfacecosseratenergy.hh
+++ b/dune/gfe/surfacecosseratenergy.hh
@@ -7,6 +7,7 @@
 #include <dune/fufem/boundarypatch.hh>
 
 #include <dune/gfe/cosseratstrain.hh>
+#include <dune/gfe/localenergy.hh>
 #include <dune/gfe/localgeodesicfefunction.hh>
 #include <dune/gfe/localprojectedfefunction.hh>
 #include <dune/gfe/mixedlocalgeodesicfestiffness.hh>
@@ -42,7 +43,7 @@ public:
 
 template<class Basis, class TargetSpace, class field_type=double, class GradientRT=double>
 class SurfaceCosseratEnergy
-: public LocalGeodesicFEStiffness<Basis,TargetSpace>
+: public Dune::GFE::LocalEnergy<Basis,TargetSpace>
 {
  // grid types
   typedef typename Basis::GridView GridView;
diff --git a/dune/gfe/weightedsumenergy.hh b/dune/gfe/weightedsumenergy.hh
index 38d5cbef..57795057 100644
--- a/dune/gfe/weightedsumenergy.hh
+++ b/dune/gfe/weightedsumenergy.hh
@@ -6,12 +6,12 @@
 #include <dune/common/fmatrix.hh>
 #include <dune/geometry/quadraturerules.hh>
 
-#include <dune/gfe/localgeodesicfestiffness.hh>
+#include <dune/gfe/localenergy.hh>
 #include <dune/gfe/localgeodesicfefunction.hh>
 
 template<class Basis, class TargetSpace>
 class WeightedSumEnergy
-  : public LocalGeodesicFEStiffness<Basis,TargetSpace>
+  : public Dune::GFE::LocalEnergy<Basis,TargetSpace>
 {
   // grid types
   typedef typename Basis::GridView GridView;
@@ -23,11 +23,11 @@ class WeightedSumEnergy
 
 public:
 
-  std::vector<std::shared_ptr<LocalGeodesicFEStiffness<Basis,TargetSpace> > > addends_;
+  std::vector<std::shared_ptr<Dune::GFE::LocalEnergy<Basis,TargetSpace> > > addends_;
 
   std::vector<double> weights_;
 
-  WeightedSumEnergy(std::vector<std::shared_ptr<LocalGeodesicFEStiffness<Basis,TargetSpace> > > addends,
+  WeightedSumEnergy(std::vector<std::shared_ptr<Dune::GFE::LocalEnergy<Basis,TargetSpace> > > addends,
                     std::vector<double> weights)
   : addends_(addends),
     weights_(weights)
diff --git a/src/cosserat-continuum.cc b/src/cosserat-continuum.cc
index 32f7d64b..832d3955 100644
--- a/src/cosserat-continuum.cc
+++ b/src/cosserat-continuum.cc
@@ -452,29 +452,27 @@ int main (int argc, char *argv[]) try
                       RealTuple<double,3>,
                       Rotation<double,3> > assembler(compositeBasis, &localGFEADOLCStiffness);
 #else
-    using LocalEnergyBase = LocalGeodesicFEStiffness<FEBasis,RigidBodyMotion<adouble,3> >;
-
-    std::shared_ptr<LocalEnergyBase> cosseratEnergyADOLCLocalStiffness;
+    std::shared_ptr<GFE::LocalEnergy<FEBasis,RigidBodyMotion<adouble,3> > > localCosseratEnergy;
 
     if (dim==dimworld)
     {
-      cosseratEnergyADOLCLocalStiffness = std::make_shared<CosseratEnergyLocalStiffness<FEBasis,3,adouble> >(materialParameters,
-                                                                                                             &neumannBoundary,
-                                                                                                             neumannFunction,
-                                                                                                             volumeLoad);
+      localCosseratEnergy = std::make_shared<CosseratEnergyLocalStiffness<FEBasis,3,adouble> >(materialParameters,
+                                                                                               &neumannBoundary,
+                                                                                               neumannFunction,
+                                                                                               volumeLoad);
     }
     else
     {
       std::vector<UnitVector<double,3> > vertexNormals = computeVertexNormals(gridView);
-      cosseratEnergyADOLCLocalStiffness = std::make_shared<NonplanarCosseratShellEnergy<FEBasis,3,adouble> >(materialParameters,
-                                                                                                             std::move(vertexNormals),
-                                                                                                             &neumannBoundary,
-                                                                                                             neumannFunction,
-                                                                                                             volumeLoad);
+      localCosseratEnergy = std::make_shared<NonplanarCosseratShellEnergy<FEBasis,3,adouble> >(materialParameters,
+                                                                                               std::move(vertexNormals),
+                                                                                               &neumannBoundary,
+                                                                                               neumannFunction,
+                                                                                               volumeLoad);
     }
 
     LocalGeodesicFEADOLCStiffness<FEBasis,
-                                  TargetSpace> localGFEADOLCStiffness(cosseratEnergyADOLCLocalStiffness.get());
+                                  TargetSpace> localGFEADOLCStiffness(localCosseratEnergy.get());
 
     GeodesicFEAssembler<FEBasis,TargetSpace> assembler(gridView, &localGFEADOLCStiffness);
 #endif
diff --git a/src/film-on-substrate.cc b/src/film-on-substrate.cc
index 8ff8f6de..fd9e1fbe 100644
--- a/src/film-on-substrate.cc
+++ b/src/film-on-substrate.cc
@@ -336,7 +336,7 @@ int main (int argc, char *argv[]) try
 
     // Assembler using ADOL-C
     std::cout << "Selected energy is: " << parameterSet.get<std::string>("energy") << std::endl;
-    std::shared_ptr<LocalFEStiffness<GridView,
+    std::shared_ptr<Elasticity::LocalEnergy<GridView,
                                      FEBasis::LocalView::Tree::FiniteElement,
                                      std::vector<Dune::FieldVector<ValueType, dim>> > > elasticEnergy;
 
@@ -376,7 +376,7 @@ int main (int argc, char *argv[]) try
           ValueType>>(elasticEnergy, neumannEnergy);
 
 
-    using LocalEnergyBase = LocalGeodesicFEStiffness<FEBasis,RigidBodyMotion<adouble, dim> >;
+    using LocalEnergyBase = GFE::LocalEnergy<FEBasis,RigidBodyMotion<adouble, dim> >;
 
     std::shared_ptr<LocalEnergyBase> surfaceCosseratEnergy;
     std::vector<UnitVector<double,3> > vertexNormals(gridView.size(3));
diff --git a/src/gradient-flow.cc b/src/gradient-flow.cc
index d74c21a2..e23ec346 100644
--- a/src/gradient-flow.cc
+++ b/src/gradient-flow.cc
@@ -201,7 +201,7 @@ int main (int argc, char *argv[]) try
 
   auto l2DistanceSquaredEnergy = std::make_shared<L2DistanceSquaredEnergy<FEBasis, ATargetSpace> >();
 
-  std::vector<std::shared_ptr<LocalGeodesicFEStiffness<FEBasis,ATargetSpace> > > addends(2);
+  std::vector<std::shared_ptr<GFE::LocalEnergy<FEBasis,ATargetSpace> > > addends(2);
   using GeodesicInterpolationRule  = LocalGeodesicFEFunction<dim, double, FEBasis::LocalView::Tree::FiniteElement, ATargetSpace>;
   addends[0] = std::make_shared<HarmonicEnergyLocalStiffness<FEBasis, GeodesicInterpolationRule, ATargetSpace> >();
   addends[1] = l2DistanceSquaredEnergy;
diff --git a/src/harmonicmaps.cc b/src/harmonicmaps.cc
index 0700d120..d216f704 100644
--- a/src/harmonicmaps.cc
+++ b/src/harmonicmaps.cc
@@ -272,7 +272,7 @@ int main (int argc, char *argv[])
     using ProjectedInterpolationRule = GFE::LocalProjectedFEFunction<dim, double, FEBasis::LocalView::Tree::FiniteElement, ATargetSpace>;
 
     // Assembler using ADOL-C
-    std::shared_ptr<LocalGeodesicFEStiffness<FEBasis,ATargetSpace> > localEnergy;
+    std::shared_ptr<GFE::LocalEnergy<FEBasis,ATargetSpace> > localEnergy;
 
     std::string energy = parameterSet.get<std::string>("energy");
     if (energy == "harmonic")
-- 
GitLab