diff --git a/CHANGELOG.md b/CHANGELOG.md index 20473a13240b11f756bcdcd2e9c36341dc0c05ae..e712ef8eb593a19eb069468f971ab4245813f07d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,16 @@ # NES CHANGELOG ### 1.0.1 -* Release date: 2023/01/18 +* Release date: 2023/01/26 * Changes and new features: - * Horizontal Interpolation: Lat-Lon to cartesian method improved (aligned with PROVIDENTIA) - * NetCDF metadata: level.positive attribute used properly. - * Vertical Interpolation: will switch from 'up' to 'down' if vertical direction is reversed in that process. - + * Improve Lat-Lon to Cartesian coordinates method (used in Providentia). + * Function to_shapefile() to create shapefiles from a NES object without losing data from the original grid and being able to select the time and level. + * Function from_shapefile() to create a new grid with data from a shapefile after doing a spatial join. + * Bugs fixing: + * Correct the dimensions of the resulting points datasets from any interpolation. + * Amend the interpolation method to take into account the cases in which the distance among points equals zero. + * Correct the way we retrieve the level positive value. + ### 1.0.0 * Release date: 2022/11/24 diff --git a/nes/load_nes.py b/nes/load_nes.py index a6e2f86954d450549024823923e3f79bfa15cb44..5bfd333fc4661ec1f9feffe82dfe4d726051b13e 100644 --- a/nes/load_nes.py +++ b/nes/load_nes.py @@ -122,6 +122,8 @@ def __is_rotated(dataset): if 'rotated_pole' in dataset.variables.keys(): return True + elif ('rlat' in dataset.dimensions) and ('rlon' in dataset.dimensions): + return True else: return False diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index ad6eecd2e5ab4dd0e08a124d77aa8c2ca6ca1a71..8f867161ecfb8fe3f8d53452bfbb7729872074d8 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -530,16 +530,20 @@ class Nes(object): inc_lat = np.abs(np.mean(np.diff(self._lat['data']))) lat_bnds = self.create_single_spatial_bounds(self._lat['data'], inc_lat, spatial_nv=2) - self._lat_bnds = deepcopy(lat_bnds) - self.lat_bnds = lat_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - :] - + self._lat_bnds = {} + self._lat_bnds['data'] = deepcopy(lat_bnds) + self.lat_bnds = {} + self.lat_bnds['data'] = lat_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + :] + inc_lon = np.abs(np.mean(np.diff(self._lon['data']))) lon_bnds = self.create_single_spatial_bounds(self._lon['data'], inc_lon, spatial_nv=2) - self._lon_bnds = deepcopy(lon_bnds) - self.lon_bnds = lon_bnds[self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], - :] + self._lon_bnds = {} + self._lon_bnds['data'] = deepcopy(lon_bnds) + self.lon_bnds = {} + self.lon_bnds['data'] = lon_bnds[self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], + :] return None @@ -1465,11 +1469,13 @@ class Nes(object): if self.master: if not create_nes: if 'lat_bnds' in self.netcdf.variables.keys(): - lat_bnds = self.netcdf.variables['lat_bnds'][:] + lat_bnds = {} + lat_bnds['data'] = self.netcdf.variables['lat_bnds'][:] else: lat_bnds = None if 'lon_bnds' in self.netcdf.variables.keys(): - lon_bnds = self.netcdf.variables['lon_bnds'][:] + lon_bnds = {} + lon_bnds['data'] = self.netcdf.variables['lon_bnds'][:] else: lon_bnds = None else: @@ -1927,10 +1933,6 @@ class Nes(object): if self._time_bnds is not None: netcdf.createDimension('time_nv', 2) - # Create spatial_nv (number of vertices) dimension - if (self._lat_bnds is not None) and (self._lon_bnds is not None): - netcdf.createDimension('spatial_nv', 2) - # Create lev, lon and lat dimensions netcdf.createDimension('lev', len(self.lev['data'])) netcdf.createDimension('lon', len(self._lon['data'])) @@ -2002,7 +2004,7 @@ class Nes(object): zlib=self.zip_lvl > 0, complevel=self.zip_lvl) if self.size > 1: lat_bnds_var.set_collective(True) - lat_bnds_var[:] = self._lat_bnds[:] + lat_bnds_var[:] = self._lat_bnds['data'] # LONGITUDES lon = netcdf.createVariable('lon', np.float64, self._lon_dim, zlib=self.zip_lvl > 0, complevel=self.zip_lvl) @@ -2022,7 +2024,7 @@ class Nes(object): zlib=self.zip_lvl > 0, complevel=self.zip_lvl) if self.size > 1: lon_bnds_var.set_collective(True) - lon_bnds_var[:] = self._lon_bnds[:] + lon_bnds_var[:] = self._lon_bnds['data'] return None @@ -2386,21 +2388,21 @@ class Nes(object): self.create_spatial_bounds() # Reshape arrays to create geometry - aux_shape = (self.lat_bnds.shape[0], self.lon_bnds.shape[0], 4) + aux_shape = (self.lat_bnds['data'].shape[0], self.lon_bnds['data'].shape[0], 4) lon_bnds_aux = np.empty(aux_shape) - lon_bnds_aux[:, :, 0] = self.lon_bnds[np.newaxis, :, 0] - lon_bnds_aux[:, :, 1] = self.lon_bnds[np.newaxis, :, 1] - lon_bnds_aux[:, :, 2] = self.lon_bnds[np.newaxis, :, 1] - lon_bnds_aux[:, :, 3] = self.lon_bnds[np.newaxis, :, 0] + lon_bnds_aux[:, :, 0] = self.lon_bnds['data'][np.newaxis, :, 0] + lon_bnds_aux[:, :, 1] = self.lon_bnds['data'][np.newaxis, :, 1] + lon_bnds_aux[:, :, 2] = self.lon_bnds['data'][np.newaxis, :, 1] + lon_bnds_aux[:, :, 3] = self.lon_bnds['data'][np.newaxis, :, 0] lon_bnds = lon_bnds_aux del lon_bnds_aux lat_bnds_aux = np.empty(aux_shape) - lat_bnds_aux[:, :, 0] = self.lat_bnds[:, np.newaxis, 0] - lat_bnds_aux[:, :, 1] = self.lat_bnds[:, np.newaxis, 0] - lat_bnds_aux[:, :, 2] = self.lat_bnds[:, np.newaxis, 1] - lat_bnds_aux[:, :, 3] = self.lat_bnds[:, np.newaxis, 1] + lat_bnds_aux[:, :, 0] = self.lat_bnds['data'][:, np.newaxis, 0] + lat_bnds_aux[:, :, 1] = self.lat_bnds['data'][:, np.newaxis, 0] + lat_bnds_aux[:, :, 2] = self.lat_bnds['data'][:, np.newaxis, 1] + lat_bnds_aux[:, :, 3] = self.lat_bnds['data'][:, np.newaxis, 1] lat_bnds = lat_bnds_aux del lat_bnds_aux diff --git a/nes/nc_projections/latlon_nes.py b/nes/nc_projections/latlon_nes.py index b1e996f4780f4a4a31d3c4b3c8174d016675b71e..31acd58bf9512710bca941221b8193d63e558866 100644 --- a/nes/nc_projections/latlon_nes.py +++ b/nes/nc_projections/latlon_nes.py @@ -99,6 +99,24 @@ class LatLonNes(Nes): return new + def _create_dimensions(self, netcdf): + """ + Create 'spatial_nv' dimensions and the super dimensions 'lev', 'time', 'time_nv', 'lon' and 'lat'. + + Parameters + ---------- + netcdf : Dataset + NetCDF object. + """ + + super(LatLonNes, self)._create_dimensions(netcdf) + + # Create spatial_nv (number of vertices) dimension + if (self._lat_bnds is not None) and (self._lon_bnds is not None): + netcdf.createDimension('spatial_nv', 2) + + return None + def _create_centre_coordinates(self, **kwargs): """ Calculate centre latitudes and longitudes from grid details. diff --git a/nes/nc_projections/lcc_nes.py b/nes/nc_projections/lcc_nes.py index e2cb6c651f603e7150d99e0603623a7a802c3401..38569a2fb421ac0426c303c078ccc93c67014ee1 100644 --- a/nes/nc_projections/lcc_nes.py +++ b/nes/nc_projections/lcc_nes.py @@ -1,5 +1,6 @@ #!/usr/bin/env python +import warnings import numpy as np import pandas as pd from cfunits import Units @@ -158,17 +159,22 @@ class LCCNes(Nes): } else: - projection_data = self.variables['Lambert_conformal'] - if not isinstance(projection_data['standard_parallel'], list): - projection_data['standard_parallel'] = [projection_data['standard_parallel'].split(', ')[0], - projection_data['standard_parallel'].split(', ')[1]] - self.free_vars('Lambert_conformal') + if 'Lambert_conformal' in self.variables.keys(): + projection_data = self.variables['Lambert_conformal'] + if not isinstance(projection_data['standard_parallel'], list): + projection_data['standard_parallel'] = [projection_data['standard_parallel'].split(', ')[0], + projection_data['standard_parallel'].split(', ')[1]] + self.free_vars('Lambert_conformal') + else: + msg = 'There is no variable called Lambert_conformal, projection has not been defined.' + warnings.warn(msg) + projection_data = None return projection_data def _create_dimensions(self, netcdf): """ - Create 'y', 'x' and 'spatial_nv' dimensions and the super dimensions ('lev', 'time'). + Create 'y', 'x' and 'spatial_nv' dimensions and the super dimensions 'lev', 'time', 'time_nv', 'lon' and 'lat' Parameters ---------- @@ -382,15 +388,19 @@ class LCCNes(Nes): lon_bnds, lat_bnds = self.projection(x_bnds, y_bnds, inverse=True) # Obtain regular coordinates bounds - self._lat_bnds = deepcopy(lat_bnds) - self.lat_bnds = lat_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], - :] - - self._lon_bnds = deepcopy(lon_bnds) - self.lon_bnds = lon_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], - :] + self._lat_bnds = {} + self._lat_bnds['data'] = deepcopy(lat_bnds) + self.lat_bnds = {} + self.lat_bnds['data'] = lat_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], + :] + + self._lon_bnds = {} + self._lon_bnds['data'] = deepcopy(lon_bnds) + self.lon_bnds = {} + self.lon_bnds['data'] = lon_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], + :] return None @@ -420,11 +430,12 @@ class LCCNes(Nes): netcdf4-python Dataset """ - mapping = netcdf.createVariable('Lambert_conformal', 'c') - mapping.grid_mapping_name = self.projection_data['grid_mapping_name'] - mapping.standard_parallel = self.projection_data['standard_parallel'] - mapping.longitude_of_central_meridian = self.projection_data['longitude_of_central_meridian'] - mapping.latitude_of_projection_origin = self.projection_data['latitude_of_projection_origin'] + if self.projection_data is not None: + mapping = netcdf.createVariable('Lambert_conformal', 'c') + mapping.grid_mapping_name = self.projection_data['grid_mapping_name'] + mapping.standard_parallel = self.projection_data['standard_parallel'] + mapping.longitude_of_central_meridian = self.projection_data['longitude_of_central_meridian'] + mapping.latitude_of_projection_origin = self.projection_data['latitude_of_projection_origin'] return None @@ -456,8 +467,10 @@ class LCCNes(Nes): self.create_spatial_bounds() # Reshape arrays to create geometry - aux_b_lats = self.lat_bnds.reshape((self.lat_bnds.shape[0] * self.lat_bnds.shape[1], self.lat_bnds.shape[2])) - aux_b_lons = self.lon_bnds.reshape((self.lon_bnds.shape[0] * self.lon_bnds.shape[1], self.lon_bnds.shape[2])) + aux_b_lats = self.lat_bnds['data'].reshape((self.lat_bnds['data'].shape[0] * self.lat_bnds['data'].shape[1], + self.lat_bnds['data'].shape[2])) + aux_b_lons = self.lon_bnds['data'].reshape((self.lon_bnds['data'].shape[0] * self.lon_bnds['data'].shape[1], + self.lon_bnds['data'].shape[2])) # Create dataframe cointaining all polygons geometry = [] diff --git a/nes/nc_projections/mercator_nes.py b/nes/nc_projections/mercator_nes.py index 8b79b9e6aa2c5dc7e8605ba45ac74635db31563f..d5eb7a0507fe85d4066fbbaf02aeb739fbcc1900 100644 --- a/nes/nc_projections/mercator_nes.py +++ b/nes/nc_projections/mercator_nes.py @@ -1,5 +1,6 @@ #!/usr/bin/env python +import warnings import numpy as np import pandas as pd from cfunits import Units @@ -157,14 +158,19 @@ class MercatorNes(Nes): } else: - projection_data = self.variables['mercator'] - self.free_vars('mercator') + if 'mercator' in self.variables.keys(): + projection_data = self.variables['mercator'] + self.free_vars('mercator') + else: + msg = 'There is no variable called mercator, projection has not been defined.' + warnings.warn(msg) + projection_data = None return projection_data def _create_dimensions(self, netcdf): """ - Create 'y', 'x' and 'spatial_nv' dimensions and the super dimensions ('lev', 'time'). + Create 'y', 'x' and 'spatial_nv' dimensions and the super dimensions 'lev', 'time', 'time_nv', 'lon' and 'lat' Parameters ---------- @@ -359,15 +365,19 @@ class MercatorNes(Nes): lon_bnds, lat_bnds = self.projection(x_bnds, y_bnds, inverse=True) # Obtain regular coordinates bounds - self._lat_bnds = deepcopy(lat_bnds) - self.lat_bnds = lat_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], - :] - - self._lon_bnds = deepcopy(lon_bnds) - self.lon_bnds = lon_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], - :] + self._lat_bnds = {} + self._lat_bnds['data'] = deepcopy(lat_bnds) + self.lat_bnds = {} + self.lat_bnds['data'] = lat_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], + :] + + self._lon_bnds = {} + self._lon_bnds['data'] = deepcopy(lon_bnds) + self.lon_bnds = {} + self.lon_bnds['data'] = lon_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], + :] return None @@ -397,10 +407,11 @@ class MercatorNes(Nes): netcdf4-python Dataset. """ - mapping = netcdf.createVariable('mercator', 'c') - mapping.grid_mapping_name = self.projection_data['grid_mapping_name'] - mapping.standard_parallel = self.projection_data['standard_parallel'] - mapping.longitude_of_projection_origin = self.projection_data['longitude_of_projection_origin'] + if self.projection_data is not None: + mapping = netcdf.createVariable('mercator', 'c') + mapping.grid_mapping_name = self.projection_data['grid_mapping_name'] + mapping.standard_parallel = self.projection_data['standard_parallel'] + mapping.longitude_of_projection_origin = self.projection_data['longitude_of_projection_origin'] return None @@ -432,8 +443,10 @@ class MercatorNes(Nes): self.create_spatial_bounds() # Reshape arrays to create geometry - aux_b_lats = self.lat_bnds.reshape((self.lat_bnds.shape[0] * self.lat_bnds.shape[1], self.lat_bnds.shape[2])) - aux_b_lons = self.lon_bnds.reshape((self.lon_bnds.shape[0] * self.lon_bnds.shape[1], self.lon_bnds.shape[2])) + aux_b_lats = self.lat_bnds['data'].reshape((self.lat_bnds['data'].shape[0] * self.lat_bnds['data'].shape[1], + self.lat_bnds['data'].shape[2])) + aux_b_lons = self.lon_bnds['data'].reshape((self.lon_bnds['data'].shape[0] * self.lon_bnds['data'].shape[1], + self.lon_bnds['data'].shape[2])) # Create dataframe cointaining all polygons geometry = [] diff --git a/nes/nc_projections/points_nes.py b/nes/nc_projections/points_nes.py index 744ff206ff3c6ba1b229d378b5aa82d926f9cabd..fe2e0074e3cc183275bf84acbc0fb9df69947ace 100644 --- a/nes/nc_projections/points_nes.py +++ b/nes/nc_projections/points_nes.py @@ -121,7 +121,7 @@ class PointsNes(Nes): def _create_dimensions(self, netcdf): """ - Create 'lev', 'time_nv', 'station', 'spatial_nv' and 'strlen' dimensions. + Create 'time', 'time_nv', 'station' and 'strlen' dimensions. Parameters ---------- diff --git a/nes/nc_projections/points_nes_ghost.py b/nes/nc_projections/points_nes_ghost.py index 53a0ee286a5d5652b9296e14e82785ddce343f52..35e98a24df3e5e02839c7e3668bd8c9e12873d4c 100644 --- a/nes/nc_projections/points_nes_ghost.py +++ b/nes/nc_projections/points_nes_ghost.py @@ -130,7 +130,7 @@ class PointsNesGHOST(PointsNes): def _create_dimensions(self, netcdf): """ Create 'N_flag_codes' and 'N_qa_codes' dimensions and the super dimensions - ('lev', 'time_nv', 'station', 'spatial_nv' and 'strlen'). + 'time', 'time_nv', 'station', and 'strlen'. Parameters ---------- diff --git a/nes/nc_projections/points_nes_providentia.py b/nes/nc_projections/points_nes_providentia.py index df515c17bade9436b2043f4745bd5f73a0eee4de..96b9e459c5ce9174b39e728baed9ce5bfd3ce0fb 100644 --- a/nes/nc_projections/points_nes_providentia.py +++ b/nes/nc_projections/points_nes_providentia.py @@ -172,7 +172,7 @@ class PointsNesProvidentia(PointsNes): def _create_dimensions(self, netcdf): """ Create 'grid_edge', 'model_latitude' and 'model_longitude' dimensions and the super dimensions - ('lev', 'time_nv', 'station', 'spatial_nv', 'strlen'). + 'time', 'time_nv', 'station', and 'strlen'. Parameters ---------- diff --git a/nes/nc_projections/rotated_nes.py b/nes/nc_projections/rotated_nes.py index b968dd724f49a5577ca5654a84a1ae1a87c596ba..412a8fc930c3e82255ac652983508b2cfdb29aca 100644 --- a/nes/nc_projections/rotated_nes.py +++ b/nes/nc_projections/rotated_nes.py @@ -1,5 +1,6 @@ #!/usr/bin/env python +import warnings import numpy as np import pandas as pd import math @@ -156,16 +157,20 @@ class RotatedNes(Nes): 'grid_north_pole_latitude': 90 - kwargs['centre_lat'], 'grid_north_pole_longitude': -180 + kwargs['centre_lon'], } - else: - projection_data = self.variables['rotated_pole'] - self.free_vars('rotated_pole') - + if 'rotated_pole' in self.variables.keys(): + projection_data = self.variables['rotated_pole'] + self.free_vars('rotated_pole') + else: + msg = 'There is no variable called rotated_pole, projection has not been defined.' + warnings.warn(msg) + projection_data = None + return projection_data def _create_dimensions(self, netcdf): """ - Create 'rlat', 'rlon' and 'spatial_nv' dimensions and the super dimensions ('lev', 'time'). + Create 'rlat', 'rlon' and 'spatial_nv' dimensions and the super dimensions 'lev', 'time', 'time_nv', 'lon' and 'lat'. Parameters ---------- @@ -182,6 +187,7 @@ class RotatedNes(Nes): # Create spatial_nv (number of vertices) dimension if (self._lat_bnds is not None) and (self._lon_bnds is not None): netcdf.createDimension('spatial_nv', 4) + pass return None @@ -409,15 +415,19 @@ class RotatedNes(Nes): lon_bnds, lat_bnds = self.rotated2latlon(rlon_bnds, rlat_bnds) # Obtain regular coordinates bounds - self._lat_bnds = deepcopy(lat_bnds) - self.lat_bnds = lat_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], - :] - - self._lon_bnds = deepcopy(lon_bnds) - self.lon_bnds = lon_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], - :] + self._lat_bnds = {} + self._lat_bnds['data'] = deepcopy(lat_bnds) + self.lat_bnds = {} + self.lat_bnds['data'] = lat_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], + :] + + self._lon_bnds = {} + self._lon_bnds['data'] = deepcopy(lon_bnds) + self.lon_bnds = {} + self.lon_bnds['data']= lon_bnds[self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max'], + :] return None @@ -447,10 +457,11 @@ class RotatedNes(Nes): netcdf4-python Dataset. """ - mapping = netcdf.createVariable('rotated_pole', 'c') - mapping.grid_mapping_name = self.projection_data['grid_mapping_name'] - mapping.grid_north_pole_latitude = self.projection_data['grid_north_pole_latitude'] - mapping.grid_north_pole_longitude = self.projection_data['grid_north_pole_longitude'] + if self.projection_data is not None: + mapping = netcdf.createVariable('rotated_pole', 'c') + mapping.grid_mapping_name = self.projection_data['grid_mapping_name'] + mapping.grid_north_pole_latitude = self.projection_data['grid_north_pole_latitude'] + mapping.grid_north_pole_longitude = self.projection_data['grid_north_pole_longitude'] return None @@ -481,8 +492,10 @@ class RotatedNes(Nes): self.create_spatial_bounds() # Reshape arrays to create geometry - aux_b_lats = self.lat_bnds.reshape((self.lat_bnds.shape[0] * self.lat_bnds.shape[1], self.lat_bnds.shape[2])) - aux_b_lons = self.lon_bnds.reshape((self.lon_bnds.shape[0] * self.lon_bnds.shape[1], self.lon_bnds.shape[2])) + aux_b_lats = self.lat_bnds['data'].reshape((self.lat_bnds['data'].shape[0] * self.lat_bnds['data'].shape[1], + self.lat_bnds['data'].shape[2])) + aux_b_lons = self.lon_bnds['data'].reshape((self.lon_bnds['data'].shape[0] * self.lon_bnds['data'].shape[1], + self.lon_bnds['data'].shape[2])) # Create dataframe cointaining all polygons geometry = [] diff --git a/tests/2-test_read_write_projection_nord3v2.bash b/tests/2-test_read_write_projection_nord3v2.bash deleted file mode 100644 index 4f7eac151bfa80b6a16328289db257bb4d9952d4..0000000000000000000000000000000000000000 --- a/tests/2-test_read_write_projection_nord3v2.bash +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -#EXPORTPATH="/esarchive/scratch/avilanova/software/NES" -EXPORTPATH="/gpfs/projects/bsc32/models/NES" -SRCPATH="/gpfs/projects/bsc32/models/NES/tests" -EXE="2-test_read_write_projection.py" - -module purge -module load Python/3.7.4-GCCcore-8.3.0 -module load netcdf4-python/1.5.3-foss-2019b-Python-3.7.4 -module load cfunits/1.8-foss-2019b-Python-3.7.4 -module load xarray/0.17.0-foss-2019b-Python-3.7.4 -module load pandas/1.2.4-foss-2019b-Python-3.7.4 -module load mpi4py/3.0.3-foss-2019b-Python-3.7.4 -module load filelock/3.7.1-foss-2019b-Python-3.7.4 -module load pyproj/2.5.0-foss-2019b-Python-3.7.4 -module load eccodes-python/0.9.5-foss-2019b-Python-3.7.4 -module load geopandas/0.8.1-foss-2019b-Python-3.7.4 -module load Shapely/1.7.1-foss-2019b-Python-3.7.4 - -for nprocs in 1 2 4 8 16 32 -do - JOB_ID=`sbatch --ntasks=${nprocs} --exclusive --job-name=nes_${nprocs} --output=./log_nord3v2_NES_${nprocs}_%J.out --error=./log_nord3v2_NES_${nprocs}_%J.err -D . --time=02:00:00 --wrap="export PYTHONPATH=${EXPORTPATH}:${PYTHONPATH}; cd ${SRCPATH}; mpirun --mca mpi_warn_on_fork 0 -np ${nprocs} python ${SRCPATH}/${EXE}"` -done \ No newline at end of file diff --git a/tests/3-test_spatial_join_nord3v2.bash b/tests/3-test_spatial_join_nord3v2.bash deleted file mode 100644 index 079aa7928696599a280f2c555704dbd543b65385..0000000000000000000000000000000000000000 --- a/tests/3-test_spatial_join_nord3v2.bash +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -EXPORTPATH="/esarchive/scratch/avilanova/software/NES" -SRCPATH="/esarchive/scratch/avilanova/software/NES/tests" -EXE="3-test_spatial_join.py" - -module purge -module load Python/3.7.4-GCCcore-8.3.0 -module load netcdf4-python/1.5.3-foss-2019b-Python-3.7.4 -module load cfunits/1.8-foss-2019b-Python-3.7.4 -module load xarray/0.17.0-foss-2019b-Python-3.7.4 -module load pandas/1.2.4-foss-2019b-Python-3.7.4 -module load mpi4py/3.0.3-foss-2019b-Python-3.7.4 -module load filelock/3.7.1-foss-2019b-Python-3.7.4 -module load pyproj/2.5.0-foss-2019b-Python-3.7.4 -module load eccodes-python/0.9.5-foss-2019b-Python-3.7.4 -module load geopandas/0.8.1-foss-2019b-Python-3.7.4 -module load Shapely/1.7.1-foss-2019b-Python-3.7.4 - -for nprocs in 1 -do - JOB_ID=`sbatch --ntasks=${nprocs} --exclusive --job-name=nes_${nprocs} --output=./log_nord3v2_NES_${nprocs}_%J.out --error=./log_nord3v2_NES_${nprocs}_%J.err -D . --time=02:00:00 --wrap="export PYTHONPATH=${EXPORTPATH}:${PYTHONPATH}; cd ${SRCPATH}; mpirun --mca mpi_warn_on_fork 0 -np ${nprocs} python ${SRCPATH}/${EXE}"` -done \ No newline at end of file diff --git a/tests/4-test_bounds.py b/tests/4-test_bounds.py index e3d3063fddd238f0dc601a6a1c2837e1bcd98e94..27d1f72df7fc09f0dd34446ccd2c24357520eb2e 100644 --- a/tests/4-test_bounds.py +++ b/tests/4-test_bounds.py @@ -7,35 +7,140 @@ from nes import * comm = MPI.COMM_WORLD rank = comm.Get_rank() +size = comm.Get_size() -for projection_type in ['read', 'created']: - - # Open dataset - if projection_type == 'read': - test_path = "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/OUT/stats_bnds/monarch/a45g/regional/daily_max/O3_all/O3_all-000_2021080300.nc" - nessy = open_netcdf(path=test_path, info=True) - - # Create dataset - elif projection_type == 'created': - lat_orig = 41.1 - lon_orig = 1.8 - inc_lat = 0.2 - inc_lon = 0.2 - n_lat = 100 - n_lon = 100 - nessy = create_nes(comm=None, info=True, projection='regular', - lat_orig=lat_orig, lon_orig=lon_orig, - inc_lat=inc_lat, inc_lon=inc_lon, - n_lat=n_lat, n_lon=n_lon) - - # Add bounds - nessy.create_spatial_bounds() - - print('NES', projection_type, '-', 'Rank', rank, '-', nessy) - print('NES', projection_type, '-', 'Rank', rank, '-', 'Lat bounds', - nessy.lat_bnds) - print('NES', projection_type, '-', 'Rank', rank, '-', 'Lon bounds', - nessy.lon_bnds) - - comm.Barrier() - sys.stdout.flush() \ No newline at end of file +parallel_method = 'Y' + +result_path = "Times_test_4_bounds_{0}_{1:03d}.csv".format(parallel_method, size) +result = pd.DataFrame(index=['read', 'calcul', 'write'], + columns=['With_bounds', 'Without_bounds', "Create_new"]) +# ====================================================================================================================== +# ===================================== FILE WITH EXISTING BOUNDS ==================================================== +# ====================================================================================================================== + +test_name = "With_bounds" +print(test_name) + +# READ +st_time = timeit.default_timer() +# Original path: /gpfs/scratch/bsc32/bsc32538/HERMESv3/OUT_Complete_single/GFAS_p13h/HERMESv3_GR_GFAS_d01_2022050100.nc +# Rotated grid from HERMES +path_1 = '/gpfs/projects/bsc32/models/NES_tutorial_data/HERMESv3_GR_GFAS_d01_2022050100.nc' +nessy_1 = open_netcdf(path=path_1, info=True) + +comm.Barrier() +result.loc['read', test_name] = timeit.default_timer() - st_time + + +# EXPLORE BOUNDS +st_time = timeit.default_timer() +print('FILE WITH EXISTING BOUNDS - Rank', rank, '-', 'Lat bounds', nessy_1.lat_bnds) +print('FILE WITH EXISTING BOUNDS - Rank', rank, '-', 'Lon bounds', nessy_1.lon_bnds) +comm.Barrier() +result.loc['calcul', test_name] = timeit.default_timer() - st_time + +# WRITE +st_time = timeit.default_timer() +nessy_1.to_netcdf('bounds_file_1.nc', info=True) +comm.Barrier() +result.loc['write', test_name] = timeit.default_timer() - st_time + +# REOPEN +nessy_2 = open_netcdf('bounds_file_1.nc', info=True) + +# LOAD DATA AND EXPLORE BOUNDS +print('FILE WITH EXISTING BOUNDS AFTER WRITE - Rank', rank, '-', 'Lat bounds', nessy_2.lat_bnds) +print('FILE WITH EXISTING BOUNDS AFTER WRITE - Rank', rank, '-', 'Lon bounds', nessy_2.lon_bnds) + +comm.Barrier() +sys.stdout.flush() + +# ====================================================================================================================== +# =================================== FILE WITHOUT EXISTING BOUNDS =================================================== +# ====================================================================================================================== +test_name = "Without_bounds" +print(test_name) +# Original path: /gpfs/scratch/bsc32/bsc32538/mr_multiplyby/OUT/stats_bnds/monarch/a45g/regional/daily_max/O3_all/O3_all-000_2021080300.nc +# Rotated grid from MONARCH +st_time = timeit.default_timer() +path_3 = "/gpfs/projects/bsc32/models/NES_tutorial_data/O3_all-000_2021080300.nc" +nessy_3 = open_netcdf(path=path_3, info=True) +comm.Barrier() +result.loc['read', test_name] = timeit.default_timer() - st_time + +# CREATE BOUNDS +st_time = timeit.default_timer() +nessy_3.create_spatial_bounds() +comm.Barrier() +result.loc['calcul', test_name] = timeit.default_timer() - st_time + +# EXPLORE BOUNDS +print('FILE WITHOUT EXISTING BOUNDS - Rank', rank, '-', 'Lat bounds', nessy_3.lat_bnds) +print('FILE WITHOUT EXISTING BOUNDS - Rank', rank, '-', 'Lon bounds', nessy_3.lon_bnds) + +# WRITE +st_time = timeit.default_timer() +nessy_3.to_netcdf('bounds_file_2.nc', info=True) +comm.Barrier() +result.loc['write', test_name] = timeit.default_timer() - st_time + +# REOPEN +nessy_4 = open_netcdf('bounds_file_2.nc', info=True) + +# LOAD DATA AND EXPLORE BOUNDS +print('FILE WITH EXISTING BOUNDS AFTER WRITE - Rank', rank, '-', 'Lat bounds', nessy_4.lat_bnds) +print('FILE WITH EXISTING BOUNDS AFTER WRITE - Rank', rank, '-', 'Lon bounds', nessy_4.lon_bnds) + +comm.Barrier() +sys.stdout.flush() + +# ====================================================================================================================== +# ==================================== CREATE NES REGULAR LAT-LON ==================================================== +# ====================================================================================================================== + +test_name = "Create_new" +print(test_name) + +# CREATE GRID +st_time = timeit.default_timer() +lat_orig = 41.1 +lon_orig = 1.8 +inc_lat = 0.2 +inc_lon = 0.2 +n_lat = 100 +n_lon = 100 +nessy_5 = create_nes(comm=None, info=True, projection='regular', + lat_orig=lat_orig, lon_orig=lon_orig, + inc_lat=inc_lat, inc_lon=inc_lon, + n_lat=n_lat, n_lon=n_lon) +comm.Barrier() +result.loc['read', test_name] = timeit.default_timer() - st_time + +# CREATE BOUNDS +st_time = timeit.default_timer() +nessy_5.create_spatial_bounds() +comm.Barrier() +result.loc['calcul', test_name] = timeit.default_timer() - st_time + +# EXPLORE BOUNDS +print('FROM NEW GRID - Rank', rank, '-', 'Lat bounds', nessy_5.lat_bnds) +print('FROM NEW GRID - Rank', rank, '-', 'Lon bounds', nessy_5.lon_bnds) + +# WRITE +st_time = timeit.default_timer() +nessy_5.to_netcdf('bounds_file_3.nc', info=True) +comm.Barrier() +result.loc['write', test_name] = timeit.default_timer() - st_time + +# REOPEN +nessy_6 = open_netcdf('bounds_file_3.nc', info=True) + +# LOAD DATA AND EXPLORE BOUNDS +print('FROM NEW GRID AFTER WRITE - Rank', rank, '-', 'Lat bounds', nessy_6.lat_bnds) +print('FROM NEW GRID AFTER WRITE - Rank', rank, '-', 'Lon bounds', nessy_6.lon_bnds) + +comm.Barrier() +sys.stdout.flush() +if rank == 0: + print(result) + result.to_csv(result_path) diff --git a/tests/4-test_bounds_nord3v2.bash b/tests/run_scallability_tests_nord3v2.sh similarity index 50% rename from tests/4-test_bounds_nord3v2.bash rename to tests/run_scallability_tests_nord3v2.sh index fc6e06b0824d8682c80372867da0d429df1a80b6..b06f89a7c2dc6de4a685938e1500b7c80f600d6a 100644 --- a/tests/4-test_bounds_nord3v2.bash +++ b/tests/run_scallability_tests_nord3v2.sh @@ -1,7 +1,11 @@ #!/bin/bash -EXPORTPATH="/esarchive/scratch/avilanova/software/NES" -SRCPATH="/esarchive/scratch/avilanova/software/NES/tests" +EXPORTPATH="/gpfs/projects/bsc32/models/NES_master" +SRCPATH="/gpfs/projects/bsc32/models/NES_master/tests" + +#EXE="1-test_read_write_size.py" +#EXE="2-test_read_write_projection.py" +#EXE="3-test_spatial_join.py" EXE="4-test_bounds.py" module purge @@ -17,7 +21,7 @@ module load eccodes-python/0.9.5-foss-2019b-Python-3.7.4 module load geopandas/0.8.1-foss-2019b-Python-3.7.4 module load Shapely/1.7.1-foss-2019b-Python-3.7.4 -for nprocs in 1 2 +for nprocs in 1 2 4 8 16 do - JOB_ID=`sbatch --ntasks=${nprocs} --exclusive --job-name=nes_${nprocs} --output=./log_nord3v2_NES_${nprocs}_%J.out --error=./log_nord3v2_NES_${nprocs}_%J.err -D . --time=02:00:00 --wrap="export PYTHONPATH=${EXPORTPATH}:${PYTHONPATH}; cd ${SRCPATH}; mpirun --mca mpi_warn_on_fork 0 -np ${nprocs} python ${SRCPATH}/${EXE}"` + JOB_ID=`sbatch --ntasks=${nprocs} --qos=debug --exclusive --job-name=NES_${EXE}_${nprocs} --output=./log_NES-${EXE}_nord3v2_${nprocs}_%J.out --error=./log_NES-${EXE}_nord3v2_${nprocs}_%J.err -D . --time=02:00:00 --wrap="export PYTHONPATH=${EXPORTPATH}:${PYTHONPATH}; cd ${SRCPATH}; mpirun --mca mpi_warn_on_fork 0 -np ${nprocs} python ${SRCPATH}/${EXE}"` done \ No newline at end of file diff --git a/tests/test_bash_mn4.cmd b/tests/test_bash_mn4.cmd index db2758fcffd54ce03e81b5a2b4e4d8af072ea07e..28ff46a0e3342d7b47a6faca9204ac844803325f 100644 --- a/tests/test_bash_mn4.cmd +++ b/tests/test_bash_mn4.cmd @@ -4,10 +4,10 @@ #SBATCH -A bsc32 #SBATCH --cpus-per-task=1 #SBATCH -n 4 -#SBATCH -t 00:30:00 -#SBATCH -J test_nes -#SBATCH --output=log_mn4_NES_%j.out -#SBATCH --error=log_mn4_NES_%j.err +#SBATCH -t 02:00:00 +#SBATCH -J NES-test +#SBATCH --output=log_NES-tests_mn4_%j.out +#SBATCH --error=log_NES-tests_mn4_%j.err #SBATCH --exclusive ### ulimit -s 128000 @@ -15,18 +15,12 @@ module purge module use /gpfs/projects/bsc32/software/suselinux/11/modules/all -module load Python/3.7.4-GCCcore-8.3.0 -module load netcdf4-python/1.5.3-foss-2019b-Python-3.7.4 -module load cfunits/1.8-foss-2019b-Python-3.7.4 -module load xarray/0.17.0-foss-2019b-Python-3.7.4 -module load OpenMPI/4.0.5-GCC-8.3.0-mn4 -module load filelock/3.7.1-foss-2019b-Python-3.7.4 -module load eccodes-python/0.9.5-foss-2019b-Python-3.7.4 -module load pyproj/2.5.0-foss-2019b-Python-3.7.4 -module load geopandas/0.8.1-foss-2019b-Python-3.7.4 -module load Shapely/1.7.1-foss-2019b-Python-3.7.4 +# TODO change module when installed +module load NES/1.0.0-mn4-foss-2019b-Python-3.7.4 -export PYTHONPATH=/gpfs/projects/bsc32/models/NES:${PYTHONPATH} -cd /gpfs/projects/bsc32/models/NES/tests +cd /gpfs/projects/bsc32/models/NES_master/tests -mpirun --mca mpi_warn_on_fork 0 -np 4 python basic_nes_tests.py +#mpirun --mca mpi_warn_on_fork 0 -np 4 python 1-test_read_write_size.py +#mpirun --mca mpi_warn_on_fork 0 -np 4 python 2-test_read_write_projection.py +#mpirun --mca mpi_warn_on_fork 0 -np 4 python 3-test_spatial_join.py +mpirun --mca mpi_warn_on_fork 0 -np 4 python 4-test_bounds.py diff --git a/tests/test_bash_nord3v2.cmd b/tests/test_bash_nord3v2.cmd index da0f4d7bf1829f732d82e21237872333048060c8..c255b60aee92a190f5c799fbceba263891f43d69 100644 --- a/tests/test_bash_nord3v2.cmd +++ b/tests/test_bash_nord3v2.cmd @@ -1,32 +1,25 @@ #!/bin/bash -####SBATCH --qos=debug +#SBATCH --qos=debug #SBATCH -A bsc32 #SBATCH --cpus-per-task=1 #SBATCH -n 4 -#SBATCH -t 00:10:00 -#SBATCH -J test_nes -#SBATCH --output=log_nord3v2_NES_%j.out -#SBATCH --error=log_nord3v2_NES_%j.err +#SBATCH -t 02:00:00 +#SBATCH -J NES-test +#SBATCH --output=log_NES-tests_nord3v2_%j.out +#SBATCH --error=log_NES-tests_nord3v2_%j.err #SBATCH --exclusive ### ulimit -s 128000 module purge -module load Python/3.7.4-GCCcore-8.3.0 -module load netcdf4-python/1.5.3-foss-2019b-Python-3.7.4 -module load cfunits/1.8-foss-2019b-Python-3.7.4 -module load xarray/0.17.0-foss-2019b-Python-3.7.4 -module load pandas/1.2.4-foss-2019b-Python-3.7.4 -module load mpi4py/3.0.3-foss-2019b-Python-3.7.4 -module load filelock/3.7.1-foss-2019b-Python-3.7.4 -module load eccodes-python/0.9.5-foss-2019b-Python-3.7.4 -module load pyproj/2.5.0-foss-2019b-Python-3.7.4 -module load geopandas/0.8.1-foss-2019b-Python-3.7.4 -module load Shapely/1.7.1-foss-2019b-Python-3.7.4 +# TODO change module when installed +module load NES/1.0.0-nord3-v2-foss-2019b-Python-3.7.4 -export PYTHONPATH=/gpfs/projects/bsc32/models/NES:${PYTHONPATH} -cd /gpfs/projects/bsc32/models/NES/tests +cd /gpfs/projects/bsc32/models/NES_master/tests -mpirun --mca mpi_warn_on_fork 0 -np 4 python 2-nes_tests_by_projection.py +#mpirun --mca mpi_warn_on_fork 0 -np 4 python 1-test_read_write_size.py +#mpirun --mca mpi_warn_on_fork 0 -np 4 python 2-test_read_write_projection.py +#mpirun --mca mpi_warn_on_fork 0 -np 4 python 3-test_spatial_join.py +mpirun --mca mpi_warn_on_fork 0 -np 4 python 4-test_bounds.py diff --git a/tutorials/5.Others/5.2.Add_Coordinates_Bounds.ipynb b/tutorials/5.Others/5.2.Add_Coordinates_Bounds.ipynb index e432c92c37b5db13ae265bc8196cc2649768813b..84148276a6101bb8020866e4e1deb09586df72d0 100644 --- a/tutorials/5.Others/5.2.Add_Coordinates_Bounds.ipynb +++ b/tutorials/5.Others/5.2.Add_Coordinates_Bounds.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# How to add coordinates bounds" + "# How to read and add coordinates bounds" ] }, { @@ -23,33 +23,900 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 1. Set coordinates bounds" + "## 1. File with existing bounds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1. Open with NES" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/rotated_nes.py:166: UserWarning: There is no variable called rotated_pole, projection has not been defined.\n", + " warnings.warn(msg)\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Original path: /gpfs/scratch/bsc32/bsc32538/HERMESv3/OUT_Complete_single/GFAS_p13h/HERMESv3_GR_GFAS_d01_2022050100.nc\n", + "# Rotated grid from HERMES\n", + "path_1 = '/gpfs/projects/bsc32/models/NES_tutorial_data/HERMESv3_GR_GFAS_d01_2022050100.nc'\n", + "nessy_1 = open_netcdf(path=path_1, info=True)\n", + "nessy_1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2. Explore spatial bounds" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'data': masked_array(\n", + " data=[[[16.27358055114746, 16.335533142089844, 16.46847152709961,\n", + " 16.40639305114746],\n", + " [16.335533142089844, 16.397274017333984, 16.530336380004883,\n", + " 16.46847152709961],\n", + " [16.397274017333984, 16.45880126953125, 16.59198760986328,\n", + " 16.530336380004883],\n", + " ...,\n", + " [16.45880126953125, 16.397274017333984, 16.530336380004883,\n", + " 16.59198760986328],\n", + " [16.397274017333984, 16.335533142089844, 16.46847152709961,\n", + " 16.530336380004883],\n", + " [16.335533142089844, 16.27358055114746, 16.40639305114746,\n", + " 16.46847152709961]],\n", + " \n", + " [[16.40639305114746, 16.46847152709961, 16.601383209228516,\n", + " 16.539180755615234],\n", + " [16.46847152709961, 16.530336380004883, 16.663372039794922,\n", + " 16.601383209228516],\n", + " [16.530336380004883, 16.59198760986328, 16.725149154663086,\n", + " 16.663372039794922],\n", + " ...,\n", + " [16.59198760986328, 16.530336380004883, 16.663372039794922,\n", + " 16.725149154663086],\n", + " [16.530336380004883, 16.46847152709961, 16.601383209228516,\n", + " 16.663372039794922],\n", + " [16.46847152709961, 16.40639305114746, 16.539180755615234,\n", + " 16.601383209228516]],\n", + " \n", + " [[16.539180755615234, 16.601383209228516, 16.734270095825195,\n", + " 16.67194175720215],\n", + " [16.601383209228516, 16.663372039794922, 16.796384811401367,\n", + " 16.734270095825195],\n", + " [16.663372039794922, 16.725149154663086, 16.858285903930664,\n", + " 16.796384811401367],\n", + " ...,\n", + " [16.725149154663086, 16.663372039794922, 16.796384811401367,\n", + " 16.858285903930664],\n", + " [16.663372039794922, 16.601383209228516, 16.734270095825195,\n", + " 16.796384811401367],\n", + " [16.601383209228516, 16.539180755615234, 16.67194175720215,\n", + " 16.734270095825195]],\n", + " \n", + " ...,\n", + " \n", + " [[58.31517791748047, 58.429019927978516, 58.50811004638672,\n", + " 58.3941650390625],\n", + " [58.429019927978516, 58.54280090332031, 58.62199783325195,\n", + " 58.50811004638672],\n", + " [58.54280090332031, 58.65652084350586, 58.7358283996582,\n", + " 58.62199783325195],\n", + " ...,\n", + " [58.65652084350586, 58.54280090332031, 58.62199783325195,\n", + " 58.7358283996582],\n", + " [58.54280090332031, 58.429019927978516, 58.50811004638672,\n", + " 58.62199783325195],\n", + " [58.429019927978516, 58.31517791748047, 58.3941650390625,\n", + " 58.50811004638672]],\n", + " \n", + " [[58.3941650390625, 58.50811004638672, 58.586734771728516,\n", + " 58.472686767578125],\n", + " [58.50811004638672, 58.62199783325195, 58.70072937011719,\n", + " 58.586734771728516],\n", + " [58.62199783325195, 58.7358283996582, 58.814666748046875,\n", + " 58.70072937011719],\n", + " ...,\n", + " [58.7358283996582, 58.62199783325195, 58.70072937011719,\n", + " 58.814666748046875],\n", + " [58.62199783325195, 58.50811004638672, 58.586734771728516,\n", + " 58.70072937011719],\n", + " [58.50811004638672, 58.3941650390625, 58.472686767578125,\n", + " 58.586734771728516]],\n", + " \n", + " [[58.472686767578125, 58.586734771728516, 58.664894104003906,\n", + " 58.550743103027344],\n", + " [58.586734771728516, 58.70072937011719, 58.77899169921875,\n", + " 58.664894104003906],\n", + " [58.70072937011719, 58.814666748046875, 58.89303207397461,\n", + " 58.77899169921875],\n", + " ...,\n", + " [58.814666748046875, 58.70072937011719, 58.77899169921875,\n", + " 58.89303207397461],\n", + " [58.70072937011719, 58.586734771728516, 58.664894104003906,\n", + " 58.77899169921875],\n", + " [58.586734771728516, 58.472686767578125, 58.550743103027344,\n", + " 58.664894104003906]]],\n", + " mask=[[[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " ...,\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]]],\n", + " fill_value=1e+20,\n", + " dtype=float32)}" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy_1.lat_bnds" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'data': masked_array(\n", + " data=[[[-22.16550636291504, -22.04222297668457, -22.114652633666992,\n", + " -22.238161087036133],\n", + " [-22.04222297668457, -21.918787002563477, -21.990989685058594,\n", + " -22.114652633666992],\n", + " [-21.918787002563477, -21.795194625854492, -21.867170333862305,\n", + " -21.990989685058594],\n", + " ...,\n", + " [41.795196533203125, 41.918785095214844, 41.990989685058594,\n", + " 41.86717224121094],\n", + " [41.918785095214844, 42.0422248840332, 42.114654541015625,\n", + " 41.990989685058594],\n", + " [42.0422248840332, 42.165504455566406, 42.2381591796875,\n", + " 42.114654541015625]],\n", + " \n", + " [[-22.238161087036133, -22.114652633666992, -22.18718147277832,\n", + " -22.310914993286133],\n", + " [-22.114652633666992, -21.990989685058594, -22.06329345703125,\n", + " -22.18718147277832],\n", + " [-21.990989685058594, -21.867170333862305, -21.939247131347656,\n", + " -22.06329345703125],\n", + " ...,\n", + " [41.86717224121094, 41.990989685058594, 42.06329345703125,\n", + " 41.939247131347656],\n", + " [41.990989685058594, 42.114654541015625, 42.18718338012695,\n", + " 42.06329345703125],\n", + " [42.114654541015625, 42.2381591796875, 42.310916900634766,\n", + " 42.18718338012695]],\n", + " \n", + " [[-22.310914993286133, -22.18718147277832, -22.259811401367188,\n", + " -22.383769989013672],\n", + " [-22.18718147277832, -22.06329345703125, -22.135696411132812,\n", + " -22.259811401367188],\n", + " [-22.06329345703125, -21.939247131347656, -22.011423110961914,\n", + " -22.135696411132812],\n", + " ...,\n", + " [41.939247131347656, 42.06329345703125, 42.13569641113281,\n", + " 42.01142501831055],\n", + " [42.06329345703125, 42.18718338012695, 42.25981140136719,\n", + " 42.13569641113281],\n", + " [42.18718338012695, 42.310916900634766, 42.38376998901367,\n", + " 42.25981140136719]],\n", + " \n", + " ...,\n", + " \n", + " [[-67.64056396484375, -67.50543212890625, -67.74915313720703,\n", + " -67.88362121582031],\n", + " [-67.50543212890625, -67.36968231201172, -67.61406707763672,\n", + " -67.74915313720703],\n", + " [-67.36968231201172, -67.23330688476562, -67.47835540771484,\n", + " -67.61406707763672],\n", + " ...,\n", + " [87.23330688476562, 87.36968231201172, 87.61406707763672,\n", + " 87.47835540771484],\n", + " [87.36968231201172, 87.50543212890625, 87.74915313720703,\n", + " 87.61406707763672],\n", + " [87.50543212890625, 87.64056396484375, 87.88362121582031,\n", + " 87.74915313720703]],\n", + " \n", + " [[-67.88362121582031, -67.74915313720703, -67.99396514892578,\n", + " -68.12776184082031],\n", + " [-67.74915313720703, -67.61406707763672, -67.85955047607422,\n", + " -67.99396514892578],\n", + " [-67.61406707763672, -67.47835540771484, -67.72451782226562,\n", + " -67.85955047607422],\n", + " ...,\n", + " [87.47835540771484, 87.61406707763672, 87.85955047607422,\n", + " 87.72451782226562],\n", + " [87.61406707763672, 87.74915313720703, 87.99396514892578,\n", + " 87.85955047607422],\n", + " [87.74915313720703, 87.88362121582031, 88.12776184082031,\n", + " 87.99396514892578]],\n", + " \n", + " [[-68.12776184082031, -67.99396514892578, -68.23987579345703,\n", + " -68.37299346923828],\n", + " [-67.99396514892578, -67.85955047607422, -68.10614776611328,\n", + " -68.23987579345703],\n", + " [-67.85955047607422, -67.72451782226562, -67.9718017578125,\n", + " -68.10614776611328],\n", + " ...,\n", + " [87.72451782226562, 87.85955047607422, 88.10614776611328,\n", + " 87.9718017578125],\n", + " [87.85955047607422, 87.99396514892578, 88.23987579345703,\n", + " 88.10614776611328],\n", + " [87.99396514892578, 88.12776184082031, 88.37299346923828,\n", + " 88.23987579345703]]],\n", + " mask=[[[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " ...,\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]]],\n", + " fill_value=1e+20,\n", + " dtype=float32)}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy_1.lon_bnds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.3. Write file with bounds" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rank 000: Creating bounds_file_1.nc\n", + "Rank 000: NetCDF ready to write\n", + "Rank 000: Dimensions done\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable NO was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable NO2 was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable HONO was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable CO was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable CO_GFAS was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable SO2 was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable SO2_GFAS was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable NH3 was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable ALD2 was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable ALDX was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable BENZENE was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable ETH was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable ETHA was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable ETOH was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable FORM was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable IOLE was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable ISOP was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable MEOH was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable OLE was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable PAR was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable SESQ was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable TERP was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable TOL was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable XYL was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable DMS was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable DMS_GFAS was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable HCL was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable POA was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable POA_GFAS was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable PEC was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable PEC_GFAS was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable PNO3 was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable PSO4 was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable PMFINE was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable PMFINE_GFAS was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable PMC was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable EPOA_biomass was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable EPOA_anthro was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable OPOA_biomass was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable OPOA_anthro was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable SOAP_bb was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable SOAP_anthro was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable ECres was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable ECtot was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable TPM_GFAS was not loaded. It will not be written.\n", + " warnings.warn(msg)\n", + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:2111: UserWarning: WARNING!!! Variable cell_area was not loaded. It will not be written.\n", + " warnings.warn(msg)\n" + ] + } + ], + "source": [ + "nessy_1.to_netcdf('bounds_file_1.nc', info=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.4. Reopen with NES" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy_2 = open_netcdf('bounds_file_1.nc', info=True)\n", + "nessy_2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.5. Explore spatial bounds" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'data': masked_array(\n", + " data=[[[16.27358055114746, 16.335533142089844, 16.46847152709961,\n", + " 16.40639305114746],\n", + " [16.335533142089844, 16.397274017333984, 16.530336380004883,\n", + " 16.46847152709961],\n", + " [16.397274017333984, 16.45880126953125, 16.59198760986328,\n", + " 16.530336380004883],\n", + " ...,\n", + " [16.45880126953125, 16.397274017333984, 16.530336380004883,\n", + " 16.59198760986328],\n", + " [16.397274017333984, 16.335533142089844, 16.46847152709961,\n", + " 16.530336380004883],\n", + " [16.335533142089844, 16.27358055114746, 16.40639305114746,\n", + " 16.46847152709961]],\n", + " \n", + " [[16.40639305114746, 16.46847152709961, 16.601383209228516,\n", + " 16.539180755615234],\n", + " [16.46847152709961, 16.530336380004883, 16.663372039794922,\n", + " 16.601383209228516],\n", + " [16.530336380004883, 16.59198760986328, 16.725149154663086,\n", + " 16.663372039794922],\n", + " ...,\n", + " [16.59198760986328, 16.530336380004883, 16.663372039794922,\n", + " 16.725149154663086],\n", + " [16.530336380004883, 16.46847152709961, 16.601383209228516,\n", + " 16.663372039794922],\n", + " [16.46847152709961, 16.40639305114746, 16.539180755615234,\n", + " 16.601383209228516]],\n", + " \n", + " [[16.539180755615234, 16.601383209228516, 16.734270095825195,\n", + " 16.67194175720215],\n", + " [16.601383209228516, 16.663372039794922, 16.796384811401367,\n", + " 16.734270095825195],\n", + " [16.663372039794922, 16.725149154663086, 16.858285903930664,\n", + " 16.796384811401367],\n", + " ...,\n", + " [16.725149154663086, 16.663372039794922, 16.796384811401367,\n", + " 16.858285903930664],\n", + " [16.663372039794922, 16.601383209228516, 16.734270095825195,\n", + " 16.796384811401367],\n", + " [16.601383209228516, 16.539180755615234, 16.67194175720215,\n", + " 16.734270095825195]],\n", + " \n", + " ...,\n", + " \n", + " [[58.31517791748047, 58.429019927978516, 58.50811004638672,\n", + " 58.3941650390625],\n", + " [58.429019927978516, 58.54280090332031, 58.62199783325195,\n", + " 58.50811004638672],\n", + " [58.54280090332031, 58.65652084350586, 58.7358283996582,\n", + " 58.62199783325195],\n", + " ...,\n", + " [58.65652084350586, 58.54280090332031, 58.62199783325195,\n", + " 58.7358283996582],\n", + " [58.54280090332031, 58.429019927978516, 58.50811004638672,\n", + " 58.62199783325195],\n", + " [58.429019927978516, 58.31517791748047, 58.3941650390625,\n", + " 58.50811004638672]],\n", + " \n", + " [[58.3941650390625, 58.50811004638672, 58.586734771728516,\n", + " 58.472686767578125],\n", + " [58.50811004638672, 58.62199783325195, 58.70072937011719,\n", + " 58.586734771728516],\n", + " [58.62199783325195, 58.7358283996582, 58.814666748046875,\n", + " 58.70072937011719],\n", + " ...,\n", + " [58.7358283996582, 58.62199783325195, 58.70072937011719,\n", + " 58.814666748046875],\n", + " [58.62199783325195, 58.50811004638672, 58.586734771728516,\n", + " 58.70072937011719],\n", + " [58.50811004638672, 58.3941650390625, 58.472686767578125,\n", + " 58.586734771728516]],\n", + " \n", + " [[58.472686767578125, 58.586734771728516, 58.664894104003906,\n", + " 58.550743103027344],\n", + " [58.586734771728516, 58.70072937011719, 58.77899169921875,\n", + " 58.664894104003906],\n", + " [58.70072937011719, 58.814666748046875, 58.89303207397461,\n", + " 58.77899169921875],\n", + " ...,\n", + " [58.814666748046875, 58.70072937011719, 58.77899169921875,\n", + " 58.89303207397461],\n", + " [58.70072937011719, 58.586734771728516, 58.664894104003906,\n", + " 58.77899169921875],\n", + " [58.586734771728516, 58.472686767578125, 58.550743103027344,\n", + " 58.664894104003906]]],\n", + " mask=[[[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " ...,\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]]],\n", + " fill_value=1e+20)}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy_2.lat_bnds" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'data': masked_array(\n", + " data=[[[-22.16550636291504, -22.04222297668457, -22.114652633666992,\n", + " -22.238161087036133],\n", + " [-22.04222297668457, -21.918787002563477, -21.990989685058594,\n", + " -22.114652633666992],\n", + " [-21.918787002563477, -21.795194625854492, -21.867170333862305,\n", + " -21.990989685058594],\n", + " ...,\n", + " [41.795196533203125, 41.918785095214844, 41.990989685058594,\n", + " 41.86717224121094],\n", + " [41.918785095214844, 42.0422248840332, 42.114654541015625,\n", + " 41.990989685058594],\n", + " [42.0422248840332, 42.165504455566406, 42.2381591796875,\n", + " 42.114654541015625]],\n", + " \n", + " [[-22.238161087036133, -22.114652633666992, -22.18718147277832,\n", + " -22.310914993286133],\n", + " [-22.114652633666992, -21.990989685058594, -22.06329345703125,\n", + " -22.18718147277832],\n", + " [-21.990989685058594, -21.867170333862305, -21.939247131347656,\n", + " -22.06329345703125],\n", + " ...,\n", + " [41.86717224121094, 41.990989685058594, 42.06329345703125,\n", + " 41.939247131347656],\n", + " [41.990989685058594, 42.114654541015625, 42.18718338012695,\n", + " 42.06329345703125],\n", + " [42.114654541015625, 42.2381591796875, 42.310916900634766,\n", + " 42.18718338012695]],\n", + " \n", + " [[-22.310914993286133, -22.18718147277832, -22.259811401367188,\n", + " -22.383769989013672],\n", + " [-22.18718147277832, -22.06329345703125, -22.135696411132812,\n", + " -22.259811401367188],\n", + " [-22.06329345703125, -21.939247131347656, -22.011423110961914,\n", + " -22.135696411132812],\n", + " ...,\n", + " [41.939247131347656, 42.06329345703125, 42.13569641113281,\n", + " 42.01142501831055],\n", + " [42.06329345703125, 42.18718338012695, 42.25981140136719,\n", + " 42.13569641113281],\n", + " [42.18718338012695, 42.310916900634766, 42.38376998901367,\n", + " 42.25981140136719]],\n", + " \n", + " ...,\n", + " \n", + " [[-67.64056396484375, -67.50543212890625, -67.74915313720703,\n", + " -67.88362121582031],\n", + " [-67.50543212890625, -67.36968231201172, -67.61406707763672,\n", + " -67.74915313720703],\n", + " [-67.36968231201172, -67.23330688476562, -67.47835540771484,\n", + " -67.61406707763672],\n", + " ...,\n", + " [87.23330688476562, 87.36968231201172, 87.61406707763672,\n", + " 87.47835540771484],\n", + " [87.36968231201172, 87.50543212890625, 87.74915313720703,\n", + " 87.61406707763672],\n", + " [87.50543212890625, 87.64056396484375, 87.88362121582031,\n", + " 87.74915313720703]],\n", + " \n", + " [[-67.88362121582031, -67.74915313720703, -67.99396514892578,\n", + " -68.12776184082031],\n", + " [-67.74915313720703, -67.61406707763672, -67.85955047607422,\n", + " -67.99396514892578],\n", + " [-67.61406707763672, -67.47835540771484, -67.72451782226562,\n", + " -67.85955047607422],\n", + " ...,\n", + " [87.47835540771484, 87.61406707763672, 87.85955047607422,\n", + " 87.72451782226562],\n", + " [87.61406707763672, 87.74915313720703, 87.99396514892578,\n", + " 87.85955047607422],\n", + " [87.74915313720703, 87.88362121582031, 88.12776184082031,\n", + " 87.99396514892578]],\n", + " \n", + " [[-68.12776184082031, -67.99396514892578, -68.23987579345703,\n", + " -68.37299346923828],\n", + " [-67.99396514892578, -67.85955047607422, -68.10614776611328,\n", + " -68.23987579345703],\n", + " [-67.85955047607422, -67.72451782226562, -67.9718017578125,\n", + " -68.10614776611328],\n", + " ...,\n", + " [87.72451782226562, 87.85955047607422, 88.10614776611328,\n", + " 87.9718017578125],\n", + " [87.85955047607422, 87.99396514892578, 88.23987579345703,\n", + " 88.10614776611328],\n", + " [87.99396514892578, 88.12776184082031, 88.37299346923828,\n", + " 88.23987579345703]]],\n", + " mask=[[[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " ...,\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]]],\n", + " fill_value=1e+20)}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy_2.lon_bnds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. File without existing bounds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1. Open with NES" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Original path: /gpfs/scratch/bsc32/bsc32538/mr_multiplyby/OUT/stats_bnds/monarch/a45g/regional/daily_max/O3_all/O3_all-000_2021080300.nc\n", "# Rotated grid from MONARCH\n", - "test_path = '/gpfs/projects/bsc32/models/NES_tutorial_data/O3_all-000_2021080300.nc'\n", - "nessy = open_netcdf(path=test_path, info=True)" + "path_3 = '/gpfs/projects/bsc32/models/NES_tutorial_data/O3_all-000_2021080300.nc'\n", + "nessy_3 = open_netcdf(path=path_3, info=True)\n", + "nessy_3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2. Create spatial bounds" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ - "nessy.create_spatial_bounds()" + "nessy_3.create_spatial_bounds()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3. Explore spatial bounds" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -62,150 +929,519 @@ } ], "source": [ - "nessy.load()" + "nessy_3.load()" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 13, "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'data': array([[[16.2203979 , 16.30306824, 16.48028979, 16.39739715],\n", + " [16.30306855, 16.3853609 , 16.56280424, 16.48029011],\n", + " [16.38536121, 16.46727425, 16.64493885, 16.56280455],\n", + " ...,\n", + " [16.46727269, 16.38535964, 16.56280298, 16.64493728],\n", + " [16.3853609 , 16.30306855, 16.48029011, 16.56280424],\n", + " [16.30306824, 16.2203979 , 16.39739715, 16.48028979]],\n", + " \n", + " [[16.39739783, 16.48029047, 16.65746762, 16.57435251],\n", + " [16.48029079, 16.56280491, 16.74020402, 16.65746794],\n", + " [16.56280523, 16.64493952, 16.82256006, 16.74020434],\n", + " ...,\n", + " [16.64493796, 16.56280366, 16.74020276, 16.82255849],\n", + " [16.56280491, 16.48029079, 16.65746794, 16.74020402],\n", + " [16.48029047, 16.39739783, 16.57435251, 16.65746762]],\n", + " \n", + " [[16.57435149, 16.65746661, 16.83459876, 16.751261 ],\n", + " [16.65746692, 16.74020301, 16.91755729, 16.83459908],\n", + " [16.74020332, 16.82255904, 17.00013494, 16.91755761],\n", + " ...,\n", + " [16.82255748, 16.74020175, 16.91755603, 17.00013337],\n", + " [16.74020301, 16.65746692, 16.83459908, 16.91755729],\n", + " [16.65746661, 16.57435149, 16.751261 , 16.83459876]],\n", + " \n", + " ...,\n", + " \n", + " [[58.19210948, 58.34380497, 58.44964444, 58.29776032],\n", + " [58.34380555, 58.49539321, 58.6014247 , 58.44964502],\n", + " [58.49539378, 58.64687141, 58.75309835, 58.60142528],\n", + " ...,\n", + " [58.64686852, 58.49539089, 58.60142239, 58.75309546],\n", + " [58.49539321, 58.34380555, 58.44964502, 58.6014247 ],\n", + " [58.34380497, 58.19210948, 58.29776032, 58.44964444]],\n", + " \n", + " [[58.29776072, 58.44964485, 58.55466327, 58.40259426],\n", + " [58.44964543, 58.6014251 , 58.7066318 , 58.55466385],\n", + " [58.60142568, 58.75309876, 58.85849715, 58.70663238],\n", + " ...,\n", + " [58.75309587, 58.60142279, 58.70662948, 58.85849425],\n", + " [58.6014251 , 58.44964543, 58.55466385, 58.7066318 ],\n", + " [58.44964485, 58.29776072, 58.40259426, 58.55466327]],\n", + " \n", + " [[58.40259366, 58.55466267, 58.65885172, 58.50660166],\n", + " [58.55466325, 58.7066312 , 58.81100467, 58.6588523 ],\n", + " [58.70663178, 58.85849655, 58.96305787, 58.81100525],\n", + " ...,\n", + " [58.85849365, 58.70662888, 58.81100235, 58.96305497],\n", + " [58.7066312 , 58.55466325, 58.6588523 , 58.81100467],\n", + " [58.55466267, 58.40259366, 58.50660166, 58.65885172]]])}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "## 2. Explore variables" + "nessy_3.lat_bnds" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[[16.2203979 , 16.30306824, 16.48028979, 16.39739715],\n", - " [16.30306855, 16.3853609 , 16.56280424, 16.48029011],\n", - " [16.38536121, 16.46727425, 16.64493885, 16.56280455],\n", + "{'data': array([[[-22.21497021, -22.05071303, -22.14733617, -22.31199395],\n", + " [-22.0507124 , -21.88618013, -21.9824008 , -22.14733554],\n", + " [-21.8861795 , -21.72137239, -21.81718872, -21.98240017],\n", + " ...,\n", + " [ 41.72137553, 41.88618264, 41.98240332, 41.81719187],\n", + " [ 41.88618013, 42.0507124 , 42.14733554, 41.9824008 ],\n", + " [ 42.05071303, 42.21497021, 42.31199395, 42.14733617]],\n", + " \n", + " [[-22.31199432, -22.14733654, -22.24413665, -22.4091946 ],\n", + " [-22.14733591, -21.98240117, -22.07879923, -22.24413602],\n", + " [-21.98240054, -21.81718908, -21.91318321, -22.0787986 ],\n", + " ...,\n", + " [ 41.81719223, 41.98240369, 42.07880176, 41.91318637],\n", + " [ 41.98240117, 42.14733591, 42.24413602, 42.07879923],\n", + " [ 42.14733654, 42.31199432, 42.4091946 , 42.24413665]],\n", + " \n", + " [[-22.40919405, -22.2441361 , -22.34111548, -22.50657316],\n", + " [-22.24413547, -22.07879868, -22.17537644, -22.34111485],\n", + " [-22.07879805, -21.91318266, -22.00935688, -22.1753758 ],\n", + " ...,\n", + " [ 41.91318582, 42.07880121, 42.17537897, 42.00936005],\n", + " [ 42.07879868, 42.24413547, 42.34111485, 42.17537644],\n", + " [ 42.2441361 , 42.40919405, 42.50657316, 42.34111548]],\n", + " \n", " ...,\n", - " [16.46727269, 16.38535964, 16.56280298, 16.64493728],\n", - " [16.3853609 , 16.30306855, 16.48029011, 16.56280424],\n", - " [16.30306824, 16.2203979 , 16.39739715, 16.48028979]],\n", - "\n", - " [[16.39739783, 16.48029047, 16.65746762, 16.57435251],\n", - " [16.48029079, 16.56280491, 16.74020402, 16.65746794],\n", - " [16.56280523, 16.64493952, 16.82256006, 16.74020434],\n", - " ...,\n", - " [16.64493796, 16.56280366, 16.74020276, 16.82255849],\n", - " [16.56280491, 16.48029079, 16.65746794, 16.74020402],\n", - " [16.48029047, 16.39739783, 16.57435251, 16.65746762]],\n", - "\n", - " [[16.57435149, 16.65746661, 16.83459876, 16.751261 ],\n", - " [16.65746692, 16.74020301, 16.91755729, 16.83459908],\n", - " [16.74020332, 16.82255904, 17.00013494, 16.91755761],\n", - " ...,\n", - " [16.82255748, 16.74020175, 16.91755603, 17.00013337],\n", - " [16.74020301, 16.65746692, 16.83459908, 16.91755729],\n", - " [16.65746661, 16.57435149, 16.751261 , 16.83459876]],\n", - "\n", - " ...,\n", - "\n", - " [[58.19210948, 58.34380497, 58.44964444, 58.29776032],\n", - " [58.34380555, 58.49539321, 58.6014247 , 58.44964502],\n", - " [58.49539378, 58.64687141, 58.75309835, 58.60142528],\n", - " ...,\n", - " [58.64686852, 58.49539089, 58.60142239, 58.75309546],\n", - " [58.49539321, 58.34380555, 58.44964502, 58.6014247 ],\n", - " [58.34380497, 58.19210948, 58.29776032, 58.44964444]],\n", - "\n", - " [[58.29776072, 58.44964485, 58.55466327, 58.40259426],\n", - " [58.44964543, 58.6014251 , 58.7066318 , 58.55466385],\n", - " [58.60142568, 58.75309876, 58.85849715, 58.70663238],\n", - " ...,\n", - " [58.75309587, 58.60142279, 58.70662948, 58.85849425],\n", - " [58.6014251 , 58.44964543, 58.55466385, 58.7066318 ],\n", - " [58.44964485, 58.29776072, 58.40259426, 58.55466327]],\n", - "\n", - " [[58.40259366, 58.55466267, 58.65885172, 58.50660166],\n", - " [58.55466325, 58.7066312 , 58.81100467, 58.6588523 ],\n", - " [58.70663178, 58.85849655, 58.96305787, 58.81100525],\n", - " ...,\n", - " [58.85849365, 58.70662888, 58.81100235, 58.96305497],\n", - " [58.7066312 , 58.55466325, 58.6588523 , 58.81100467],\n", - " [58.55466267, 58.40259366, 58.50660166, 58.65885172]]])" + " \n", + " [[-67.50645709, -67.32583243, -67.64966627, -67.82912696],\n", + " [-67.32583174, -67.14410165, -67.46910621, -67.64966558],\n", + " [-67.14410095, -66.96124932, -67.28743133, -67.46910552],\n", + " ...,\n", + " [ 86.96125282, 87.14410443, 87.46910897, 87.28743481],\n", + " [ 87.14410165, 87.32583174, 87.64966558, 87.46910621],\n", + " [ 87.32583243, 87.50645709, 87.82912696, 87.64966627]],\n", + " \n", + " [[-67.82912819, -67.64966751, -67.97544812, -68.1537229 ],\n", + " [-67.64966682, -67.46910745, -67.79608108, -67.97544744],\n", + " [-67.46910676, -67.28743258, -67.6156063 , -67.79608039],\n", + " ...,\n", + " [ 87.28743606, 87.46911022, 87.79608382, 87.61560976],\n", + " [ 87.46910745, 87.64966682, 87.97544744, 87.79608108],\n", + " [ 87.64966751, 87.82912819, 88.1537229 , 87.97544812]],\n", + " \n", + " [[-68.15372103, -67.97544625, -68.30317799, -68.48024479],\n", + " [-67.97544557, -67.7960792 , -68.12502637, -68.30317732],\n", + " [-67.79607851, -67.61560442, -67.94577447, -68.12502569],\n", + " ...,\n", + " [ 87.61560787, 87.79608195, 88.1250291 , 87.9457779 ],\n", + " [ 87.7960792 , 87.97544557, 88.30317732, 88.12502637],\n", + " [ 87.97544625, 88.15372103, 88.48024479, 88.30317799]]])}" ] }, - "execution_count": 5, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "nessy.lat_bnds" + "nessy_3.lon_bnds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.4. Write file with bounds" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rank 000: Creating bounds_file_3.nc\n", + "Rank 000: NetCDF ready to write\n", + "Rank 000: Dimensions done\n", + "Rank 000: Writing O3_all var (1/1)\n", + "Rank 000: Var O3_all created (1/1)\n", + "Rank 000: Filling O3_all)\n", + "Rank 000: Var O3_all data (1/1)\n", + "Rank 000: Var O3_all completed (1/1)\n" + ] + } + ], + "source": [ + "nessy_3.to_netcdf('bounds_file_3.nc', info=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.5. Reopen with NES" + ] + }, + { + "cell_type": "code", + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[[-22.21497021, -22.05071303, -22.14733617, -22.31199395],\n", - " [-22.0507124 , -21.88618013, -21.9824008 , -22.14733554],\n", - " [-21.8861795 , -21.72137239, -21.81718872, -21.98240017],\n", - " ...,\n", - " [ 41.72137553, 41.88618264, 41.98240332, 41.81719187],\n", - " [ 41.88618013, 42.0507124 , 42.14733554, 41.9824008 ],\n", - " [ 42.05071303, 42.21497021, 42.31199395, 42.14733617]],\n", - "\n", - " [[-22.31199432, -22.14733654, -22.24413665, -22.4091946 ],\n", - " [-22.14733591, -21.98240117, -22.07879923, -22.24413602],\n", - " [-21.98240054, -21.81718908, -21.91318321, -22.0787986 ],\n", - " ...,\n", - " [ 41.81719223, 41.98240369, 42.07880176, 41.91318637],\n", - " [ 41.98240117, 42.14733591, 42.24413602, 42.07879923],\n", - " [ 42.14733654, 42.31199432, 42.4091946 , 42.24413665]],\n", - "\n", - " [[-22.40919405, -22.2441361 , -22.34111548, -22.50657316],\n", - " [-22.24413547, -22.07879868, -22.17537644, -22.34111485],\n", - " [-22.07879805, -21.91318266, -22.00935688, -22.1753758 ],\n", - " ...,\n", - " [ 41.91318582, 42.07880121, 42.17537897, 42.00936005],\n", - " [ 42.07879868, 42.24413547, 42.34111485, 42.17537644],\n", - " [ 42.2441361 , 42.40919405, 42.50657316, 42.34111548]],\n", - "\n", - " ...,\n", - "\n", - " [[-67.50645709, -67.32583243, -67.64966627, -67.82912696],\n", - " [-67.32583174, -67.14410165, -67.46910621, -67.64966558],\n", - " [-67.14410095, -66.96124932, -67.28743133, -67.46910552],\n", - " ...,\n", - " [ 86.96125282, 87.14410443, 87.46910897, 87.28743481],\n", - " [ 87.14410165, 87.32583174, 87.64966558, 87.46910621],\n", - " [ 87.32583243, 87.50645709, 87.82912696, 87.64966627]],\n", - "\n", - " [[-67.82912819, -67.64966751, -67.97544812, -68.1537229 ],\n", - " [-67.64966682, -67.46910745, -67.79608108, -67.97544744],\n", - " [-67.46910676, -67.28743258, -67.6156063 , -67.79608039],\n", - " ...,\n", - " [ 87.28743606, 87.46911022, 87.79608382, 87.61560976],\n", - " [ 87.46910745, 87.64966682, 87.97544744, 87.79608108],\n", - " [ 87.64966751, 87.82912819, 88.1537229 , 87.97544812]],\n", - "\n", - " [[-68.15372103, -67.97544625, -68.30317799, -68.48024479],\n", - " [-67.97544557, -67.7960792 , -68.12502637, -68.30317732],\n", - " [-67.79607851, -67.61560442, -67.94577447, -68.12502569],\n", - " ...,\n", - " [ 87.61560787, 87.79608195, 88.1250291 , 87.9457779 ],\n", - " [ 87.7960792 , 87.97544557, 88.30317732, 88.12502637],\n", - " [ 87.97544625, 88.15372103, 88.48024479, 88.30317799]]])" + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy_4 = open_netcdf('bounds_file_3.nc', info=True)\n", + "nessy_4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.6. Explore spatial bounds" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'data': masked_array(\n", + " data=[[[16.220397902213396, 16.303068236068505, 16.480289793933082,\n", + " 16.397397154910678],\n", + " [16.30306855071067, 16.38536089516572, 16.56280423641698,\n", + " 16.48029010942229],\n", + " [16.385361208363484, 16.467274252013816, 16.64493884522746,\n", + " 16.56280455045976],\n", + " ...,\n", + " [16.467272693272037, 16.385359642374645, 16.5628029802458,\n", + " 16.64493728227078],\n", + " [16.38536089516572, 16.30306855071067, 16.48029010942229,\n", + " 16.56280423641698],\n", + " [16.303068236068505, 16.220397902213396, 16.397397154910678,\n", + " 16.480289793933082]],\n", + " \n", + " [[16.397397830024588, 16.48029046989534, 16.657467620465567,\n", + " 16.574352506965674],\n", + " [16.48029078538455, 16.5628049132256, 16.740204020393392,\n", + " 16.657467936802462],\n", + " [16.562805227268388, 16.644939522880435, 16.82256005992405,\n", + " 16.740204335281874],\n", + " ...,\n", + " [16.644937959923737, 16.56280365705441, 16.740202760839427,\n", + " 16.822558492749014],\n", + " [16.5628049132256, 16.48029078538455, 16.657467936802462,\n", + " 16.740204020393392],\n", + " [16.48029046989534, 16.397397830024588, 16.574352506965674,\n", + " 16.657467620465567]],\n", + " \n", + " [[16.574351494551546, 16.657466606777945, 16.834598762498768,\n", + " 16.75126100486087],\n", + " [16.657466923114836, 16.740203005435227, 16.917557294312953,\n", + " 16.83459907968401],\n", + " [16.7402033203237, 16.822559043698337, 17.00013494374161,\n", + " 16.9175576100478],\n", + " ...,\n", + " [16.822557476523315, 16.740201745881272, 16.91755603137349,\n", + " 17.000133372344752],\n", + " [16.740203005435227, 16.657466923114836, 16.83459907968401,\n", + " 16.917557294312953],\n", + " [16.657466606777945, 16.574351494551546, 16.75126100486087,\n", + " 16.834598762498768]],\n", + " \n", + " ...,\n", + " \n", + " [[58.19210947966698, 58.34380497289048, 58.44964444401728,\n", + " 58.29776031793852],\n", + " [58.34380555135856, 58.49539320689951, 58.60142470084916,\n", + " 58.44964502321138],\n", + " [58.495393784952064, 58.646871410321715, 58.7530983546572,\n", + " 58.60142527964072],\n", + " ...,\n", + " [58.64686852217872, 58.49539089468928, 58.601422385682845,\n", + " 58.75309546275335],\n", + " [58.49539320689951, 58.34380555135856, 58.44964502321138,\n", + " 58.60142470084916],\n", + " [58.34380497289048, 58.19210947966698, 58.29776031793852,\n", + " 58.44964444401728]],\n", + " \n", + " [[58.297760719410846, 58.44964484620209, 58.55466326772292,\n", + " 58.402594256433474],\n", + " [58.4496454253962, 58.60142510375937, 58.70663179672086,\n", + " 58.554663847628724],\n", + " [58.60142568255093, 58.753098758305896, 58.8584971477072,\n", + " 58.70663237623712],\n", + " ...,\n", + " [58.75309586640205, 58.60142278859304, 58.70662947865572,\n", + " 58.85849425211415],\n", + " [58.60142510375937, 58.4496454253962, 58.554663847628724,\n", + " 58.70663179672086],\n", + " [58.44964484620209, 58.297760719410846, 58.402594256433474,\n", + " 58.55466326772292]],\n", + " \n", + " [[58.40259365892516, 58.55466266916757, 58.65885171699879,\n", + " 58.50660166161425],\n", + " [58.554663249073386, 58.70663119709912, 58.81100467268263,\n", + " 58.65885229760164],\n", + " [58.706631776615396, 58.85849654699951, 58.96305787144377,\n", + " 58.81100525290894],\n", + " ...,\n", + " [58.85849365140645, 58.70662887903401, 58.8110023517774,\n", + " 58.963054972234914],\n", + " [58.70663119709912, 58.554663249073386, 58.65885229760164,\n", + " 58.81100467268263],\n", + " [58.55466266916757, 58.40259365892516, 58.50660166161425,\n", + " 58.65885171699879]]],\n", + " mask=[[[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " ...,\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]]],\n", + " fill_value=1e+20)}" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy_4.lat_bnds" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'data': masked_array(\n", + " data=[[[-22.21497020844106, -22.05071302765748, -22.14733616935655,\n", + " -22.31199395171342],\n", + " [-22.050712400541215, -21.886180131800984, -21.98240080355447,\n", + " -22.147335540708582],\n", + " [-21.88617950363573, -21.72137238587186, -21.817188715117368,\n", + " -21.982400173850465],\n", + " ...,\n", + " [41.72137553193767, 41.886182644461655, 41.982403322370715,\n", + " 41.817191868913255],\n", + " [41.886180131800984, 42.050712400541215, 42.14733554070858,\n", + " 41.982400803554526],\n", + " [42.05071302765748, 42.21497020844106, 42.31199395171342,\n", + " 42.14733616935655]],\n", + " \n", + " [[-22.311994322164878, -22.147336538280683, -22.244136652959696,\n", + " -22.40919460454836],\n", + " [-22.14733590963266, -21.982401170944172, -22.078799234822952,\n", + " -22.244136022781618],\n", + " [-21.982400541240054, -21.817189080965306, -21.91318320664743,\n", + " -22.078798603581617],\n", + " ...,\n", + " [41.81719223476125, 41.982403689760304, 42.07880175978829,\n", + " 41.913186368165896],\n", + " [41.98240117094417, 42.14733590963266, 42.24413602278162,\n", + " 42.07879923482295],\n", + " [42.14733653828068, 42.311994322164935, 42.40919460454836,\n", + " 42.244136652959696]],\n", + " \n", + " [[-22.40919404785444, -22.24413609855435, -22.341115482516443,\n", + " -22.50657316411582],\n", + " [-22.24413546837627, -22.078798682716865, -22.175376436459942,\n", + " -22.34111485080996],\n", + " [-22.078798051475587, -21.913182656851575, -22.009356878042922,\n", + " -22.17537580368287],\n", + " ...,\n", + " [41.91318581837004, 42.078801207682204, 42.175378967568065,\n", + " 42.00936004727629],\n", + " [42.078798682716865, 42.24413546837627, 42.34111485080996,\n", + " 42.17537643645994],\n", + " [42.24413609855435, 42.40919404785444, 42.50657316411582,\n", + " 42.3411154825165]],\n", + " \n", + " ...,\n", + " \n", + " [[-67.50645709267866, -67.3258324302019, -67.64966626624692,\n", + " -67.82912695633217],\n", + " [-67.32583173907523, -67.14410164962646, -67.46910620827077,\n", + " -67.64966557957331],\n", + " [-67.14410095425234, -66.9612493170024, -67.28743133275196,\n", + " -67.46910551737545],\n", + " ...,\n", + " [86.9612528154201, 87.1441044311228, 87.469108971852,\n", + " 87.28743480864733],\n", + " [87.14410164962646, 87.32583173907523, 87.64966557957331,\n", + " 87.46910620827077],\n", + " [87.3258324302019, 87.50645709267866, 87.82912695633217,\n", + " 87.64966626624692]],\n", + " \n", + " [[-67.82912819088853, -67.64966750528527, -67.97544812209401,\n", + " -68.15372289526101],\n", + " [-67.64966681861165, -67.46910745181754, -67.79608107785475,\n", + " -67.97544743995786],\n", + " [-67.46910676092222, -67.28743258083347, -67.61560630362294,\n", + " -67.79608039152396],\n", + " ...,\n", + " [87.28743605672872, 87.46911021539864, 87.79608382317804,\n", + " 87.61560975656079],\n", + " [87.46910745181754, 87.64966681861165, 87.97544743995786,\n", + " 87.79608107785481],\n", + " [87.64966750528527, 87.82912819088853, 88.15372289526101,\n", + " 87.97544812209401]],\n", + " \n", + " [[-68.15372103240003, -67.97544625238419, -68.30317799462358,\n", + " -68.4802447924423],\n", + " [-67.97544557024798, -67.79607920125443, -68.12502637415002,\n", + " -68.30317731710966],\n", + " [-67.79607851492364, -67.61560442009056, -67.94577446945578,\n", + " -68.12502569246982],\n", + " ...,\n", + " [87.61560787302852, 87.79608194657783, 88.12502910087062,\n", + " 87.94577789899824],\n", + " [87.79607920125449, 87.97544557024798, 88.30317731710971,\n", + " 88.12502637415002],\n", + " [87.97544625238413, 88.15372103240003, 88.48024479244236,\n", + " 88.30317799462364]]],\n", + " mask=[[[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " ...,\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]],\n", + " \n", + " [[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " ...,\n", + " [False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]]],\n", + " fill_value=1e+20)}" ] }, - "execution_count": 6, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "nessy.lon_bnds" + "nessy_4.lon_bnds" ] } ],