From 01c1726f7dd8365465ff5ca1c4e430827989702d Mon Sep 17 00:00:00 2001
From: Martin Bauer <martin.bauer@fau.de>
Date: Mon, 18 Jun 2018 13:59:40 +0200
Subject: [PATCH] Bugfixes & Improvements for MPI parallel runs

- fix for field collection and reduction operations
- support for aligned fields in parallel data handling
---
 lbstep.py | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/lbstep.py b/lbstep.py
index a71bec99..8ce5ed3d 100644
--- a/lbstep.py
+++ b/lbstep.py
@@ -184,17 +184,16 @@ class LatticeBoltzmannStep:
             slice_obj = make_slice[:, :] if self.dim == 2 else make_slice[:, :, 0.5]
 
         result = self._data_handling.gather_array(data_name, slice_obj)
-        if result is None:
-            return
 
         if masked:
             mask = self.boundary_handling.get_mask(slice_obj[:self.dim], 'domain', True)
-            if len(mask.shape) < len(result.shape):
-                assert len(mask.shape) + 1 == len(result.shape)
-                mask = np.repeat(mask[..., np.newaxis], result.shape[-1], axis=2)
+            if result is not None:
+                if len(mask.shape) < len(result.shape):
+                    assert len(mask.shape) + 1 == len(result.shape)
+                    mask = np.repeat(mask[..., np.newaxis], result.shape[-1], axis=2)
 
-            result = np.ma.masked_array(result, mask)
-        return result.squeeze()
+                result = np.ma.masked_array(result, mask).squeeze()
+        return result
 
     def velocity_slice(self, slice_obj=None, masked=True):
         return self._get_slice(self.velocity_data_name, slice_obj, masked)
@@ -281,10 +280,12 @@ class LatticeBoltzmannStep:
 
         self.time_steps_run += time_steps
 
-    def benchmark_run(self, time_steps):
+    def benchmark_run(self, time_steps, number_of_cells=None):
+        if number_of_cells is None:
+            number_of_cells = self.number_of_cells
         time_loop = self.get_time_loop()
         duration_of_time_step = time_loop.benchmark_run(time_steps)
-        mlups = self.number_of_cells / duration_of_time_step * 1e-6
+        mlups = number_of_cells / duration_of_time_step * 1e-6
         self.time_steps_run += time_loop.time_steps_run
         return mlups
 
-- 
GitLab