diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc index b8a6f359450f3f72e1e373ed6dba189c381f7d51..d41e7db90444599343395e377564221f03c7287c 100644 --- a/src/one-body-sample.cc +++ b/src/one-body-sample.cc @@ -40,25 +40,23 @@ int const dim = 2; -template <class GridType> -void setup_boundary(GridType const &grid, +template <class GridView> +void setup_boundary(GridView const &gridView, Dune::FieldVector<double, dim> const &end_points, Dune::BitSetVector<dim> &ignoreNodes, Dune::BitSetVector<1> &neumannNodes, Dune::BitSetVector<1> &frictionalNodes) { - typedef typename GridType::LeafGridView GridView; - GridView const leafView = grid.leafView(); typedef typename GridView::template Codim<dim>::Iterator VertexLeafIterator; typedef Dune::MultipleCodimMultipleGeomTypeMapper< GridView, Dune::MCMGVertexLayout> VertexMapper; - VertexMapper const myVertexMapper(leafView); + VertexMapper const myVertexMapper(gridView); size_t dirichlet_nodes = 0; size_t neumann_nodes = 0; size_t frictional_nodes = 0; - for (VertexLeafIterator it = leafView.template begin<dim>(); - it != leafView.template end<dim>(); ++it) { + for (VertexLeafIterator it = gridView.template begin<dim>(); + it != gridView.template end<dim>(); ++it) { Dune::GeometryType const gt = it->type(); assert(it->geometry().corners() == 1); Dune::FieldVector<double, dim> const coordinates = it->geometry().corner(0); @@ -136,7 +134,7 @@ int main() { size_t const solver_maxIterations = 100; double const solver_tolerance = 1e-4; - // Set up grid + // {{{ Set up grid typedef Dune::YaspGrid<dim> GridType; Dune::FieldVector<double, dim> const end_points( 1); // nth dimension (zero-indexed) goes from 0 to end_points[n] @@ -147,9 +145,13 @@ int main() { 0); // zero overlap (whatever that is) grid.globalRefine(refinements); + typedef GridType::LeafGridView GridView; + GridView const leafView = grid.leafView(); + // }}} + // Set up nodal basis typedef P1NodalBasis<GridType::LeafGridView, double> P1Basis; - P1Basis const p1Basis(grid.leafView()); + P1Basis const p1Basis(leafView); // Assemble elastic force on the body StVenantKirchhoffAssembler<GridType, P1Basis::LocalFiniteElement, @@ -163,8 +165,8 @@ int main() { Dune::BitSetVector<1> neumannNodes(grid.size(grid.maxLevel(), dim), false); Dune::BitSetVector<1> frictionalNodes(grid.size(grid.maxLevel(), dim), false); - setup_boundary<GridType>(grid, end_points, ignoreNodes, neumannNodes, - frictionalNodes); + setup_boundary<GridType::LeafGridView>(leafView, end_points, ignoreNodes, + neumannNodes, frictionalNodes); VectorType u1(grid.size(grid.maxLevel(), dim)); u1 = 0; @@ -172,12 +174,12 @@ int main() { VectorType f(grid.size(grid.maxLevel(), dim)); assemble_neumann<GridType, GridType::LeafGridView, SmallVector, P1Basis>( - grid.leafView(), p1Basis, neumannNodes, f); + leafView, p1Basis, neumannNodes, f); // {{{ Assemble terms for the nonlinearity std::vector<Dune::FieldVector<double, 1>> nodalIntegrals; assemble_frictional<GridType, GridType::LeafGridView, SmallVector, P1Basis>( - grid.leafView(), p1Basis, frictionalNodes, nodalIntegrals); + leafView, p1Basis, frictionalNodes, nodalIntegrals); // TODO: populate on S_F std::vector<double> normalStress;