From 8c97aa5d3c2ef70e234047ec1ca676d75cf8feba Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Fri, 21 Mar 2014 22:15:02 +0000 Subject: [PATCH] Use constructBoundaryDofs to find all dofs on the Dirichlet boundary This prepares for a later switch to a second-order basis [[Imported from SVN: r9656]] --- cosserat-continuum.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/cosserat-continuum.cc b/cosserat-continuum.cc index db6f18c1..42510b2e 100644 --- a/cosserat-continuum.cc +++ b/cosserat-continuum.cc @@ -22,6 +22,7 @@ #include <dune/grid/io/file/gmshreader.hh> #include <dune/fufem/boundarypatch.hh> +#include <dune/fufem/functiontools/boundarydofs.hh> #include <dune/fufem/functionspacebases/p1nodalbasis.hh> #include <dune/solvers/solvers/iterativesolver.hh> @@ -212,12 +213,14 @@ int main (int argc, char *argv[]) try std::cout << "Neumann boundary has " << neumannBoundary.numFaces() << " faces\n"; + BitSetVector<1> dirichletNodes(feBasis.size(), false); + constructBoundaryDofs(dirichletBoundary,feBasis,dirichletNodes); - BitSetVector<blocksize> dirichletNodes(feBasis.size(), false); + BitSetVector<blocksize> dirichletDofs(feBasis.size(), false); for (size_t i=0; i<feBasis.size(); i++) - if (dirichletVertices[i][0]) + if (dirichletNodes[i][0]) for (int j=0; j<5; j++) - dirichletNodes[i][j] = true; + dirichletDofs[i][j] = true; // ////////////////////////// // Initial iterate @@ -285,7 +288,7 @@ int main (int argc, char *argv[]) try solver.setup(*grid, &assembler, x, - dirichletNodes, + dirichletDofs, tolerance, maxTrustRegionSteps, initialTrustRegionRadius, @@ -303,7 +306,7 @@ int main (int argc, char *argv[]) try for (vIt=gridView.begin<dim>(); vIt!=vEndIt; ++vIt) { int idx = indexSet.index(*vIt); - if (dirichletNodes[idx][0]) { + if (dirichletDofs[idx][0]) { // Only the positions have Dirichlet values dirichletValues(vIt->geometry().corner(0), x[idx].r, -- GitLab