From acfa70a57ab7f0a9851dca68d848e15a1fecc5a1 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Fri, 31 Jan 2014 17:31:48 +0100
Subject: [PATCH] [Cleanup] Add toBool() convenience method

---
 src/boundary_writer.cc             | 5 +++--
 src/friction_writer.cc             | 3 ++-
 src/sand-wedge.cc                  | 1 +
 src/state/dieterichstateupdater.hh | 3 ++-
 src/state/ruinastateupdater.hh     | 3 ++-
 src/tobool.hh                      | 9 +++++++++
 6 files changed, 19 insertions(+), 5 deletions(-)
 create mode 100644 src/tobool.hh

diff --git a/src/boundary_writer.cc b/src/boundary_writer.cc
index 7a372080..8649f3d8 100644
--- a/src/boundary_writer.cc
+++ b/src/boundary_writer.cc
@@ -3,6 +3,7 @@
 #endif
 
 #include "boundary_writer.hh"
+#include "tobool.hh"
 
 template <class ScalarVector, class Vector>
 BoundaryWriter<ScalarVector, Vector>::BoundaryWriter(
@@ -16,7 +17,7 @@ BoundaryWriter<ScalarVector, Vector>::BoundaryWriter(
   std::fstream vertexCoordinateWriter(prefix + "Coordinates",
                                       std::fstream::out);
   for (size_t i = 0; i < boundaryNodes.size(); ++i)
-    if (boundaryNodes[i][0])
+    if (toBool(boundaryNodes[i]))
       vertexCoordinateWriter << vertexCoordinates[i] << std::endl;
   vertexCoordinateWriter.close();
 }
@@ -31,7 +32,7 @@ template <class ScalarVector, class Vector>
 void BoundaryWriter<ScalarVector, Vector>::writeKinetics(Vector const &u,
                                                          Vector const &v) {
   for (size_t i = 0; i < boundaryNodes.size(); ++i) {
-    if (!boundaryNodes[i][0])
+    if (!toBool(boundaryNodes[i]))
       continue;
 
     displacementWriter << projector_(u[i]) << " ";
diff --git a/src/friction_writer.cc b/src/friction_writer.cc
index 9f07b3c2..175f8e6a 100644
--- a/src/friction_writer.cc
+++ b/src/friction_writer.cc
@@ -3,6 +3,7 @@
 #endif
 
 #include "friction_writer.hh"
+#include "tobool.hh"
 
 template <class ScalarVector, class Vector>
 FrictionWriter<ScalarVector, Vector>::FrictionWriter(
@@ -23,7 +24,7 @@ template <class ScalarVector, class Vector>
 void FrictionWriter<ScalarVector, Vector>::writeOther(
     ScalarVector const &coefficient, ScalarVector const &alpha) {
   for (size_t i = 0; i < boundaryNodes.size(); ++i) {
-    if (!boundaryNodes[i][0])
+    if (!toBool(boundaryNodes[i]))
       continue;
 
     coefficientWriter << coefficient[i] << " ";
diff --git a/src/sand-wedge.cc b/src/sand-wedge.cc
index e2e7ecb1..173aa450 100644
--- a/src/sand-wedge.cc
+++ b/src/sand-wedge.cc
@@ -68,6 +68,7 @@
 #include <dune/tectonic/globalnonlinearity.hh>
 
 #include "assemblers.hh"
+#include "tobool.hh"
 #include "enum_parser.cc"
 #include "enum_scheme.cc"
 #include "enum_state_model.cc"
diff --git a/src/state/dieterichstateupdater.hh b/src/state/dieterichstateupdater.hh
index ffb417a0..30a9c6dc 100644
--- a/src/state/dieterichstateupdater.hh
+++ b/src/state/dieterichstateupdater.hh
@@ -1,6 +1,7 @@
 #ifndef DIETERICH_STATE_UPDATER_HH
 #define DIETERICH_STATE_UPDATER_HH
 
+#include "tobool.hh"
 #include "stateupdater.hh"
 
 template <class ScalarVector, class Vector>
@@ -56,7 +57,7 @@ template <class ScalarVector, class Vector>
 void DieterichStateUpdater<ScalarVector, Vector>::solve(
     Vector const &velocity_field) {
   for (size_t i = 0; i < nodes.size(); ++i) {
-    if (not nodes[i][0])
+    if (not toBool(nodes[i]))
       continue;
 
     double const VoL = velocity_field[i].two_norm() / L;
diff --git a/src/state/ruinastateupdater.hh b/src/state/ruinastateupdater.hh
index d87870bb..578f1e9f 100644
--- a/src/state/ruinastateupdater.hh
+++ b/src/state/ruinastateupdater.hh
@@ -1,6 +1,7 @@
 #ifndef RUINA_STATE_UPDATER_HH
 #define RUINA_STATE_UPDATER_HH
 
+#include "tobool.hh"
 #include "stateupdater.hh"
 
 template <class ScalarVector, class Vector>
@@ -42,7 +43,7 @@ template <class ScalarVector, class Vector>
 void RuinaStateUpdater<ScalarVector, Vector>::solve(
     Vector const &velocity_field) {
   for (size_t i = 0; i < nodes.size(); ++i) {
-    if (not nodes[i][0])
+    if (not toBool(nodes[i]))
       continue;
 
     double const VoL = velocity_field[i].two_norm() / L;
diff --git a/src/tobool.hh b/src/tobool.hh
new file mode 100644
index 00000000..d561225d
--- /dev/null
+++ b/src/tobool.hh
@@ -0,0 +1,9 @@
+#ifndef TO_BOOL_HH
+#define TO_BOOL_HH
+
+template <class Alloc>
+bool toBool(Dune::BitSetVectorConstReference<1, Alloc> x) {
+  return x[0];
+}
+
+#endif
-- 
GitLab