aboutsummaryrefslogtreecommitdiff
path: root/Tools/PostProcessing/plot_distribution_mapping.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/PostProcessing/plot_distribution_mapping.py')
-rw-r--r--Tools/PostProcessing/plot_distribution_mapping.py36
1 files changed, 22 insertions, 14 deletions
diff --git a/Tools/PostProcessing/plot_distribution_mapping.py b/Tools/PostProcessing/plot_distribution_mapping.py
index 94d63e14e..7681abd0c 100644
--- a/Tools/PostProcessing/plot_distribution_mapping.py
+++ b/Tools/PostProcessing/plot_distribution_mapping.py
@@ -11,10 +11,11 @@ class SimData:
"""
Structure for easy access to load costs reduced diagnostics
"""
- def __init__(self, directory, prange):
+ def __init__(self, directory, prange, is_3D):
"""
Set data-containing dir, data range; load data
"""
+ self.is_3D = is_3D
self._get_costs_reduced_diagnostics(directory, prange)
def __call__(self, i):
@@ -69,19 +70,22 @@ class SimData:
unique_headers=[''.join([l for l in w if not l.isdigit()])
for w in h.split()][2::]
- # Either 7 or 8 depending if GPU
- n_data_fields = 7 if (len(set(unique_headers)) - 2)%7 == 0 else 8
+ # Either 9 or 10 depending if GPU
+ n_data_fields = 9 if len(set(unique_headers))%9 == 0 else 10
f.close()
# From data header, data layout is:
# [step, time,
# cost_box_0, proc_box_0, lev_box_0, i_low_box_0, j_low_box_0,
- # k_low_box_0(, gpu_ID_box_0 if GPU run), hostname_box_0
+ # k_low_box_0, num_cells_0, num_macro_particles_0,
+ # (, gpu_ID_box_0 if GPU run), hostname_box_0,
# cost_box_1, proc_box_1, lev_box_1, i_low_box_1, j_low_box_1,
- # k_low_box_1(, gpu_ID_box_1 if GPU run), hostname_box_1
+ # k_low_box_1, num_cells_1, num_macro_particles_1,
+ # (, gpu_ID_box_1 if GPU run), hostname_box_1
# ...
# cost_box_n, proc_box_n, lev_box_n, i_low_box_n, j_low_box_n,
- # k_low_box_n(, gpu_ID_box_n if GPU run), hostname_box_n
+ # k_low_box_n, num_cells_n, num_macro_particles_n,
+ # (, gpu_ID_box_n if GPU run), hostname_box_n
i, j, k = (data[0,3::n_data_fields],
data[0,4::n_data_fields],
data[0,5::n_data_fields])
@@ -90,9 +94,14 @@ class SimData:
j_blocks = np.diff(np.array(sorted(j.astype(int))))
k_blocks = np.diff(np.array(sorted(k.astype(int))))
- i_blocking_factor = i_blocks[i_blocks != 0].min()
- j_blocking_factor = j_blocks[j_blocks != 0].min()
- k_blocking_factor = k_blocks[k_blocks != 0].min()
+ i_non_zero = i_blocks[i_blocks != 0]
+ j_non_zero = j_blocks[j_blocks != 0]
+ k_non_zero = k_blocks[k_blocks != 0]
+
+ # only one block in a dir - or smalles block size
+ i_blocking_factor = 1 if len(i_non_zero) == 0 else i_non_zero.min()
+ j_blocking_factor = 1 if len(j_non_zero) == 0 else j_non_zero.min()
+ k_blocking_factor = 1 if len(k_non_zero) == 0 else k_non_zero.min()
imax = i.astype(int).max()//i_blocking_factor
jmax = j.astype(int).max()//j_blocking_factor
@@ -102,8 +111,6 @@ class SimData:
j_is_int = all([el.is_integer() for el in j/j_blocking_factor])
k_is_int = all([el.is_integer() for el in k/k_blocking_factor])
- is_3D = i_is_int and j_is_int and k_is_int
-
for key in self.keys:
row = np.where(key == steps)[0][0]
costs = data[row, 0::n_data_fields].astype(float)
@@ -113,8 +120,8 @@ class SimData:
kcoords = k.astype(int)//k_blocking_factor
# Fill in cost array
- shape = (kmax+1, jmax+1, imax+1)[:2+is_3D]
- coords = [coord[:2+is_3D] for coord in zip(kcoords, jcoords, icoords)]
+ shape = (kmax+1, jmax+1, imax+1)[:2+self.is_3D]
+ coords = [coord[:2+self.is_3D] for coord in zip(kcoords, jcoords, icoords)]
cost_arr = np.full(shape, 0.0)
rank_arr = np.full(shape, -1)
@@ -131,7 +138,7 @@ class SimData:
edges = list(rank_arr[corner[0]:pos[0]+1, pos[1], pos[2]]) \
+ list(rank_arr[pos[0], corner[1]:pos[1]+1, pos[2]]) \
+ list(rank_arr[pos[0], pos[1], corner[2]:pos[2]+1]) \
- if is_3D else \
+ if self.is_3D else \
list(rank_arr[corner[0]:pos[0]+1, pos[1]]) \
+ list(rank_arr[pos[0], corner[1]:pos[1]+1])
if visited[pos] or not set(edges).issubset(set([prev, -1])): return
@@ -163,3 +170,4 @@ class SimData:
self.data_fields[key]['lb_efficiency_min'] = efficiencies.min()
self.data_fields[key]['t'] = times[row]
self.data_fields[key]['step'] = steps[row]
+ # ...