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