From 5193cae1f11008404d9f1aab80efc5c66aa9bb8f Mon Sep 17 00:00:00 2001
From: Sebastian Eibl <sebastian.eibl@fau.de>
Date: Mon, 27 Jan 2020 10:18:16 +0100
Subject: [PATCH] [BUGFIX] fixed wrong cell calculation in LinkedCells

---
 .../templates/data/LinkedCells.templ.h        | 11 +++--------
 src/mesa_pd/data/LinkedCells.h                | 19 ++++---------------
 2 files changed, 7 insertions(+), 23 deletions(-)

diff --git a/python/mesa_pd/templates/data/LinkedCells.templ.h b/python/mesa_pd/templates/data/LinkedCells.templ.h
index 3cd762e5e..dc13cfdf4 100644
--- a/python/mesa_pd/templates/data/LinkedCells.templ.h
+++ b/python/mesa_pd/templates/data/LinkedCells.templ.h
@@ -150,9 +150,7 @@ LinkedCells::LinkedCells(const math::AABB& domain, const Vec3& cellDiameter)
    , numCellsPerDim_( static_cast<int>(std::ceil( domain.sizes()[0] / cellDiameter[0])),
      static_cast<int>(std::ceil( domain.sizes()[1] / cellDiameter[1])),
      static_cast<int>(std::ceil( domain.sizes()[2] / cellDiameter[2])) )
-   , cellDiameter_( domain.sizes()[0] / real_c(numCellsPerDim_[0]),
-     domain.sizes()[1] / real_c(numCellsPerDim_[1]),
-     domain.sizes()[2] / real_c(numCellsPerDim_[2]) )
+   , cellDiameter_( cellDiameter)
    , invCellDiameter_( real_t(1) / cellDiameter_[0], real_t(1) / cellDiameter_[1], real_t(1) / cellDiameter_[2] )
    , cells_(uint_c(numCellsPerDim_[0]*numCellsPerDim_[1]*numCellsPerDim_[2]))
 {
@@ -163,10 +161,7 @@ LinkedCells::LinkedCells(const math::AABB& domain, const Vec3& cellDiameter)
 
    //postcondition
    {%- for dim in range(3) %}
-   WALBERLA_CHECK_GREATER_EQUAL(cellDiameter_[{{dim}}], real_t(0));
-   WALBERLA_CHECK_LESS_EQUAL(cellDiameter_[{{dim}}], cellDiameter[{{dim}}]);
-
-   WALBERLA_CHECK_GREATER_EQUAL(numCellsPerDim_[{{dim}}], 0);
+   WALBERLA_CHECK_GREATER_EQUAL(real_c(numCellsPerDim_[{{dim}}]) * cellDiameter_[{{dim}}], domain.size({{dim}}));
    {%- endfor %}
 
    std::fill(cells_.begin(), cells_.end(), -1);
@@ -290,4 +285,4 @@ inline void LinkedCells::forEachParticlePair{%- if half %}Half{%- endif %}(const
 
 } //namespace data
 } //namespace mesa_pd
-} //namespace walberla
+} //namespace walberla
\ No newline at end of file
diff --git a/src/mesa_pd/data/LinkedCells.h b/src/mesa_pd/data/LinkedCells.h
index ead0d25d0..f3d4ea54d 100644
--- a/src/mesa_pd/data/LinkedCells.h
+++ b/src/mesa_pd/data/LinkedCells.h
@@ -154,9 +154,7 @@ LinkedCells::LinkedCells(const math::AABB& domain, const Vec3& cellDiameter)
    , numCellsPerDim_( static_cast<int>(std::ceil( domain.sizes()[0] / cellDiameter[0])),
      static_cast<int>(std::ceil( domain.sizes()[1] / cellDiameter[1])),
      static_cast<int>(std::ceil( domain.sizes()[2] / cellDiameter[2])) )
-   , cellDiameter_( domain.sizes()[0] / real_c(numCellsPerDim_[0]),
-     domain.sizes()[1] / real_c(numCellsPerDim_[1]),
-     domain.sizes()[2] / real_c(numCellsPerDim_[2]) )
+   , cellDiameter_( cellDiameter)
    , invCellDiameter_( real_t(1) / cellDiameter_[0], real_t(1) / cellDiameter_[1], real_t(1) / cellDiameter_[2] )
    , cells_(uint_c(numCellsPerDim_[0]*numCellsPerDim_[1]*numCellsPerDim_[2]))
 {
@@ -166,18 +164,9 @@ LinkedCells::LinkedCells(const math::AABB& domain, const Vec3& cellDiameter)
    WALBERLA_CHECK_GREATER_EQUAL(cellDiameter[2], real_t(0));
 
    //postcondition
-   WALBERLA_CHECK_GREATER_EQUAL(cellDiameter_[0], real_t(0));
-   WALBERLA_CHECK_LESS_EQUAL(cellDiameter_[0], cellDiameter[0]);
-
-   WALBERLA_CHECK_GREATER_EQUAL(numCellsPerDim_[0], 0);
-   WALBERLA_CHECK_GREATER_EQUAL(cellDiameter_[1], real_t(0));
-   WALBERLA_CHECK_LESS_EQUAL(cellDiameter_[1], cellDiameter[1]);
-
-   WALBERLA_CHECK_GREATER_EQUAL(numCellsPerDim_[1], 0);
-   WALBERLA_CHECK_GREATER_EQUAL(cellDiameter_[2], real_t(0));
-   WALBERLA_CHECK_LESS_EQUAL(cellDiameter_[2], cellDiameter[2]);
-
-   WALBERLA_CHECK_GREATER_EQUAL(numCellsPerDim_[2], 0);
+   WALBERLA_CHECK_GREATER_EQUAL(real_c(numCellsPerDim_[0]) * cellDiameter_[0], domain.size(0));
+   WALBERLA_CHECK_GREATER_EQUAL(real_c(numCellsPerDim_[1]) * cellDiameter_[1], domain.size(1));
+   WALBERLA_CHECK_GREATER_EQUAL(real_c(numCellsPerDim_[2]) * cellDiameter_[2], domain.size(2));
 
    std::fill(cells_.begin(), cells_.end(), -1);
 }
-- 
GitLab