From 3df2a133f7d47474fd69e65238b76055068dcbb3 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Fri, 13 Dec 2013 01:17:14 +0100
Subject: [PATCH] [Cleanup] Improve dirichlet handling in time stepping

---
 src/timestepping/backward_euler.cc | 27 +++++++--------------------
 src/timestepping/newmark.cc        | 27 +++++++--------------------
 2 files changed, 14 insertions(+), 40 deletions(-)

diff --git a/src/timestepping/backward_euler.cc b/src/timestepping/backward_euler.cc
index c31714df..981483c5 100644
--- a/src/timestepping/backward_euler.cc
+++ b/src/timestepping/backward_euler.cc
@@ -71,26 +71,13 @@ void BackwardEuler<Vector, Matrix, Function, dim>::setup(
   iterate = 0.0;
 
   for (size_t i = 0; i < dirichletNodes.size(); ++i)
-    switch (dirichletNodes[i].count()) {
-      case 0:
-        continue;
-      case dim:
-        iterate[i] = 0;
-        dirichletFunction.evaluate(relativeTime, iterate[i][0]);
-        break;
-      case 1:
-        if (dirichletNodes[i][0]) {
-          dirichletFunction.evaluate(relativeTime, iterate[i][0]);
-          break;
-        }
-        if (dirichletNodes[i][1]) {
-          iterate[i][1] = 0;
-          break;
-        }
-        assert(false);
-      default:
-        assert(false);
-    }
+    for (size_t j = 0; j < dim; ++j)
+      if (dirichletNodes[i][j]) {
+        if (j == 0)
+          dirichletFunction.evaluate(relativeTime, iterate[i][j]);
+        else
+          iterate[i][j] = 0;
+      }
 }
 
 template <class Vector, class Matrix, class Function, size_t dim>
diff --git a/src/timestepping/newmark.cc b/src/timestepping/newmark.cc
index 02be5f6d..91dfa0e0 100644
--- a/src/timestepping/newmark.cc
+++ b/src/timestepping/newmark.cc
@@ -78,26 +78,13 @@ void Newmark<Vector, Matrix, Function, dim>::setup(Vector const &ell,
   iterate = 0.0;
 
   for (size_t i = 0; i < dirichletNodes.size(); ++i)
-    switch (dirichletNodes[i].count()) {
-      case 0:
-        continue;
-      case dim:
-        iterate[i] = 0;
-        dirichletFunction.evaluate(relativeTime, iterate[i][0]);
-        break;
-      case 1:
-        if (dirichletNodes[i][0]) {
-          dirichletFunction.evaluate(relativeTime, iterate[i][0]);
-          break;
-        }
-        if (dirichletNodes[i][1]) {
-          iterate[i][1] = 0;
-          break;
-        }
-        assert(false);
-      default:
-        assert(false);
-    }
+    for (size_t j = 0; j < dim; ++j)
+      if (dirichletNodes[i][j]) {
+        if (j == 0)
+          dirichletFunction.evaluate(relativeTime, iterate[i][j]);
+        else
+          iterate[i][j] = 0;
+      }
 }
 
 template <class Vector, class Matrix, class Function, size_t dim>
-- 
GitLab