diff --git a/dune/elasticity/materials/geomexactstvenantkirchhoffmaterial.hh b/dune/elasticity/materials/geomexactstvenantkirchhoffmaterial.hh index d9422865d1f62ff8e8230d8ba489e1ebcfae7a23..82a00de5a63b51d4c9f8751b9bf43b51ab2da6ff 100644 --- a/dune/elasticity/materials/geomexactstvenantkirchhoffmaterial.hh +++ b/dune/elasticity/materials/geomexactstvenantkirchhoffmaterial.hh @@ -49,7 +49,7 @@ public: nu_(nu) {} - void setup(ctype E, ctype nu) + void setup(ctype E, ctype nu, const Basis& basis) { E_ = E; nu_ = nu; @@ -60,7 +60,8 @@ public: localLinearization_ = Dune::shared_ptr<LocalLinearization>(new LocalLinearization(E,nu)); localHessian_ = Dune::shared_ptr<LocalHessian>(new LocalHessian(E,nu)); - + + basis_ = &basis; } //! Evaluate the strain energy @@ -68,7 +69,7 @@ public: ctype energy(const CoeffType& coeff) { // make grid function - BasisGridFunction<Basis,CoeffType> configuration(basis_,coeff); + BasisGridFunction<Basis,CoeffType> configuration(*basis_,coeff); ctype energy=0; const GridType& grid = configuration.grid(); @@ -79,7 +80,7 @@ public: for (;eIt != eItEnd; ++eIt) { // get quadrature rule - QuadratureRuleKey quad1(basis_.getLocalFiniteElement(*eIt)); + QuadratureRuleKey quad1(basis_->getLocalFiniteElement(*eIt)); QuadratureRuleKey quadKey = quad1.derivative().square().square(); const Dune::template QuadratureRule<ctype, dim>& quad = QuadratureRuleCache<ctype, dim>::rule(quadKey); @@ -124,7 +125,7 @@ public: LocalHessian& secondDerivative() {return *localHessian_;} //! Return the global basis - const Basis& basis() {return basis_;} + const Basis& basis() {return *basis_;} private: //! First derivative of the strain energy @@ -134,7 +135,7 @@ private: Dune::shared_ptr<LocalHessian> localHessian_; //! Global basis used for the spatial discretization - const Basis& basis_; + const Basis* basis_; //! Elasticity modulus ctype E_;