From 036e41614915d711bc9038240ef993192ec29eb0 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Fri, 23 Dec 2011 15:37:35 +0100
Subject: [PATCH] Provide a nicer initial iterate; on S_F as well

---
 src/one-body-sample.cc | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index 32b7bfc4..8fdb314f 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -356,10 +356,24 @@ int main(int argc, char *argv[]) {
         // Choose an initial iterate that is admissable
         // and non-zero in as many places as possible
         if (run == 1)
-          for (size_t i = 0; i < ignoreNodes.size(); ++i)
-            if (!ignoreNodes[i][1]) // Leave out partial DOF-restrictions as
-                                    // well
-              u4_diff[i] = 1;
+          for (size_t i = 0; i < ignoreNodes.size(); ++i) {
+            size_t const count = ignoreNodes[i].count();
+
+            if (count == dim)
+              continue;
+
+            if (count == 0) {
+              u4_diff[i] = 1e-4;
+              continue;
+            }
+
+            assert(count == 1);
+            assert(ignoreNodes[i][1]); // Only the y coordinate is allowed to be
+                                       // fixed
+            for (int j = 0; j < dim; ++j)
+              if (j != 1)
+                u4_diff[i][j] = 1e-4;
+          }
 
         MyBlockProblemType myBlockProblem(parset, myConvexProblem);
         multigridStep->setProblem(u4_diff, myBlockProblem);
-- 
GitLab