From b014e93b62eeff11083f5604816ddfcf5f8d08b7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Carsten=20Gr=C3=A4ser?= <graeser@mi.fu-berlin.de>
Date: Sun, 10 Mar 2013 21:09:13 +0000
Subject: [PATCH] Geometries are no longer returned by reference.

Thus one should store a copy. Especially the following
is in general forbidden:

  const JIT& j = e.geometry().jacobianInverseTransposed()

[[Imported from SVN: r8215]]
---
 dune/solvers/test/common.hh | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/dune/solvers/test/common.hh b/dune/solvers/test/common.hh
index 11bb9ea8..28618540 100644
--- a/dune/solvers/test/common.hh
+++ b/dune/solvers/test/common.hh
@@ -76,6 +76,7 @@ void assemblePQ1Stiffness(const GridView& gridView, Matrix& matrix)
     typedef typename GridView::IndexSet IndexSet;
     typedef typename GridView::template Codim<0>::Iterator ElementIterator;
     typedef typename GridView::template Codim<0>::Entity Element;
+    typedef typename GridView::template Codim<0>::Entity::Geometry Geometry;
     typedef typename Dune::PQkLocalFiniteElementCache<double, double, dim, 1> FiniteElementCache;
     typedef typename FiniteElementCache::FiniteElementType FiniteElement;
 
@@ -93,6 +94,7 @@ void assemblePQ1Stiffness(const GridView& gridView, Matrix& matrix)
     for (; it != end; ++it)
     {
         Element& e = *it;
+        const Geometry geometry = e.geometry();
         const FiniteElement& fe = cache.get(e.type());
 
         int localSize = fe.localBasis().size();
@@ -115,10 +117,10 @@ void assemblePQ1Stiffness(const GridView& gridView, Matrix& matrix)
             const LocalCoordinate& quadPos = quad[pt].position();
 
             // get transposed inverse of Jacobian of transformation
-            const JacobianInverseTransposed& invJacobian = e.geometry().jacobianInverseTransposed(quadPos);
+            const JacobianInverseTransposed invJacobian = geometry.jacobianInverseTransposed(quadPos);
 
             // get integration factor
-            const double integrationElement = e.geometry().integrationElement(quadPos);
+            const double integrationElement = geometry.integrationElement(quadPos);
 
             // evaluate gradients of shape functions
             fe.localBasis().evaluateJacobian(quadPos, referenceGradients);
@@ -156,6 +158,7 @@ void assemblePQ1Mass(const GridView& gridView, Matrix& matrix)
     typedef typename GridView::IndexSet IndexSet;
     typedef typename GridView::template Codim<0>::Iterator ElementIterator;
     typedef typename GridView::template Codim<0>::Entity Element;
+    typedef typename GridView::template Codim<0>::Entity::Geometry Geometry;
     typedef typename Dune::PQkLocalFiniteElementCache<double, double, dim, 1> FiniteElementCache;
     typedef typename FiniteElementCache::FiniteElementType FiniteElement;
 
@@ -171,6 +174,7 @@ void assemblePQ1Mass(const GridView& gridView, Matrix& matrix)
     for (; it != end; ++it)
     {
         Element& e = *it;
+        const Geometry geometry = e.geometry();
         const FiniteElement& fe = cache.get(e.type());
 
         int localSize = fe.localBasis().size();
@@ -192,7 +196,7 @@ void assemblePQ1Mass(const GridView& gridView, Matrix& matrix)
             const LocalCoordinate& quadPos = quad[pt].position();
 
             // get integration factor
-            const double integrationElement = e.geometry().integrationElement(quadPos);
+            const double integrationElement = geometry.integrationElement(quadPos);
 
             // evaluate basis functions
             fe.localBasis().evaluateFunction(quadPos, values);
@@ -227,6 +231,7 @@ void assemblePQ1RHS(const GridView& gridView, Vector& r, const Function& f)
     typedef typename GridView::IndexSet IndexSet;
     typedef typename GridView::template Codim<0>::Iterator ElementIterator;
     typedef typename GridView::template Codim<0>::Entity Element;
+    typedef typename GridView::template Codim<0>::Entity::Geometry Geometry;
     typedef typename Dune::PQkLocalFiniteElementCache<double, double, dim, 1> FiniteElementCache;
     typedef typename FiniteElementCache::FiniteElementType FiniteElement;
 
@@ -243,6 +248,7 @@ void assemblePQ1RHS(const GridView& gridView, Vector& r, const Function& f)
     for (; it != end; ++it)
     {
         Element& e = *it;
+        const Geometry geometry = e.geometry();
         const FiniteElement& fe = cache.get(e.type());
 
         int localSize = fe.localBasis().size();
@@ -264,14 +270,14 @@ void assemblePQ1RHS(const GridView& gridView, Vector& r, const Function& f)
             const LocalCoordinate& quadPos = quad[pt].position();
 
             // get integration factor
-            const double integrationElement = e.geometry().integrationElement(quadPos);
+            const double integrationElement = geometry.integrationElement(quadPos);
 
             // evaluate basis functions
             fe.localBasis().evaluateFunction(quadPos, values);
 
             // evaluate function
             FunctionRangeType fAtPos;
-            f.evaluate(e.geometry().global(quadPos), fAtPos);
+            f.evaluate(geometry.global(quadPos), fAtPos);
 
             // add vector entries
             double z = quad[pt].weight() * integrationElement;
-- 
GitLab