diff --git a/src/harmonicmaps.cc b/src/harmonicmaps.cc index df0abdfc6d5033e035e2d6806364b13d881c2880..a09de7dad9b54c5ab391269ebd79182998c68334 100644 --- a/src/harmonicmaps.cc +++ b/src/harmonicmaps.cc @@ -21,6 +21,7 @@ #include <dune/fufem/boundarypatch.hh> #include <dune/fufem/functions/vtkbasisgridfunction.hh> #include <dune/fufem/functiontools/basisinterpolator.hh> +#include <dune/fufem/functiontools/boundarydofs.hh> #include <dune/fufem/discretizationerror.hh> #include <dune/fufem/dunepython.hh> @@ -120,7 +121,14 @@ int main (int argc, char *argv[]) try grid->globalRefine(numLevels-1); - SolutionType x(grid->size(dim)); + ////////////////////////////////////////////////////////////////////////////////// + // Construct the scalar function space basis corresponding to the GFE space + ////////////////////////////////////////////////////////////////////////////////// + + typedef P2NodalBasis<typename GridType::LeafGridView,double> FEBasis; + FEBasis feBasis(grid->leafGridView()); + + SolutionType x(feBasis.size()); // ///////////////////////////////////////// // Read Dirichlet values @@ -128,19 +136,15 @@ int main (int argc, char *argv[]) try BitSetVector<1> allNodes(grid->size(dim)); allNodes.setAll(); - BoundaryPatch<GridType::LeafGridView> dirichletBoundary(grid->leafGridView(), allNodes); + BoundaryPatch<typename GridType::LeafGridView> dirichletBoundary(grid->leafGridView(), allNodes); - BitSetVector<blocksize> dirichletNodes(grid->size(dim)); - for (size_t i=0; i<dirichletNodes.size(); i++) - dirichletNodes[i] = dirichletBoundary.containsVertex(i); + BitSetVector<blocksize> dirichletNodes; + constructBoundaryDofs(dirichletBoundary,feBasis,dirichletNodes); // ////////////////////////// // Initial iterate // ////////////////////////// - typedef P1NodalBasis<typename GridType::LeafGridView,double> FEBasis; - FEBasis feBasis(grid->leafGridView()); - std::string lambda = std::string("lambda x: (") + parameterSet.get<std::string>("initialIterate") + std::string(")"); PythonFunction<FieldVector<double,dim>, TargetSpace::CoordinateType > pythonInitialIterate(Python::evaluate(lambda));