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