From fb75b6dedc7bb020c861624c4a8ea3cd8eb0fe95 Mon Sep 17 00:00:00 2001
From: Jonathan Youett <youett@mi.fu-berlin.de>
Date: Tue, 3 Jul 2012 12:22:19 +0000
Subject: [PATCH] store a pointer to the global basis instead of a reference

[[Imported from SVN: r11185]]
---
 .../materials/geomexactstvenantkirchhoffmaterial.hh | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/dune/elasticity/materials/geomexactstvenantkirchhoffmaterial.hh b/dune/elasticity/materials/geomexactstvenantkirchhoffmaterial.hh
index d942286..82a00de 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_;
-- 
GitLab