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