From 903fe2f8b5d547026a0ba178e32af8f0472a6aa7 Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Thu, 25 Dec 2008 20:50:56 +0000 Subject: [PATCH] make compile with BitSetVector [[Imported from SVN: r3286]] --- dirneucoupling.cc | 28 +++++++++++++++++++--------- rod3d.cc | 10 ++++------ staticrod.cc | 21 ++++++++++----------- staticrod2.cc | 21 ++++++++++----------- 4 files changed, 43 insertions(+), 37 deletions(-) diff --git a/dirneucoupling.cc b/dirneucoupling.cc index aa639e95..cbb9da1b 100644 --- a/dirneucoupling.cc +++ b/dirneucoupling.cc @@ -10,7 +10,7 @@ #include <dune/grid/io/file/amirameshwriter.hh> -#include <dune/common/bitfield.hh> +#include <dune/common/bitsetvector.hh> #include <dune/common/configparser.hh> #include <dune/ag-common/multigridstep.hh> @@ -165,7 +165,7 @@ int main (int argc, char *argv[]) try rodGrid.globalRefine(numLevels-1); grid.globalRefine(numLevels-1); - std::vector<BitField> dirichletNodes(1); + std::vector<BitSetVector<dim> > dirichletNodes(1); RodSolutionType rodX(rodGrid.size(1)); @@ -219,11 +219,10 @@ int main (int argc, char *argv[]) try dirichletNodes.resize(toplevel+1); for (int i=0; i<=toplevel; i++) { - dirichletNodes[i].resize( dim*grid.size(i,dim)); + dirichletNodes[i].resize( grid.size(i,dim)); for (int j=0; j<grid.size(i,dim); j++) - for (int k=0; k<dim; k++) - dirichletNodes[i][j*dim+k] = dirichletBoundary[i].containsVertex(j); + dirichletNodes[i][j] = dirichletBoundary[i].containsVertex(j); } @@ -242,7 +241,7 @@ int main (int argc, char *argv[]) try // Assemble 3d linear elasticity problem // ////////////////////////////////////////// LeafP1Function<GridType,double,dim> u(grid),f(grid); - LinearElasticityLocalStiffness<GridType,double> lstiff(E, nu); + LinearElasticityLocalStiffness<GridType::LeafGridView,double> lstiff(E, nu); LeafP1OperatorAssembler<GridType,double,dim> hessian3d(grid); hessian3d.assemble(lstiff,u,f); @@ -260,9 +259,19 @@ int main (int argc, char *argv[]) try x3d = 0; for (int i=0; i<x3d.size(); i++) for (int j=0; j<dim; j++) - if (dirichletNodes[toplevel][i*dim+j]) + if (dirichletNodes[toplevel][i][j]) x3d[i][j] = dirichletValues[toplevel][i][j]; + // /////////////////////////////////////////// + // Dirichlet nodes for the rod problem + // /////////////////////////////////////////// + + BitSetVector<6> rodDirichletNodes(rodGrid.size(1)); + rodDirichletNodes.unsetAll(); + + rodDirichletNodes[0] = true; + rodDirichletNodes.back() = true; + // /////////////////////////////////////////// // Create a solver for the rod problem // /////////////////////////////////////////// @@ -274,6 +283,7 @@ int main (int argc, char *argv[]) try rodSolver.setup(rodGrid, &rodAssembler, rodX, + rodDirichletNodes, trTolerance, maxTrustRegionSteps, initialTrustRegionRadius, @@ -311,7 +321,7 @@ int main (int argc, char *argv[]) try MultigridStep<MatrixType, VectorType> multigridStep(*hessian3d, x3d, rhs3d, 1); multigridStep.setMGType(mu, nu1, nu2); - multigridStep.dirichletNodes_ = &dirichletNodes; + multigridStep.ignoreNodes_ = &dirichletNodes.back(); multigridStep.basesolver_ = &baseSolver; multigridStep.presmoother_ = &presmoother; multigridStep.postsmoother_ = &postsmoother; @@ -382,7 +392,7 @@ int main (int argc, char *argv[]) try // Extract Neumann values and transfer it to the 3d object // /////////////////////////////////////////////////////////// - BitField couplingBitfield(rodX.size(),false); + BitSetVector<1> couplingBitfield(rodX.size(),false); // Using that index 0 is always the left boundary for a uniformly refined OneDGrid couplingBitfield[0] = true; BoundaryPatch<RodGridType> couplingBoundary(rodGrid, rodGrid.maxLevel(), couplingBitfield); diff --git a/rod3d.cc b/rod3d.cc index fdb3577e..b7ea688c 100644 --- a/rod3d.cc +++ b/rod3d.cc @@ -1,6 +1,6 @@ #include <config.h> -#include <dune/common/bitfield.hh> +#include <dune/common/bitsetvector.hh> #include <dune/common/configparser.hh> #include <dune/grid/onedgrid.hh> @@ -117,13 +117,11 @@ int main (int argc, char *argv[]) try std::cout << "director 1: " << x[x.size()-1].q.director(1) << std::endl; std::cout << "director 2: " << x[x.size()-1].q.director(2) << std::endl; - BlockBitField<blocksize> dirichletNodes(grid.size(1)); + BitSetVector<blocksize> dirichletNodes(grid.size(1)); dirichletNodes.unsetAll(); - for (int j=0; j<blocksize; j++) { - dirichletNodes[0][j] = true; - dirichletNodes[dirichletNodes.size()-1][j] = true; - } + dirichletNodes[0] = true; + dirichletNodes.back() = true; // /////////////////////////////////////////// // Create a solver for the rod problem diff --git a/staticrod.cc b/staticrod.cc index 48d8b893..af11d77c 100644 --- a/staticrod.cc +++ b/staticrod.cc @@ -1,6 +1,6 @@ #include <config.h> -#include <dune/common/bitfield.hh> +#include <dune/common/bitsetvector.hh> #include <dune/common/configparser.hh> #include <dune/grid/onedgrid.hh> @@ -29,7 +29,7 @@ using std::string; void setTrustRegionObstacles(double trustRegionRadius, std::vector<BoxConstraint<double,blocksize> >& trustRegionObstacles, const std::vector<BoxConstraint<double,blocksize> >& trueObstacles, - const BitField& dirichletNodes) + const BitSetVector<blocksize>& dirichletNodes) { //std::cout << "True obstacles\n" << trueObstacles << std::endl; @@ -37,7 +37,7 @@ void setTrustRegionObstacles(double trustRegionRadius, for (int k=0; k<blocksize; k++) { - if (dirichletNodes[j*blocksize+k]) + if (dirichletNodes[j][k]) continue; trustRegionObstacles[j].lower(k) = @@ -96,16 +96,15 @@ int main (int argc, char *argv[]) try int numRodElements = rod.size(maxlevel, 0); - std::vector<BitField> dirichletNodes; + std::vector<BitSetVector<blocksize> > dirichletNodes; dirichletNodes.resize(maxLevel+1); for (int i=0; i<=maxlevel; i++) { - dirichletNodes[i].resize( blocksize * rod.size(i,1), false ); + dirichletNodes[i].resize(rod.size(i,1), false ); + + dirichletNodes[i][0] = true; + dirichletNodes[i].back() = true; - for (int j=0; j<blocksize; j++) { - dirichletNodes[i][j] = true; - dirichletNodes[i][dirichletNodes[i].size()-1-j] = true; - } } // //////////////////////////////////////////////////////////// @@ -148,7 +147,7 @@ int main (int argc, char *argv[]) try // Create obstacles // ////////////////////////////////////////////////////////// - std::vector<BitField> hasObstacle; + std::vector<BitSetVector<1> > hasObstacle; hasObstacle.resize(maxLevel+1); for (int i=0; i<hasObstacle.size(); i++) { hasObstacle[i].resize(rod.size(i, 1)); @@ -191,7 +190,7 @@ int main (int argc, char *argv[]) try MonotoneMGStep<MatrixType, VectorType> multigridStep(maxlevel+1); multigridStep.setMGType(mu, nu1, nu2); - multigridStep.dirichletNodes_ = &dirichletNodes[maxlevel]; + multigridStep.ignoreNodes_ = &dirichletNodes[maxlevel]; multigridStep.basesolver_ = &baseSolver; multigridStep.presmoother_ = &presmoother; multigridStep.postsmoother_ = &postsmoother; diff --git a/staticrod2.cc b/staticrod2.cc index 9687e928..db1ca3d4 100644 --- a/staticrod2.cc +++ b/staticrod2.cc @@ -1,6 +1,6 @@ #include <config.h> -#include <dune/common/bitfield.hh> +#include <dune/common/bitsetvector.hh> #include <dune/common/configparser.hh> #include <dune/grid/onedgrid.hh> @@ -31,7 +31,7 @@ using std::string; void setTrustRegionObstacles(double trustRegionRadius, std::vector<BoxConstraint<double,blocksize> >& trustRegionObstacles, const std::vector<BoxConstraint<double,blocksize> >& trueObstacles, - const BitField& dirichletNodes) + const BitSetVector<blocksize>& dirichletNodes) { //std::cout << "True obstacles\n" << trueObstacles << std::endl; @@ -39,7 +39,7 @@ void setTrustRegionObstacles(double trustRegionRadius, for (int k=0; k<blocksize; k++) { - if (dirichletNodes[j*blocksize+k]) + if (dirichletNodes[j][k]) continue; trustRegionObstacles[j].lower(k) = @@ -99,8 +99,8 @@ int main (int argc, char *argv[]) try GridType grid(numRodBaseElements, 0, 1); std::vector<std::vector<BoxConstraint<double,3> > > trustRegionObstacles(1); - std::vector<BitField> hasObstacle(1); - std::vector<BitField> dirichletNodes(1); + std::vector<BitSetVector<1> > hasObstacle(1); + std::vector<BitSetVector<blocksize> > dirichletNodes(1); // //////////////////////////////// // Create a multigrid solver @@ -124,7 +124,7 @@ int main (int argc, char *argv[]) try MonotoneMGStep<MatrixType, VectorType> multigridStep(1); multigridStep.setMGType(mu, nu1, nu2); - multigridStep.dirichletNodes_ = &dirichletNodes[0]; + multigridStep.ignoreNodes_ = &dirichletNodes[0]; multigridStep.basesolver_ = &baseSolver; multigridStep.presmoother_ = &presmoother; multigridStep.postsmoother_ = &postsmoother; @@ -168,12 +168,11 @@ int main (int argc, char *argv[]) try dirichletNodes.resize(toplevel+1); for (int i=0; i<=toplevel; i++) { - dirichletNodes[i].resize( blocksize * grid.size(i,1), false ); + dirichletNodes[i].resize( grid.size(i,1), false ); - for (int j=0; j<blocksize; j++) { - dirichletNodes[i][j] = true; - dirichletNodes[i][dirichletNodes[i].size()-1-j] = true; - } + dirichletNodes[i][0] = true; + dirichletNodes[i].back() = true; + } // //////////////////////////////////////////////////////////// -- GitLab