diff --git a/dune/elasticity/materials/mooneyrivlinmaterial.hh b/dune/elasticity/materials/mooneyrivlinmaterial.hh index ce60e5e4d5071e6750e5f84161f234d406590ba1..beeeeb6b274da437d04448cb114d785ca0b9e53d 100644 --- a/dune/elasticity/materials/mooneyrivlinmaterial.hh +++ b/dune/elasticity/materials/mooneyrivlinmaterial.hh @@ -190,14 +190,14 @@ public: //! Return the local assembler of the first derivative of the strain energy typename Base::LocalLinearization& firstDerivative(std::shared_ptr<GridFunction> displace) { - localLinearization_->setConfiguration(displace); - return *localLinearization_; + localLinearisation_.setConfiguration(displace); + return localLinearisation_; } //! Return the local assembler of the second derivative of the strain energy typename Base::LocalHessian& secondDerivative(std::shared_ptr<GridFunction> displace) { - localHessian_->setConfiguration(displace); - return *localHessian_; + localHessian_.setConfiguration(displace); + return localHessian_; } private: @@ -245,15 +245,15 @@ private: //! Construct the local assembler members void constructAssemblers() { - localLinearization_ = std::make_shared<MonRivLinearization>(a_, b_, c_, d_, e_, k_); - localHessian_ = std::make_shared<MonRivHessian>(a_, b_, c_, d_, e_, k_); + localLinearisation_ = MonRivLinearisation(a_, b_, c_, d_, e_, k_); + localHessian_ = MonRivHessian(a_, b_, c_, d_, e_, k_); } //! First derivative of the strain energy - std::shared_ptr<MonRivLinearization> localLinearization_; + MonRivLinearisation localLinearisation_; //! Second derivative of the strain energy - std::shared_ptr<MonRivHessian> localHessian_; + MonRivHessian localHessian_; //! Elasticity modulus field_type E_; diff --git a/dune/elasticity/materials/neohookeanmaterial.hh b/dune/elasticity/materials/neohookeanmaterial.hh index f29c90bca82005eb97928d9a65ab535bb2eefd66..c6acac5b94f585d57bbe0e683f9ffa3377c2d224 100644 --- a/dune/elasticity/materials/neohookeanmaterial.hh +++ b/dune/elasticity/materials/neohookeanmaterial.hh @@ -67,25 +67,19 @@ public: NeoHookeanMaterial() = default; template <class BasisT> - NeoHookeanMaterial(BasisT&& basis, ReturnType E, ReturnType nu) : - Base(std::forward<BasisT>(basis)) + NeoHookeanMaterial(BasisT&& basis, field_type E, field_type nu) { - lambda_ = E*nu / ((1+nu)*(1-2*nu)); - mu_ = E / (2*(1+nu)); - - localLinearization_ = std::make_shared<NeoLinearization>(lambda_,mu_); - localHessian_ = std::make_shared<NeoHessian>(lambda_,mu_); + setup(std::forward<BasisT>(basis), E, nu); } template <class BasisT> void setup(BasisT&& basis, field_type E, field_type nu) { - lambda_ = E*nu / ((1+nu)*(1-2*nu)); mu_ = E / (2*(1+nu)); - localLinearization_ = std::make_shared<NeoLinearization>(lambda_,mu_); - localHessian_ = std::make_shared<NeoHessian>(lambda_,mu_); + localLinearization_ = NeoLinearisation{lambda_, mu_}; + localHessian_ = NeoHessian{lambda_, mu_}; this->setBasis(std::forward<BasisT>(basis)); } @@ -212,23 +206,22 @@ public: //! Return the local assembler of the first derivative of the strain energy typename Base::LocalLinearization& firstDerivative(std::shared_ptr<GridFunction> displace) { - localLinearization_->setConfiguration(displace); - return *localLinearization_; + localLinearization_.setConfiguration(displace); + return localLinearization_; } //! Return the local assembler of the second derivative of the strain energy typename Base::LocalHessian& secondDerivative(std::shared_ptr<GridFunction> displace) { - localHessian_->setConfiguration(displace); - return *localHessian_; + localHessian_.setConfiguration(displace); + return localHessian_; } private: //! First derivative of the strain energy - std::shared_ptr<NeoLinearization> localLinearization_; - + NeoLinearisation localLinearization_; //! Second derivative of the strain energy - std::shared_ptr<NeoHessian> localHessian_; + NeoHessian localHessian_; //! First Lame constant field_type lambda_;