diff --git a/dune/elasticity/materials/geomexactstvenantkirchhoffmaterial.hh b/dune/elasticity/materials/geomexactstvenantkirchhoffmaterial.hh index 23dced8698a654ba4a73ea2698900877b3a0715e..de933faad94093db8cd6b22c08cd67657233f495 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_;