From 26f98571201b3b0958f4866cc79f2e0b87aab467 Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Mon, 8 Mar 2010 08:03:14 +0000 Subject: [PATCH] bugfix: only the set of leaf Dirichlet nodes is needed nowadays [[Imported from SVN: r5677]] --- rodobstacle.cc | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/rodobstacle.cc b/rodobstacle.cc index 61104d94..a6fda16d 100644 --- a/rodobstacle.cc +++ b/rodobstacle.cc @@ -99,7 +99,7 @@ int main (int argc, char *argv[]) try std::vector<std::vector<BoxConstraint<double,3> > > trustRegionObstacles(1); std::vector<BitSetVector<1> > hasObstacle(1); - std::vector<BitSetVector<blocksize> > dirichletNodes(1); + BitSetVector<blocksize> dirichletNodes; // //////////////////////////////// // Create a multigrid solver @@ -123,7 +123,7 @@ int main (int argc, char *argv[]) try MonotoneMGStep<MatrixType, CorrectionType> multigridStep(1); multigridStep.setMGType(mu, nu1, nu2); - multigridStep.ignoreNodes_ = &dirichletNodes[0]; + multigridStep.ignoreNodes_ = &dirichletNodes; multigridStep.basesolver_ = &baseSolver; multigridStep.setSmoother(&presmoother, &postsmoother); multigridStep.hasObstacle_ = &hasObstacle; @@ -167,15 +167,13 @@ int main (int argc, char *argv[]) try std::cout << " Solving on level: " << toplevel << std::endl; std::cout << "####################################################" << std::endl; - dirichletNodes.resize(toplevel+1); - for (int i=0; i<=toplevel; i++) { + dirichletNodes.resize( grid.size(1) ); + dirichletNodes.unsetAll(); - dirichletNodes[i].resize( grid.size(i,1), false ); - - dirichletNodes[i][0] = true; - dirichletNodes[i].back() = true; + dirichletNodes[0] = true; + dirichletNodes.back() = true; - } + multigridStep.ignoreNodes_ = &dirichletNodes; // //////////////////////////////////////////////////////////// // Create solution and rhs vectors @@ -260,7 +258,7 @@ int main (int argc, char *argv[]) try setTrustRegionObstacles(trustRegionRadius, trustRegionObstacles[toplevel], trueObstacles[toplevel], - dirichletNodes[toplevel]); + dirichletNodes); dynamic_cast<MultigridStep<MatrixType,CorrectionType>*>(solver.iterationStep_)->setProblem(hessianMatrix, corr, rhs, toplevel+1); -- GitLab