From 411da0d690d207ce0326854aa23bfee458e8681c Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Tue, 30 Oct 2012 13:22:17 +0100 Subject: [PATCH] Inline setupBoundary --- src/one-body-sample.org | 113 +++++++++++++++++++--------------------- 1 file changed, 54 insertions(+), 59 deletions(-) diff --git a/src/one-body-sample.org b/src/one-body-sample.org index 325a2829..2bcd7fbf 100644 --- a/src/one-body-sample.org +++ b/src/one-body-sample.org @@ -1,3 +1,4 @@ +* Setup #+name: assembleMassMatrix #+begin_src c++ { @@ -54,6 +55,58 @@ } #+end_src c++ +#+name: setupBoundary +#+begin_src c++ + { + typedef typename GridView::template Codim<dim>::Iterator VertexLeafIterator; + + Dune::MultipleCodimMultipleGeomTypeMapper + <GridView, Dune::MCMGVertexLayout> const myVertexMapper(leafView); + + for (auto it = leafView.template begin<dim>(); + it != leafView.template end<dim>(); + ++it) { + assert(it->geometry().corners() == 1); + Dune::FieldVector<double, dim> const coordinates = it->geometry().corner(0); + size_t const id = myVertexMapper.map(*it); + + // Find the center of the lower face + switch (dim) { + case 3: + if (coordinates[2] != lowerLeft[2]) + break; + // fallthrough + case 2: + if (coordinates[1] == lowerLeft[1] + && std::abs(coordinates[0] - lowerLeft[0]) < 1e-8) + specialNode = id; + break; + default: + assert(false); + } + + // lower face + if (coordinates[1] == lowerLeft[1]) { + frictionalNodes[id] = true; + ignoreNodes[id][1] = true; + } + + // upper face + else if (coordinates[1] == upperRight[1]) + ignoreNodes[id] = true; + + // right face (except for both corners) + else if (coordinates[0] == upperRight[0]) + ; + + // left face (except for both corners) + else if (coordinates[0] == lowerLeft[0]) + ; + } + } +#+end_src + +* Main #+begin_src c++ :tangle one-body-sample.cc :noweb yes #ifdef HAVE_CONFIG_H #include "config.h" @@ -137,63 +190,6 @@ int const dim = DIM; - template <class GridView, class GridCorner> - void - setup_boundary(GridView const &gridView, - Dune::BitSetVector<dim> &ignoreNodes, - Dune::BitSetVector<1> &neumannNodes, - Dune::BitSetVector<1> &frictionalNodes, - GridCorner const &lowerLeft, - GridCorner const &upperRight, - size_t &specialNode) - { - typedef typename GridView::template Codim<dim>::Iterator VertexLeafIterator; - - Dune::MultipleCodimMultipleGeomTypeMapper - <GridView, Dune::MCMGVertexLayout> const myVertexMapper(gridView); - - for (auto it = gridView.template begin<dim>(); - it != gridView.template end<dim>(); - ++it) { - assert(it->geometry().corners() == 1); - Dune::FieldVector<double, dim> const coordinates = it->geometry().corner(0); - size_t const id = myVertexMapper.map(*it); - - // Find the center of the lower face - switch (dim) { - case 3: - if (coordinates[2] != lowerLeft[2]) - break; - // fallthrough - case 2: - if (coordinates[1] == lowerLeft[1] - && std::abs(coordinates[0] - lowerLeft[0]) < 1e-8) - specialNode = id; - break; - default: - assert(false); - } - - // lower face - if (coordinates[1] == lowerLeft[1]) { - frictionalNodes[id] = true; - ignoreNodes[id][1] = true; - } - - // upper face - else if (coordinates[1] == upperRight[1]) - ignoreNodes[id] = true; - - // right face (except for both corners) - else if (coordinates[0] == upperRight[0]) - ; - - // left face (except for both corners) - else if (coordinates[0] == lowerLeft[0]) - ; - } - } - template<class VectorType, class MatrixType, class FunctionType, int dim> Dune::shared_ptr <TimeSteppingScheme @@ -339,8 +335,7 @@ Dune::BitSetVector<dim> ignoreNodes(finestSize, false); Dune::BitSetVector<1> neumannNodes(finestSize, false); Dune::BitSetVector<1> frictionalNodes(finestSize, false); - setup_boundary(leafView, ignoreNodes, neumannNodes, frictionalNodes, - lowerLeft, upperRight, specialNode); + <<setupBoundary>> assert(specialNode != finestSize); assert(frictionalNodes[specialNode][0]); -- GitLab