From f80d4a1b90a6f643ec6e9458e6f5b6b3a8293160 Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Tue, 28 Jul 2015 08:22:37 +0200 Subject: [PATCH] [cleanup] Modernize the code with a bit of C++11 In particular: - auto - range-based for --- dune/solvers/test/common.hh | 117 +++++++++++++----------------------- 1 file changed, 43 insertions(+), 74 deletions(-) diff --git a/dune/solvers/test/common.hh b/dune/solvers/test/common.hh index 66973e10..a5095717 100644 --- a/dune/solvers/test/common.hh +++ b/dune/solvers/test/common.hh @@ -35,33 +35,27 @@ void constructPQ1Pattern(const GridView& gridView, Matrix& matrix) { static const int dim = GridView::Grid::dimension; - typedef typename GridView::IndexSet IndexSet; - typedef typename GridView::template Codim<0>::Iterator ElementIterator; - typedef typename GridView::template Codim<0>::Entity Element; typedef typename Dune::PQkLocalFiniteElementCache<double, double, dim, 1> FiniteElementCache; typedef typename FiniteElementCache::FiniteElementType FiniteElement; - const IndexSet& indexSet = gridView.indexSet(); + const auto& indexSet = gridView.indexSet(); FiniteElementCache cache; int size = indexSet.size(dim); Dune::MatrixIndexSet indices(size, size); - ElementIterator it = gridView.template begin<0>(); - ElementIterator end = gridView.template end<0>(); - for (; it != end; ++it) + for (const auto& element : elements(gridView)) { - const Element& e = *it; - const FiniteElement& fe = cache.get(e.type()); + const FiniteElement& fe = cache.get(element.type()); - int localSize = fe.localBasis().size(); + int localSize = fe.size(); for (int i = 0; i < localSize; ++i) { - int iGlobal = indexSet.subIndex(e, fe.localCoefficients().localKey(i).subEntity(), dim); + int iGlobal = indexSet.subIndex(element, fe.localCoefficients().localKey(i).subEntity(), dim); for (int j = 0; j < localSize; ++j) { - int jGlobal = indexSet.subIndex(e, fe.localCoefficients().localKey(j).subEntity(), dim); + int jGlobal = indexSet.subIndex(element, fe.localCoefficients().localKey(j).subEntity(), dim); indices.add(iGlobal, jGlobal); indices.add(jGlobal, iGlobal); } @@ -77,39 +71,31 @@ void assemblePQ1Stiffness(const GridView& gridView, Matrix& matrix) static const int dim = GridView::Grid::dimension; static const int dimworld = GridView::Grid::dimensionworld; - 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; - typedef typename Dune::QuadratureRule<double,dim> QuadratureRule; - typedef typename Dune::template FieldVector<double,dim> LocalCoordinate; - typedef typename Dune::template FieldVector<double,dimworld> GlobalCoordinate; + typedef typename Dune::FieldVector<double,dim> LocalCoordinate; + typedef typename Dune::FieldVector<double,dimworld> GlobalCoordinate; typedef typename Element::Geometry::JacobianInverseTransposed JacobianInverseTransposed; typedef typename FiniteElement::Traits::LocalBasisType::Traits::JacobianType JacobianType; - const IndexSet& indexSet = gridView.indexSet(); + const auto& indexSet = gridView.indexSet(); FiniteElementCache cache; - ElementIterator it = gridView.template begin<0>(); - ElementIterator end = gridView.template end<0>(); - for (; it != end; ++it) + for (const auto& element : elements(gridView)) { - const Element& e = *it; - const Geometry geometry = e.geometry(); - const FiniteElement& fe = cache.get(e.type()); + const Geometry geometry = element.geometry(); + const FiniteElement& fe = cache.get(element.type()); - int localSize = fe.localBasis().size(); + int localSize = fe.size(); // get quadrature rule of appropiate order (P1/Q1) - int order = 0; - if (e.type().isSimplex()) - order = 2*(1-1); - else - order = 2*(dim-1); - const QuadratureRule& quad = Dune::template QuadratureRules<double, dim>::rule(e.type(), order); + int order = (element.type().isSimplex()) + ? 2*(1-1) + : 2*(dim-1); + const auto& quad = Dune::QuadratureRules<double, dim>::rule(element.type(), order); // store gradients of shape functions and base functions std::vector<JacobianType> referenceGradients(localSize); @@ -137,10 +123,10 @@ void assemblePQ1Stiffness(const GridView& gridView, Matrix& matrix) double z = quad[pt].weight() * integrationElement; for (int i = 0; i < localSize; ++i) { - int iGlobal = indexSet.subIndex(e, fe.localCoefficients().localKey(i).subEntity(), dim); + int iGlobal = indexSet.subIndex(element, fe.localCoefficients().localKey(i).subEntity(), dim); for (int j = i+1; j < localSize; ++j) { - int jGlobal = indexSet.subIndex(e, fe.localCoefficients().localKey(j).subEntity(), dim); + int jGlobal = indexSet.subIndex(element, fe.localCoefficients().localKey(j).subEntity(), dim); double zij = (gradients[i] * gradients[j]) * z; matrix[iGlobal][jGlobal] += zij; @@ -159,37 +145,28 @@ void assemblePQ1Mass(const GridView& gridView, Matrix& matrix) { static const int dim = GridView::Grid::dimension; - 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; - typedef typename Dune::QuadratureRule<double,dim> QuadratureRule; - typedef typename Dune::template FieldVector<double,dim> LocalCoordinate; + typedef typename Dune::FieldVector<double,dim> LocalCoordinate; typedef typename FiniteElement::Traits::LocalBasisType::Traits::RangeType RangeType; - const IndexSet& indexSet = gridView.indexSet(); + const auto& indexSet = gridView.indexSet(); FiniteElementCache cache; - ElementIterator it = gridView.template begin<0>(); - ElementIterator end = gridView.template end<0>(); - for (; it != end; ++it) + for (const auto& element : elements(gridView)) { - const Element& e = *it; - const Geometry geometry = e.geometry(); - const FiniteElement& fe = cache.get(e.type()); + const Geometry geometry = element.geometry(); + const FiniteElement& fe = cache.get(element.type()); - int localSize = fe.localBasis().size(); + int localSize = fe.size(); - // get quadrature rule of appropiate order (P1/Q1) - int order = 0; - if (e.type().isSimplex()) - order = 2*1; - else - order = 2*dim; - const QuadratureRule& quad = Dune::template QuadratureRules<double, dim>::rule(e.type(), order); + // get quadrature rule of appropriate order (P1/Q1) + int order = (element.type().isSimplex()) + ? 2*1 + : 2*dim; + const auto& quad = Dune::QuadratureRules<double, dim>::rule(element.type(), order); // store values of shape functions std::vector<RangeType> values(localSize); @@ -209,11 +186,11 @@ void assemblePQ1Mass(const GridView& gridView, Matrix& matrix) double z = quad[pt].weight() * integrationElement; for (int i = 0; i < localSize; ++i) { - int iGlobal = indexSet.subIndex(e, fe.localCoefficients().localKey(i).subEntity(), dim); + int iGlobal = indexSet.subIndex(element, fe.localCoefficients().localKey(i).subEntity(), dim); double zi = values[i]*z; for (int j = i+1; j < localSize; ++j) { - int jGlobal = indexSet.subIndex(e, fe.localCoefficients().localKey(j).subEntity(), dim); + int jGlobal = indexSet.subIndex(element, fe.localCoefficients().localKey(j).subEntity(), dim); double zij = values[j] * zi; matrix[iGlobal][jGlobal] += zij; @@ -232,38 +209,30 @@ void assemblePQ1RHS(const GridView& gridView, Vector& r, const Function& f) { static const int dim = GridView::Grid::dimension; - 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; - typedef typename Dune::QuadratureRule<double,dim> QuadratureRule; typedef typename Dune::template FieldVector<double,dim> LocalCoordinate; typedef typename FiniteElement::Traits::LocalBasisType::Traits::RangeType RangeType; typedef typename Function::RangeType FunctionRangeType; - const IndexSet& indexSet = gridView.indexSet(); + const auto& indexSet = gridView.indexSet(); FiniteElementCache cache; - ElementIterator it = gridView.template begin<0>(); - ElementIterator end = gridView.template end<0>(); - for (; it != end; ++it) + for (const auto& element : elements(gridView)) { - const Element& e = *it; - const Geometry geometry = e.geometry(); - const FiniteElement& fe = cache.get(e.type()); + const Geometry geometry = element.geometry(); + const FiniteElement& fe = cache.get(element.type()); - int localSize = fe.localBasis().size(); + int localSize = fe.size(); // get quadrature rule of appropiate order (P1/Q1) - int order = 0; - if (e.type().isSimplex()) - order = 2*1; - else - order = 2*dim; - const QuadratureRule& quad = Dune::template QuadratureRules<double, dim>::rule(e.type(), order); + int order = (element.type().isSimplex()) + ? 2*1 + : 2*dim; + + const auto& quad = Dune::QuadratureRules<double, dim>::rule(element.type(), order); // store values of shape functions std::vector<RangeType> values(localSize); @@ -287,7 +256,7 @@ void assemblePQ1RHS(const GridView& gridView, Vector& r, const Function& f) double z = quad[pt].weight() * integrationElement; for (int i = 0; i < localSize; ++i) { - int iGlobal = indexSet.subIndex(e, fe.localCoefficients().localKey(i).subEntity(), dim); + int iGlobal = indexSet.subIndex(element, fe.localCoefficients().localKey(i).subEntity(), dim); r[iGlobal].axpy(values[i]*z, fAtPos); } -- GitLab