From 74b1506de6c1ca74178f574e7d83fbabc2215987 Mon Sep 17 00:00:00 2001 From: Oliver Sander <oliver.sander@tu-dresden.de> Date: Fri, 22 Jan 2016 06:24:25 +0100 Subject: [PATCH] Use a shared_ptr for the Neumann data function --- dune/gfe/cosseratenergystiffness.hh | 12 ++++++------ src/cosserat-continuum.cc | 2 +- src/mixed-cosserat-continuum.cc | 3 ++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/dune/gfe/cosseratenergystiffness.hh b/dune/gfe/cosseratenergystiffness.hh index 989e5e50..74885295 100644 --- a/dune/gfe/cosseratenergystiffness.hh +++ b/dune/gfe/cosseratenergystiffness.hh @@ -189,7 +189,7 @@ public: */ CosseratEnergyLocalStiffness(const Dune::ParameterTree& parameters, const BoundaryPatch<GridView>* neumannBoundary, - const Dune::VirtualFunction<Dune::FieldVector<double,dimworld>, Dune::FieldVector<double,3> >* neumannFunction, + const std::shared_ptr<Dune::VirtualFunction<Dune::FieldVector<double,dimworld>, Dune::FieldVector<double,3> > > neumannFunction, const std::shared_ptr<Dune::VirtualFunction<Dune::FieldVector<double,dimworld>, Dune::FieldVector<double,3> > > volumeLoad) : neumannBoundary_(neumannBoundary), neumannFunction_(neumannFunction) @@ -363,7 +363,7 @@ public: const BoundaryPatch<GridView>* neumannBoundary_; /** \brief The function implementing the Neumann data */ - const Dune::VirtualFunction<Dune::FieldVector<double,dimworld>, Dune::FieldVector<double,3> >* neumannFunction_; + const std::shared_ptr<Dune::VirtualFunction<Dune::FieldVector<double,dimworld>, Dune::FieldVector<double,3> > > neumannFunction_; /** \brief The function implementing a volume load */ const std::shared_ptr<Dune::VirtualFunction<Dune::FieldVector<double,dimworld>, Dune::FieldVector<double,3> > > volumeLoad_; @@ -501,8 +501,8 @@ energy(const typename Basis::LocalView& localView, // Value of the Neumann data at the current position Dune::FieldVector<double,3> neumannValue; - if (dynamic_cast<const VirtualGridViewFunction<GridView,Dune::FieldVector<double,3> >*>(neumannFunction_)) - dynamic_cast<const VirtualGridViewFunction<GridView,Dune::FieldVector<double,3> >*>(neumannFunction_)->evaluateLocal(element, quadPos, neumannValue); + if (std::dynamic_pointer_cast<const VirtualGridViewFunction<GridView,Dune::FieldVector<double,3> > >(neumannFunction_)) + std::dynamic_pointer_cast<const VirtualGridViewFunction<GridView,Dune::FieldVector<double,3> > >(neumannFunction_)->evaluateLocal(element, quadPos, neumannValue); else neumannFunction_->evaluate(it.geometry().global(quad[pt].position()), neumannValue); @@ -646,8 +646,8 @@ energy(const typename Basis::LocalView& localView, // Value of the Neumann data at the current position Dune::FieldVector<double,3> neumannValue; - if (dynamic_cast<const VirtualGridViewFunction<GridView,Dune::FieldVector<double,3> >*>(neumannFunction_)) - dynamic_cast<const VirtualGridViewFunction<GridView,Dune::FieldVector<double,3> >*>(neumannFunction_)->evaluateLocal(element, quadPos, neumannValue); + if (std::dynamic_pointer_cast<const VirtualGridViewFunction<GridView,Dune::FieldVector<double,3> > >(neumannFunction_)) + std::dynamic_pointer_cast<const VirtualGridViewFunction<GridView,Dune::FieldVector<double,3> > >(neumannFunction_)->evaluateLocal(element, quadPos, neumannValue); else neumannFunction_->evaluate(it.geometry().global(quad[pt].position()), neumannValue); diff --git a/src/cosserat-continuum.cc b/src/cosserat-continuum.cc index 75eea015..c086218e 100644 --- a/src/cosserat-continuum.cc +++ b/src/cosserat-continuum.cc @@ -293,7 +293,7 @@ int main (int argc, char *argv[]) try CosseratEnergyLocalStiffness<FEBasis, 3,adouble> cosseratEnergyADOLCLocalStiffness(materialParameters, &neumannBoundary, - neumannFunction.get(), + neumannFunction, volumeLoad); LocalGeodesicFEADOLCStiffness<FEBasis, TargetSpace> localGFEADOLCStiffness(&cosseratEnergyADOLCLocalStiffness); diff --git a/src/mixed-cosserat-continuum.cc b/src/mixed-cosserat-continuum.cc index 420f254f..1204d07c 100644 --- a/src/mixed-cosserat-continuum.cc +++ b/src/mixed-cosserat-continuum.cc @@ -297,7 +297,8 @@ int main (int argc, char *argv[]) try CosseratEnergyLocalStiffness<decltype(compositeBasis), 3,adouble> cosseratEnergyADOLCLocalStiffness(materialParameters, &neumannBoundary, - neumannFunction.get()); + neumannFunction, + nullptr); MixedLocalGFEADOLCStiffness<decltype(compositeBasis), RealTuple<double,3>, -- GitLab