From c2411e489b45a33189af02a8fb7fec2991c9ca73 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Tue, 3 Sep 2013 16:30:03 +0000
Subject: [PATCH] Test harmonic energy derivation for various unit vector and
 grid dimensions

[[Imported from SVN: r9419]]
---
 test/adolctest.cc | 41 +++++++++++++++++++++--------------------
 1 file changed, 21 insertions(+), 20 deletions(-)

diff --git a/test/adolctest.cc b/test/adolctest.cc
index 27331135..c565178f 100644
--- a/test/adolctest.cc
+++ b/test/adolctest.cc
@@ -71,39 +71,36 @@ void compareMatrices(const Matrix<FieldMatrix<double,blocksize,blocksize> >& fdM
   }
 }
 
-
+template <class TargetSpace, int gridDim>
 int testHarmonicEnergy() {
 
-  typedef UnitVector<double,3> TargetSpace;
-  const int dim = 1;
-
-  std::cout << " --- Testing " << className<TargetSpace>() << ", domain dimension: " << dim << " ---" << std::endl;
+  std::cout << " --- Testing " << className<TargetSpace>() << ", domain dimension: " << gridDim << " ---" << std::endl;
 
   // set up a test grid
-  typedef YaspGrid<dim> GridType;
-  FieldVector<double,dim> l(1);
-  std::array<int,dim> elements;
+  typedef YaspGrid<gridDim> GridType;
+  FieldVector<double,gridDim> l(1);
+  std::array<int,gridDim> elements;
   std::fill(elements.begin(), elements.end(), 1);
   GridType grid(l,elements);
 
-  typedef Q1NodalBasis<GridType::LeafGridView,double> Q1Basis;
+  typedef Q1NodalBasis<typename GridType::LeafGridView,double> Q1Basis;
   Q1Basis q1Basis(grid.leafView());
 
-  typedef Q1LocalFiniteElement<double,double,dim> LocalFE;
+  typedef Q1LocalFiniteElement<double,double,gridDim> LocalFE;
   LocalFE localFiniteElement;
 
   // Assembler using finite differences
-  HarmonicEnergyLocalStiffness<GridType::LeafGridView,
-                               Q1Basis::LocalFiniteElement,
+  HarmonicEnergyLocalStiffness<typename GridType::LeafGridView,
+                               typename Q1Basis::LocalFiniteElement,
                                TargetSpace> harmonicEnergyLocalStiffness;
 
   // Assembler using ADOL-C
-  typedef TargetSpace::rebind<adouble>::other ATargetSpace;
-  HarmonicEnergyLocalStiffness<GridType::LeafGridView,
-                               Q1Basis::LocalFiniteElement,
+  typedef typename TargetSpace::template rebind<adouble>::other ATargetSpace;
+  HarmonicEnergyLocalStiffness<typename GridType::LeafGridView,
+                               typename Q1Basis::LocalFiniteElement,
                                ATargetSpace> harmonicEnergyADOLCLocalStiffness;
-  LocalGeodesicFEADOLCStiffness<GridType::LeafGridView,
-                                Q1Basis::LocalFiniteElement,
+  LocalGeodesicFEADOLCStiffness<typename GridType::LeafGridView,
+                                typename Q1Basis::LocalFiniteElement,
                                 TargetSpace> localGFEADOLCStiffness(&harmonicEnergyADOLCLocalStiffness);
 
   size_t nDofs = localFiniteElement.localBasis().size();
@@ -132,9 +129,9 @@ int testHarmonicEnergy() {
     //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-    harmonicEnergyLocalStiffness.assembleHessian(*grid.leafbegin<0>(),localFiniteElement, localSolution);
+    harmonicEnergyLocalStiffness.assembleHessian(*grid.template leafbegin<0>(),localFiniteElement, localSolution);
 
-    localGFEADOLCStiffness.assembleHessian(*grid.leafbegin<0>(),localFiniteElement, localSolution);
+    localGFEADOLCStiffness.assembleHessian(*grid.template leafbegin<0>(),localFiniteElement, localSolution);
 
     compareMatrices(harmonicEnergyLocalStiffness.A_, localGFEADOLCStiffness.A_);
 
@@ -211,6 +208,10 @@ int testCosseratEnergy() {
 
 int main()
 {
-   testHarmonicEnergy();
+   testHarmonicEnergy<UnitVector<double,2>, 1>();
+   testHarmonicEnergy<UnitVector<double,3>, 1>();
+   testHarmonicEnergy<UnitVector<double,2>, 2>();
+   testHarmonicEnergy<UnitVector<double,3>, 2>();
+
    testCosseratEnergy();
 }
-- 
GitLab