From 2e36b882d5b6efc9d5f1706820effe966c4085a4 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Thu, 13 Sep 2012 09:49:48 +0000
Subject: [PATCH] factor out construction of the Lagrange nodes into a separate
 method

[[Imported from SVN: r8865]]
---
 test/nestednesstest.cc | 37 +++++++++++++++++++++++++------------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git a/test/nestednesstest.cc b/test/nestednesstest.cc
index 530d9c74..987222b7 100644
--- a/test/nestednesstest.cc
+++ b/test/nestednesstest.cc
@@ -31,6 +31,25 @@ double diameter(const std::vector<TargetSpace>& v)
     return d;
 }
 
+template <int domainDim>
+std::vector<FieldVector<double,domainDim> > lagrangeNodes(const GeometryType& type)
+{
+    PQkLocalFiniteElementCache<double,double,domainDim,2> feCache;
+    std::vector<FieldVector<double,domainDim> > result(feCache.get(type).localBasis().size());
+    
+    // evaluate loF at the Lagrange points of the second-order function
+    const Dune::GenericReferenceElement<double,domainDim>& refElement
+        = Dune::GenericReferenceElements<double,domainDim>::general(type);
+        
+    for (size_t i=0; i<feCache.get(type).localBasis().size(); i++) {
+        
+        result[i] = refElement.position(feCache.get(type).localCoefficients().localKey(i).subEntity(),
+                                        feCache.get(type).localCoefficients().localKey(i).codim());
+        
+    }
+    
+    return result;
+}
 
 
 template <int domainDim, class TargetSpace>
@@ -40,19 +59,13 @@ void testNestedness(const LocalGeodesicFEFunction<domainDim,double,typename PQkL
     PQkLocalFiniteElementCache<double,double,domainDim,2> feCache;
     typedef typename PQkLocalFiniteElementCache<double,double,domainDim,2>::FiniteElementType LocalFiniteElement;
     
-    std::vector<TargetSpace> nodalValues(feCache.get(loF.type()).localBasis().size());
+    // Get the Lagrange nodes of the high-order function
+    std::vector<FieldVector<double,domainDim> > lNodes = lagrangeNodes<domainDim>(loF.type());
     
-    // evaluate loF at the Lagrange points of the second-order function
-    const Dune::GenericReferenceElement<double,domainDim>& refElement
-        = Dune::GenericReferenceElements<double,domainDim>::general(loF.type());
-        
-    for (size_t i=0; i<feCache.get(loF.type()).localBasis().size(); i++) {
-        
-        nodalValues[i] = loF.evaluate(refElement.position(feCache.get(loF.type()).localCoefficients().localKey(i).subEntity(),
-                                                          feCache.get(loF.type()).localCoefficients().localKey(i).codim()));
-        
-    }
-        
+    // Evaluate low-order function at the high-order nodal values
+    std::vector<TargetSpace> nodalValues(lNodes.size());
+    for (size_t i=0; i<lNodes.size(); i++)
+        nodalValues[i] = loF.evaluate(lNodes[i]);
     
     LocalGeodesicFEFunction<domainDim,double,LocalFiniteElement,TargetSpace> hoF(feCache.get(loF.type()),nodalValues);
 
-- 
GitLab