From 7b71b05205a4cb3b21e75cfa21db4dbf21c80c5d Mon Sep 17 00:00:00 2001
From: Martin Bauer <martin.bauer@fau.de>
Date: Thu, 25 Apr 2019 11:03:52 +0200
Subject: [PATCH] pystencils_walberla: configurable inner-outer split width

---
 .../templates/SweepInnerOuter.tmpl.cpp        | 22 +++++++++----------
 .../templates/SweepInnerOuter.tmpl.h          |  5 +++--
 2 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/pystencils_walberla/templates/SweepInnerOuter.tmpl.cpp b/pystencils_walberla/templates/SweepInnerOuter.tmpl.cpp
index de1c5b5..f8c72ec 100644
--- a/pystencils_walberla/templates/SweepInnerOuter.tmpl.cpp
+++ b/pystencils_walberla/templates/SweepInnerOuter.tmpl.cpp
@@ -77,7 +77,7 @@ void {{class_name}}::inner( IBlock * block{%if target is equalto 'gpu'%} , cudaS
     {{kernel|generate_block_data_to_field_extraction|indent(4)}}
 
     CellInterval inner = {{field}}->xyzSize();
-    inner.expand(-1);
+    inner.expand(Cell(-outerWidth_[0], -outerWidth_[1], -outerWidth_[2]));
 
     {{kernel|generate_call(stream='stream', cell_interval='inner')|indent(4)}}
 }
@@ -91,23 +91,23 @@ void {{class_name}}::outer( IBlock * block{%if target is equalto 'gpu'%} , cudaS
     {
         CellInterval ci;
 
-        {{field}}->getSliceBeforeGhostLayer(stencil::T, ci, 1, false);
+        {{field}}->getSliceBeforeGhostLayer(stencil::T, ci, outerWidth_[2], false);
         layers_.push_back(ci);
-        {{field}}->getSliceBeforeGhostLayer(stencil::B, ci, 1, false);
+        {{field}}->getSliceBeforeGhostLayer(stencil::B, ci, outerWidth_[2], false);
         layers_.push_back(ci);
 
-        {{field}}->getSliceBeforeGhostLayer(stencil::N, ci, 1, false);
-        ci.expand(Cell(0, 0, -1));
+        {{field}}->getSliceBeforeGhostLayer(stencil::N, ci, outerWidth_[1], false);
+        ci.expand(Cell(0, 0, -outerWidth_[2]));
         layers_.push_back(ci);
-        {{field}}->getSliceBeforeGhostLayer(stencil::S, ci, 1, false);
-        ci.expand(Cell(0, 0, -1));
+        {{field}}->getSliceBeforeGhostLayer(stencil::S, ci, outerWidth_[1], false);
+        ci.expand(Cell(0, 0, -outerWidth_[2]));
         layers_.push_back(ci);
 
-        {{field}}->getSliceBeforeGhostLayer(stencil::E, ci, 1, false);
-        ci.expand(Cell(0, -1, -1));
+        {{field}}->getSliceBeforeGhostLayer(stencil::E, ci, outerWidth_[0], false);
+        ci.expand(Cell(0, -outerWidth_[1], -outerWidth_[2]));
         layers_.push_back(ci);
-        {{field}}->getSliceBeforeGhostLayer(stencil::W, ci, 1, false);
-        ci.expand(Cell(0, -1, -1));
+        {{field}}->getSliceBeforeGhostLayer(stencil::W, ci, outerWidth_[0], false);
+        ci.expand(Cell(0, -outerWidth_[1], -outerWidth_[2]));
         layers_.push_back(ci);
     }
 
diff --git a/pystencils_walberla/templates/SweepInnerOuter.tmpl.h b/pystencils_walberla/templates/SweepInnerOuter.tmpl.h
index c2c1d4d..ff04541 100644
--- a/pystencils_walberla/templates/SweepInnerOuter.tmpl.h
+++ b/pystencils_walberla/templates/SweepInnerOuter.tmpl.h
@@ -52,8 +52,8 @@ namespace {{namespace}} {
 class {{class_name}}
 {
 public:
-    {{class_name}}( {{kernel|generate_constructor_parameters}})
-        : {{ kernel|generate_constructor_initializer_list }}
+    {{class_name}}( {{kernel|generate_constructor_parameters}}, const Cell & outerWidth=Cell(1, 1, 1))
+        : {{ kernel|generate_constructor_initializer_list }}, outerWidth_(outerWidth)
     {};
 
     {{ kernel| generate_destructor(class_name) |indent(4) }}
@@ -98,6 +98,7 @@ private:
     cuda::ParallelStreams parallelStreams_;
     {% endif %}
 
+    Cell outerWidth_;
     std::vector<CellInterval> layers_;
 };
 
-- 
GitLab