From 24a7ea8ed85ef3a6d3c70c0aceb61d7f04db053d Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Wed, 14 Mar 2012 11:24:30 +0100
Subject: [PATCH] Make dirichlet conditions independent of the mesh

---
 src/one-body-sample.cc | 5 ++++-
 src/one-body-sample.py | 6 +++---
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index 895da3fd..a2b5b42b 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -131,6 +131,7 @@ int main(int argc, char *argv[]) {
     auto const solver_tolerance = parset.get<double>("solver.tolerance");
 
     auto const refinements = parset.get<size_t>("grid.refinements");
+    double const refinement_factor = std::pow(2, refinements);
 
     auto const verbose = parset.get<bool>("verbose");
     Solver::VerbosityMode const verbosity =
@@ -235,9 +236,11 @@ int main(int argc, char *argv[]) {
         stiffnessMatrix.mmv(u4, b4);
         // Apply Dirichlet condition
         for (int i = 0; i < finestSize; ++i)
-          if (ignoreNodes[i].count() == dim)
+          if (ignoreNodes[i].count() == dim) {
             functions.get("dirichletCondition")
                 .evaluate(h * run, u4_diff[i][0]);
+            u4_diff[i][0] /= refinement_factor;
+          }
 
         for (int state_fpi = 0;
              state_fpi < parset.get<int>("solver.tnnmg.fixed_point_iterations");
diff --git a/src/one-body-sample.py b/src/one-body-sample.py
index 803f86f6..81d09658 100644
--- a/src/one-body-sample.py
+++ b/src/one-body-sample.py
@@ -14,9 +14,9 @@ class neumannCondition:
 class dirichletCondition:
     def __call__(self, x):
         # return 0
-        fst = 3e-5
-        snd = 1e-5
-        trd = 3e-5
+        fst = 5e-4
+        snd = 2e-4
+        trd = 5e-4
         if x < 1.0/3:
             return fst
         elif x < 2.0/3:
-- 
GitLab