diff --git a/pystencils_walberla/templates/SweepInnerOuter.tmpl.cpp b/pystencils_walberla/templates/SweepInnerOuter.tmpl.cpp index de1c5b58f5c1388c1e9997a1e7777624f3ca237a..f8c72ec5f5bc0bb5b5a7de6f657d82d5519e4b19 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 c2c1d4d9c5c651c5f651fc15102a5656b50e3b5b..ff0454169ee245a8c2a3492d7bc859d0ee63c23e 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_; };