From 243748069b0c84d98173da10518e4f3ef8d8cea3 Mon Sep 17 00:00:00 2001 From: Jonathan Youett <youett@mi.fu-berlin.de> Date: Tue, 3 Jul 2012 12:08:21 +0000 Subject: [PATCH] store local linearization and hessian in shared_ptr and add a setup method [[Imported from SVN: r11183]] --- .../geomexactstvenantkirchhoffmaterial.hh | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/dune/elasticity/materials/geomexactstvenantkirchhoffmaterial.hh b/dune/elasticity/materials/geomexactstvenantkirchhoffmaterial.hh index 23dced8..de933fa 100644 --- a/dune/elasticity/materials/geomexactstvenantkirchhoffmaterial.hh +++ b/dune/elasticity/materials/geomexactstvenantkirchhoffmaterial.hh @@ -36,6 +36,10 @@ private: typedef typename GridType::template Codim<0>::LeafIterator ElementIterator; public: + GeomExactStVenantMaterial() : + E_(1.0), + nu_(0.3) + {} GeomExactStVenantMaterial(const Basis& basis, ctype E, ctype nu) : localLinearization_(E,nu), @@ -45,6 +49,20 @@ public: nu_(nu) {} + void setup(ctype E, ctype nu) + { + E_ = E; + nu_ = nu; + if (localLinearization_) + localLinearization_.reset(); + if (localHessian_) + localHessian_.reset(); + + localLinearization_ = Dune::shared_ptr<LocalLinearization>(new LocalLinearization(E,nu)); + localHessian_ = Dune::shared_ptr<LocalHessian>(new LocalHessian(E,nu)); + + } + //! Evaluate the strain energy template <class CoeffType> ctype energy(const CoeffType& coeff) @@ -100,20 +118,20 @@ public: } //! Return the local assembler of the first derivative of the strain energy - LocalLinearization& firstDerivative() {return localLinearization_;} + LocalLinearization& firstDerivative() {return *localLinearization_;} //! Return the local assembler of the second derivative of the strain energy - LocalHessian& secondDerivative() {return localHessian_;} + LocalHessian& secondDerivative() {return *localHessian_;} //! Return the global basis const Basis& basis() {return basis_;} private: //! First derivative of the strain energy - LocalLinearization localLinearization_; + Dune::shared_ptr<LocalLinearization> localLinearization_; //! Second derivative of the strain energy - LocalHessian localHessian_; + Dune::shared_ptr<LocalHessian> localHessian_; //! Global basis used for the spatial discretization const Basis& basis_; -- GitLab