From 076741b290e6d7d8b545e3a6fc80d06369f7b07b Mon Sep 17 00:00:00 2001 From: Oliver Sander <oliver.sander@tu-dresden.de> Date: Wed, 1 May 2024 20:06:07 +0200 Subject: [PATCH] LocalGFEADOLCStiffness: Take energy as shared_ptr --- .../localgeodesicfeadolcstiffness.hh | 4 ++-- src/cosserat-continuum.cc | 22 +++++++++---------- src/film-on-substrate.cc | 10 ++++----- src/gradient-flow.cc | 2 +- src/harmonicmaps.cc | 2 +- src/rod3d.cc | 2 +- src/simofoxshell.cc | 13 ++++++----- test/cosseratcontinuumtest.cc | 8 +++---- test/cosseratrodtest.cc | 2 +- test/filmonsubstratetest.cc | 10 ++++----- test/geodesicfeassemblerwrappertest.cc | 10 ++++----- test/harmonicmaptest.cc | 2 +- test/localadolcstiffnesstest.cc | 5 ++--- test/mixedriemannianpnsolvertest.cc | 10 ++++----- 14 files changed, 52 insertions(+), 50 deletions(-) diff --git a/dune/gfe/assemblers/localgeodesicfeadolcstiffness.hh b/dune/gfe/assemblers/localgeodesicfeadolcstiffness.hh index 594c0c50..7b16b831 100644 --- a/dune/gfe/assemblers/localgeodesicfeadolcstiffness.hh +++ b/dune/gfe/assemblers/localgeodesicfeadolcstiffness.hh @@ -35,7 +35,7 @@ public: //! Dimension of a tangent space constexpr static int blocksize = TargetSpace::TangentVector::dimension; - LocalGeodesicFEADOLCStiffness(const Dune::GFE::LocalEnergy<Basis, ATargetSpace>* energy, bool adolcScalarMode = false) + LocalGeodesicFEADOLCStiffness(std::shared_ptr<const Dune::GFE::LocalEnergy<Basis, ATargetSpace> > energy, bool adolcScalarMode = false) : localEnergy_(energy), adolcScalarMode_(adolcScalarMode) {} @@ -72,7 +72,7 @@ public: std::vector<double>& localGradient, typename Dune::GFE::Impl::LocalStiffnessTypes<TargetSpace>::CompositeHessian& localHessian) const override; - const Dune::GFE::LocalEnergy<Basis, ATargetSpace>* localEnergy_; + std::shared_ptr<const Dune::GFE::LocalEnergy<Basis, ATargetSpace> > localEnergy_; const bool adolcScalarMode_; }; diff --git a/src/cosserat-continuum.cc b/src/cosserat-continuum.cc index be69022f..328f10fe 100644 --- a/src/cosserat-continuum.cc +++ b/src/cosserat-continuum.cc @@ -496,12 +496,12 @@ int main (int argc, char *argv[]) try x[_1][i].set(dOV[i]); if (dim==dimworld) { - CosseratEnergyLocalStiffness<CompositeBasis, 3,adouble> localCosseratEnergy(materialParameters, - &neumannBoundary, - neumannFunction, - volumeLoad); + auto localCosseratEnergy = std::make_shared<CosseratEnergyLocalStiffness<CompositeBasis, 3,adouble> > (materialParameters, + &neumannBoundary, + neumannFunction, + volumeLoad); - LocalGeodesicFEADOLCStiffness<CompositeBasis,TargetSpace> localGFEADOLCStiffness(&localCosseratEnergy, + LocalGeodesicFEADOLCStiffness<CompositeBasis,TargetSpace> localGFEADOLCStiffness(localCosseratEnergy, adolcScalarMode); MixedGFEAssembler<CompositeBasis,TargetSpace> mixedAssembler(compositeBasis, localGFEADOLCStiffness); #if MIXED_SPACE @@ -627,13 +627,13 @@ int main (int argc, char *argv[]) try std::shared_ptr<StiffnessType> localGFEStiffness; #if HAVE_DUNE_CURVEDGEOMETRY && WORLD_DIM == 3 && GRID_DIM == 2 - NonplanarCosseratShellEnergy<CompositeBasis, 3, adouble, decltype(creator)> localCosseratEnergy(materialParameters, - &creator, - &neumannBoundary, - neumannFunction, - volumeLoad); + auto localCosseratEnergy = std::make_shared<NonplanarCosseratShellEnergy<CompositeBasis, 3, adouble, decltype(creator)> >(materialParameters, + &creator, + &neumannBoundary, + neumannFunction, + volumeLoad); - localGFEStiffness = std::make_shared<StiffnessType>(&localCosseratEnergy, adolcScalarMode); + localGFEStiffness = std::make_shared<StiffnessType>(localCosseratEnergy, adolcScalarMode); #endif MixedGFEAssembler<CompositeBasis,TargetSpace> mixedAssembler(compositeBasis, localGFEStiffness); #if MIXED_SPACE diff --git a/src/film-on-substrate.cc b/src/film-on-substrate.cc index 1e6cc7b1..42a04ae6 100644 --- a/src/film-on-substrate.cc +++ b/src/film-on-substrate.cc @@ -531,12 +531,12 @@ int main (int argc, char *argv[]) try using RBM = GFE::ProductManifold<RealTuple<double, dim>,Rotation<double,dim> >; - GFE::SumEnergy<CompositeBasis, RealTuple<ValueType,targetDim>, Rotation<ValueType,targetDim> > sumEnergy; - sumEnergy.addLocalEnergy(neumannEnergy); - sumEnergy.addLocalEnergy(elasticEnergy); - sumEnergy.addLocalEnergy(surfaceCosseratEnergy); + auto sumEnergy = std::make_shared<GFE::SumEnergy<CompositeBasis, RealTuple<ValueType,targetDim>, Rotation<ValueType,targetDim> > >(); + sumEnergy->addLocalEnergy(neumannEnergy); + sumEnergy->addLocalEnergy(elasticEnergy); + sumEnergy->addLocalEnergy(surfaceCosseratEnergy); - LocalGeodesicFEADOLCStiffness<CompositeBasis,RBM> localGFEADOLCStiffness(&sumEnergy); + LocalGeodesicFEADOLCStiffness<CompositeBasis,RBM> localGFEADOLCStiffness(sumEnergy); MixedGFEAssembler<CompositeBasis,RBM> mixedAssembler(compositeBasis, localGFEADOLCStiffness); //////////////////////////////////////////////////////// diff --git a/src/gradient-flow.cc b/src/gradient-flow.cc index c55aed10..68f9a929 100644 --- a/src/gradient-flow.cc +++ b/src/gradient-flow.cc @@ -218,7 +218,7 @@ int main (int argc, char *argv[]) try auto sumEnergy = std::make_shared< WeightedSumEnergy<FEBasis, ATargetSpace> >(addends, weights); - LocalGeodesicFEADOLCStiffness<FEBasis,TargetSpace> localGFEADOLCStiffness(sumEnergy.get()); + LocalGeodesicFEADOLCStiffness<FEBasis,TargetSpace> localGFEADOLCStiffness(sumEnergy); GeodesicFEAssembler<FEBasis,TargetSpace> assembler(feBasis, localGFEADOLCStiffness); diff --git a/src/harmonicmaps.cc b/src/harmonicmaps.cc index 35a50711..16f5d886 100644 --- a/src/harmonicmaps.cc +++ b/src/harmonicmaps.cc @@ -300,7 +300,7 @@ int main (int argc, char *argv[]) DUNE_THROW(Exception, "Unknown interpolation method " << parameterSet["interpolationMethod"] << " requested!"); // Compute local tangent problems by applying ADOL-C directly to the energy on the element - LocalGeodesicFEADOLCStiffness<FEBasis,TargetSpace> localGFEADOLCStiffness(localEnergy.get()); + LocalGeodesicFEADOLCStiffness<FEBasis,TargetSpace> localGFEADOLCStiffness(localEnergy); GeodesicFEAssembler<FEBasis,TargetSpace> assembler(feBasis, localGFEADOLCStiffness); diff --git a/src/rod3d.cc b/src/rod3d.cc index c5a23311..68cb905f 100644 --- a/src/rod3d.cc +++ b/src/rod3d.cc @@ -206,7 +206,7 @@ int main (int argc, char *argv[]) try DUNE_THROW(Exception, "Unknown interpolation method " << parameterSet["interpolationMethod"] << " requested!"); LocalGeodesicFEADOLCStiffness<ScalarBasis, - TargetSpace> localStiffness(localRodEnergy.get()); + TargetSpace> localStiffness(localRodEnergy); GeodesicFEAssembler<ScalarBasis,TargetSpace> rodAssembler(gridView, localStiffness); diff --git a/src/simofoxshell.cc b/src/simofoxshell.cc index 389a0c16..dc0d6e5d 100644 --- a/src/simofoxshell.cc +++ b/src/simofoxshell.cc @@ -315,15 +315,18 @@ int main(int argc, char *argv[]) try } // Assembler using ADOL-C - Dune::GFE::SimoFoxEnergyLocalStiffness<decltype(compositeBasis), LocalFEFunction,adouble> simoFoxEnergyADOLCLocalStiffness(materialParameters, - &neumannBoundary, - neumannFunction, - nullptr, x0); + auto simoFoxEnergyLocalStiffness + = std::make_shared<GFE::SimoFoxEnergyLocalStiffness<decltype(compositeBasis), + LocalFEFunction, + adouble> > (materialParameters, + &neumannBoundary, + neumannFunction, + nullptr, x0); using TargetSpace = Dune::GFE::ProductManifold<RealTuple<double,3>,UnitVector<double,3> >; LocalGeodesicFEADOLCStiffness<decltype(compositeBasis), - TargetSpace> localGFEADOLCStiffness(&simoFoxEnergyADOLCLocalStiffness); + TargetSpace> localGFEADOLCStiffness(simoFoxEnergyLocalStiffness); MixedGFEAssembler<decltype(compositeBasis),TargetSpace> assembler(compositeBasis, localGFEADOLCStiffness); //////////////////////////////////////////////////////// diff --git a/test/cosseratcontinuumtest.cc b/test/cosseratcontinuumtest.cc index e741625d..97783cd8 100644 --- a/test/cosseratcontinuumtest.cc +++ b/test/cosseratcontinuumtest.cc @@ -202,7 +202,7 @@ int main (int argc, char *argv[]) using RigidBodyMotion = GFE::ProductManifold<RealTuple<double,dim>,Rotation<double,dim> >; using ARigidBodyMotion = GFE::ProductManifold<RealTuple<adouble,dim>,Rotation<adouble,dim> >; - GFE::SumEnergy<CompositeBasis, RealTuple<adouble,dim>,Rotation<adouble,dim> > sumEnergy; + auto sumEnergy = std::make_shared<GFE::SumEnergy<CompositeBasis, RealTuple<adouble,dim>,Rotation<adouble,dim> > >(); auto neumannEnergy = std::make_shared<GFE::NeumannEnergy<CompositeBasis, RealTuple<adouble,dim>, Rotation<adouble,dim> > >(neumannBoundary,neumannFunction); // Select which type of geometric interpolation to use @@ -213,10 +213,10 @@ int main (int argc, char *argv[]) auto bulkCosseratDensity = std::make_shared<GFE::BulkCosseratDensity<FieldVector<double,dim>,adouble> >(parameters); auto bulkCosseratEnergy = std::make_shared<GFE::LocalIntegralEnergy<CompositeBasis, LocalInterpolationRule, ARigidBodyMotion> >(bulkCosseratDensity); - sumEnergy.addLocalEnergy(bulkCosseratEnergy); - sumEnergy.addLocalEnergy(neumannEnergy); + sumEnergy->addLocalEnergy(bulkCosseratEnergy); + sumEnergy->addLocalEnergy(neumannEnergy); - LocalGeodesicFEADOLCStiffness<CompositeBasis,RigidBodyMotion> localGFEADOLCStiffness(&sumEnergy); + LocalGeodesicFEADOLCStiffness<CompositeBasis,RigidBodyMotion> localGFEADOLCStiffness(sumEnergy); MixedGFEAssembler<CompositeBasis,RigidBodyMotion> mixedAssembler(compositeBasis, localGFEADOLCStiffness); MixedRiemannianTrustRegionSolver<GridType, diff --git a/test/cosseratrodtest.cc b/test/cosseratrodtest.cc index c853cd38..e0892889 100644 --- a/test/cosseratrodtest.cc +++ b/test/cosseratrodtest.cc @@ -158,7 +158,7 @@ int main (int argc, char *argv[]) try DUNE_THROW(Exception, "Unknown interpolation method " << interpolationMethod << " requested!"); LocalGeodesicFEADOLCStiffness<ScalarBasis, - TargetSpace> localStiffness(localRodEnergy.get()); + TargetSpace> localStiffness(localRodEnergy); GeodesicFEAssembler<ScalarBasis,TargetSpace> rodAssembler(gridView, localStiffness); diff --git a/test/filmonsubstratetest.cc b/test/filmonsubstratetest.cc index 8255ca56..af4228c1 100644 --- a/test/filmonsubstratetest.cc +++ b/test/filmonsubstratetest.cc @@ -358,12 +358,12 @@ int main (int argc, char *argv[]) using RBM = GFE::ProductManifold<RealTuple<double, dim>,Rotation<double,dim> >; - GFE::SumEnergy<CompositeBasis, RealTuple<ValueType,targetDim>, Rotation<ValueType,targetDim> > sumEnergy; - sumEnergy.addLocalEnergy(neumannEnergy); - sumEnergy.addLocalEnergy(elasticEnergy); - sumEnergy.addLocalEnergy(surfaceCosseratEnergy); + auto sumEnergy = std::make_shared<GFE::SumEnergy<CompositeBasis, RealTuple<ValueType,targetDim>, Rotation<ValueType,targetDim> > >(); + sumEnergy->addLocalEnergy(neumannEnergy); + sumEnergy->addLocalEnergy(elasticEnergy); + sumEnergy->addLocalEnergy(surfaceCosseratEnergy); - LocalGeodesicFEADOLCStiffness<CompositeBasis,RBM> localGFEADOLCStiffness(&sumEnergy); + LocalGeodesicFEADOLCStiffness<CompositeBasis,RBM> localGFEADOLCStiffness(sumEnergy); MixedGFEAssembler<CompositeBasis,RBM> mixedAssembler(compositeBasis, localGFEADOLCStiffness); //////////////////////////////////////////////////////// diff --git a/test/geodesicfeassemblerwrappertest.cc b/test/geodesicfeassemblerwrappertest.cc index 94f8a7ae..e929da0f 100644 --- a/test/geodesicfeassemblerwrappertest.cc +++ b/test/geodesicfeassemblerwrappertest.cc @@ -135,12 +135,12 @@ int main (int argc, char *argv[]) return values_; }; - CosseratEnergyLocalStiffness<decltype(compositeBasis), dim,adouble> cosseratEnergy(parameters, - &neumannBoundary, - neumannFunction, - nullptr); + auto cosseratEnergy = std::make_shared<CosseratEnergyLocalStiffness<decltype(compositeBasis), dim,adouble> >(parameters, + &neumannBoundary, + neumannFunction, + nullptr); LocalGeodesicFEADOLCStiffness<CompositeBasis, - GFE::ProductManifold<RealTuple<double,dim>,Rotation<double,dim> > > mixedLocalGFEADOLCStiffness(&cosseratEnergy); + GFE::ProductManifold<RealTuple<double,dim>,Rotation<double,dim> > > mixedLocalGFEADOLCStiffness(cosseratEnergy); MixedGFEAssembler<CompositeBasis,RBM> mixedAssembler(compositeBasis, mixedLocalGFEADOLCStiffness); using DeformationFEBasis = Functions::LagrangeBasis<GridView,displacementOrder>; diff --git a/test/harmonicmaptest.cc b/test/harmonicmaptest.cc index 5dcefa47..3b9474b8 100644 --- a/test/harmonicmaptest.cc +++ b/test/harmonicmaptest.cc @@ -164,7 +164,7 @@ int main (int argc, char *argv[]) std::shared_ptr<GFE::LocalEnergy<FEBasis,ATargetSpace> > localEnergy = std::make_shared<GFE::LocalIntegralEnergy<FEBasis, InterpolationRule, ATargetSpace> >(harmonicDensity); - LocalGeodesicFEADOLCStiffness<FEBasis,TargetSpace> localGFEADOLCStiffness(localEnergy.get()); + LocalGeodesicFEADOLCStiffness<FEBasis,TargetSpace> localGFEADOLCStiffness(localEnergy); GeodesicFEAssembler<FEBasis,TargetSpace> assembler(feBasis, localGFEADOLCStiffness); diff --git a/test/localadolcstiffnesstest.cc b/test/localadolcstiffnesstest.cc index 10ca626b..9557f652 100644 --- a/test/localadolcstiffnesstest.cc +++ b/test/localadolcstiffnesstest.cc @@ -175,11 +175,10 @@ int main (int argc, char *argv[]) try /////////////////////////////////////////////////////////////////////// // Assembler using ADOL-C - CosseratEnergyLocalStiffness<FEBasis, 3,adouble> - cosseratEnergyADOLCLocalStiffness(materialParameters, nullptr, nullptr, nullptr); + auto cosseratLocalEnergy = std::make_shared<CosseratEnergyLocalStiffness<FEBasis, 3,adouble> >(materialParameters, nullptr, nullptr, nullptr); LocalGeodesicFEADOLCStiffness<FEBasis, - TargetSpace> localGFEADOLCStiffness(&cosseratEnergyADOLCLocalStiffness); + TargetSpace> localGFEADOLCStiffness(cosseratLocalEnergy); // Assembler using finite differences CosseratEnergyLocalStiffness<FEBasis, 3,FDType> diff --git a/test/mixedriemannianpnsolvertest.cc b/test/mixedriemannianpnsolvertest.cc index 201bed5a..593991aa 100644 --- a/test/mixedriemannianpnsolvertest.cc +++ b/test/mixedriemannianpnsolvertest.cc @@ -163,14 +163,14 @@ int main (int argc, char *argv[]) return values_; }; - CosseratEnergyLocalStiffness<decltype(compositeBasis), dim, ValueType> cosseratEnergy(parameters, - &neumannBoundary, - neumannFunction, - nullptr); + auto cosseratEnergy = std::make_shared<CosseratEnergyLocalStiffness<decltype(compositeBasis), dim, ValueType> >(parameters, + &neumannBoundary, + neumannFunction, + nullptr); using RBM = GFE::ProductManifold<RealTuple<double,dim>, Rotation<double, dim> >; - LocalGeodesicFEADOLCStiffness<CompositeBasis,RBM> mixedLocalGFEADOLCStiffness(&cosseratEnergy); + LocalGeodesicFEADOLCStiffness<CompositeBasis,RBM> mixedLocalGFEADOLCStiffness(cosseratEnergy); MixedGFEAssembler<CompositeBasis, RBM> mixedAssembler(compositeBasis, mixedLocalGFEADOLCStiffness); -- GitLab