From 2b7551dbf6ccaba18cdc97c5ac22b257fb26d222 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Mon, 17 Oct 2011 11:34:01 +0000
Subject: [PATCH] Make the internal data of TensorSSD private. Add an
 operator() with three arguments to grant access to the individual entries.

[[Imported from SVN: r7934]]
---
 dune/gfe/localgeodesicfefunction.hh | 10 +++++-----
 dune/gfe/tensorssd.hh               | 14 ++++++++++++++
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/dune/gfe/localgeodesicfefunction.hh b/dune/gfe/localgeodesicfefunction.hh
index 094b58ff..cc2d2ad6 100644
--- a/dune/gfe/localgeodesicfefunction.hh
+++ b/dune/gfe/localgeodesicfefunction.hh
@@ -433,7 +433,7 @@ evaluateDerivativeOfGradientWRTCoefficient(const Dune::FieldVector<ctype, dim>&
     dvDwF = 0;
     for (int i=0; i<embeddedDim; i++)
         for (int j=0; j<embeddedDim; j++)
-            dvDwF.data_[i][j][coefficient] = mixedDerivative[i][j];
+            dvDwF(i, j, coefficient) = mixedDerivative[i][j];
     
     
     // dFDq is not invertible, if the target space is embedded into a higher-dimensional
@@ -462,16 +462,16 @@ evaluateDerivativeOfGradientWRTCoefficient(const Dune::FieldVector<ctype, dim>&
         Dune::FieldMatrix<ctype,embeddedDim,embeddedDim> hesse = TargetSpace::secondDerivativeOfDistanceSquaredWRTSecondArgument(coefficients_[k], q);
         for (int i=0; i<embeddedDim; i++)
             for (int j=0; j<embeddedDim; j++)
-                dqdwF.data_[i][j][k] = hesse[i][j];
+                dqdwF(i, j, k) = hesse[i][j];
     }
 
     TensorSSD<double, embeddedDim,embeddedDim> dqdwF_times_dvq(coefficients_.size());
     for (int i=0; i<embeddedDim; i++)
         for (int j=0; j<embeddedDim; j++)
             for (size_t k=0; k<coefficients_.size(); k++) {
-                dqdwF_times_dvq.data_[i][j][k] = 0;
+                dqdwF_times_dvq(i, j, k) = 0;
                 for (int l=0; l<embeddedDim; l++)
-                    dqdwF_times_dvq.data_[i][j][k] += dqdwF.data_[l][j][k] * dvq[l][i];
+                    dqdwF_times_dvq(i, j, k) += dqdwF(l, j, k) * dvq[l][i];
             }
 
     Tensor3<double, embeddedDim,embeddedDim,dim> foo;
@@ -482,7 +482,7 @@ evaluateDerivativeOfGradientWRTCoefficient(const Dune::FieldVector<ctype, dim>&
     for (int i=0; i<embeddedDim; i++)
         for (int j=0; j<embeddedDim; j++)
             for (int k=0; k<dim; k++)
-                foo[i][j][k] -= bar.data_[i][j][k];
+                foo[i][j][k] -= bar(i, j, k);
     
     result = 0;
     for (int i=0; i<embeddedDim; i++)
diff --git a/dune/gfe/tensorssd.hh b/dune/gfe/tensorssd.hh
index 17f72448..876b9b09 100644
--- a/dune/gfe/tensorssd.hh
+++ b/dune/gfe/tensorssd.hh
@@ -41,6 +41,18 @@ public:
                 assert(false);
         }
     }
+
+    /** \brief Direct access to individual entries */
+    T& operator()(size_t i, size_t j, size_t k)
+    {
+        return data_[i][j][k];
+    }
+        
+    /** \brief Direct const access to individual entries */
+    const T& operator()(size_t i, size_t j, size_t k) const
+    {
+        return data_[i][j][k];
+    }
         
     /** \brief Assignment from scalar */
     TensorSSD<T,N1,N2>& operator=(const T& scalar)
@@ -84,6 +96,8 @@ public:
                     
         return result;
     }
+    
+private:
 
     // having the dynamic data type on the inside is kind of a stupid data layout
     Dune::array<Dune::array<std::vector<T>, N2>, N1> data_;
-- 
GitLab