From 58c533e4d0482b15450ee7f97a83f1152eb823e7 Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Mon, 24 Oct 2011 07:51:41 +0000 Subject: [PATCH] compile again after recent interface changes [[Imported from SVN: r7998]] --- test/localgeodesicfefunctiontest.cc | 67 +++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/test/localgeodesicfefunctiontest.cc b/test/localgeodesicfefunctiontest.cc index c0fb5d8f..d4436460 100644 --- a/test/localgeodesicfefunctiontest.cc +++ b/test/localgeodesicfefunctiontest.cc @@ -6,6 +6,8 @@ #include <dune/common/fvector.hh> #include <dune/grid/common/quadraturerules.hh> +#include <dune/localfunctions/lagrange/pqkfactory.hh> + #include <dune/gfe/rotation.hh> #include <dune/gfe/realtuple.hh> #include <dune/gfe/unitvector.hh> @@ -59,7 +61,14 @@ void testPermutationInvariance(const std::vector<TargetSpace>& corners) { // works only for 2d domains assert(domainDim==2); + + PQkLocalFiniteElementCache<double,double,domainDim,1> feCache; + typedef typename PQkLocalFiniteElementCache<double,double,domainDim,1>::FiniteElementType LocalFiniteElement; + GeometryType simplex; + simplex.makeSimplex(domainDim); + + // std::vector<TargetSpace> cornersRotated1(domainDim+1); std::vector<TargetSpace> cornersRotated2(domainDim+1); @@ -67,15 +76,15 @@ void testPermutationInvariance(const std::vector<TargetSpace>& corners) cornersRotated1[1] = cornersRotated2[0] = corners[2]; cornersRotated1[2] = cornersRotated2[1] = corners[0]; - LocalGeodesicFEFunction<2,double,TargetSpace> f0(corners); - LocalGeodesicFEFunction<2,double,TargetSpace> f1(cornersRotated1); - LocalGeodesicFEFunction<2,double,TargetSpace> f2(cornersRotated2); + LocalGeodesicFEFunction<2,double,LocalFiniteElement,TargetSpace> f0(feCache.get(simplex), corners); + LocalGeodesicFEFunction<2,double,LocalFiniteElement,TargetSpace> f1(feCache.get(simplex), cornersRotated1); + LocalGeodesicFEFunction<2,double,LocalFiniteElement,TargetSpace> f2(feCache.get(simplex), cornersRotated2); // A quadrature rule as a set of test points int quadOrder = 3; const Dune::QuadratureRule<double, domainDim>& quad - = Dune::QuadratureRules<double, domainDim>::rule(GeometryType(GeometryType::simplex,domainDim), quadOrder); + = Dune::QuadratureRules<double, domainDim>::rule(simplex, quadOrder); for (size_t pt=0; pt<quad.size(); pt++) { @@ -107,8 +116,16 @@ template <int domainDim, class TargetSpace> void testDerivative(const std::vector<TargetSpace>& corners) { // Make local fe function to be tested - LocalGeodesicFEFunction<domainDim,double,TargetSpace> f(corners); + PQkLocalFiniteElementCache<double,double,domainDim,1> feCache; + typedef typename PQkLocalFiniteElementCache<double,double,domainDim,1>::FiniteElementType LocalFiniteElement; + + GeometryType simplex; + simplex.makeSimplex(domainDim); + + LocalGeodesicFEFunction<domainDim,double,LocalFiniteElement,TargetSpace> f(feCache.get(simplex), corners); + static const int embeddedDim = TargetSpace::EmbeddedTangentVector::dimension; + // A quadrature rule as a set of test points int quadOrder = 3; @@ -120,12 +137,12 @@ void testDerivative(const std::vector<TargetSpace>& corners) const Dune::FieldVector<double,domainDim>& quadPos = quad[pt].position(); // evaluate actual derivative - Dune::FieldMatrix<double, TargetSpace::EmbeddedTangentVector::size, domainDim> derivative = f.evaluateDerivative(quadPos); + Dune::FieldMatrix<double, embeddedDim, domainDim> derivative = f.evaluateDerivative(quadPos); // evaluate fd approximation of derivative - Dune::FieldMatrix<double, TargetSpace::EmbeddedTangentVector::size, domainDim> fdDerivative = f.evaluateDerivativeFD(quadPos); + Dune::FieldMatrix<double, embeddedDim, domainDim> fdDerivative = f.evaluateDerivativeFD(quadPos); - Dune::FieldMatrix<double, TargetSpace::EmbeddedTangentVector::size, domainDim> diff = derivative; + Dune::FieldMatrix<double, embeddedDim, domainDim> diff = derivative; diff -= fdDerivative; if ( diff.infinity_norm() > 100*eps ) { @@ -144,13 +161,21 @@ template <int domainDim, class TargetSpace> void testDerivativeOfValueWRTCoefficients(const std::vector<TargetSpace>& corners) { // Make local fe function to be tested - LocalGeodesicFEFunction<domainDim,double,TargetSpace> f(corners); + PQkLocalFiniteElementCache<double,double,domainDim,1> feCache; + typedef typename PQkLocalFiniteElementCache<double,double,domainDim,1>::FiniteElementType LocalFiniteElement; + + GeometryType simplex; + simplex.makeSimplex(domainDim); + LocalGeodesicFEFunction<domainDim,double,LocalFiniteElement,TargetSpace> f(feCache.get(simplex), corners); + + static const int embeddedDim = TargetSpace::EmbeddedTangentVector::dimension; + // A quadrature rule as a set of test points int quadOrder = 3; const Dune::QuadratureRule<double, domainDim>& quad - = Dune::QuadratureRules<double, domainDim>::rule(GeometryType(GeometryType::simplex,domainDim), quadOrder); + = Dune::QuadratureRules<double, domainDim>::rule(simplex, quadOrder); for (size_t pt=0; pt<quad.size(); pt++) { @@ -160,15 +185,15 @@ void testDerivativeOfValueWRTCoefficients(const std::vector<TargetSpace>& corner for (size_t i=0; i<corners.size(); i++) { // evaluate actual derivative - FieldMatrix<double, TargetSpace::EmbeddedTangentVector::size, TargetSpace::EmbeddedTangentVector::size> derivative; + FieldMatrix<double, embeddedDim, embeddedDim> derivative; f.evaluateDerivativeOfValueWRTCoefficient(quadPos, i, derivative); // evaluate fd approximation of derivative - FieldMatrix<double, TargetSpace::EmbeddedTangentVector::size, TargetSpace::EmbeddedTangentVector::size> fdDerivative; + FieldMatrix<double, embeddedDim, embeddedDim> fdDerivative; f.evaluateFDDerivativeOfValueWRTCoefficient(quadPos, i, fdDerivative); if ( (derivative - fdDerivative).infinity_norm() > eps ) { - std::cout << className(corners[0]) << ": Analytical derivative of value does not match fd approximation." << std::endl; + std::cout << className<TargetSpace>() << ": Analytical derivative of value does not match fd approximation." << std::endl; std::cout << "coefficient: " << i << std::endl; std::cout << "quad pos: " << quadPos << std::endl; std::cout << "gfe: "; @@ -191,13 +216,21 @@ template <int domainDim, class TargetSpace> void testDerivativeOfGradientWRTCoefficients(const std::vector<TargetSpace>& corners) { // Make local fe function to be tested - LocalGeodesicFEFunction<domainDim,double,TargetSpace> f(corners); + PQkLocalFiniteElementCache<double,double,domainDim,1> feCache; + typedef typename PQkLocalFiniteElementCache<double,double,domainDim,1>::FiniteElementType LocalFiniteElement; + + GeometryType simplex; + simplex.makeSimplex(domainDim); + LocalGeodesicFEFunction<domainDim,double,LocalFiniteElement,TargetSpace> f(feCache.get(simplex),corners); + + static const int embeddedDim = TargetSpace::EmbeddedTangentVector::dimension; + // A quadrature rule as a set of test points int quadOrder = 3; const Dune::QuadratureRule<double, domainDim>& quad - = Dune::QuadratureRules<double, domainDim>::rule(GeometryType(GeometryType::simplex,domainDim), quadOrder); + = Dune::QuadratureRules<double, domainDim>::rule(simplex, quadOrder); for (size_t pt=0; pt<quad.size(); pt++) { @@ -207,11 +240,11 @@ void testDerivativeOfGradientWRTCoefficients(const std::vector<TargetSpace>& cor for (size_t i=0; i<corners.size(); i++) { // evaluate actual derivative - Tensor3<double, TargetSpace::EmbeddedTangentVector::size, TargetSpace::EmbeddedTangentVector::size, domainDim> derivative; + Tensor3<double, embeddedDim, embeddedDim, domainDim> derivative; f.evaluateDerivativeOfGradientWRTCoefficient(quadPos, i, derivative); // evaluate fd approximation of derivative - Tensor3<double, TargetSpace::EmbeddedTangentVector::size, TargetSpace::EmbeddedTangentVector::size, domainDim> fdDerivative; + Tensor3<double, embeddedDim, embeddedDim, domainDim> fdDerivative; f.evaluateFDDerivativeOfGradientWRTCoefficient(quadPos, i, fdDerivative); if ( (derivative - fdDerivative).infinity_norm() > eps ) { -- GitLab