From 2e5d837bf265cb827ddbcffc19716cf65f3037b5 Mon Sep 17 00:00:00 2001
From: Thomas Witkowski <thomas.witkowski@gmx.de>
Date: Thu, 13 Dec 2012 14:25:44 +0000
Subject: [PATCH] Fixed bug with dirichlet values.

---
 AMDiS/src/DOFMatrix.cc                        | 2 +-
 AMDiS/src/DirichletBC.cc                      | 9 +++++++++
 AMDiS/src/DirichletBC.h                       | 3 +++
 AMDiS/src/parallel/PetscSolverGlobalMatrix.cc | 3 ++-
 4 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/AMDiS/src/DOFMatrix.cc b/AMDiS/src/DOFMatrix.cc
index 3fbae097..792dfce8 100644
--- a/AMDiS/src/DOFMatrix.cc
+++ b/AMDiS/src/DOFMatrix.cc
@@ -537,7 +537,7 @@ namespace AMDiS {
     inserter_type &ins = *inserter;  
     for (std::set<int>::iterator it = dirichletDofs.begin(); 
 	 it != dirichletDofs.end(); ++it)
-	ins[*it][*it] = 1.0;
+      ins[*it][*it] = 1.0;
   }
 
 
diff --git a/AMDiS/src/DirichletBC.cc b/AMDiS/src/DirichletBC.cc
index bb9b779d..cdf0befa 100644
--- a/AMDiS/src/DirichletBC.cc
+++ b/AMDiS/src/DirichletBC.cc
@@ -81,4 +81,13 @@ namespace AMDiS {
     }
   }
 
+
+  void DirichletBC::initVector(DOFVectorBase<double>* vec)
+  {
+    FUNCNAME("DirichletBC::initVector()");
+
+    if (dynamic_cast<DOFVector<double>*>(vec))
+      dynamic_cast<DOFVector<double>*>(vec)->getDirichletValues().clear();
+  }
+
 }
diff --git a/AMDiS/src/DirichletBC.h b/AMDiS/src/DirichletBC.h
index 1773e229..fdd7881a 100644
--- a/AMDiS/src/DirichletBC.h
+++ b/AMDiS/src/DirichletBC.h
@@ -68,6 +68,9 @@ namespace AMDiS {
 			       const BoundaryType* localBound,
 			       int nBasFcts);
 
+    ///
+    void initVector(DOFVectorBase<double>*);
+
     /// Implementation of BoundaryCondition::boundResidual().
     double boundResidual(ElInfo*, 
 			 DOFMatrix *,
diff --git a/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc b/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc
index 2b1ffc84..18155f13 100644
--- a/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc
+++ b/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc
@@ -11,6 +11,7 @@
 
 #include <mpi.h>
 #include "DirichletBC.h"
+#include "DOFVector.h"
 #include "parallel/PetscSolverGlobalMatrix.h"
 #include "parallel/StdMpi.h"
 #include "parallel/MpiHelper.h"
@@ -750,7 +751,7 @@ namespace AMDiS {
     for (dofIt.reset(); !dofIt.end(); ++dofIt) {
       
       DegreeOfFreedom dof = dofIt.getDOFIndex();
-      
+
       if (rankOnly && !(*interiorMap)[rowComp].isRankDof(dof))
 	continue;
 
-- 
GitLab