From d5039603887895c607a24afe423b09db9c9b7424 Mon Sep 17 00:00:00 2001 From: sloosvel Date: Thu, 16 May 2019 14:57:57 +0200 Subject: [PATCH 1/3] Load all regions --- diagonals/examples/examples-moc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/diagonals/examples/examples-moc.py b/diagonals/examples/examples-moc.py index 7058718..9d9277e 100644 --- a/diagonals/examples/examples-moc.py +++ b/diagonals/examples/examples-moc.py @@ -57,7 +57,7 @@ def load_masks(): global_mask.data[..., -1] = 0.0 basins['Global_Ocean'] = global_mask.data.astype(np.float32) cubes = iris.load(REGIONS_FILE) - for cube in cubes[0:2]: + for cube in cubes: name = cube.name() if name in ('nav_lat', 'nav_lon', 'Caspian_Sea', 'Global_Ocean'): continue -- GitLab From 5cb8ce40eeb94e53ccbf19a3ee25d1ac17769c8c Mon Sep 17 00:00:00 2001 From: sloosvel Date: Mon, 20 May 2019 16:21:23 +0200 Subject: [PATCH 2/3] Add functions to work with boxes --- diagonals/mesh_helpers/nemo.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/diagonals/mesh_helpers/nemo.py b/diagonals/mesh_helpers/nemo.py index 63fd4b7..578a5d0 100644 --- a/diagonals/mesh_helpers/nemo.py +++ b/diagonals/mesh_helpers/nemo.py @@ -1,7 +1,7 @@ import numpy as np import iris -from numba import vectorize +from numba import vectorize, float32 class Nemo(): @@ -59,6 +59,13 @@ class Nemo(): def get_mesh_var(self, var, dtype): return iris.load_cube(self.mesh_file, var).data.astype(dtype) + def get_region_mask(self, min_lat, max_lat, min_lon, max_lon, dtype=np.float32): + lat = self.get_mesh_var('nav_lat', dtype) + lon = self.get_mesh_var('nav_lon', dtype) + mask = (_generate_mask(min_lat, max_lat, lat) + * _generate_mask(min_lon, max_lon, lon)) + return mask + @vectorize(['float32(float32, float32)'], target='cpu') def _get_area(e1, e2): @@ -96,3 +103,12 @@ def _get_volume(e1, e2, e3): Masked array containing the volume for the whole grid. """ return e1 * e2 * e3 + + +@vectorize(['float32(float32, float32, float32)'], nopython=True) +def _generate_mask(min, max, data): + if data < min: + return 0 + if data > max: + return 0 + return 1 -- GitLab From b35129ed9e7fb662fa8b7be1b5ea93c9b3ec1d1b Mon Sep 17 00:00:00 2001 From: sloosvel Date: Mon, 20 May 2019 16:37:17 +0200 Subject: [PATCH 3/3] Fix style issues --- diagonals/mesh_helpers/nemo.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/diagonals/mesh_helpers/nemo.py b/diagonals/mesh_helpers/nemo.py index 578a5d0..2896c84 100644 --- a/diagonals/mesh_helpers/nemo.py +++ b/diagonals/mesh_helpers/nemo.py @@ -59,7 +59,8 @@ class Nemo(): def get_mesh_var(self, var, dtype): return iris.load_cube(self.mesh_file, var).data.astype(dtype) - def get_region_mask(self, min_lat, max_lat, min_lon, max_lon, dtype=np.float32): + def get_region_mask(self, min_lat, max_lat, min_lon, max_lon, + dtype=np.float32): lat = self.get_mesh_var('nav_lat', dtype) lon = self.get_mesh_var('nav_lon', dtype) mask = (_generate_mask(min_lat, max_lat, lat) -- GitLab