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