From 317bede2925e8b1036f8469e35baa46ba0e905ce Mon Sep 17 00:00:00 2001 From: ctena Date: Thu, 21 Apr 2022 20:26:47 +0200 Subject: [PATCH 01/73] First steps in serial done --- .codacy.yml | 21 ++ .gitignore | 1 + .gitlab-ci.yml | 34 ++ .prospector.yml | 36 +++ CHANGELOG.md | 6 + environment.yml | 14 + nes/__init__.py | 5 + nes/nc_projections/__init__.py | 0 nes/nc_projections/default_nes.py | 504 ++++++++++++++++++++++++++++++ nes/nc_projections/rotated_nes.py | 106 +++++++ requirements.txt | 10 + run_test.py | 24 ++ setup.py | 49 +++ tests/basic_nes_tests.py | 54 ++++ tests/test_bash_nord3v2.cmd | 24 ++ 15 files changed, 888 insertions(+) create mode 100755 .codacy.yml create mode 100644 .gitignore create mode 100755 .gitlab-ci.yml create mode 100755 .prospector.yml create mode 100644 CHANGELOG.md create mode 100755 environment.yml create mode 100644 nes/__init__.py create mode 100644 nes/nc_projections/__init__.py create mode 100644 nes/nc_projections/default_nes.py create mode 100644 nes/nc_projections/rotated_nes.py create mode 100644 requirements.txt create mode 100755 run_test.py create mode 100755 setup.py create mode 100644 tests/basic_nes_tests.py create mode 100644 tests/test_bash_nord3v2.cmd diff --git a/.codacy.yml b/.codacy.yml new file mode 100755 index 0000000..0bc0d39 --- /dev/null +++ b/.codacy.yml @@ -0,0 +1,21 @@ +# codacy configuration file + +--- + +engines: + coverage: + enabled: true + metrics: + enabled: true + duplication: + enabled: true + prospector: + enabled: true + pylint: + enabled: true + python_version: 3 + +exclude_paths: [ + 'doc/**', + 'data/**', +] diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..723ef36 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100755 index 0000000..fa94e79 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,34 @@ +before_script: + - export GIT_SSL_NO_VERIFY=1 + - export PATH="$HOME/miniconda2/bin:$PATH" + +stages: + - prepare + - test + - report + - clean + +cache: + paths: + - test/report + +prepare: + stage: prepare + script: + - conda update conda + +test_python3: + stage: test + script: + - git submodule sync --recursive + - git submodule update --init --recursive + - conda env update -f environment.yml -n nes python=3.7 + - source activate nes + - python run_test.py + +clean: + stage: clean + script: + - conda clean --all --yes + + diff --git a/.prospector.yml b/.prospector.yml new file mode 100755 index 0000000..b9c6fa9 --- /dev/null +++ b/.prospector.yml @@ -0,0 +1,36 @@ +# prospector configuration file + +--- + +output-format: grouped + +strictness: veryhigh +doc-warnings: true +test-warnings: true +member-warnings: false + +pyroma: + run: true + +pydocroma: + run: true + +pep8: + disable: [ + E501, # Line-length, already controlled by pylint + ] + +pep257: + run: true + # see http://pep257.readthedocs.io/en/latest/error_codes.html + disable: [ + # For short descriptions it makes sense not to end with a period: + D400, # First line should end with a period + # Disable because not part of PEP257 official convention: + D203, # 1 blank line required before class docstring + D212, # Multi-line docstring summary should start at the first line + D213, # Multi-line docstring summary should start at the second line + D404, # First word of the docstring should not be This + D107, # We are using numpy style and constructor should be documented in class docstring + D105, # Docstring in magic methods should not be required: we all now what they are for + ] diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..9314db3 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,6 @@ +# NES CHANGELOG + +### 0.0.0 + 2022/04/20 + + - Skeleton \ No newline at end of file diff --git a/environment.yml b/environment.yml new file mode 100755 index 0000000..810b716 --- /dev/null +++ b/environment.yml @@ -0,0 +1,14 @@ +--- + +name: nes + +channels: + - conda-forge + - anaconda + +dependencies: + - python = 3 + # Testing + - pytest + - pytest-cov + - pycodestyle \ No newline at end of file diff --git a/nes/__init__.py b/nes/__init__.py new file mode 100644 index 0000000..dd4e494 --- /dev/null +++ b/nes/__init__.py @@ -0,0 +1,5 @@ +__date__ = "2022-MM-DD" +__version__ = "0.0.0" + +from nes.nc_projections.default_nes import Nes, open_netcdf +from nes.nc_projections.rotated_nes import RotatedNes diff --git a/nes/nc_projections/__init__.py b/nes/nc_projections/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py new file mode 100644 index 0000000..e32c260 --- /dev/null +++ b/nes/nc_projections/default_nes.py @@ -0,0 +1,504 @@ +#!/usr/bin/env python + +import sys +import os +import warnings +import numpy as np +from pandas import DataFrame, read_csv +import timeit +from xarray import open_dataset +from netCDF4 import Dataset, num2date, date2num +from mpi4py import MPI +from cfunits import Units +from numpy.ma.core import MaskError +from copy import deepcopy, copy + + +class Nes(object): + def __init__(self, comm=None, path=None, info=False, xarray=False): + """ + Initialize the goddess class + """ + if comm is None: + self.comm = MPI.COMM_WORLD + else: + self.comm = comm + self.rank = self.comm.Get_rank() + self.master = self.rank == 0 + self.size = self.comm.Get_size() + + self.print_info = info + self.is_xarray = xarray + self.__ini_path = path + + if self.__ini_path is not None: + if self.is_xarray: + self.dataset = self.open_dataset() + self.netcdf = None + else: + self.dataset = None + self.netcdf = self.open_netcdf4() + + self.variables = self.get_lazy_variables() + + self.time = self.__get_time() + # self.time = self.get_coordinate_values(self.__time) + self.__lat = self.get_coordinate_dimension(['lat', 'latitude']) + self.__lon = self.get_coordinate_dimension(['lon', 'longitude']) + self.__lev = self.get_coordinate_dimension(['lev', 'level', 'lm']) + + y_len = self.__lat['data'].shape[0] + self.y_min = (y_len // self.size) * self.rank + if self.rank + 1 == self.size: + self.y_max = None + else: + self.y_max = (y_len // self.size) * (self.rank + 1) + + self.lat = self.get_coordinate_values(self.__lat) + self.lon = self.get_coordinate_values(self.__lon) + self.lev = self.get_coordinate_values(self.__lev) + + self.global_attrs = self.get_global_attributes() + else: + self.dataset = None + self.netcdf = None + self.variables = {} + self.time = None + self.__lat = None + self.lat = None + self.__lon = None + self.lon = None + self.__lev = None + self.lev = None + self.y_min = None + self.y_max = None + self.t_min = 0 + + self.compression = 0 + + self.var_dim = None + self.lat_dim = None + self.lon_dim = None + + def __getstate__(self): + d = self.__dict__ + self_dict = {k: d[k] for k in d if k not in ['comm', 'variables']} + return self_dict + + def __setstate__(self, state): + self.__dict__ = state + + def copy(self, copy_vars=False): + self.close() + new = deepcopy(self) + new.open() + if copy_vars: + new.variables = new.get_lazy_variables() + else: + new.variables = {} + return new + + def clear_communicator(self): + self.comm = None + self.rank = 0 + self.master = 0 + self.size = 0 + return True + + def set_communicator(self, comm): + self.comm = comm + self.rank = self.comm.Get_rank() + self.master = self.rank == 0 + self.size = self.comm.Get_size() + return True + + def open(self): + if self.is_xarray: + self.dataset = self.open_dataset() + self.netcdf = None + else: + self.dataset = None + self.netcdf = self.open_netcdf4() + return None + + def open_dataset(self): + if self.master: + warnings.filterwarnings('ignore') # Disabling warnings while reading MONARCH original file + dataset = open_dataset(self.__ini_path, decode_coords='all') + warnings.filterwarnings('default') # Re-activating warnings + else: + dataset = None + dataset = self.comm.bcast(dataset, root=0) + self.dataset = dataset + return dataset + + def open_netcdf4(self, mode='r'): + """ + Open a NetCDF file to be read in the future. + + :param mode: Indicates the mode to open the netCDF. DEFAULT = 'r' (read) + :type mode: str + + :return: NetCDF object + :rtype: Dataset + """ + if self.size == 1: + netcdf = Dataset(self.__ini_path, format="NETCDF4", mode=mode, parallel=False) + else: + netcdf = Dataset(self.__ini_path, format="NETCDF4", mode=mode, parallel=True, comm=self.comm, + info=MPI.Info()) + self.netcdf = netcdf + return netcdf + + def close(self): + if self.netcdf is not None: + self.netcdf.close() + self.netcdf = None + return None + + @staticmethod + def __parse_time_unit(t_units): + """ + Parses the time units to be CF compliant + + :param t_units: Original time units. + :type t_units: str + + :return: CF compliant time units. + :rtype: str + """ + if 'h @' in t_units: + t_units = 'hour since {0}-{1}-{2} {3}:{4}:{5} UTC'.format( + t_units[4:8], t_units[8:10], t_units[10:12], t_units[13:15], t_units[15:17], t_units[17:-4]) + return t_units + + def __get_time(self): + if self.is_xarray: + time = self.variables['time'] + else: + nc_var = self.netcdf.variables['time'] + time = num2date(nc_var[:], self.__parse_time_unit(nc_var.units), calendar=nc_var.calendar) + time = [aux.replace(second=0, microsecond=0) for aux in time] + self.free_vars('time') + return time + + def get_coordinate_dimension(self, possible_names): + if isinstance(possible_names, str): + possible_names = [possible_names] + dimension_name = set(possible_names).intersection(set(self.variables.keys())).pop() + if self.is_xarray: + nc_var = self.dataset[dimension_name] + else: + nc_var = self.variables[dimension_name].copy() + nc_var['data'] = self.netcdf.variables[dimension_name][:] + + self.free_vars(dimension_name) + return nc_var + + def get_coordinate_values(self, coordinate_info): + coordinate_len = len(coordinate_info['data'].shape) + values = deepcopy(coordinate_info) + if coordinate_len == 2: + values['data'] = values['data'][self.y_min:self.y_max] + return values + + def get_lazy_variables(self): + if self.is_xarray: + variables = self.dataset.variables + else: + variables = {} + for var_name, var_info in self.netcdf.variables.items(): + variables[var_name] = {} + variables[var_name]['data'] = None + for attrname in var_info.ncattrs(): + # Avoiding some attributes + if attrname not in ['missing_value', '_FillValue']: + value = getattr(var_info, attrname) + if value == 'unitless': + value = '' + variables[var_name][attrname] = value + + return variables + + def read_variable(self, var_name): + nc_var = self.netcdf.variables[var_name] + var_dims = nc_var.dimensions + if len(var_dims) == 2: + data = nc_var[self.y_min:self.y_max, :] + elif len(var_dims) == 3: + data = nc_var[self.t_min::, self.y_min:self.y_max, :] + elif len(var_dims) == 4: + data = nc_var[self.t_min::, :, self.y_min:self.y_max, :] + elif len(var_dims) == 5: + data = nc_var[self.t_min::, :, :, self.y_min:self.y_max, :] + else: + raise NotImplementedError('Only can be read netCDF with 5 dimensions') + + # Missing to nan + try: + data[data.mask == True] = np.nan + except (AttributeError, MaskError): + pass + return data + + def load(self, varlist=None): + if self.netcdf is None: + self.open_dataset() + close = True + else: + close = False + + if varlist is None: + varlist = list(self.variables.keys()) + + for var_name in varlist: + self.variables[var_name]['data'] = self.read_variable(var_name) + + if close: + self.close() + return True + + def get_global_attributes(self): + gl_attrs = {} + if self.is_xarray: + gl_attrs = self.dataset.attrs + else: + for attrname in self.netcdf.ncattrs(): + gl_attrs[attrname] = getattr(self.netcdf, attrname) + return gl_attrs + + def free_vars(self, var_list): + if isinstance(var_list, str): + var_list = [var_list] + + if self.is_xarray: + self.dataset = self.dataset.drop_vars(var_list) + self.variables = self.get_lazy_variables() + else: + for var_name in var_list: + del self.variables[var_name] + return True + + def keep_vars(self, var_list): + if isinstance(var_list, str): + var_list = [var_list] + + to_remove = list(set(self.variables.keys()).difference(set(var_list))) + + self.free_vars(to_remove) + return True + + def create_dimensions(self, netcdf): + """ + Create the 'lev' and 'time' dimension. + + :param netcdf: NetCDF object. + :type netcdf: Dataset + + :return: True when the writing is finished. + :rtype: bool + """ + netcdf.createDimension('lev', len(self.__lev['data'])) + netcdf.createDimension('time', None) + + return True + + def create_dimension_variables(self, netcdf): + """ + Create the 'lev', 'time', 'lat' and 'lon' variables. + + :param netcdf: NetCDF object. + :type netcdf: Dataset + + :return: True when the writing is finished. + :rtype: bool + """ + # TIMES + time_var = netcdf.createVariable('time', np.float64, ('time',), zlib=self.compression > 0, + complevel=self.compression) + time_var.units = 'hours since {0}'.format(self.time[0].strftime("%Y-%m-%d %H:%M:%S")) + time_var.standard_name = "time" + time_var.calendar = 'standard' + time_var.long_name = "time" + time_var[:] = date2num(self.time, time_var.units, calendar='standard') + + # LEVELS + lev = netcdf.createVariable('lev', np.float64, ('lev',), zlib=self.compression > 0, complevel=self.compression) + lev.units = Units(self.__lev['units'], formatted=True).units + lev.positive = 'up' + lev[:] = self.__lev['data'] + + # LATITUDES + lats = netcdf.createVariable('lat', np.float64, self.lat_dim, zlib=self.compression > 0, + complevel=self.compression) + lats.units = "degrees_north" + lats.axis = "Y" + lats.long_name = "latitude coordinate" + lats.standard_name = "latitude" + lats[:] = self.__lat['data'] + + # LONGITUDES + lons = netcdf.createVariable('lon', np.float64, self.lon_dim, zlib=self.compression > 0, + complevel=self.compression) + lons.units = "degrees_east" + lons.axis = "X" + lons.long_name = "longitude coordinate" + lons.standard_name = "longitude" + lons[:] = self.__lon['data'] + + return True + + def create_variables(self, netcdf): + """ + Create and write the variables of the data_list + + data_list : { + var_name: { + 'data': np.array, + 'var_dims': tuple, + 'chunk_size': tuple, # Mandatory if chunking is selected + arg1: value1, + arg2: ... + }, + var_name2: ... + } + + :param netcdf: NetCDF object. + :type netcdf: Dataset + + :return: True when the writing is finished. + :rtype: bool + """ + for i, (var_name, var_dict) in enumerate(self.variables.items()): + if self.print_info: + print("Rank {0:03d}: Writing {1} var ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) + try: + # if self.chunking: + # var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self.var_dim, + # zlib=self.compression > 0, complevel=self.compression, + # chunksizes=var_dict['chunk_size']) + # else: + var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self.var_dim, + zlib=self.compression > 0, complevel=self.compression) + if self.size > 1: + var.set_collective(True) + + for att_name, att_value in var_dict.items(): + if att_name == 'data': + try: + var[:, :, self.y_min:self.y_max, :] = att_value + except ValueError: + var[:, 0, self.y_min:self.y_max, :] = att_value + # msg = "*WARNING* '{0}' variable is a 3D field. Setting it on first (0) layer.".format( + # var_name) + # warn(msg) + elif att_name not in ['chunk_size', 'var_dims']: + var.setncattr(att_name, att_value) + # self.set_var_crs(var) + except Exception as e: + print("**ERROR** an error hase occur while writing the '{0}' variable".format(var_name)) + print("**ERROR** an error hase occur while writing the '{0}' variable".format(var_name), + file=sys.stderr) + raise e + + return True + + def set_crs(self, netcdf): + """ + Must be implemented on inner class + + :param netcdf: NetCDF object. + :type netcdf: Dataset + + :return: True when the writing is finished. + :rtype: bool + """ + return True + + def to_netcdf_py(self, path): + # Open NetCDF + if self.size > 1: + netcdf = Dataset(path, format="NETCDF4", mode='w', parallel=True, comm=self.comm, info=MPI.Info()) + else: + netcdf = Dataset(path, format="NETCDF4", mode='w', parallel=False) + + # Create Dimensions + self.create_dimensions(netcdf) + + # Create dimension variables + self.create_dimension_variables(netcdf) + + # Create variables + self.create_variables(netcdf) + + # Create metadata + self.set_crs(netcdf) + + # Close NetCDF + if self.global_attrs is not None: + for att_name, att_value in self.global_attrs.items(): + netcdf.setncattr(att_name, att_value) + netcdf.setncattr('Conventions', 'CF-1.7') + + self.comm.Barrier() + netcdf.close() + + return True + + def to_netcdf(self, path, compression_level=0, serial=False, info=False): + old_info = self.print_info + self.print_info = info + + self.compression = compression_level + if self.is_xarray: + pass + else: + if serial: + data = self.gather_data() + if self.master: + new_nc = self.copy(copy_vars=False) + new_nc.set_communicator(MPI.COMM_SELF) + new_nc.variables = data + new_nc.to_netcdf_py(path) + new_nc.close() + else: + self.to_netcdf_py(path) + + self.print_info = old_info + + def gather_data(self): + data_list = deepcopy(self.variables) + for var_name in data_list.keys(): + try: + # noinspection PyArgumentList + data_aux = self.comm.gather(data_list[var_name]['data'], root=0) + if self.rank == 0: + if len(data_list[var_name]['data'].shape) == 2: + axis = 0 + elif len(data_list[var_name]['data'].shape) == 3: + axis = 1 + else: + axis = 2 + data_list[var_name]['data'] = np.concatenate(data_aux, axis=axis) + except Exception as e: + print("**ERROR** an error hase occur while gathering the '{0}' variable".format(var_name)) + sys.stderr.write("**ERROR** an error hase occur while gathering the '{0}' variable".format(var_name)) + print(e) + sys.stderr.write(str(e)) + # print(e, file=sys.stderr) + sys.stderr.flush() + self.comm.Abort(1) + raise e + + return data_list + + +def open_netcdf(path): + # Disabling warnings while reading MONARCH original file + warnings.filterwarnings('ignore') + + nes_nc = Nes(path=path) + + # Re-activating warnings + warnings.filterwarnings('default') + diff --git a/nes/nc_projections/rotated_nes.py b/nes/nc_projections/rotated_nes.py new file mode 100644 index 0000000..941997d --- /dev/null +++ b/nes/nc_projections/rotated_nes.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python + +from nes.nc_projections.default_nes import Nes +from cfunits import Units + + +class RotatedNes(Nes): + def __init__(self, comm=None, path=None, xarray=False): + """ + Initialize the goddess class + """ + super(RotatedNes, self).__init__(comm=comm, path=path, xarray=xarray) + + self.__rlat = self.get_coordinate_dimension('rlat') + self.__rlon = self.get_coordinate_dimension('rlon') + + self.rlat = self.get_coordinate_values(self.__rlat) + self.rlon = self.get_coordinate_values(self.__rlon) + + self.projection_data = self.get_projection_data() + + self.var_dim = ('rlat', 'rlon') + self.lat_dim = ('rlat', 'rlon') + self.lon_dim = ('rlat', 'rlon') + + def get_projection_data(self): + projection = self.variables['rotated_pole'] + self.free_vars('rotated_pole') + return projection + + def create_dimensions(self, netcdf): + """ + Create the 'rlat', 'rlon' dimensions and the super dimensions ('lev', 'time'). + + :param netcdf: NetCDF object. + :type netcdf: Dataset + + :return: True when the writing is finished. + :rtype: bool + """ + netcdf.createDimension('rlat', len(self.__rlat['data'])) + netcdf.createDimension('rlon', len(self.__rlon['data'])) + + super(RotatedNes, self).create_dimensions(netcdf) + + return True + + def create_dimension_variables(self, netcdf): + """ + Create the 'rlat' and 'rlon' variables. + + :param netcdf: NetCDF object. + :type netcdf: Dataset + + :return: True when the writing is finished. + :rtype: bool + """ + + super(RotatedNes, self).create_dimension_variables(netcdf) + + rlat = netcdf.createVariable('rlat', self.__rlat['data'].dtype, ('rlat',)) + rlat.long_name = "latitude in rotated pole grid" + rlat.units = Units("degrees", formatted=True).units + rlat.standard_name = "grid_latitude" + rlat[:] = self.__rlat['data'] + + # Rotated Longitude + rlon = netcdf.createVariable('rlon', self.__rlon['data'].dtype, ('rlon',)) + rlon.long_name = "longitude in rotated pole grid" + rlon.units = Units("degrees", formatted=True).units + rlon.standard_name = "grid_longitude" + rlon[:] = self.__rlon['data'] + + return True + + def set_var_crs(self, var): + """ + Set the grid_mapping to 'rotated_pole'. + + :param var: netCDF var object. + :type var: Variable + + :return: True when the writing is finished. + :rtype: bool + """ + var.grid_mapping = 'rotated_pole' + + return True + + def set_crs(self, netcdf): + """ + Create the 'crs' variable for the rotated latitude longitude grid_mapping. + + :param netcdf: NetCDF object. + :type netcdf: Dataset + + :return: True when the writing is finished. + :rtype: bool + """ + + mapping = netcdf.createVariable('rotated_pole', 'c') + mapping.grid_mapping_name = 'rotated_latitude_longitude' + 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 True diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3525844 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +pycodestyle~=2.8.0 +geopandas~=0.10.2 +pandas~=1.2.2 +netcdf4 +numpy~=1.21.5 +timezonefinder~=5.2.0 +pyproj~=3.2.1 +setuptools~=47.1.0 +pytest~=6.2.5 +Shapely~=1.8.0 \ No newline at end of file diff --git a/run_test.py b/run_test.py new file mode 100755 index 0000000..03a4fe0 --- /dev/null +++ b/run_test.py @@ -0,0 +1,24 @@ +# coding=utf-8 +"""Script to run the tests for goddess and generate the code coverage report""" + +import os +import sys +import pytest + + +work_path = os.path.abspath(os.path.join(os.path.dirname(__file__))) +os.chdir(work_path) +print(work_path) + + +version = sys.version_info[0] +report_dir = 'tests/report/python{}'.format(version) +errno = pytest.main([ + 'tests', + '--ignore=tests/report', + '--cov=nes', + '--cov-report=term', + '--cov-report=html:{}/coverage_html'.format(report_dir), + '--cov-report=xml:{}/coverage.xml'.format(report_dir), +]) +sys.exit(errno) diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..275a93c --- /dev/null +++ b/setup.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python + +from setuptools import find_packages +from setuptools import setup +from nes import __version__ + + +# Get the version number from the relevant file +version = __version__ + +with open("README.md", "r") as f: + long_description = f.read() + +setup( + name='SNES', + # license='', + # platforms=['GNU/Linux Debian'], + version=version, + description='', + long_description=long_description, + long_description_content_type="text/markdown", + author='...', + author_email='...', + url='https://earth.bsc.es/gitlab/es/SNES', + + keywords=['Python', 'post-GIS', 'GIS'], + install_requires=[ + 'configargparse', + ], + packages=find_packages(), + classifiers=[ + "Programming Language :: Python :: 3.7", + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "Operating System :: OS Independent", + "Topic :: Scientific/Engineering :: Atmospheric Science" + ], + package_data={'': [ + 'README.md', + 'CHANGELOG.md', + 'LICENSE', + ] + }, + + entry_points={ + 'console_scripts': [ + 'NetCDF_mask = snes.netCDF_mask:run', + ], + }, +) diff --git a/tests/basic_nes_tests.py b/tests/basic_nes_tests.py new file mode 100644 index 0000000..83f7677 --- /dev/null +++ b/tests/basic_nes_tests.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +import timeit +import sys +from nes import * + +# # Small file +# original_file = "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2008123100.nc" +# Medium file +original_file = "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2021080212.nc" +# # Large file +# original_file = "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2017123000.nc" + +st_time = timeit.default_timer() +# ===== Reading + +nessy = RotatedNes(path=original_file) +nessy.keep_vars(['NO2', 'NO', 'O3', 'NO3']) + +# ===== END Reading +spent_time = timeit.default_timer() - st_time +print("Init time {0:02d}:{1:02.3f} ({2:.3f}s/var)".format( + int(spent_time // 60), spent_time - (int(spent_time // 60) * 60), spent_time / len(nessy.variables.keys()))) +sys.stdout.flush() +# ===== +st_time = timeit.default_timer() +# ===== Loading + +nessy.load() + +# ===== END Loading +spent_time = timeit.default_timer() - st_time +print("Loading time {min:02d}:{sec:02.3f} ({var:.3f}s/var)".format( + min=int(spent_time // 60), sec=spent_time - (int(spent_time // 60) * 60), + var=spent_time / len(nessy.variables.keys()))) +sys.stdout.flush() +# ===== +st_time = timeit.default_timer() +# ===== Parallel Write +nessy.to_netcdf('test_parallel.nc') +# ===== END Parallel Write +spent_time = timeit.default_timer() - st_time +print("Writing in parallel time {0:02d}:{1:02.3f} ({2:.3f}s)".format( + int(spent_time // 60), spent_time - (int(spent_time // 60) * 60), spent_time / len(nessy.variables.keys()))) +sys.stdout.flush() +# ===== + +st_time = timeit.default_timer() +# ===== Serial Write +nessy.to_netcdf('test_serial.nc', serial=True) +# ===== END Serial Write +spent_time = timeit.default_timer() - st_time +print("Writing in serial time {0:02d}:{1:02.3f} ({2:.3f}s)".format( + int(spent_time // 60), spent_time - (int(spent_time // 60) * 60), spent_time / len(nessy.variables.keys()))) +sys.stdout.flush() diff --git a/tests/test_bash_nord3v2.cmd b/tests/test_bash_nord3v2.cmd new file mode 100644 index 0000000..9c5231e --- /dev/null +++ b/tests/test_bash_nord3v2.cmd @@ -0,0 +1,24 @@ +#!/bin/bash + +#SBATCH --qos=debug +#SBATCH -A bsc32 +#SBATCH --cpus-per-task=1 +#SBATCH -n 1 +#SBATCH -t 00:10:00 +#SBATCH -J test_nes +#SBATCH --output=log_NES_%j.out +#SBATCH --error=log_NES_%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.19.0-foss-2019b-Python-3.7.4 + +export PYTHONPATH=/gpfs/scratch/bsc32/bsc32538/NES_tests/NES:${PYTHONPATH} +cd /gpfs/scratch/bsc32/bsc32538/NES_tests/NES/tests + +mpirun -np 1 python basic_nes_tests.py -- GitLab From 02c2b7a242e9415828ab421cecf9fdfab64cc672 Mon Sep 17 00:00:00 2001 From: ctena Date: Mon, 25 Apr 2022 14:29:47 +0200 Subject: [PATCH 02/73] parallel done --- nes/__init__.py | 3 +- nes/load_nes.py | 41 +++++ nes/nc_projections/default_nes.py | 275 +++++++++++++++++------------- nes/nc_projections/latlon_nes.py | 66 +++++++ nes/nc_projections/rotated_nes.py | 41 +++-- tests/basic_nes_tests.py | 143 ++++++++++------ tests/test_bash_mn4.cmd | 27 +++ tests/test_bash_nord3v2.cmd | 17 +- 8 files changed, 414 insertions(+), 199 deletions(-) create mode 100644 nes/load_nes.py create mode 100644 nes/nc_projections/latlon_nes.py create mode 100644 tests/test_bash_mn4.cmd diff --git a/nes/__init__.py b/nes/__init__.py index dd4e494..0086f94 100644 --- a/nes/__init__.py +++ b/nes/__init__.py @@ -1,5 +1,6 @@ __date__ = "2022-MM-DD" __version__ = "0.0.0" -from nes.nc_projections.default_nes import Nes, open_netcdf +from nes.load_nes import open_netcdf +from nes.nc_projections.default_nes import Nes from nes.nc_projections.rotated_nes import RotatedNes diff --git a/nes/load_nes.py b/nes/load_nes.py new file mode 100644 index 0000000..2696a44 --- /dev/null +++ b/nes/load_nes.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python + +import sys +import os +from mpi4py import MPI +from netCDF4 import Dataset +from nes.nc_projections.default_nes import Nes +from nes.nc_projections.rotated_nes import RotatedNes +from nes.nc_projections.latlon_nes import LatLonNes + + +def open_netcdf(path, comm=None, xarray=False, info=False): + if comm is None: + comm = MPI.COMM_WORLD + else: + comm = comm + + if xarray: + dataset = None + else: + if comm.Get_size() == 1: + dataset = Dataset(path, format="NETCDF4", mode='r', parallel=False) + else: + dataset = Dataset(path, format="NETCDF4", mode='r', parallel=True, comm=comm, info=MPI.Info()) + + # Rotated + if is_rotated(dataset): + nessy = RotatedNes(comm=comm, dataset=dataset, xarray=xarray, info=info) + else: + nessy = LatLonNes(comm=comm, dataset=dataset, xarray=xarray, info=info) + + return nessy + + +def is_rotated(dataset): + if 'rotated_pole' in dataset.variables.keys(): + return True + else: + return False + + diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index e32c260..0987cfd 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -15,7 +15,7 @@ from copy import deepcopy, copy class Nes(object): - def __init__(self, comm=None, path=None, info=False, xarray=False): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False): """ Initialize the goddess class """ @@ -30,8 +30,14 @@ class Nes(object): self.print_info = info self.is_xarray = xarray self.__ini_path = path - - if self.__ini_path is not None: + if dataset is not None: + if self.is_xarray: + self.dataset = dataset + self.netcdf = None + else: + self.dataset = None + self.netcdf = dataset + elif self.__ini_path is not None: if self.is_xarray: self.dataset = self.open_dataset() self.netcdf = None @@ -39,59 +45,61 @@ class Nes(object): self.dataset = None self.netcdf = self.open_netcdf4() - self.variables = self.get_lazy_variables() - - self.time = self.__get_time() - # self.time = self.get_coordinate_values(self.__time) - self.__lat = self.get_coordinate_dimension(['lat', 'latitude']) - self.__lon = self.get_coordinate_dimension(['lon', 'longitude']) - self.__lev = self.get_coordinate_dimension(['lev', 'level', 'lm']) + self.variables = self.get_lazy_variables() - y_len = self.__lat['data'].shape[0] - self.y_min = (y_len // self.size) * self.rank - if self.rank + 1 == self.size: - self.y_max = None - else: - self.y_max = (y_len // self.size) * (self.rank + 1) - - self.lat = self.get_coordinate_values(self.__lat) - self.lon = self.get_coordinate_values(self.__lon) - self.lev = self.get_coordinate_values(self.__lev) + self.time = self.__get_time() + # self.time = self.get_coordinate_values(self.__time) + self._lat = self.get_coordinate_dimension(['lat', 'latitude']) + self._lon = self.get_coordinate_dimension(['lon', 'longitude']) + self._lev = self.get_coordinate_dimension(['lev', 'level', 'lm']) - self.global_attrs = self.get_global_attributes() - else: - self.dataset = None - self.netcdf = None - self.variables = {} - self.time = None - self.__lat = None - self.lat = None - self.__lon = None - self.lon = None - self.__lev = None - self.lev = None - self.y_min = None + y_len = self._lat['data'].shape[0] + self.y_min = (y_len // self.size) * self.rank + if self.rank + 1 == self.size: self.y_max = None + else: + self.y_max = (y_len // self.size) * (self.rank + 1) + + self.lat = self.get_coordinate_values(self._lat) + self.lon = self.get_coordinate_values(self._lon) + self.lev = self.get_coordinate_values(self._lev) + + self.global_attrs = self.get_global_attributes() + # else: + # self.dataset = None + # self.netcdf = None + # self.variables = {} + # self.time = None + # self.__lat = None + # self.lat = None + # self.__lon = None + # self.lon = None + # self.__lev = None + # self.lev = None + # self.y_min = None + # self.y_max = None self.t_min = 0 - self.compression = 0 + self.zip_lvl = 0 - self.var_dim = None - self.lat_dim = None - self.lon_dim = None + self.var_dim = ('lat', 'lon') + self.lat_dim = ('lat',) + self.lon_dim = ('lon',) def __getstate__(self): d = self.__dict__ - self_dict = {k: d[k] for k in d if k not in ['comm', 'variables']} + self_dict = {k: d[k] for k in d if k not in ['comm', 'variables', 'netcdf']} return self_dict def __setstate__(self, state): self.__dict__ = state + return None def copy(self, copy_vars=False): - self.close() + # self.close() new = deepcopy(self) - new.open() + new.netcdf = None + # new.open() if copy_vars: new.variables = new.get_lazy_variables() else: @@ -103,14 +111,26 @@ class Nes(object): self.rank = 0 self.master = 0 self.size = 0 - return True + + self.y_min = 0 + self.y_max = 0 + + return None def set_communicator(self, comm): self.comm = comm self.rank = self.comm.Get_rank() self.master = self.rank == 0 self.size = self.comm.Get_size() - return True + + # Update distribution + y_len = self._lat['data'].shape[0] + self.y_min = (y_len // self.size) * self.rank + if self.rank + 1 == self.size: + self.y_max = None + else: + self.y_max = (y_len // self.size) * (self.rank + 1) + return None def open(self): if self.is_xarray: @@ -176,9 +196,13 @@ class Nes(object): if self.is_xarray: time = self.variables['time'] else: - nc_var = self.netcdf.variables['time'] - time = num2date(nc_var[:], self.__parse_time_unit(nc_var.units), calendar=nc_var.calendar) - time = [aux.replace(second=0, microsecond=0) for aux in time] + if self.master: + nc_var = self.netcdf.variables['time'] + time = num2date(nc_var[:], self.__parse_time_unit(nc_var.units), calendar=nc_var.calendar) + time = [aux.replace(second=0, microsecond=0) for aux in time] + else: + time = None + time = self.comm.bcast(time, root=0) self.free_vars('time') return time @@ -186,6 +210,7 @@ class Nes(object): if isinstance(possible_names, str): possible_names = [possible_names] dimension_name = set(possible_names).intersection(set(self.variables.keys())).pop() + if self.is_xarray: nc_var = self.dataset[dimension_name] else: @@ -206,17 +231,21 @@ class Nes(object): if self.is_xarray: variables = self.dataset.variables else: - variables = {} - for var_name, var_info in self.netcdf.variables.items(): - variables[var_name] = {} - variables[var_name]['data'] = None - for attrname in var_info.ncattrs(): - # Avoiding some attributes - if attrname not in ['missing_value', '_FillValue']: - value = getattr(var_info, attrname) - if value == 'unitless': - value = '' - variables[var_name][attrname] = value + if self.master: + variables = {} + for var_name, var_info in self.netcdf.variables.items(): + variables[var_name] = {} + variables[var_name]['data'] = None + for attrname in var_info.ncattrs(): + # Avoiding some attributes + if attrname not in ['missing_value', '_FillValue']: + value = getattr(var_info, attrname) + if value == 'unitless': + value = '' + variables[var_name][attrname] = value + else: + variables = None + variables = self.comm.bcast(variables, root=0) return variables @@ -251,8 +280,12 @@ class Nes(object): if varlist is None: varlist = list(self.variables.keys()) - for var_name in varlist: + for i, var_name in enumerate(varlist): + if self.print_info: + print("Rank {0:03d}: Loading {1} var ({2}/{3})".format(self.rank, var_name, i + 1, len(varlist))) self.variables[var_name]['data'] = self.read_variable(var_name) + if self.print_info: + print("Rank {0:03d}: Loaded {1} var ({2})".format(self.rank, var_name, self.variables[var_name]['data'].shape)) if close: self.close() @@ -298,8 +331,9 @@ class Nes(object): :return: True when the writing is finished. :rtype: bool """ - netcdf.createDimension('lev', len(self.__lev['data'])) - netcdf.createDimension('time', None) + # netcdf.createDimension('time', None) + netcdf.createDimension('time', len(self.time)) + netcdf.createDimension('lev', len(self._lev['data'])) return True @@ -314,74 +348,68 @@ class Nes(object): :rtype: bool """ # TIMES - time_var = netcdf.createVariable('time', np.float64, ('time',), zlib=self.compression > 0, - complevel=self.compression) + time_var = netcdf.createVariable('time', np.float64, ('time',), zlib=self.zip_lvl > 0, + complevel=self.zip_lvl) time_var.units = 'hours since {0}'.format(self.time[0].strftime("%Y-%m-%d %H:%M:%S")) time_var.standard_name = "time" time_var.calendar = 'standard' time_var.long_name = "time" + if self.size > 1: + time_var.set_collective(True) time_var[:] = date2num(self.time, time_var.units, calendar='standard') # LEVELS - lev = netcdf.createVariable('lev', np.float64, ('lev',), zlib=self.compression > 0, complevel=self.compression) - lev.units = Units(self.__lev['units'], formatted=True).units + lev = netcdf.createVariable('lev', np.float64, ('lev',), zlib=self.zip_lvl > 0, complevel=self.zip_lvl) + lev.units = Units(self._lev['units'], formatted=True).units lev.positive = 'up' - lev[:] = self.__lev['data'] + if self.size > 1: + lev.set_collective(True) + lev[:] = self._lev['data'] # LATITUDES - lats = netcdf.createVariable('lat', np.float64, self.lat_dim, zlib=self.compression > 0, - complevel=self.compression) + lats = netcdf.createVariable('lat', np.float64, self.lat_dim, zlib=self.zip_lvl > 0, complevel=self.zip_lvl) lats.units = "degrees_north" lats.axis = "Y" lats.long_name = "latitude coordinate" lats.standard_name = "latitude" - lats[:] = self.__lat['data'] + if self.size > 1: + lats.set_collective(True) + lats[:] = self._lat['data'] # LONGITUDES - lons = netcdf.createVariable('lon', np.float64, self.lon_dim, zlib=self.compression > 0, - complevel=self.compression) + lons = netcdf.createVariable('lon', np.float64, self.lon_dim, zlib=self.zip_lvl > 0, complevel=self.zip_lvl) lons.units = "degrees_east" lons.axis = "X" lons.long_name = "longitude coordinate" lons.standard_name = "longitude" - lons[:] = self.__lon['data'] - - return True - - def create_variables(self, netcdf): - """ - Create and write the variables of the data_list - - data_list : { - var_name: { - 'data': np.array, - 'var_dims': tuple, - 'chunk_size': tuple, # Mandatory if chunking is selected - arg1: value1, - arg2: ... - }, - var_name2: ... - } + if self.size > 1: + lons.set_collective(True) + lons[:] = self._lon['data'] - :param netcdf: NetCDF object. - :type netcdf: Dataset + return None - :return: True when the writing is finished. - :rtype: bool - """ + def create_variables(self, netcdf, chunking=False): for i, (var_name, var_dict) in enumerate(self.variables.items()): if self.print_info: print("Rank {0:03d}: Writing {1} var ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) try: - # if self.chunking: - # var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self.var_dim, - # zlib=self.compression > 0, complevel=self.compression, - # chunksizes=var_dict['chunk_size']) - # else: - var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self.var_dim, - zlib=self.compression > 0, complevel=self.compression) + if not chunking: + var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self.var_dim, + zlib=self.zip_lvl > 0, complevel=self.zip_lvl) + else: + if self.master: + chunk_size = var_dict['data'].shape + else: + chunk_size = None + chunk_size = self.comm.bcast(chunk_size, root=0) + var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self.var_dim, + zlib=self.zip_lvl > 0, complevel=self.zip_lvl, chunksizes=chunk_size) + if self.print_info: + print("Rank {0:03d}: Var {1} created ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) if self.size > 1: var.set_collective(True) + if self.print_info: + print("Rank {0:03d}: Var {1} collective ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) for att_name, att_value in var_dict.items(): if att_name == 'data': @@ -392,13 +420,19 @@ class Nes(object): # msg = "*WARNING* '{0}' variable is a 3D field. Setting it on first (0) layer.".format( # var_name) # warn(msg) + if self.print_info: + print("Rank {0:03d}: Var {1} data ({2}/{3})".format(self.rank, var_name, i + 1, + len(self.variables))) elif att_name not in ['chunk_size', 'var_dims']: var.setncattr(att_name, att_value) + if self.print_info: + print("Rank {0:03d}: Var {1} completed ({2}/{3})".format(self.rank, var_name, i + 1, + len(self.variables))) # self.set_var_crs(var) except Exception as e: print("**ERROR** an error hase occur while writing the '{0}' variable".format(var_name)) - print("**ERROR** an error hase occur while writing the '{0}' variable".format(var_name), - file=sys.stderr) + # print("**ERROR** an error hase occur while writing the '{0}' variable".format(var_name), + # file=sys.stderr) raise e return True @@ -413,23 +447,27 @@ class Nes(object): :return: True when the writing is finished. :rtype: bool """ - return True + return None - def to_netcdf_py(self, path): + def to_netcdf_py(self, path, chunking=False): # Open NetCDF + if self.print_info: + print("Rank {0:03d}: Creating {1}".format(self.rank, path)) if self.size > 1: netcdf = Dataset(path, format="NETCDF4", mode='w', parallel=True, comm=self.comm, info=MPI.Info()) else: netcdf = Dataset(path, format="NETCDF4", mode='w', parallel=False) - + if self.print_info: + print("Rank {0:03d}: NetCDF ready to write".format(self.rank)) # Create Dimensions self.create_dimensions(netcdf) - # Create dimension variables self.create_dimension_variables(netcdf) + if self.print_info: + print("Rank {0:03d}: Dimensions done".format(self.rank)) # Create variables - self.create_variables(netcdf) + self.create_variables(netcdf, chunking=chunking) # Create metadata self.set_crs(netcdf) @@ -443,29 +481,31 @@ class Nes(object): self.comm.Barrier() netcdf.close() - return True + return None - def to_netcdf(self, path, compression_level=0, serial=False, info=False): + def to_netcdf(self, path, compression_level=0, serial=False, info=False, chunking=False): old_info = self.print_info self.print_info = info - self.compression = compression_level + self.zip_lvl = compression_level if self.is_xarray: pass else: - if serial: + # if serial: + if serial and self.size > 1: data = self.gather_data() if self.master: new_nc = self.copy(copy_vars=False) new_nc.set_communicator(MPI.COMM_SELF) new_nc.variables = data new_nc.to_netcdf_py(path) - new_nc.close() else: - self.to_netcdf_py(path) + self.to_netcdf_py(path, chunking=chunking) self.print_info = old_info + return None + def gather_data(self): data_list = deepcopy(self.variables) for var_name in data_list.keys(): @@ -491,14 +531,3 @@ class Nes(object): raise e return data_list - - -def open_netcdf(path): - # Disabling warnings while reading MONARCH original file - warnings.filterwarnings('ignore') - - nes_nc = Nes(path=path) - - # Re-activating warnings - warnings.filterwarnings('default') - diff --git a/nes/nc_projections/latlon_nes.py b/nes/nc_projections/latlon_nes.py new file mode 100644 index 0000000..34e369b --- /dev/null +++ b/nes/nc_projections/latlon_nes.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python + +from nes.nc_projections.default_nes import Nes + + +class LatLonNes(Nes): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False): + """ + Initialize the goddess class + """ + super(LatLonNes, self).__init__(comm=comm, path=path, info=info, dataset=dataset, xarray=xarray) + + self.var_dim = ('lat', 'lon') + self.lat_dim = ('lat',) + self.lon_dim = ('lon',) + + def create_dimensions(self, netcdf): + """ + Create the 'rlat', 'rlon' dimensions and the super dimensions ('lev', 'time'). + + :param netcdf: NetCDF object. + :type netcdf: Dataset + + :return: True when the writing is finished. + :rtype: bool + """ + super(LatLonNes, self).create_dimensions(netcdf) + + netcdf.createDimension('lon', len(self._lon['data'])) + netcdf.createDimension('lat', len(self._lat['data'])) + + return None + + @staticmethod + def set_var_crs(var): + """ + Set the grid_mapping to 'rotated_pole'. + + :param var: netCDF var object. + :type var: Variable + + :return: True when the writing is finished. + :rtype: bool + """ + var.grid_mapping = 'crs' + + return None + + def set_crs(self, netcdf): + """ + Create the 'crs' variable for the rotated latitude longitude grid_mapping. + + :param netcdf: NetCDF object. + :type netcdf: Dataset + + :return: True when the writing is finished. + :rtype: bool + """ + + mapping = netcdf.createVariable('crs', 'c') + # mapping = netcdf.createVariable('crs', 'i') + mapping.grid_mapping_name = "latitude_longitude" + mapping.semi_major_axis = 6371000.0 + mapping.inverse_flattening = 0 + + return None diff --git a/nes/nc_projections/rotated_nes.py b/nes/nc_projections/rotated_nes.py index 941997d..f3bee17 100644 --- a/nes/nc_projections/rotated_nes.py +++ b/nes/nc_projections/rotated_nes.py @@ -5,17 +5,17 @@ from cfunits import Units class RotatedNes(Nes): - def __init__(self, comm=None, path=None, xarray=False): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False): """ Initialize the goddess class """ - super(RotatedNes, self).__init__(comm=comm, path=path, xarray=xarray) + super(RotatedNes, self).__init__(comm=comm, path=path, info=info, dataset=dataset, xarray=xarray) - self.__rlat = self.get_coordinate_dimension('rlat') - self.__rlon = self.get_coordinate_dimension('rlon') + self._rlat = self.get_coordinate_dimension('rlat') + self._rlon = self.get_coordinate_dimension('rlon') - self.rlat = self.get_coordinate_values(self.__rlat) - self.rlon = self.get_coordinate_values(self.__rlon) + self.rlat = self.get_coordinate_values(self._rlat) + self.rlon = self.get_coordinate_values(self._rlon) self.projection_data = self.get_projection_data() @@ -38,12 +38,12 @@ class RotatedNes(Nes): :return: True when the writing is finished. :rtype: bool """ - netcdf.createDimension('rlat', len(self.__rlat['data'])) - netcdf.createDimension('rlon', len(self.__rlon['data'])) - super(RotatedNes, self).create_dimensions(netcdf) - return True + netcdf.createDimension('rlon', len(self._rlon['data'])) + netcdf.createDimension('rlat', len(self._rlat['data'])) + + return None def create_dimension_variables(self, netcdf): """ @@ -58,22 +58,27 @@ class RotatedNes(Nes): super(RotatedNes, self).create_dimension_variables(netcdf) - rlat = netcdf.createVariable('rlat', self.__rlat['data'].dtype, ('rlat',)) + rlat = netcdf.createVariable('rlat', self._rlat['data'].dtype, ('rlat',)) rlat.long_name = "latitude in rotated pole grid" rlat.units = Units("degrees", formatted=True).units rlat.standard_name = "grid_latitude" - rlat[:] = self.__rlat['data'] + if self.size > 1: + rlat.set_collective(True) + rlat[:] = self._rlat['data'] # Rotated Longitude - rlon = netcdf.createVariable('rlon', self.__rlon['data'].dtype, ('rlon',)) + rlon = netcdf.createVariable('rlon', self._rlon['data'].dtype, ('rlon',)) rlon.long_name = "longitude in rotated pole grid" rlon.units = Units("degrees", formatted=True).units rlon.standard_name = "grid_longitude" - rlon[:] = self.__rlon['data'] + if self.size > 1: + rlon.set_collective(True) + rlon[:] = self._rlon['data'] - return True + return None - def set_var_crs(self, var): + @staticmethod + def set_var_crs(var): """ Set the grid_mapping to 'rotated_pole'. @@ -85,7 +90,7 @@ class RotatedNes(Nes): """ var.grid_mapping = 'rotated_pole' - return True + return None def set_crs(self, netcdf): """ @@ -103,4 +108,4 @@ class RotatedNes(Nes): 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 True + return None diff --git a/tests/basic_nes_tests.py b/tests/basic_nes_tests.py index 83f7677..d9e1bf2 100644 --- a/tests/basic_nes_tests.py +++ b/tests/basic_nes_tests.py @@ -2,53 +2,98 @@ import timeit import sys from nes import * +import pandas as pd +# from mpi4py import MPI -# # Small file -# original_file = "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2008123100.nc" -# Medium file -original_file = "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2021080212.nc" -# # Large file -# original_file = "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2017123000.nc" - -st_time = timeit.default_timer() -# ===== Reading - -nessy = RotatedNes(path=original_file) -nessy.keep_vars(['NO2', 'NO', 'O3', 'NO3']) - -# ===== END Reading -spent_time = timeit.default_timer() - st_time -print("Init time {0:02d}:{1:02.3f} ({2:.3f}s/var)".format( - int(spent_time // 60), spent_time - (int(spent_time // 60) * 60), spent_time / len(nessy.variables.keys()))) -sys.stdout.flush() -# ===== -st_time = timeit.default_timer() -# ===== Loading - -nessy.load() - -# ===== END Loading -spent_time = timeit.default_timer() - st_time -print("Loading time {min:02d}:{sec:02.3f} ({var:.3f}s/var)".format( - min=int(spent_time // 60), sec=spent_time - (int(spent_time // 60) * 60), - var=spent_time / len(nessy.variables.keys()))) -sys.stdout.flush() -# ===== -st_time = timeit.default_timer() -# ===== Parallel Write -nessy.to_netcdf('test_parallel.nc') -# ===== END Parallel Write -spent_time = timeit.default_timer() - st_time -print("Writing in parallel time {0:02d}:{1:02.3f} ({2:.3f}s)".format( - int(spent_time // 60), spent_time - (int(spent_time // 60) * 60), spent_time / len(nessy.variables.keys()))) -sys.stdout.flush() -# ===== - -st_time = timeit.default_timer() -# ===== Serial Write -nessy.to_netcdf('test_serial.nc', serial=True) -# ===== END Serial Write -spent_time = timeit.default_timer() - st_time -print("Writing in serial time {0:02d}:{1:02.3f} ({2:.3f}s)".format( - int(spent_time // 60), spent_time - (int(spent_time // 60) * 60), spent_time / len(nessy.variables.keys()))) -sys.stdout.flush() +test_list = [{'in_file': "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2008123100.nc", + 'prefix': 'small'}, + {'in_file': "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2021080212.nc", + 'prefix': 'medium'}, + {'in_file': "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2017123000.nc", + 'prefix': 'large'}, + ] + +times = pd.DataFrame(index=[0]) +# size = MPI.COMM_WORLD.Get_size() + +for test in test_list: + # ====================================================================================================================== + + st_time = timeit.default_timer() + # ===== Reading + nessy = open_netcdf(path=test['in_file']) + size = nessy.size + if nessy.master: + print("\n=====", test['prefix'], "=====") + + nessy.keep_vars(['O3', 'T', 'U', 'V', 'layer_thickness']) + # nessy.keep_vars(['O3']) + # ===== END Reading + spent_time = timeit.default_timer() - st_time + if nessy.master: + print("Init time {0:02d}:{1:02.3f} (tot: {2:.3f} s)".format( + int(spent_time // 60), spent_time - (int(spent_time // 60) * 60), spent_time)) + sys.stdout.flush() + times["{0}_Init".format(test['prefix'])] = spent_time + + # ====================================================================================================================== + + st_time = timeit.default_timer() + # ===== Loading + nessy.load() + # ===== END Loading + spent_time = timeit.default_timer() - st_time + if nessy.master: + print("Loading time {min:02d}:{sec:02.3f} (tot: {tot:.3f} s ; var: {var:.3f}s/var)".format( + min=int(spent_time // 60), sec=spent_time - (int(spent_time // 60) * 60), + var=spent_time / len(nessy.variables.keys()), tot=spent_time)) + sys.stdout.flush() + times["{0}_Load".format(test['prefix'])] = spent_time + + # ====================================================================================================================== + + if test['prefix'] not in ['large']: + st_time = timeit.default_timer() + # ===== Serial Write + nessy.to_netcdf('nc_test_{0}_{1}_serial.nc'.format(test['prefix'], nessy.size), serial=True) + # ===== END Serial Write + spent_time = timeit.default_timer() - st_time + if nessy.master: + print("Writing in serial time {min:02d}:{sec:02.3f} (tot: {tot:.3f} s ; var: {var:.3f}s/var)".format( + min=int(spent_time // 60), sec=spent_time - (int(spent_time // 60) * 60), + var=spent_time / len(nessy.variables.keys()), tot=spent_time)) + sys.stdout.flush() + times["{0}_Serial".format(test['prefix'])] = spent_time + + # ====================================================================================================================== + + st_time = timeit.default_timer() + # ===== Parallel Chunk Write + nessy.to_netcdf('nc_test_{0}_{1}_parallel_chunked.nc'.format(test['prefix'], nessy.size), chunking=True) + # ===== END Parallel Chunk Write + spent_time = timeit.default_timer() - st_time + if nessy.master: + print("Writing in chunked parallel time {min:02d}:{sec:02.3f} (tot: {tot:.3f} s ; var: {var:.3f}s/var)".format( + min=int(spent_time // 60), sec=spent_time - (int(spent_time // 60) * 60), + var=spent_time / len(nessy.variables.keys()), tot=spent_time)) + sys.stdout.flush() + times["{0}_Chunk".format(test['prefix'])] = spent_time + + # ====================================================================================================================== + + st_time = timeit.default_timer() + # ===== Parallel Write + nessy.to_netcdf('nc_test_{0}_{1}_parallel.nc'.format(test['prefix'], nessy.size)) + # ===== END Parallel Write + spent_time = timeit.default_timer() - st_time + if nessy.master: + print("Writing in parallel time {min:02d}:{sec:02.3f} (tot: {tot:.3f} s ; var: {var:.3f}s/var)".format( + min=int(spent_time // 60), sec=spent_time - (int(spent_time // 60) * 60), + var=spent_time / len(nessy.variables.keys()), tot=spent_time)) + sys.stdout.flush() + times["{0}_Parallel".format(test['prefix'])] = spent_time + + # ====================================================================================================================== + + +times.to_csv("times_{0}.csv".format(str(size).zfill(3))) diff --git a/tests/test_bash_mn4.cmd b/tests/test_bash_mn4.cmd new file mode 100644 index 0000000..3f41d54 --- /dev/null +++ b/tests/test_bash_mn4.cmd @@ -0,0 +1,27 @@ +#!/bin/bash + +#SBATCH --qos=debug +#SBATCH -A bsc32 +#SBATCH --cpus-per-task=1 +#SBATCH -n 96 +#SBATCH -t 00:30:00 +#SBATCH -J test_nes +#SBATCH --output=log_mn4_NES_%j.out +#SBATCH --error=log_mn4_NES_%j.err +#SBATCH --exclusive + +### ulimit -s 128000 + +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 + +export PYTHONPATH=/gpfs/scratch/bsc32/bsc32538/NES_tests/NES:${PYTHONPATH} +cd /gpfs/scratch/bsc32/bsc32538/NES_tests/NES/tests + +mpirun --mca mpi_warn_on_fork 0 -np 96 python basic_nes_tests.py diff --git a/tests/test_bash_nord3v2.cmd b/tests/test_bash_nord3v2.cmd index 9c5231e..82de447 100644 --- a/tests/test_bash_nord3v2.cmd +++ b/tests/test_bash_nord3v2.cmd @@ -1,24 +1,25 @@ #!/bin/bash -#SBATCH --qos=debug +####SBATCH --qos=debug #SBATCH -A bsc32 #SBATCH --cpus-per-task=1 -#SBATCH -n 1 -#SBATCH -t 00:10:00 +#SBATCH -n 144 +#SBATCH -t 00:30:00 #SBATCH -J test_nes -#SBATCH --output=log_NES_%j.out -#SBATCH --error=log_NES_%j.err +#SBATCH --output=log_nord3v2_NES_%j.out +#SBATCH --error=log_nord3v2_NES_%j.err #SBATCH --exclusive -#ulimit -s 128000 +### 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.19.0-foss-2019b-Python-3.7.4 +module load xarray/0.17.0-foss-2019b-Python-3.7.4 export PYTHONPATH=/gpfs/scratch/bsc32/bsc32538/NES_tests/NES:${PYTHONPATH} cd /gpfs/scratch/bsc32/bsc32538/NES_tests/NES/tests -mpirun -np 1 python basic_nes_tests.py +mpirun --mca mpi_warn_on_fork 0 -np 144 python basic_nes_tests.py -- GitLab From 0fa6efd179b00d8cffe6ffcd60327f1b88ee0236 Mon Sep 17 00:00:00 2001 From: ctena Date: Wed, 27 Apr 2022 18:22:17 +0200 Subject: [PATCH 03/73] parallel throw X, Y & T axis done. --- Jupyter_notebooks/Jupyter_bash_nord3v2.cmd | 38 ++ nes/__init__.py | 2 - nes/load_nes.py | 57 +- nes/nc_projections/default_nes.py | 675 ++++++++++++++++----- nes/nc_projections/latlon_nes.py | 70 ++- nes/nc_projections/rotated_nes.py | 95 +-- setup.py | 4 +- tests/basic_nes_tests.py | 19 +- tests/test_bash_mn4.cmd | 4 +- tests/test_bash_nord3v2.cmd | 4 +- 10 files changed, 732 insertions(+), 236 deletions(-) create mode 100644 Jupyter_notebooks/Jupyter_bash_nord3v2.cmd diff --git a/Jupyter_notebooks/Jupyter_bash_nord3v2.cmd b/Jupyter_notebooks/Jupyter_bash_nord3v2.cmd new file mode 100644 index 0000000..256a6b0 --- /dev/null +++ b/Jupyter_notebooks/Jupyter_bash_nord3v2.cmd @@ -0,0 +1,38 @@ +#!/bin/bash +#SBATCH --ntasks 1 +#SBATCH --time 03:00:00 +#SBATCH --job-name jupyter-notebook +#SBATCH --output log_jupyter-notebook-%J.out +#SBATCH --error log_jupyter-notebook-%J.err +#SBATCH --exclusive + +# get tunneling info +XDG_RUNTIME_DIR="" +port=$(shuf -i8000-9999 -n1) +node=$(hostname -s) +user=$(whoami) + +# print tunneling instructions jupyter-log +echo -e " + +MacOS or linux terminal command to create your ssh tunnel +ssh -N -L ${port}:${node}:${port} ${user}@nord4.bsc.es + +Use a Browser on your local machine to go to: +localhost:${port} (prefix w/ https:// if using password) +" + +# load modules or conda environments here +module load jupyterlab/3.0.9-foss-2019b-Python-3.7.4 +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.19.0-foss-2019b-Python-3.7.4 + +export PYTHONPATH=/gpfs/scratch/bsc32/bsc32538/NES_tests/NES:${PYTHONPATH} +export PYTHONPATH=/gpfs/scratch/bsc32/bsc32538/SNES_tests/NES/nes:${PYTHONPATH} + + +# DON'T USE ADDRESS BELOW. +# DO USE TOKEN BELOW +jupyter-lab --no-browser --port=${port} --ip=${node} diff --git a/nes/__init__.py b/nes/__init__.py index 0086f94..ec5b69a 100644 --- a/nes/__init__.py +++ b/nes/__init__.py @@ -2,5 +2,3 @@ __date__ = "2022-MM-DD" __version__ = "0.0.0" from nes.load_nes import open_netcdf -from nes.nc_projections.default_nes import Nes -from nes.nc_projections.rotated_nes import RotatedNes diff --git a/nes/load_nes.py b/nes/load_nes.py index 2696a44..53d4448 100644 --- a/nes/load_nes.py +++ b/nes/load_nes.py @@ -9,7 +9,31 @@ from nes.nc_projections.rotated_nes import RotatedNes from nes.nc_projections.latlon_nes import LatLonNes -def open_netcdf(path, comm=None, xarray=False, info=False): +def open_netcdf(path, comm=None, xarray=False, info=False, spinup_h=0, parallel_method='Y'): + """ + Open a netCDF file + + Parameters + ---------- + path : str + Path to the NetCDF file to read + comm : MPI.COMM + MPI communicator to use in that netCDF. Default: MPI.COMM_WORLD + xarray : bool + (Not working) Indicates if you want to use xarray. Default: False + info : bool + Indicates if you want to print (stdout) the reading/writing steps + spinup_h : int + Number of hours to remove from time. + parallel_method : str + Indicates the parallelization method that you want. Default: 'Y' (over Y axis) + accepted values: ['X', 'Y', 'T'] + + Returns + ------- + nessy : Nes + Nes object. Variables read in lazy mode (only metadata) + """ if comm is None: comm = MPI.COMM_WORLD else: @@ -24,15 +48,38 @@ def open_netcdf(path, comm=None, xarray=False, info=False): dataset = Dataset(path, format="NETCDF4", mode='r', parallel=True, comm=comm, info=MPI.Info()) # Rotated - if is_rotated(dataset): - nessy = RotatedNes(comm=comm, dataset=dataset, xarray=xarray, info=info) + if __is_rotated(dataset): + nessy = RotatedNes(comm=comm, + dataset=dataset, + xarray=xarray, + info=info, + spinup_h=spinup_h, + parallel_method=parallel_method) else: - nessy = LatLonNes(comm=comm, dataset=dataset, xarray=xarray, info=info) + nessy = LatLonNes(comm=comm, + dataset=dataset, + xarray=xarray, + info=info, + spinup_h=spinup_h, + parallel_method=parallel_method) return nessy -def is_rotated(dataset): +def __is_rotated(dataset): + """ + Check if the netCDF is in rotated pole projection or not. + + Parameters + ---------- + dataset : Dataset + netcdf4-python opened dataset object + + Returns + ------- + value : bool + Indicated if the netCDF is a rotated one + """ if 'rotated_pole' in dataset.variables.keys(): return True else: diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index 0987cfd..1d162b9 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -11,14 +11,33 @@ from netCDF4 import Dataset, num2date, date2num from mpi4py import MPI from cfunits import Units from numpy.ma.core import MaskError -from copy import deepcopy, copy +from copy import deepcopy class Nes(object): - def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, spinup_h=0, parallel_method='Y'): """ - Initialize the goddess class + Initialize the Nes class + + Parameters + ---------- + comm: MPI.COMM + Path to the CSV file that contains all the information. + path: str + Path to the NetCDF to initialize the object + info: bool + Indicates if you want to get reading/writing info + dataset: Dataset + NetCDF4-python Dataset to initialize the class + xarray: bool: + (Not working) Indicates if you want to use xarray as default + spinup_h : int + Number of hours to remove from time. + parallel_method : str + Indicates the parallelization method that you want. Default over Y axis + accepted values: ['Y', 'T'] """ + # MPI Initialization if comm is None: self.comm = MPI.COMM_WORLD else: @@ -27,9 +46,13 @@ class Nes(object): self.master = self.rank == 0 self.size = self.comm.Get_size() + # General info self.print_info = info self.is_xarray = xarray self.__ini_path = path + self.spinup_h = spinup_h + + # NetCDF object if dataset is not None: if self.is_xarray: self.dataset = dataset @@ -39,109 +62,209 @@ class Nes(object): self.netcdf = dataset elif self.__ini_path is not None: if self.is_xarray: - self.dataset = self.open_dataset() + self.dataset = self.__open_dataset() self.netcdf = None else: self.dataset = None - self.netcdf = self.open_netcdf4() + self.netcdf = self.__open_netcdf4() - self.variables = self.get_lazy_variables() + # Lazy variables + self.variables = self.__get_lazy_variables() - self.time = self.__get_time() - # self.time = self.get_coordinate_values(self.__time) - self._lat = self.get_coordinate_dimension(['lat', 'latitude']) - self._lon = self.get_coordinate_dimension(['lon', 'longitude']) - self._lev = self.get_coordinate_dimension(['lev', 'level', 'lm']) + # Complete dimension + self._time = self.__get_time() + self._lat = self._get_coordinate_dimension(['lat', 'latitude']) + self._lon = self._get_coordinate_dimension(['lon', 'longitude']) + self._lev = self._get_coordinate_dimension(['lev', 'level', 'lm']) - y_len = self._lat['data'].shape[0] - self.y_min = (y_len // self.size) * self.rank - if self.rank + 1 == self.size: - self.y_max = None - else: - self.y_max = (y_len // self.size) * (self.rank + 1) - - self.lat = self.get_coordinate_values(self._lat) - self.lon = self.get_coordinate_values(self._lon) - self.lev = self.get_coordinate_values(self._lev) - - self.global_attrs = self.get_global_attributes() - # else: - # self.dataset = None - # self.netcdf = None - # self.variables = {} - # self.time = None - # self.__lat = None - # self.lat = None - # self.__lon = None - # self.lon = None - # self.__lev = None - # self.lev = None - # self.y_min = None - # self.y_max = None - self.t_min = 0 + # Axis limits + self.parallel_method = parallel_method + + self.read_axis_limits = self.set_read_axis_limits() + + # Dimensions screening + self.time = self._time[self.read_axis_limits['t_min']:self.read_axis_limits['t_max']] + self._time = self._time[self.get_spinup_id():] + self.lev = self._get_coordinate_values(self._lev, 'Z') + self.lat = self._get_coordinate_values(self._lat, 'Y') + self.lon = self._get_coordinate_values(self._lon, 'X') + self.write_axis_limits = self.set_write_axis_limits() + + # NetCDF attributes + self.global_attrs = self.__get_global_attributes() + + # Writing options self.zip_lvl = 0 - self.var_dim = ('lat', 'lon') - self.lat_dim = ('lat',) - self.lon_dim = ('lon',) + # Dimensions information + self._var_dim = None + self._lat_dim = None + self._lon_dim = None def __getstate__(self): + """ + Read the CSV file that contains all the Reduce variable specifications. + + Returns + ------- + state : dict + Dictionary with the class parameters + """ d = self.__dict__ - self_dict = {k: d[k] for k in d if k not in ['comm', 'variables', 'netcdf']} - return self_dict + state = {k: d[k] for k in d if k not in ['comm', 'variables', 'netcdf']} + return state def __setstate__(self, state): + """ + Set the state of the class + + Parameters + ---------- + state: dict + Dictionary with the class parameters + """ self.__dict__ = state return None def copy(self, copy_vars=False): - # self.close() - new = deepcopy(self) - new.netcdf = None - # new.open() + """ + Copy the Nes object. + + The copy will avoid to copy the communicator, dataset and variables by default + + Parameters + ---------- + copy_vars: bool + Indicates if you want to copy the variables (in lazy mode) + + Returns + ------- + nessy : Nes + Copy of the Nes object + """ + nessy = deepcopy(self) + nessy.netcdf = None if copy_vars: - new.variables = new.get_lazy_variables() + nessy.variables = nessy.__get_lazy_variables() else: - new.variables = {} - return new + nessy.variables = {} + return nessy def clear_communicator(self): + """ + Erase the communicator and the parallelization indexes. + """ self.comm = None self.rank = 0 self.master = 0 self.size = 0 - self.y_min = 0 - self.y_max = 0 - return None def set_communicator(self, comm): + """ + Set a new communicator and the correspondent parallelization indexes + + Parameters + ---------- + comm: MPI.COMM + Communicator to be set + """ self.comm = comm self.rank = self.comm.Get_rank() self.master = self.rank == 0 self.size = self.comm.Get_size() - # Update distribution - y_len = self._lat['data'].shape[0] - self.y_min = (y_len // self.size) * self.rank - if self.rank + 1 == self.size: - self.y_max = None - else: - self.y_max = (y_len // self.size) * (self.rank + 1) + self.read_axis_limits = self.set_read_axis_limits() + self.write_axis_limits = self.set_write_axis_limits() return None + def get_spinup_id(self): + from datetime import timedelta + idx = self._time.index(self._time[0] + timedelta(hours=self.spinup_h)) + return idx + + def set_read_axis_limits(self): + axis_limits = {'x_min': None, 'x_max': None, + 'y_min': None, 'y_max': None, + 'z_min': None, 'z_max': None, + 't_min': None, 't_max': None} + + if self.parallel_method == 'Y': + y_len = self._lat['data'].shape[0] + axis_limits['y_min'] = (y_len // self.size) * self.rank + if self.rank + 1 < self.size: + axis_limits['y_max'] = (y_len // self.size) * (self.rank + 1) + # Spin up + axis_limits['t_min'] = self.get_spinup_id() + elif self.parallel_method == 'X': + x_len = self._lon['data'].shape[-1] + axis_limits['x_min'] = (x_len // self.size) * self.rank + if self.rank + 1 < self.size: + axis_limits['x_max'] = (x_len // self.size) * (self.rank + 1) + # Spin up + axis_limits['t_min'] = self.get_spinup_id() + elif self.parallel_method == 'T': + spinup_idx = self.get_spinup_id() + t_len = len(self._time) - spinup_idx + axis_limits['t_min'] = ((t_len // self.size) * self.rank) + spinup_idx + if self.rank + 1 < self.size: + axis_limits['t_max'] = ((t_len // self.size) * (self.rank + 1)) + spinup_idx + + else: + raise NotImplementedError("Parallel method '{meth}' is not implemented. Use one of these: {accept}".format( + meth=self.parallel_method, accept=['Y'])) + return axis_limits + + def set_write_axis_limits(self): + axis_limits = {'x_min': None, 'x_max': None, + 'y_min': None, 'y_max': None, + 'z_min': None, 'z_max': None, + 't_min': None, 't_max': None} + + if self.parallel_method == 'Y': + y_len = self._lat['data'].shape[0] + axis_limits['y_min'] = (y_len // self.size) * self.rank + if self.rank + 1 < self.size: + axis_limits['y_max'] = (y_len // self.size) * (self.rank + 1) + elif self.parallel_method == 'X': + x_len = self._lon['data'].shape[-1] + axis_limits['x_min'] = (x_len // self.size) * self.rank + if self.rank + 1 < self.size: + axis_limits['x_max'] = (x_len // self.size) * (self.rank + 1) + elif self.parallel_method == 'T': + t_len = len(self._time) + axis_limits['t_min'] = ((t_len // self.size) * self.rank) + if self.rank + 1 < self.size: + axis_limits['t_max'] = (t_len // self.size) * (self.rank + 1) + + else: + raise NotImplementedError("Parallel method '{meth}' is not implemented. Use one of these: {accept}".format( + meth=self.parallel_method, accept=['X', 'Y', 'T'])) + return axis_limits + def open(self): + """ + Open the NetCDF + """ if self.is_xarray: - self.dataset = self.open_dataset() + self.dataset = self.__open_dataset() self.netcdf = None else: self.dataset = None - self.netcdf = self.open_netcdf4() + self.netcdf = self.__open_netcdf4() return None - def open_dataset(self): + def __open_dataset(self): + """ + Open the NetCDF with xarray + + Returns + ------- + dataset : xr.Dataset + Opened dataset + """ if self.master: warnings.filterwarnings('ignore') # Disabling warnings while reading MONARCH original file dataset = open_dataset(self.__ini_path, decode_coords='all') @@ -152,15 +275,19 @@ class Nes(object): self.dataset = dataset return dataset - def open_netcdf4(self, mode='r'): + def __open_netcdf4(self, mode='r'): """ - Open a NetCDF file to be read in the future. - - :param mode: Indicates the mode to open the netCDF. DEFAULT = 'r' (read) - :type mode: str - - :return: NetCDF object - :rtype: Dataset + Open the NetCDF with netcdf4-python + + Parameters + ---------- + mode : str + Inheritance from mode parameter from https://unidata.github.io/netcdf4-python/#Dataset.__init__ + Default: 'r' (read-only) + Returns + ------- + netcdf : Dataset + Opened dataset """ if self.size == 1: netcdf = Dataset(self.__ini_path, format="NETCDF4", mode=mode, parallel=False) @@ -171,6 +298,9 @@ class Nes(object): return netcdf def close(self): + """ + Close the NetCDF with netcdf4-python + """ if self.netcdf is not None: self.netcdf.close() self.netcdf = None @@ -181,11 +311,15 @@ class Nes(object): """ Parses the time units to be CF compliant - :param t_units: Original time units. - :type t_units: str + Parameter + --------- + t_units : str + Original time units - :return: CF compliant time units. - :rtype: str + Returns + ------- + t_units : str + CF compliant time units. """ if 'h @' in t_units: t_units = 'hour since {0}-{1}-{2} {3}:{4}:{5} UTC'.format( @@ -193,6 +327,14 @@ class Nes(object): return t_units def __get_time(self): + """ + Get the NetCDF time values + + Returns + ------- + time : list + List of times (datetime) of the NetCDF data + """ if self.is_xarray: time = self.variables['time'] else: @@ -206,7 +348,22 @@ class Nes(object): self.free_vars('time') return time - def get_coordinate_dimension(self, possible_names): + def _get_coordinate_dimension(self, possible_names): + """ + Read the coordinate dimension data. + + This will read the complete data of the coordinate + + Parameters + ---------- + possible_names: list, str + List (or single string) of the possible names of the coordinate (e.g. ['lat', 'latitude']) + + Returns + ------- + nc_var : dict + Dictionary with the 'data' key with the coordinate variable values. and the attributes as other keys. + """ if isinstance(possible_names, str): possible_names = [possible_names] dimension_name = set(possible_names).intersection(set(self.variables.keys())).pop() @@ -220,14 +377,64 @@ class Nes(object): self.free_vars(dimension_name) return nc_var - def get_coordinate_values(self, coordinate_info): - coordinate_len = len(coordinate_info['data'].shape) + def _get_coordinate_values(self, coordinate_info, coordinate_axis): + """ + Get the coordinate data of the current portion + + Parameters + ---------- + coordinate_info : dict, list + Dictionary with the 'data' key with the coordinate variable values. and the attributes as other keys. + coordinate_axis : str + Name of the coordinate to extract. Accepted values: ['Z', 'Y', 'X'] + Returns + ------- + values : dict + Dictionary with the portion of data corresponding to the rank + """ values = deepcopy(coordinate_info) - if coordinate_len == 2: - values['data'] = values['data'][self.y_min:self.y_max] + if isinstance(coordinate_info, list): + values = {'data': deepcopy(coordinate_info)} + coordinate_len = len(values['data'].shape) + if coordinate_axis == 'Y': + if coordinate_len == 1: + values['data'] = values['data'][self.read_axis_limits['y_min']:self.read_axis_limits['y_max']] + elif coordinate_len == 2: + values['data'] = values['data'][self.read_axis_limits['y_min']:self.read_axis_limits['y_max'], self.read_axis_limits['x_min']:self.read_axis_limits['x_max']] + else: + raise NotImplementedError("The coordinate has wrong dimensions: {dim}".format( + dim=values['data'].shape)) + elif coordinate_axis == 'X': + if coordinate_len == 1: + values['data'] = values['data'][self.read_axis_limits['x_min']:self.read_axis_limits['x_max']] + elif coordinate_len == 2: + values['data'] = values['data'][self.read_axis_limits['y_min']:self.read_axis_limits['y_max'], self.read_axis_limits['x_min']:self.read_axis_limits['x_max']] + else: + raise NotImplementedError("The coordinate has wrong dimensions: {dim}".format( + dim=values['data'].shape)) + elif coordinate_axis == 'Z': + if coordinate_len == 1: + values['data'] = values['data'][self.read_axis_limits['z_min']:self.read_axis_limits['z_max']] + else: + raise NotImplementedError("The coordinate has wrong dimensions: {dim}".format( + dim=values['data'].shape)) return values - def get_lazy_variables(self): + def __get_lazy_variables(self): + """ + Get all the variables information. + + Returns + ------- + variables : dict + Dictionary with the variable name as key and another dictionary as value. + De value dictionary will have the 'data' key with None as value and all the variable attributes as the + other keys. + e.g. + {'var_name_1': {'data': None, 'attr_1': value_1_1, 'attr_2': value_1_2, ...}, + 'var_name_2': {'data': None, 'attr_1': value_2_1, 'attr_2': value_2_2, ...}, + ...} + """ if self.is_xarray: variables = self.dataset.variables else: @@ -236,6 +443,7 @@ class Nes(object): for var_name, var_info in self.netcdf.variables.items(): variables[var_name] = {} variables[var_name]['data'] = None + variables[var_name]['dimensions'] = var_info.dimensions for attrname in var_info.ncattrs(): # Avoiding some attributes if attrname not in ['missing_value', '_FillValue']: @@ -249,19 +457,42 @@ class Nes(object): return variables - def read_variable(self, var_name): + def __read_variable(self, var_name): + """ + Read the corresponding variable data according to the current rank. + + Parameters + ---------- + var_name : str + Name of the variable to read + + Returns + ------- + data: np.array + Portion of the variable data corresponding to the rank. + """ nc_var = self.netcdf.variables[var_name] var_dims = nc_var.dimensions if len(var_dims) == 2: - data = nc_var[self.y_min:self.y_max, :] + data = nc_var[self.read_axis_limits['y_min']:self.read_axis_limits['y_max'], + self.read_axis_limits['x_min']:self.read_axis_limits['x_max']] elif len(var_dims) == 3: - data = nc_var[self.t_min::, self.y_min:self.y_max, :] + data = nc_var[self.read_axis_limits['t_min']:self.read_axis_limits['t_max'], + self.read_axis_limits['y_min']:self.read_axis_limits['y_max'], + self.read_axis_limits['x_min']:self.read_axis_limits['x_max']] elif len(var_dims) == 4: - data = nc_var[self.t_min::, :, self.y_min:self.y_max, :] - elif len(var_dims) == 5: - data = nc_var[self.t_min::, :, :, self.y_min:self.y_max, :] + data = nc_var[self.read_axis_limits['t_min']:self.read_axis_limits['t_max'], + self.read_axis_limits['z_min']:self.read_axis_limits['z_max'], + self.read_axis_limits['y_min']:self.read_axis_limits['y_max'], + self.read_axis_limits['x_min']:self.read_axis_limits['x_max']] + # elif len(var_dims) == 5: + # data = nc_var[self.read_axis_limits['t_min']:self.read_axis_limits['t_max'], + # :, + # self.read_axis_limits['z_min']:self.read_axis_limits['z_max'], + # self.read_axis_limits['y_min']:self.read_axis_limits['y_max'], + # self.read_axis_limits['x_min']:self.read_axis_limits['x_max']] else: - raise NotImplementedError('Only can be read netCDF with 5 dimensions') + raise NotImplementedError('Only can be read netCDF with 4 dimensions or less') # Missing to nan try: @@ -270,28 +501,47 @@ class Nes(object): pass return data - def load(self, varlist=None): + def load(self, var_list=None): + """ + Load of the selected variables. + + That function will fill the variable 'data' key with the corresponding values. + + Parameters + ---------- + var_list : list, str + List (or single string) of the variables to be loaded + """ if self.netcdf is None: - self.open_dataset() + self.__open_dataset() close = True else: close = False - if varlist is None: - varlist = list(self.variables.keys()) + if var_list is None: + var_list = list(self.variables.keys()) - for i, var_name in enumerate(varlist): + for i, var_name in enumerate(var_list): if self.print_info: - print("Rank {0:03d}: Loading {1} var ({2}/{3})".format(self.rank, var_name, i + 1, len(varlist))) - self.variables[var_name]['data'] = self.read_variable(var_name) + print("Rank {0:03d}: Loading {1} var ({2}/{3})".format(self.rank, var_name, i + 1, len(var_list))) + if self.variables[var_name]['data'] is None: + self.variables[var_name]['data'] = self.__read_variable(var_name) if self.print_info: print("Rank {0:03d}: Loaded {1} var ({2})".format(self.rank, var_name, self.variables[var_name]['data'].shape)) if close: self.close() - return True + return None + + def __get_global_attributes(self): + """ + Read the netcdf global attributes - def get_global_attributes(self): + Returns + ------- + gl_attrs : dict + Dictionary with the netCDF global attributes + """ gl_attrs = {} if self.is_xarray: gl_attrs = self.dataset.attrs @@ -301,62 +551,74 @@ class Nes(object): return gl_attrs def free_vars(self, var_list): + """ + Erase the selected variables from the variables information. + + Parameters + ---------- + var_list : list, str + List (or single string) of the variables to be loaded + """ if isinstance(var_list, str): var_list = [var_list] if self.is_xarray: self.dataset = self.dataset.drop_vars(var_list) - self.variables = self.get_lazy_variables() + self.variables = self.__get_lazy_variables() else: for var_name in var_list: del self.variables[var_name] - return True + return None def keep_vars(self, var_list): + """ + Keep the selected variables and erases the rest. + + Parameters + ---------- + var_list : list, str + List (or single string) of the variables to be loaded + """ if isinstance(var_list, str): var_list = [var_list] to_remove = list(set(self.variables.keys()).difference(set(var_list))) self.free_vars(to_remove) - return True + return None - def create_dimensions(self, netcdf): + def _create_dimensions(self, netcdf): """ Create the 'lev' and 'time' dimension. - :param netcdf: NetCDF object. - :type netcdf: Dataset - - :return: True when the writing is finished. - :rtype: bool + Parameters + ---------- + netcdf : Dataset + netcdf4-python opened Dataset """ - # netcdf.createDimension('time', None) - netcdf.createDimension('time', len(self.time)) + netcdf.createDimension('time', None) netcdf.createDimension('lev', len(self._lev['data'])) - return True + return None - def create_dimension_variables(self, netcdf): + def _create_dimension_variables(self, netcdf): """ Create the 'lev', 'time', 'lat' and 'lon' variables. - :param netcdf: NetCDF object. - :type netcdf: Dataset - - :return: True when the writing is finished. - :rtype: bool + Parameters + ---------- + netcdf : Dataset + netcdf4-python opened Dataset """ # TIMES - time_var = netcdf.createVariable('time', np.float64, ('time',), zlib=self.zip_lvl > 0, - complevel=self.zip_lvl) - time_var.units = 'hours since {0}'.format(self.time[0].strftime("%Y-%m-%d %H:%M:%S")) + time_var = netcdf.createVariable('time', np.float64, ('time',), zlib=self.zip_lvl > 0, complevel=self.zip_lvl) + time_var.units = 'hours since {0}'.format(self._time[0].strftime("%Y-%m-%d %H:%M:%S")) time_var.standard_name = "time" time_var.calendar = 'standard' time_var.long_name = "time" if self.size > 1: time_var.set_collective(True) - time_var[:] = date2num(self.time, time_var.units, calendar='standard') + time_var[:] = date2num(self._time, time_var.units, calendar='standard') # LEVELS lev = netcdf.createVariable('lev', np.float64, ('lev',), zlib=self.zip_lvl > 0, complevel=self.zip_lvl) @@ -367,7 +629,7 @@ class Nes(object): lev[:] = self._lev['data'] # LATITUDES - lats = netcdf.createVariable('lat', np.float64, self.lat_dim, zlib=self.zip_lvl > 0, complevel=self.zip_lvl) + lats = netcdf.createVariable('lat', np.float64, self._lat_dim, zlib=self.zip_lvl > 0, complevel=self.zip_lvl) lats.units = "degrees_north" lats.axis = "Y" lats.long_name = "latitude coordinate" @@ -377,7 +639,7 @@ class Nes(object): lats[:] = self._lat['data'] # LONGITUDES - lons = netcdf.createVariable('lon', np.float64, self.lon_dim, zlib=self.zip_lvl > 0, complevel=self.zip_lvl) + lons = netcdf.createVariable('lon', np.float64, self._lon_dim, zlib=self.zip_lvl > 0, complevel=self.zip_lvl) lons.units = "degrees_east" lons.axis = "X" lons.long_name = "longitude coordinate" @@ -388,13 +650,23 @@ class Nes(object): return None - def create_variables(self, netcdf, chunking=False): + def __create_variables(self, netcdf, chunking=False): + """ + Create the netCDF file variables + + Parameters + ---------- + netcdf : Dataset + netcdf4-python opened Dataset + chunking : bool + Indicates if you want to chunk the output netCDF + """ for i, (var_name, var_dict) in enumerate(self.variables.items()): if self.print_info: print("Rank {0:03d}: Writing {1} var ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) try: if not chunking: - var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self.var_dim, + var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self._var_dim, zlib=self.zip_lvl > 0, complevel=self.zip_lvl) else: if self.master: @@ -402,54 +674,91 @@ class Nes(object): else: chunk_size = None chunk_size = self.comm.bcast(chunk_size, root=0) - var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self.var_dim, + var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self._var_dim, zlib=self.zip_lvl > 0, complevel=self.zip_lvl, chunksizes=chunk_size) if self.print_info: - print("Rank {0:03d}: Var {1} created ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) + print("Rank {0:03d}: Var {1} created ({2}/{3})".format( + self.rank, var_name, i + 1, len(self.variables))) if self.size > 1: var.set_collective(True) if self.print_info: - print("Rank {0:03d}: Var {1} collective ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) + print("Rank {0:03d}: Var {1} collective ({2}/{3})".format( + self.rank, var_name, i + 1, len(self.variables))) for att_name, att_value in var_dict.items(): if att_name == 'data': + try: - var[:, :, self.y_min:self.y_max, :] = att_value + var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], + self.write_axis_limits['z_min']:self.write_axis_limits['z_max'], + self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max']] = att_value except ValueError: - var[:, 0, self.y_min:self.y_max, :] = att_value + var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], + 0, + self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max']] = att_value # msg = "*WARNING* '{0}' variable is a 3D field. Setting it on first (0) layer.".format( # var_name) # warn(msg) + except IndexError: + raise IndexError("Different shapes. out_shape={0}, data_shp={1}".format( + var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], + self.write_axis_limits['z_min']:self.write_axis_limits['z_max'], + self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max']].shape, + att_value.shape)) if self.print_info: print("Rank {0:03d}: Var {1} data ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) - elif att_name not in ['chunk_size', 'var_dims']: + elif att_name not in ['chunk_size', 'var_dims', 'dimensions']: var.setncattr(att_name, att_value) + self._set_var_crs(var) if self.print_info: print("Rank {0:03d}: Var {1} completed ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) - # self.set_var_crs(var) except Exception as e: - print("**ERROR** an error hase occur while writing the '{0}' variable".format(var_name)) + print("**ERROR** an error has occur while writing the '{0}' variable".format(var_name)) # print("**ERROR** an error hase occur while writing the '{0}' variable".format(var_name), # file=sys.stderr) raise e - return True + return None - def set_crs(self, netcdf): + def _set_crs(self, netcdf): """ Must be implemented on inner class - :param netcdf: NetCDF object. - :type netcdf: Dataset + Parameters + ---------- + netcdf : Dataset + netcdf4-python Dataset + """ + return None - :return: True when the writing is finished. - :rtype: bool + @staticmethod + def _set_var_crs(var): + """ + Must be implemented on inner class + + Parameters + ---------- + var : Variable + netCDF4-python variable object. """ return None - def to_netcdf_py(self, path, chunking=False): + def __to_netcdf_py(self, path, chunking=False): + """ + Create the NetCDF using netcdf4-python methods + + Parameters + ---------- + path : str + Path to the output netCDF file. + chunking: bool + Indicates if you want to chunk the output netCDF + """ # Open NetCDF if self.print_info: print("Rank {0:03d}: Creating {1}".format(self.rank, path)) @@ -460,17 +769,17 @@ class Nes(object): if self.print_info: print("Rank {0:03d}: NetCDF ready to write".format(self.rank)) # Create Dimensions - self.create_dimensions(netcdf) + self._create_dimensions(netcdf) # Create dimension variables - self.create_dimension_variables(netcdf) + self._create_dimension_variables(netcdf) if self.print_info: print("Rank {0:03d}: Dimensions done".format(self.rank)) # Create variables - self.create_variables(netcdf, chunking=chunking) + self.__create_variables(netcdf, chunking=chunking) # Create metadata - self.set_crs(netcdf) + self._set_crs(netcdf) # Close NetCDF if self.global_attrs is not None: @@ -484,45 +793,103 @@ class Nes(object): return None def to_netcdf(self, path, compression_level=0, serial=False, info=False, chunking=False): + """ + Write the netCDF output file + + Parameters + ---------- + path : str + Path to the output netCDF file + compression_level : int + Level of compression (0 to 9) Default: 0 (no compression) + serial : bool + Indicates if you want to write in serial or not. Default: False + info : bool + Indicates if you want to print the information of each writing step by stdout Default: False + chunking : bool + Indicates if you want a chunked netCDF output. Only available with non serial writes. Default: False + """ old_info = self.print_info self.print_info = info self.zip_lvl = compression_level if self.is_xarray: - pass + raise NotImplementedError("Writing with xarray not implemented") else: # if serial: if serial and self.size > 1: - data = self.gather_data() + data = self.__gather_data() if self.master: new_nc = self.copy(copy_vars=False) new_nc.set_communicator(MPI.COMM_SELF) new_nc.variables = data - new_nc.to_netcdf_py(path) + new_nc.__to_netcdf_py(path) else: - self.to_netcdf_py(path, chunking=chunking) + self.__to_netcdf_py(path, chunking=chunking) self.print_info = old_info return None - def gather_data(self): + def __gather_data(self): + """ + Gather all the variable data into the MPI rank 0 to perform a serial write. + + Returns + ------- + data_list: dict + Variables dictionary with all the data from all the ranks. + """ data_list = deepcopy(self.variables) for var_name in data_list.keys(): try: # noinspection PyArgumentList data_aux = self.comm.gather(data_list[var_name]['data'], root=0) if self.rank == 0: - if len(data_list[var_name]['data'].shape) == 2: - axis = 0 - elif len(data_list[var_name]['data'].shape) == 3: - axis = 1 + shp_len = len(data_list[var_name]['data'].shape) + add_dimension = False # to Add a dimension + if self.parallel_method == 'Y': + if shp_len == 2: + # if is a 2D concatenate over first axis + axis = 0 + elif shp_len == 3: + # if is a 3D concatenate over second axis + axis = 1 + else: + # if is a 4D concatenate over third axis + axis = 2 + elif self.parallel_method == 'X': + if shp_len == 2: + # if is a 2D concatenate over second axis + axis = 1 + elif shp_len == 3: + # if is a 3D concatenate over third axis + axis = 2 + else: + # if is a 4D concatenate over forth axis + axis = 3 + elif self.parallel_method == 'T': + if shp_len == 2: + # if is a 2D add dimension + add_dimension = True + axis = None # Not used + elif shp_len == 3: + # if is a 3D concatenate over first axis + axis = 0 + else: + # if is a 4D concatenate over second axis + axis = 0 + else: + raise NotImplementedError( + "Parallel method '{meth}' is not implemented. Use one of these: {accept}".format( + meth=self.parallel_method, accept=['X', 'Y', 'T'])) + if add_dimension: + data_list[var_name]['data'] = np.stack(data_aux) else: - axis = 2 - data_list[var_name]['data'] = np.concatenate(data_aux, axis=axis) + data_list[var_name]['data'] = np.concatenate(data_aux, axis=axis) except Exception as e: - print("**ERROR** an error hase occur while gathering the '{0}' variable".format(var_name)) - sys.stderr.write("**ERROR** an error hase occur while gathering the '{0}' variable".format(var_name)) + print("**ERROR** an error hase occur while gathering the '{0}' variable.\n".format(var_name)) + sys.stderr.write("**ERROR** an error hase occur while gathering the '{0}' variable.\n".format(var_name)) print(e) sys.stderr.write(str(e)) # print(e, file=sys.stderr) diff --git a/nes/nc_projections/latlon_nes.py b/nes/nc_projections/latlon_nes.py index 34e369b..e34d386 100644 --- a/nes/nc_projections/latlon_nes.py +++ b/nes/nc_projections/latlon_nes.py @@ -4,27 +4,45 @@ from nes.nc_projections.default_nes import Nes class LatLonNes(Nes): - def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, spinup_h=0, parallel_method='Y'): """ - Initialize the goddess class + Initialize the LatLonNes class + + Parameters + ---------- + comm: MPI.COMM + Path to the CSV file that contains all the information. + path: str + Path to the NetCDF to initialize the object + info: bool + Indicates if you want to get reading/writing info + dataset: Dataset + NetCDF4-python Dataset to initialize the class + xarray: bool: + (Not working) Indicates if you want to use xarray as default + spinup_h : int + Number of hours to remove from time. + parallel_method : str + Indicates the parallelization method that you want. Default over Y axis + accepted values: ['Y', 'T'] """ - super(LatLonNes, self).__init__(comm=comm, path=path, info=info, dataset=dataset, xarray=xarray) + super(LatLonNes, self).__init__(comm=comm, path=path, info=info, dataset=dataset, xarray=xarray, + spinup_h=spinup_h, parallel_method=parallel_method) - self.var_dim = ('lat', 'lon') - self.lat_dim = ('lat',) - self.lon_dim = ('lon',) + self._var_dim = ('lat', 'lon') + self._lat_dim = ('lat',) + self._lon_dim = ('lon',) - def create_dimensions(self, netcdf): + def _create_dimensions(self, netcdf): """ - Create the 'rlat', 'rlon' dimensions and the super dimensions ('lev', 'time'). + Create the 'lat', 'lon' dimensions and the super dimensions ('lev', 'time'). - :param netcdf: NetCDF object. - :type netcdf: Dataset - - :return: True when the writing is finished. - :rtype: bool + Parameters + ---------- + netcdf : Dataset + NetCDF object. """ - super(LatLonNes, self).create_dimensions(netcdf) + super(LatLonNes, self)._create_dimensions(netcdf) netcdf.createDimension('lon', len(self._lon['data'])) netcdf.createDimension('lat', len(self._lat['data'])) @@ -32,29 +50,27 @@ class LatLonNes(Nes): return None @staticmethod - def set_var_crs(var): + def _set_var_crs(var): """ - Set the grid_mapping to 'rotated_pole'. - - :param var: netCDF var object. - :type var: Variable + Set the grid_mapping to 'crs'. - :return: True when the writing is finished. - :rtype: bool + Parameters + ---------- + var : Variable + netCDF4-python variable object. """ var.grid_mapping = 'crs' return None - def set_crs(self, netcdf): + def _set_crs(self, netcdf): """ Create the 'crs' variable for the rotated latitude longitude grid_mapping. - :param netcdf: NetCDF object. - :type netcdf: Dataset - - :return: True when the writing is finished. - :rtype: bool + Parameters + ---------- + netcdf : Dataset + netcdf4-python Dataset """ mapping = netcdf.createVariable('crs', 'c') diff --git a/nes/nc_projections/rotated_nes.py b/nes/nc_projections/rotated_nes.py index f3bee17..de5c3c1 100644 --- a/nes/nc_projections/rotated_nes.py +++ b/nes/nc_projections/rotated_nes.py @@ -5,58 +5,83 @@ from cfunits import Units class RotatedNes(Nes): - def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, spinup_h=0, parallel_method='Y'): """ - Initialize the goddess class + Initialize the RotatedNes class + + Parameters + ---------- + comm: MPI.COMM + Path to the CSV file that contains all the information. + path: str + Path to the NetCDF to initialize the object + info: bool + Indicates if you want to get reading/writing info + dataset: Dataset + NetCDF4-python Dataset to initialize the class + xarray: bool: + (Not working) Indicates if you want to use xarray as default + spinup_h : int + Number of hours to remove from time. + parallel_method : str + Indicates the parallelization method that you want. Default over Y axis + accepted values: ['Y', 'T'] """ - super(RotatedNes, self).__init__(comm=comm, path=path, info=info, dataset=dataset, xarray=xarray) + super(RotatedNes, self).__init__(comm=comm, path=path, info=info, dataset=dataset, xarray=xarray, + spinup_h=spinup_h, parallel_method=parallel_method) - self._rlat = self.get_coordinate_dimension('rlat') - self._rlon = self.get_coordinate_dimension('rlon') + self._rlat = self._get_coordinate_dimension('rlat') + self._rlon = self._get_coordinate_dimension('rlon') - self.rlat = self.get_coordinate_values(self._rlat) - self.rlon = self.get_coordinate_values(self._rlon) + self.rlat = self._get_coordinate_values(self._rlat, 'Y') + self.rlon = self._get_coordinate_values(self._rlon, 'X') self.projection_data = self.get_projection_data() - self.var_dim = ('rlat', 'rlon') - self.lat_dim = ('rlat', 'rlon') - self.lon_dim = ('rlat', 'rlon') + self._var_dim = ('rlat', 'rlon') + self._lat_dim = ('rlat', 'rlon') + self._lon_dim = ('rlat', 'rlon') def get_projection_data(self): + """ + Read the projection data + + Returns + ------- + projection : dict + Dictionary with the projection data + """ projection = self.variables['rotated_pole'] self.free_vars('rotated_pole') return projection - def create_dimensions(self, netcdf): + def _create_dimensions(self, netcdf): """ Create the 'rlat', 'rlon' dimensions and the super dimensions ('lev', 'time'). - :param netcdf: NetCDF object. - :type netcdf: Dataset - - :return: True when the writing is finished. - :rtype: bool + Parameters + ---------- + netcdf : Dataset + NetCDF object. """ - super(RotatedNes, self).create_dimensions(netcdf) + super(RotatedNes, self)._create_dimensions(netcdf) netcdf.createDimension('rlon', len(self._rlon['data'])) netcdf.createDimension('rlat', len(self._rlat['data'])) return None - def create_dimension_variables(self, netcdf): + def _create_dimension_variables(self, netcdf): """ Create the 'rlat' and 'rlon' variables. - :param netcdf: NetCDF object. - :type netcdf: Dataset - - :return: True when the writing is finished. - :rtype: bool + Parameters + ---------- + netcdf : Dataset + NetCDF object. """ - super(RotatedNes, self).create_dimension_variables(netcdf) + super(RotatedNes, self)._create_dimension_variables(netcdf) rlat = netcdf.createVariable('rlat', self._rlat['data'].dtype, ('rlat',)) rlat.long_name = "latitude in rotated pole grid" @@ -78,29 +103,27 @@ class RotatedNes(Nes): return None @staticmethod - def set_var_crs(var): + def _set_var_crs(var): """ Set the grid_mapping to 'rotated_pole'. - :param var: netCDF var object. - :type var: Variable - - :return: True when the writing is finished. - :rtype: bool + Parameters + ---------- + var : Variable + netCDF4-python variable object. """ var.grid_mapping = 'rotated_pole' return None - def set_crs(self, netcdf): + def _set_crs(self, netcdf): """ Create the 'crs' variable for the rotated latitude longitude grid_mapping. - :param netcdf: NetCDF object. - :type netcdf: Dataset - - :return: True when the writing is finished. - :rtype: bool + Parameters + ---------- + netcdf : Dataset + netcdf4-python Dataset """ mapping = netcdf.createVariable('rotated_pole', 'c') diff --git a/setup.py b/setup.py index 275a93c..b052edd 100755 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ with open("README.md", "r") as f: long_description = f.read() setup( - name='SNES', + name='NES', # license='', # platforms=['GNU/Linux Debian'], version=version, @@ -21,7 +21,7 @@ setup( long_description_content_type="text/markdown", author='...', author_email='...', - url='https://earth.bsc.es/gitlab/es/SNES', + url='https://earth.bsc.es/gitlab/es/NES', keywords=['Python', 'post-GIS', 'GIS'], install_requires=[ diff --git a/tests/basic_nes_tests.py b/tests/basic_nes_tests.py index d9e1bf2..e545fad 100644 --- a/tests/basic_nes_tests.py +++ b/tests/basic_nes_tests.py @@ -5,13 +5,20 @@ from nes import * import pandas as pd # from mpi4py import MPI -test_list = [{'in_file': "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2008123100.nc", - 'prefix': 'small'}, - {'in_file': "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2021080212.nc", - 'prefix': 'medium'}, - {'in_file': "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2017123000.nc", +# test_list = [{'in_file': "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2008123100.nc", +# 'prefix': 'small'}, +# {'in_file': "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2021080212.nc", +# 'prefix': 'medium'}, +# {'in_file': "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2017123000.nc", +# 'prefix': 'large'}, +# ] +test_list = [{'in_file': "/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/original_file/MONARCH_d01_2017123000.nc", 'prefix': 'large'}, ] +# parallel_method = 'X' +# parallel_method = 'Y' +parallel_method = 'T' + times = pd.DataFrame(index=[0]) # size = MPI.COMM_WORLD.Get_size() @@ -21,7 +28,7 @@ for test in test_list: st_time = timeit.default_timer() # ===== Reading - nessy = open_netcdf(path=test['in_file']) + nessy = open_netcdf(path=test['in_file'], parallel_method=parallel_method) size = nessy.size if nessy.master: print("\n=====", test['prefix'], "=====") diff --git a/tests/test_bash_mn4.cmd b/tests/test_bash_mn4.cmd index 3f41d54..9710c5b 100644 --- a/tests/test_bash_mn4.cmd +++ b/tests/test_bash_mn4.cmd @@ -3,7 +3,7 @@ #SBATCH --qos=debug #SBATCH -A bsc32 #SBATCH --cpus-per-task=1 -#SBATCH -n 96 +#SBATCH -n 4 #SBATCH -t 00:30:00 #SBATCH -J test_nes #SBATCH --output=log_mn4_NES_%j.out @@ -24,4 +24,4 @@ module load OpenMPI/4.0.5-GCC-8.3.0-mn4 export PYTHONPATH=/gpfs/scratch/bsc32/bsc32538/NES_tests/NES:${PYTHONPATH} cd /gpfs/scratch/bsc32/bsc32538/NES_tests/NES/tests -mpirun --mca mpi_warn_on_fork 0 -np 96 python basic_nes_tests.py +mpirun --mca mpi_warn_on_fork 0 -np 4 python basic_nes_tests.py diff --git a/tests/test_bash_nord3v2.cmd b/tests/test_bash_nord3v2.cmd index 82de447..42c01f7 100644 --- a/tests/test_bash_nord3v2.cmd +++ b/tests/test_bash_nord3v2.cmd @@ -3,7 +3,7 @@ ####SBATCH --qos=debug #SBATCH -A bsc32 #SBATCH --cpus-per-task=1 -#SBATCH -n 144 +#SBATCH -n 2 #SBATCH -t 00:30:00 #SBATCH -J test_nes #SBATCH --output=log_nord3v2_NES_%j.out @@ -22,4 +22,4 @@ module load xarray/0.17.0-foss-2019b-Python-3.7.4 export PYTHONPATH=/gpfs/scratch/bsc32/bsc32538/NES_tests/NES:${PYTHONPATH} cd /gpfs/scratch/bsc32/bsc32538/NES_tests/NES/tests -mpirun --mca mpi_warn_on_fork 0 -np 144 python basic_nes_tests.py +mpirun --mca mpi_warn_on_fork 0 -np 2 python basic_nes_tests.py -- GitLab From cdb12ef24b724174417ef46f691e6101165c1e8f Mon Sep 17 00:00:00 2001 From: ctena Date: Thu, 28 Apr 2022 11:10:42 +0200 Subject: [PATCH 04/73] Added option to remove from last time steps (hours) --- nes/load_nes.py | 14 +++++++---- nes/nc_projections/default_nes.py | 42 ++++++++++++++++++++----------- nes/nc_projections/latlon_nes.py | 18 +++++++++---- nes/nc_projections/rotated_nes.py | 18 +++++++++---- 4 files changed, 62 insertions(+), 30 deletions(-) diff --git a/nes/load_nes.py b/nes/load_nes.py index 53d4448..9706179 100644 --- a/nes/load_nes.py +++ b/nes/load_nes.py @@ -9,7 +9,7 @@ from nes.nc_projections.rotated_nes import RotatedNes from nes.nc_projections.latlon_nes import LatLonNes -def open_netcdf(path, comm=None, xarray=False, info=False, spinup_h=0, parallel_method='Y'): +def open_netcdf(path, comm=None, xarray=False, info=False, avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): """ Open a netCDF file @@ -23,8 +23,10 @@ def open_netcdf(path, comm=None, xarray=False, info=False, spinup_h=0, parallel_ (Not working) Indicates if you want to use xarray. Default: False info : bool Indicates if you want to print (stdout) the reading/writing steps - spinup_h : int - Number of hours to remove from time. + avoid_first_hours : int + Number of hours to remove from first time steps. + avoid_last_hours : int + Number of hours to remove from last time steps. parallel_method : str Indicates the parallelization method that you want. Default: 'Y' (over Y axis) accepted values: ['X', 'Y', 'T'] @@ -53,14 +55,16 @@ def open_netcdf(path, comm=None, xarray=False, info=False, spinup_h=0, parallel_ dataset=dataset, xarray=xarray, info=info, - spinup_h=spinup_h, + avoid_first_hours=avoid_first_hours, + avoid_last_hours=avoid_last_hours, parallel_method=parallel_method) else: nessy = LatLonNes(comm=comm, dataset=dataset, xarray=xarray, info=info, - spinup_h=spinup_h, + avoid_first_hours=avoid_first_hours, + avoid_last_hours=avoid_last_hours, parallel_method=parallel_method) return nessy diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index 1d162b9..c9944d3 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -15,7 +15,8 @@ from copy import deepcopy class Nes(object): - def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, spinup_h=0, parallel_method='Y'): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, avoid_first_hours=0, + avoid_last_hours=0, parallel_method='Y'): """ Initialize the Nes class @@ -31,8 +32,10 @@ class Nes(object): NetCDF4-python Dataset to initialize the class xarray: bool: (Not working) Indicates if you want to use xarray as default - spinup_h : int - Number of hours to remove from time. + avoid_first_hours : int + Number of hours to remove from first time steps. + avoid_last_hours : int + Number of hours to remove from last time steps. parallel_method : str Indicates the parallelization method that you want. Default over Y axis accepted values: ['Y', 'T'] @@ -50,7 +53,8 @@ class Nes(object): self.print_info = info self.is_xarray = xarray self.__ini_path = path - self.spinup_h = spinup_h + self.hours_start = avoid_first_hours + self.hours_end = avoid_last_hours # NetCDF object if dataset is not None: @@ -84,7 +88,6 @@ class Nes(object): # Dimensions screening self.time = self._time[self.read_axis_limits['t_min']:self.read_axis_limits['t_max']] - self._time = self._time[self.get_spinup_id():] self.lev = self._get_coordinate_values(self._lev, 'Z') self.lat = self._get_coordinate_values(self._lat, 'Y') self.lon = self._get_coordinate_values(self._lon, 'X') @@ -180,9 +183,12 @@ class Nes(object): self.write_axis_limits = self.set_write_axis_limits() return None - def get_spinup_id(self): + def get_time_id(self, hours, first=True): from datetime import timedelta - idx = self._time.index(self._time[0] + timedelta(hours=self.spinup_h)) + if first: + idx = self._time.index(self._time[0] + timedelta(hours=hours)) + else: + idx = self._time.index(self._time[-1] - timedelta(hours=hours)) + 1 return idx def set_read_axis_limits(self): @@ -197,20 +203,23 @@ class Nes(object): if self.rank + 1 < self.size: axis_limits['y_max'] = (y_len // self.size) * (self.rank + 1) # Spin up - axis_limits['t_min'] = self.get_spinup_id() + axis_limits['t_min'] = self.get_time_id(self.hours_start, first=True) + axis_limits['t_max'] = self.get_time_id(self.hours_end, first=False) elif self.parallel_method == 'X': x_len = self._lon['data'].shape[-1] axis_limits['x_min'] = (x_len // self.size) * self.rank if self.rank + 1 < self.size: axis_limits['x_max'] = (x_len // self.size) * (self.rank + 1) # Spin up - axis_limits['t_min'] = self.get_spinup_id() + axis_limits['t_min'] = self.get_time_id(self.hours_start, first=True) + axis_limits['t_max'] = self.get_time_id(self.hours_end, first=False) elif self.parallel_method == 'T': - spinup_idx = self.get_spinup_id() - t_len = len(self._time) - spinup_idx - axis_limits['t_min'] = ((t_len // self.size) * self.rank) + spinup_idx + first_time_idx = self.get_time_id(self.hours_start, first=True) + last_time_idx = self.get_time_id(self.hours_end, first=False) + t_len = last_time_idx - first_time_idx + axis_limits['t_min'] = ((t_len // self.size) * self.rank) + first_time_idx if self.rank + 1 < self.size: - axis_limits['t_max'] = ((t_len // self.size) * (self.rank + 1)) + spinup_idx + axis_limits['t_max'] = ((t_len // self.size) * (self.rank + 1)) + first_time_idx else: raise NotImplementedError("Parallel method '{meth}' is not implemented. Use one of these: {accept}".format( @@ -612,13 +621,16 @@ class Nes(object): """ # TIMES time_var = netcdf.createVariable('time', np.float64, ('time',), zlib=self.zip_lvl > 0, complevel=self.zip_lvl) - time_var.units = 'hours since {0}'.format(self._time[0].strftime("%Y-%m-%d %H:%M:%S")) + time_var.units = 'hours since {0}'.format( + self._time[self.get_time_id(self.hours_start, first=True)].strftime("%Y-%m-%d %H:%M:%S")) time_var.standard_name = "time" time_var.calendar = 'standard' time_var.long_name = "time" if self.size > 1: time_var.set_collective(True) - time_var[:] = date2num(self._time, time_var.units, calendar='standard') + time_var[:] = date2num(self._time[self.get_time_id(self.hours_start, first=True): + self.get_time_id(self.hours_end, first=False)], + time_var.units, calendar='standard') # LEVELS lev = netcdf.createVariable('lev', np.float64, ('lev',), zlib=self.zip_lvl > 0, complevel=self.zip_lvl) diff --git a/nes/nc_projections/latlon_nes.py b/nes/nc_projections/latlon_nes.py index e34d386..bf8e9f2 100644 --- a/nes/nc_projections/latlon_nes.py +++ b/nes/nc_projections/latlon_nes.py @@ -4,7 +4,7 @@ from nes.nc_projections.default_nes import Nes class LatLonNes(Nes): - def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, spinup_h=0, parallel_method='Y'): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): """ Initialize the LatLonNes class @@ -20,14 +20,22 @@ class LatLonNes(Nes): NetCDF4-python Dataset to initialize the class xarray: bool: (Not working) Indicates if you want to use xarray as default - spinup_h : int - Number of hours to remove from time. + avoid_first_hours : int + Number of hours to remove from first time steps. + avoid_last_hours : int + Number of hours to remove from last time steps. parallel_method : str Indicates the parallelization method that you want. Default over Y axis accepted values: ['Y', 'T'] """ - super(LatLonNes, self).__init__(comm=comm, path=path, info=info, dataset=dataset, xarray=xarray, - spinup_h=spinup_h, parallel_method=parallel_method) + super(LatLonNes, self).__init__(comm=comm, + path=path, + info=info, + dataset=dataset, + xarray=xarray, + avoid_first_hours=avoid_first_hours, + avoid_last_hours=avoid_last_hours, + parallel_method=parallel_method) self._var_dim = ('lat', 'lon') self._lat_dim = ('lat',) diff --git a/nes/nc_projections/rotated_nes.py b/nes/nc_projections/rotated_nes.py index de5c3c1..6f8cc8d 100644 --- a/nes/nc_projections/rotated_nes.py +++ b/nes/nc_projections/rotated_nes.py @@ -5,7 +5,7 @@ from cfunits import Units class RotatedNes(Nes): - def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, spinup_h=0, parallel_method='Y'): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): """ Initialize the RotatedNes class @@ -21,14 +21,22 @@ class RotatedNes(Nes): NetCDF4-python Dataset to initialize the class xarray: bool: (Not working) Indicates if you want to use xarray as default - spinup_h : int - Number of hours to remove from time. + avoid_first_hours : int + Number of hours to remove from first time steps. + avoid_last_hours : int + Number of hours to remove from last time steps. parallel_method : str Indicates the parallelization method that you want. Default over Y axis accepted values: ['Y', 'T'] """ - super(RotatedNes, self).__init__(comm=comm, path=path, info=info, dataset=dataset, xarray=xarray, - spinup_h=spinup_h, parallel_method=parallel_method) + super(RotatedNes, self).__init__(comm=comm, + path=path, + info=info, + dataset=dataset, + xarray=xarray, + avoid_first_hours=avoid_first_hours, + avoid_last_hours=avoid_last_hours, + parallel_method=parallel_method) self._rlat = self._get_coordinate_dimension('rlat') self._rlon = self._get_coordinate_dimension('rlon') -- GitLab From 547ffef19d2d777136a70e80e73ca3025ce6ed61 Mon Sep 17 00:00:00 2001 From: ctena Date: Fri, 29 Apr 2022 10:11:41 +0200 Subject: [PATCH 05/73] Code documentation --- nes/load_nes.py | 2 +- nes/nc_projections/default_nes.py | 113 +++++++++++++++++++++++++++++- nes/nc_projections/latlon_nes.py | 14 ++++ nes/nc_projections/rotated_nes.py | 37 +++++++--- 4 files changed, 156 insertions(+), 10 deletions(-) diff --git a/nes/load_nes.py b/nes/load_nes.py index 9706179..1f3bfdc 100644 --- a/nes/load_nes.py +++ b/nes/load_nes.py @@ -33,7 +33,7 @@ def open_netcdf(path, comm=None, xarray=False, info=False, avoid_first_hours=0, Returns ------- - nessy : Nes + Nes Nes object. Variables read in lazy mode (only metadata) """ if comm is None: diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index c9944d3..9c196f9 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -15,6 +15,70 @@ from copy import deepcopy class Nes(object): + """ + + Attributes + ---------- + comm : MPI.Communicator + rank : int + MPI rank + master : bool + True when rank == 0 + size : int + Size of the communicator + print_info : bool + Indicates if you want to print reading/writing info + is_xarray : bool + (Not working) Indicates if you want to use xarray as default + __ini_path : str + Path to the original file to read + hours_start : int + Number of hours to avoid from the first original values + hours_end : int + Number of hours to avoid from the last original values + dataset : xr.Dataset + (not working) xArray Dataset + netcdf : Dataset + netcdf4-python Dataset + variables : dict + Variables information. + The variables are stored in a dictionary with the var_name as key and another dictionary with the information. + The information dictionary contains the 'data' key with None (if the variable is not loaded) or the array values + and the other keys are the variable attributes or description. + _time : list + Complete list of original time step values. + _lev : dict + Vertical level dictionary with the complete 'data' key for all the values and the rest of the attributes. + _lat : dict + Latitudes dictionary with the complete 'data' key for all the values and the rest of the attributes. + _lon _ dict + Longitudes dictionary with the complete 'data' key for all the values and the rest of the attributes. + parallel_method : str + Parallel method to read/write. + Can be choosen any of the following axis to parallelize: 'T', 'Y' or 'X' + read_axis_limits : dict + Dictionary with the 4D limits of the rank data to read. + t_min, t_max, z_min, z_max, y_min, y_max, x_min and x_max + write_axis_limits : dict + Dictionary with the 4D limits of the rank data to write. + t_min, t_max, z_min, z_max, y_min, y_max, x_min and x_max + time : list + List of time steps of the rank data. + lev : dict + Vertical levels dictionary with the portion of 'data' corresponding to the rank values. + lat : dict + Latitudes dictionary with the portion of 'data' corresponding to the rank values. + lon : dict + Longitudes dictionary with the portion of 'data' corresponding to the rank values. + global_attrs : dict + Global attributes with the attribute name as key and data as values. + _var_dim : None, tuple + Tuple with the name of the Y and X dimensions for the variables + _lat_dim : None, tuple + Tuple with the name of the dimensions of the Latitude values + _lon_dim : None, tuple + Tuple with the name of the dimensions of the Longitude values + """ def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): """ @@ -77,9 +141,9 @@ class Nes(object): # Complete dimension self._time = self.__get_time() + self._lev = self._get_coordinate_dimension(['lev', 'level', 'lm']) self._lat = self._get_coordinate_dimension(['lat', 'latitude']) self._lon = self._get_coordinate_dimension(['lon', 'longitude']) - self._lev = self._get_coordinate_dimension(['lev', 'level', 'lm']) # Axis limits self.parallel_method = parallel_method @@ -183,7 +247,36 @@ class Nes(object): self.write_axis_limits = self.set_write_axis_limits() return None + def set_levels(self, levels): + """ + Modify the original level values with a new ones. + + Parameters + ---------- + levels : dict + Dictionary with the new level information to be set + """ + self._lev = deepcopy(levels) + self.lev = deepcopy(levels) + return None + def get_time_id(self, hours, first=True): + """ + Get the index of the corresponding time value. + + Parameters + ---------- + hours : int + Number of hours to avoid + first : bool + Indicates if youy want to avoid from the first hours (True) or from the last (False) + Default: True + + Returns + ------- + int + Possition of the time array + """ from datetime import timedelta if first: idx = self._time.index(self._time[0] + timedelta(hours=hours)) @@ -192,6 +285,15 @@ class Nes(object): return idx def set_read_axis_limits(self): + """ + Calculate the 4D reading axis limits + + Returns + ------- + dict + Dictionary with the 4D limits of the rank data to read. + t_min, t_max, z_min, z_max, y_min, y_max, x_min and x_max + """ axis_limits = {'x_min': None, 'x_max': None, 'y_min': None, 'y_max': None, 'z_min': None, 'z_max': None, @@ -227,6 +329,15 @@ class Nes(object): return axis_limits def set_write_axis_limits(self): + """ + Calculate the 4D writing axis limits + + Returns + ------- + dict + Dictionary with the 4D limits of the rank data to write. + t_min, t_max, z_min, z_max, y_min, y_max, x_min and x_max + """ axis_limits = {'x_min': None, 'x_max': None, 'y_min': None, 'y_max': None, 'z_min': None, 'z_max': None, diff --git a/nes/nc_projections/latlon_nes.py b/nes/nc_projections/latlon_nes.py index bf8e9f2..f67c872 100644 --- a/nes/nc_projections/latlon_nes.py +++ b/nes/nc_projections/latlon_nes.py @@ -4,6 +4,20 @@ from nes.nc_projections.default_nes import Nes class LatLonNes(Nes): + """ + + Attributes + ---------- + _var_dim : tuple + Tuple with the name of the Y and X dimensions for the variables. + ('lat', 'lon') for a regular latitude-longitude projection. + _lat_dim : tuple + Tuple with the name of the dimensions of the Latitude values. + ('lat',) for a regular latitude-longitude projection. + _lon_dim : tuple + Tuple with the name of the dimensions of the Longitude values. + ('lon',) for a regular latitude-longitude projection. + """ def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): """ Initialize the LatLonNes class diff --git a/nes/nc_projections/rotated_nes.py b/nes/nc_projections/rotated_nes.py index 6f8cc8d..cf2119e 100644 --- a/nes/nc_projections/rotated_nes.py +++ b/nes/nc_projections/rotated_nes.py @@ -5,6 +5,31 @@ from cfunits import Units class RotatedNes(Nes): + """ + + Attributes + ---------- + _rlat : dict + Rotated latitudes dictionary with the complete 'data' key for all the values and the rest of the attributes. + _rlon : dict + Rotated longitudes dictionary with the complete 'data' key for all the values and the rest of the attributes. + rlat : dict + Rotated latitudes dictionary with the portion of 'data' corresponding to the rank values. + rlon : dict + Rotated longitudes dictionary with the portion of 'data' corresponding to the rank values. + projection_data : dict + Dictionary with the projection information. + 'grid_north_pole_latitude' and 'grid_north_pole_longitude' keys + _var_dim : tuple + Tuple with the name of the Y and X dimensions for the variables. + ('rlat', 'rlon') for a rotated projection. + _lat_dim : tuple + Tuple with the name of the dimensions of the Latitude values. + ('rlat', 'rlon') for a rotated projection. + _lon_dim : tuple + Tuple with the name of the dimensions of the Longitude values. + ('rlat', 'rlon') for a rotated projection. + """ def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): """ Initialize the RotatedNes class @@ -29,14 +54,10 @@ class RotatedNes(Nes): Indicates the parallelization method that you want. Default over Y axis accepted values: ['Y', 'T'] """ - super(RotatedNes, self).__init__(comm=comm, - path=path, - info=info, - dataset=dataset, - xarray=xarray, - avoid_first_hours=avoid_first_hours, - avoid_last_hours=avoid_last_hours, - parallel_method=parallel_method) + super(RotatedNes, self).__init__(comm=comm, path=path, + info=info, dataset=dataset, + xarray=xarray, avoid_first_hours=avoid_first_hours, + avoid_last_hours=avoid_last_hours, parallel_method=parallel_method) self._rlat = self._get_coordinate_dimension('rlat') self._rlon = self._get_coordinate_dimension('rlon') -- GitLab From fd1994bcf4b14e348ef989fdbd95cd63d9bb0a1e Mon Sep 17 00:00:00 2001 From: ctena Date: Fri, 29 Apr 2022 10:16:37 +0200 Subject: [PATCH 06/73] Code documentation --- nes/load_nes.py | 3 ++- nes/nc_projections/default_nes.py | 3 ++- nes/nc_projections/latlon_nes.py | 3 ++- nes/nc_projections/rotated_nes.py | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/nes/load_nes.py b/nes/load_nes.py index 1f3bfdc..e9bdcb1 100644 --- a/nes/load_nes.py +++ b/nes/load_nes.py @@ -9,7 +9,8 @@ from nes.nc_projections.rotated_nes import RotatedNes from nes.nc_projections.latlon_nes import LatLonNes -def open_netcdf(path, comm=None, xarray=False, info=False, avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): +def open_netcdf(path, comm=None, xarray=False, info=False, + avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): """ Open a netCDF file diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index 9c196f9..9734159 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -647,7 +647,8 @@ class Nes(object): if self.variables[var_name]['data'] is None: self.variables[var_name]['data'] = self.__read_variable(var_name) if self.print_info: - print("Rank {0:03d}: Loaded {1} var ({2})".format(self.rank, var_name, self.variables[var_name]['data'].shape)) + print("Rank {0:03d}: Loaded {1} var ({2})".format( + self.rank, var_name, self.variables[var_name]['data'].shape)) if close: self.close() diff --git a/nes/nc_projections/latlon_nes.py b/nes/nc_projections/latlon_nes.py index f67c872..2e86b8e 100644 --- a/nes/nc_projections/latlon_nes.py +++ b/nes/nc_projections/latlon_nes.py @@ -18,7 +18,8 @@ class LatLonNes(Nes): Tuple with the name of the dimensions of the Longitude values. ('lon',) for a regular latitude-longitude projection. """ - def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, + avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): """ Initialize the LatLonNes class diff --git a/nes/nc_projections/rotated_nes.py b/nes/nc_projections/rotated_nes.py index cf2119e..812d521 100644 --- a/nes/nc_projections/rotated_nes.py +++ b/nes/nc_projections/rotated_nes.py @@ -30,7 +30,8 @@ class RotatedNes(Nes): Tuple with the name of the dimensions of the Longitude values. ('rlat', 'rlon') for a rotated projection. """ - def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, + avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): """ Initialize the RotatedNes class -- GitLab From b6808884f7dcbbef86d38742fb7561fd5ed812c6 Mon Sep 17 00:00:00 2001 From: ctena Date: Wed, 4 May 2022 13:01:56 +0200 Subject: [PATCH 07/73] Dropped crs var from Regular Lat-Lon projection --- nes/nc_projections/latlon_nes.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nes/nc_projections/latlon_nes.py b/nes/nc_projections/latlon_nes.py index 2e86b8e..609d801 100644 --- a/nes/nc_projections/latlon_nes.py +++ b/nes/nc_projections/latlon_nes.py @@ -56,6 +56,8 @@ class LatLonNes(Nes): self._lat_dim = ('lat',) self._lon_dim = ('lon',) + self.free_vars('crs') + def _create_dimensions(self, netcdf): """ Create the 'lat', 'lon' dimensions and the super dimensions ('lev', 'time'). -- GitLab From 74b0031fa893fe9d8965c97c482502e3867f8f2b Mon Sep 17 00:00:00 2001 From: Alba Vilanova Cortezon Date: Thu, 5 May 2022 14:58:36 +0200 Subject: [PATCH 08/73] #1 Add time bounds --- .gitignore | 9 ++++++- nes/nc_projections/default_nes.py | 39 +++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 723ef36..695ff4b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,8 @@ -.idea \ No newline at end of file +.idea +logs +tests/basic_nes_tests_alba.py +tests/test_bash_nord3v2-alba.cmd +notebooks/.ipynb_checkpoints +.ipynb_checkpoints +nes/__pycache__ +nes/nc_projections/__pycache__ \ No newline at end of file diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index 9734159..c675c6d 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -144,6 +144,7 @@ class Nes(object): self._lev = self._get_coordinate_dimension(['lev', 'level', 'lm']) self._lat = self._get_coordinate_dimension(['lat', 'latitude']) self._lon = self._get_coordinate_dimension(['lon', 'longitude']) + self._time_bnds = self.__get_time_bnds() # Axis limits self.parallel_method = parallel_method @@ -155,7 +156,8 @@ class Nes(object): self.lev = self._get_coordinate_values(self._lev, 'Z') self.lat = self._get_coordinate_values(self._lat, 'Y') self.lon = self._get_coordinate_values(self._lon, 'X') - + self.time_bnds = self._time_bnds + self.write_axis_limits = self.set_write_axis_limits() # NetCDF attributes @@ -468,6 +470,29 @@ class Nes(object): self.free_vars('time') return time + def __get_time_bnds(self): + """ + Get the NetCDF time bounds values + + Returns + ------- + time : list + List of time bounds (datetime) of the NetCDF data + """ + if self.is_xarray: + time = self.variables['time_bnds'] + else: + if self.master: + if 'time_bnds' in self.netcdf.variables.keys(): + nc_var = self.netcdf.variables['time_bnds'] + time_bnds = nc_var[:] + else: + time_bnds = None + else: + time_bnds = None + time_bnds = self.comm.bcast(time_bnds, root=0) + return time_bnds + def _get_coordinate_dimension(self, possible_names): """ Read the coordinate dimension data. @@ -719,6 +744,7 @@ class Nes(object): """ netcdf.createDimension('time', None) netcdf.createDimension('lev', len(self._lev['data'])) + netcdf.createDimension('time_nv', 2) return None @@ -738,15 +764,24 @@ class Nes(object): time_var.standard_name = "time" time_var.calendar = 'standard' time_var.long_name = "time" + if self._time_bnds is not None: + time_var.bounds = 'time_bnds' if self.size > 1: time_var.set_collective(True) time_var[:] = date2num(self._time[self.get_time_id(self.hours_start, first=True): self.get_time_id(self.hours_end, first=False)], time_var.units, calendar='standard') + # TIME BOUNDS + time_bnds_var = netcdf.createVariable('time_bnds', np.float64, ('time', 'time_nv',), zlib=self.zip_lvl, + complevel=self.zip_lvl) + if self.size > 1: + time_bnds_var.set_collective(True) + time_bnds_var[:] = self._time_bnds + # LEVELS lev = netcdf.createVariable('lev', np.float64, ('lev',), zlib=self.zip_lvl > 0, complevel=self.zip_lvl) - lev.units = Units(self._lev['units'], formatted=True).units + lev.units = self._lev['units'] lev.positive = 'up' if self.size > 1: lev.set_collective(True) -- GitLab From d70081718e84da8d4890c7bb5b80dde4d4fc59d4 Mon Sep 17 00:00:00 2001 From: Alba Vilanova Cortezon Date: Mon, 9 May 2022 13:15:24 +0200 Subject: [PATCH 09/73] #1 Add time bounds - Add warnings and improve --- nes/nc_projections/default_nes.py | 169 +++++++++++++++++++----------- 1 file changed, 105 insertions(+), 64 deletions(-) diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index c675c6d..0d9f799 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -2,6 +2,7 @@ import sys import os +from urllib.parse import _NetlocResultMixinStr import warnings import numpy as np from pandas import DataFrame, read_csv @@ -12,7 +13,7 @@ from mpi4py import MPI from cfunits import Units from numpy.ma.core import MaskError from copy import deepcopy - +import datetime class Nes(object): """ @@ -251,7 +252,7 @@ class Nes(object): def set_levels(self, levels): """ - Modify the original level values with a new ones. + Modify the original level values with new ones. Parameters ---------- @@ -262,6 +263,35 @@ class Nes(object): self.lev = deepcopy(levels) return None + def set_time_bnds(self, time_bnds): + """ + Modify the original time bounds values with new ones. + + Parameters + ---------- + time_bnds : list + List with the new time bounds information to be set + """ + correct_format = True + for time_bnd in np.array(time_bnds).flatten(): + if not isinstance(time_bnd, datetime.datetime): + print(f'{time_bnd} is not a datetime object') + correct_format = False + if correct_format: + if len(self._time) == len(time_bnds): + self._time_bnds = deepcopy(time_bnds) + self.time_bnds = deepcopy(time_bnds) + else: + msg = 'WARNING!!! ' + msg += 'The given time bounds list has a different length than the time array. Time bounds will not be set.' + warnings.warn(msg) + else: + msg = 'WARNING!!! ' + msg += 'There is at least one element in the time bounds to be set that is not a datetime object. ' + msg += 'Time bounds will not be set.' + warnings.warn(msg) + return None + def get_time_id(self, hours, first=True): """ Get the index of the corresponding time value. @@ -480,17 +510,19 @@ class Nes(object): List of time bounds (datetime) of the NetCDF data """ if self.is_xarray: - time = self.variables['time_bnds'] + time_bnds = self.variables['time_bnds'] else: if self.master: if 'time_bnds' in self.netcdf.variables.keys(): + time = self.netcdf.variables['time'] nc_var = self.netcdf.variables['time_bnds'] - time_bnds = nc_var[:] + time_bnds = num2date(nc_var[:], self.__parse_time_unit(time.units), calendar=time.calendar).tolist() else: time_bnds = None else: time_bnds = None time_bnds = self.comm.bcast(time_bnds, root=0) + self.free_vars('time_bnds') return time_bnds def _get_coordinate_dimension(self, possible_names): @@ -518,6 +550,8 @@ class Nes(object): else: nc_var = self.variables[dimension_name].copy() nc_var['data'] = self.netcdf.variables[dimension_name][:] + if nc_var['units'] in ['unitless', '-']: + nc_var['units'] = '' self.free_vars(dimension_name) return nc_var @@ -593,7 +627,7 @@ class Nes(object): # Avoiding some attributes if attrname not in ['missing_value', '_FillValue']: value = getattr(var_info, attrname) - if value == 'unitless': + if value in ['unitless', '-']: value = '' variables[var_name][attrname] = value else: @@ -744,7 +778,8 @@ class Nes(object): """ netcdf.createDimension('time', None) netcdf.createDimension('lev', len(self._lev['data'])) - netcdf.createDimension('time_nv', 2) + if self._time_bnds is not None: + netcdf.createDimension('time_nv', 2) return None @@ -773,15 +808,16 @@ class Nes(object): time_var.units, calendar='standard') # TIME BOUNDS - time_bnds_var = netcdf.createVariable('time_bnds', np.float64, ('time', 'time_nv',), zlib=self.zip_lvl, - complevel=self.zip_lvl) - if self.size > 1: - time_bnds_var.set_collective(True) - time_bnds_var[:] = self._time_bnds + if self._time_bnds is not None: + time_bnds_var = netcdf.createVariable('time_bnds', np.float64, ('time', 'time_nv',), zlib=self.zip_lvl, + complevel=self.zip_lvl) + if self.size > 1: + time_bnds_var.set_collective(True) + time_bnds_var[:] = date2num(self._time_bnds, time_var.units, calendar='standard') # LEVELS lev = netcdf.createVariable('lev', np.float64, ('lev',), zlib=self.zip_lvl > 0, complevel=self.zip_lvl) - lev.units = self._lev['units'] + lev.units = Units(self._lev['units'], formatted=True).units lev.positive = 'up' if self.size > 1: lev.set_collective(True) @@ -821,66 +857,71 @@ class Nes(object): Indicates if you want to chunk the output netCDF """ for i, (var_name, var_dict) in enumerate(self.variables.items()): - if self.print_info: - print("Rank {0:03d}: Writing {1} var ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) - try: - if not chunking: - var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self._var_dim, - zlib=self.zip_lvl > 0, complevel=self.zip_lvl) - else: - if self.master: - chunk_size = var_dict['data'].shape - else: - chunk_size = None - chunk_size = self.comm.bcast(chunk_size, root=0) - var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self._var_dim, - zlib=self.zip_lvl > 0, complevel=self.zip_lvl, chunksizes=chunk_size) + if var_dict['data'] is not None: if self.print_info: - print("Rank {0:03d}: Var {1} created ({2}/{3})".format( - self.rank, var_name, i + 1, len(self.variables))) - if self.size > 1: - var.set_collective(True) + print("Rank {0:03d}: Writing {1} var ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) + try: + if not chunking: + var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self._var_dim, + zlib=self.zip_lvl > 0, complevel=self.zip_lvl) + else: + if self.master: + chunk_size = var_dict['data'].shape + else: + chunk_size = None + chunk_size = self.comm.bcast(chunk_size, root=0) + var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self._var_dim, + zlib=self.zip_lvl > 0, complevel=self.zip_lvl, chunksizes=chunk_size) if self.print_info: - print("Rank {0:03d}: Var {1} collective ({2}/{3})".format( + print("Rank {0:03d}: Var {1} created ({2}/{3})".format( self.rank, var_name, i + 1, len(self.variables))) + if self.size > 1: + var.set_collective(True) + if self.print_info: + print("Rank {0:03d}: Var {1} collective ({2}/{3})".format( + self.rank, var_name, i + 1, len(self.variables))) + + for att_name, att_value in var_dict.items(): + if att_name == 'data': - for att_name, att_value in var_dict.items(): - if att_name == 'data': - - try: - var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], - self.write_axis_limits['z_min']:self.write_axis_limits['z_max'], - self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - self.write_axis_limits['x_min']:self.write_axis_limits['x_max']] = att_value - except ValueError: - var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], - 0, - self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - self.write_axis_limits['x_min']:self.write_axis_limits['x_max']] = att_value - # msg = "*WARNING* '{0}' variable is a 3D field. Setting it on first (0) layer.".format( - # var_name) - # warn(msg) - except IndexError: - raise IndexError("Different shapes. out_shape={0}, data_shp={1}".format( + try: var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], self.write_axis_limits['z_min']:self.write_axis_limits['z_max'], self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - self.write_axis_limits['x_min']:self.write_axis_limits['x_max']].shape, - att_value.shape)) - if self.print_info: - print("Rank {0:03d}: Var {1} data ({2}/{3})".format(self.rank, var_name, i + 1, + self.write_axis_limits['x_min']:self.write_axis_limits['x_max']] = att_value + except ValueError: + var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], + 0, + self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max']] = att_value + # msg = "*WARNING* '{0}' variable is a 3D field. Setting it on first (0) layer.".format( + # var_name) + # warn(msg) + except IndexError: + raise IndexError("Different shapes. out_shape={0}, data_shp={1}".format( + var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], + self.write_axis_limits['z_min']:self.write_axis_limits['z_max'], + self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max']].shape, + att_value.shape)) + if self.print_info: + print("Rank {0:03d}: Var {1} data ({2}/{3})".format(self.rank, var_name, i + 1, + len(self.variables))) + elif att_name not in ['chunk_size', 'var_dims', 'dimensions']: + var.setncattr(att_name, att_value) + self._set_var_crs(var) + if self.print_info: + print("Rank {0:03d}: Var {1} completed ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) - elif att_name not in ['chunk_size', 'var_dims', 'dimensions']: - var.setncattr(att_name, att_value) - self._set_var_crs(var) - if self.print_info: - print("Rank {0:03d}: Var {1} completed ({2}/{3})".format(self.rank, var_name, i + 1, - len(self.variables))) - except Exception as e: - print("**ERROR** an error has occur while writing the '{0}' variable".format(var_name)) - # print("**ERROR** an error hase occur while writing the '{0}' variable".format(var_name), - # file=sys.stderr) - raise e + except Exception as e: + print("**ERROR** an error has occurred while writing the '{0}' variable".format(var_name)) + # print("**ERROR** an error hase occurred while writing the '{0}' variable".format(var_name), + # file=sys.stderr) + raise e + else: + msg = 'WARNING!!! ' + msg += 'Variable {0} was not loaded. It will not be written.'.format(var_name) + warnings.warn(msg) return None -- GitLab From 69a1ce809e2c12b9158a82c9008e339ba43d391e Mon Sep 17 00:00:00 2001 From: ctena Date: Tue, 10 May 2022 13:55:15 +0200 Subject: [PATCH 10/73] Loading always 4D variables --- nes/nc_projections/default_nes.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index 0d9f799..9ca9c5f 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -522,7 +522,8 @@ class Nes(object): else: time_bnds = None time_bnds = self.comm.bcast(time_bnds, root=0) - self.free_vars('time_bnds') + if 'time_bnds' in self.netcdf.variables.keys(): + self.free_vars('time_bnds') return time_bnds def _get_coordinate_dimension(self, possible_names): @@ -655,10 +656,12 @@ class Nes(object): if len(var_dims) == 2: data = nc_var[self.read_axis_limits['y_min']:self.read_axis_limits['y_max'], self.read_axis_limits['x_min']:self.read_axis_limits['x_max']] + data = data.reshape(1, 1, data.shape[-2], data.shape[-1]) elif len(var_dims) == 3: data = nc_var[self.read_axis_limits['t_min']:self.read_axis_limits['t_max'], self.read_axis_limits['y_min']:self.read_axis_limits['y_max'], self.read_axis_limits['x_min']:self.read_axis_limits['x_max']] + data = data.reshape(data.shape[-3], 1, data.shape[-2], data.shape[-1]) elif len(var_dims) == 4: data = nc_var[self.read_axis_limits['t_min']:self.read_axis_limits['t_max'], self.read_axis_limits['z_min']:self.read_axis_limits['z_max'], -- GitLab From 5d21c11965618139274744d96d2f78d49ee9e817 Mon Sep 17 00:00:00 2001 From: ctena Date: Wed, 11 May 2022 16:28:54 +0200 Subject: [PATCH 11/73] Added level selection --- nes/load_nes.py | 25 +++++++++---------------- nes/nc_projections/default_nes.py | 20 +++++++++++++++++--- nes/nc_projections/latlon_nes.py | 16 ++++++---------- nes/nc_projections/rotated_nes.py | 9 +++++---- 4 files changed, 37 insertions(+), 33 deletions(-) diff --git a/nes/load_nes.py b/nes/load_nes.py index e9bdcb1..c5e8240 100644 --- a/nes/load_nes.py +++ b/nes/load_nes.py @@ -9,8 +9,8 @@ from nes.nc_projections.rotated_nes import RotatedNes from nes.nc_projections.latlon_nes import LatLonNes -def open_netcdf(path, comm=None, xarray=False, info=False, - avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): +def open_netcdf(path, comm=None, xarray=False, info=False, parallel_method='Y', + avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None): """ Open a netCDF file @@ -52,21 +52,14 @@ def open_netcdf(path, comm=None, xarray=False, info=False, # Rotated if __is_rotated(dataset): - nessy = RotatedNes(comm=comm, - dataset=dataset, - xarray=xarray, - info=info, - avoid_first_hours=avoid_first_hours, - avoid_last_hours=avoid_last_hours, - parallel_method=parallel_method) + nessy = RotatedNes(comm=comm, dataset=dataset, xarray=xarray, info=info, parallel_method=parallel_method, + avoid_first_hours=avoid_first_hours, avoid_last_hours=avoid_last_hours, + first_level=first_level, last_level=last_level + ) else: - nessy = LatLonNes(comm=comm, - dataset=dataset, - xarray=xarray, - info=info, - avoid_first_hours=avoid_first_hours, - avoid_last_hours=avoid_last_hours, - parallel_method=parallel_method) + nessy = LatLonNes(comm=comm, dataset=dataset, xarray=xarray, info=info, parallel_method=parallel_method, + avoid_first_hours=avoid_first_hours, avoid_last_hours=avoid_last_hours, + first_level=first_level, last_level=last_level) return nessy diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index 9ca9c5f..6e4163a 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -80,8 +80,8 @@ class Nes(object): _lon_dim : None, tuple Tuple with the name of the dimensions of the Longitude values """ - def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, avoid_first_hours=0, - avoid_last_hours=0, parallel_method='Y'): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, parallel_method='Y', + avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None): """ Initialize the Nes class @@ -118,8 +118,12 @@ class Nes(object): self.print_info = info self.is_xarray = xarray self.__ini_path = path + + # Selecting info self.hours_start = avoid_first_hours self.hours_end = avoid_last_hours + self.first_level = first_level + self.last_level = last_level # NetCDF object if dataset is not None: @@ -358,6 +362,16 @@ class Nes(object): else: raise NotImplementedError("Parallel method '{meth}' is not implemented. Use one of these: {accept}".format( meth=self.parallel_method, accept=['Y'])) + + # Verical levels selection: + axis_limits['z_min'] = self.first_level + if self.last_level == -1 or self.last_level is None: + self.last_level = None + elif self.last_level +1 == len(self._lev['data']): + self.last_level = None + else: + self.last_level += 1 + axis_limits['z_max'] = self.last_level return axis_limits def set_write_axis_limits(self): @@ -780,7 +794,7 @@ class Nes(object): netcdf4-python opened Dataset """ netcdf.createDimension('time', None) - netcdf.createDimension('lev', len(self._lev['data'])) + netcdf.createDimension('lev', len(self.lev['data'])) if self._time_bnds is not None: netcdf.createDimension('time_nv', 2) diff --git a/nes/nc_projections/latlon_nes.py b/nes/nc_projections/latlon_nes.py index 609d801..d5ec6fb 100644 --- a/nes/nc_projections/latlon_nes.py +++ b/nes/nc_projections/latlon_nes.py @@ -18,8 +18,8 @@ class LatLonNes(Nes): Tuple with the name of the dimensions of the Longitude values. ('lon',) for a regular latitude-longitude projection. """ - def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, - avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, parallel_method='Y', + avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None): """ Initialize the LatLonNes class @@ -43,14 +43,10 @@ class LatLonNes(Nes): Indicates the parallelization method that you want. Default over Y axis accepted values: ['Y', 'T'] """ - super(LatLonNes, self).__init__(comm=comm, - path=path, - info=info, - dataset=dataset, - xarray=xarray, - avoid_first_hours=avoid_first_hours, - avoid_last_hours=avoid_last_hours, - parallel_method=parallel_method) + super(LatLonNes, self).__init__(comm=comm, path=path, info=info, dataset=dataset, + xarray=xarray, parallel_method=parallel_method, + avoid_first_hours=avoid_first_hours, avoid_last_hours=avoid_last_hours, + first_level=first_level, last_level=last_level) self._var_dim = ('lat', 'lon') self._lat_dim = ('lat',) diff --git a/nes/nc_projections/rotated_nes.py b/nes/nc_projections/rotated_nes.py index 812d521..0698405 100644 --- a/nes/nc_projections/rotated_nes.py +++ b/nes/nc_projections/rotated_nes.py @@ -30,8 +30,8 @@ class RotatedNes(Nes): Tuple with the name of the dimensions of the Longitude values. ('rlat', 'rlon') for a rotated projection. """ - def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, - avoid_first_hours=0, avoid_last_hours=0, parallel_method='Y'): + def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, parallel_method='Y', + avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None): """ Initialize the RotatedNes class @@ -57,8 +57,9 @@ class RotatedNes(Nes): """ super(RotatedNes, self).__init__(comm=comm, path=path, info=info, dataset=dataset, - xarray=xarray, avoid_first_hours=avoid_first_hours, - avoid_last_hours=avoid_last_hours, parallel_method=parallel_method) + xarray=xarray, parallel_method=parallel_method, + avoid_first_hours=avoid_first_hours, avoid_last_hours=avoid_last_hours, + first_level=first_level, last_level=last_level) self._rlat = self._get_coordinate_dimension('rlat') self._rlon = self._get_coordinate_dimension('rlon') -- GitLab From 02f5ba3dece10e8982170d15334c36dd080545d6 Mon Sep 17 00:00:00 2001 From: Alba Vilanova Date: Wed, 18 May 2022 12:04:23 +0200 Subject: [PATCH 12/73] #10 Implement creation of regular grids --- jupyter_notebooks/jupyter_bash_nord3v2.cmd | 36 ++ .../jupyter_test_create_netcdf.ipynb | 463 ++++++++++++++++++ nes/__init__.py | 1 + nes/create_nes.py | 48 ++ nes/load_nes.py | 12 +- nes/nc_projections/default_nes.py | 255 +++++----- nes/nc_projections/latlon_nes.py | 34 +- nes/nc_projections/rotated_nes.py | 6 +- 8 files changed, 732 insertions(+), 123 deletions(-) create mode 100644 jupyter_notebooks/jupyter_bash_nord3v2.cmd create mode 100644 jupyter_notebooks/jupyter_test_create_netcdf.ipynb create mode 100644 nes/create_nes.py diff --git a/jupyter_notebooks/jupyter_bash_nord3v2.cmd b/jupyter_notebooks/jupyter_bash_nord3v2.cmd new file mode 100644 index 0000000..805ec0d --- /dev/null +++ b/jupyter_notebooks/jupyter_bash_nord3v2.cmd @@ -0,0 +1,36 @@ +#!/bin/bash +#SBATCH --ntasks 1 +#SBATCH --time 03:00:00 +#SBATCH --job-name jupyter-notebook +#SBATCH --output logs/log_jupyter-notebook-%J.out +#SBATCH --error logs/log_jupyter-notebook-%J.err +#SBATCH --exclusive + +# get tunneling info +XDG_RUNTIME_DIR="" +port=$(shuf -i8000-9999 -n1) +node=$(hostname -s) +user=$(whoami) + +# print tunneling instructions jupyter-log +echo -e " + +MacOS or linux terminal command to create your ssh tunnel +ssh -N -L ${port}:${node}:${port} ${user}@nord4.bsc.es + +Use a Browser on your local machine to go to: +localhost:${port} (prefix w/ https:// if using password) +" + +# load modules or conda environments here +module load jupyterlab/3.0.9-foss-2019b-Python-3.7.4 +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.19.0-foss-2019b-Python-3.7.4 + +export PYTHONPATH=/esarchive/scratch/avilanova/software/NES:${PYTHONPATH} + +# DON'T USE ADDRESS BELOW. +# DO USE TOKEN BELOW +jupyter-lab --no-browser --port=${port} --ip=${node} \ No newline at end of file diff --git a/jupyter_notebooks/jupyter_test_create_netcdf.ipynb b/jupyter_notebooks/jupyter_test_create_netcdf.ipynb new file mode 100644 index 0000000..f0f42d8 --- /dev/null +++ b/jupyter_notebooks/jupyter_test_create_netcdf.ipynb @@ -0,0 +1,463 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from nes import *\n", + "import xarray as xr" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "lat_orig = 41.1\n", + "lon_orig = 1.8\n", + "inc_lat = 0.1\n", + "inc_lon = 0.1\n", + "n_lat = 10\n", + "n_lon = 10\n", + "nessy2 = create_nes(comm=None, info=False, projection='regular', create_nes=True,\n", + " lat_orig=lat_orig, lon_orig=lon_orig, inc_lat=inc_lat, inc_lon=inc_lon, \n", + " n_lat=n_lat, n_lon=n_lon)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rank 000: Creating regular_grid.nc\n", + "Rank 000: NetCDF ready to write\n", + "Rank 000: Dimensions done\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:  (time: 1, lev: 1, lat: 10, lon: 10)\n",
+       "Coordinates:\n",
+       "  * time     (time) datetime64[ns] 1996-12-31\n",
+       "  * lev      (lev) float64 0.0\n",
+       "  * lat      (lat) float64 41.15 41.25 41.35 41.45 ... 41.75 41.85 41.95 42.05\n",
+       "  * lon      (lon) float64 1.85 1.95 2.05 2.15 2.25 2.35 2.45 2.55 2.65 2.75\n",
+       "Data variables:\n",
+       "    crs      |S1 b''\n",
+       "Attributes:\n",
+       "    Conventions:  CF-1.7
" + ], + "text/plain": [ + "\n", + "Dimensions: (time: 1, lev: 1, lat: 10, lon: 10)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 1996-12-31\n", + " * lev (lev) float64 0.0\n", + " * lat (lat) float64 41.15 41.25 41.35 41.45 ... 41.75 41.85 41.95 42.05\n", + " * lon (lon) float64 1.85 1.95 2.05 2.15 2.25 2.35 2.45 2.55 2.65 2.75\n", + "Data variables:\n", + " crs |S1 ...\n", + "Attributes:\n", + " Conventions: CF-1.7" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy2.to_netcdf('regular_grid.nc', info=True)\n", + "xr.open_dataset('regular_grid.nc')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/nes/__init__.py b/nes/__init__.py index ec5b69a..1f42991 100644 --- a/nes/__init__.py +++ b/nes/__init__.py @@ -2,3 +2,4 @@ __date__ = "2022-MM-DD" __version__ = "0.0.0" from nes.load_nes import open_netcdf +from nes.create_nes import create_nes diff --git a/nes/create_nes.py b/nes/create_nes.py new file mode 100644 index 0000000..5c98349 --- /dev/null +++ b/nes/create_nes.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python + +import sys +import os +from venv import create +from mpi4py import MPI +import warnings +from nes.nc_projections.rotated_nes import RotatedNes +from nes.nc_projections.latlon_nes import LatLonNes + +def create_nes(comm=None, info=False, projection=None, create_nes=True, **kwargs): + + if comm is None: + comm = MPI.COMM_WORLD + else: + comm = comm + + # Check if the parameters that are required to create the object have been defined in kwargs + kwargs_list = [] + for name, value in kwargs.items(): + kwargs_list.append(name) + + if projection == 'regular': + required_vars = ['lat_orig', 'lon_orig', 'inc_lat', 'inc_lon', 'n_lat', 'n_lon'] + elif projection == 'rotated': + required_vars = ['centre_lat', 'centre_lon', 'west_boundary', 'south_boundary', 'inc_rlat', 'inc_rlon'] + elif projection == 'lcc': + required_vars = ['lat_1', 'lat_2', 'lon_0', 'lat_0', 'nx', 'ny', 'inc_x', 'inc_y', 'x_0', 'y_0'] + elif projection == 'mercator': + required_vars = ['lat_ts', 'lon_0', 'nx', 'ny', 'inc_x', 'inc_y', 'x_0', 'y_0'] + + for var in required_vars: + if var not in kwargs_list: + msg = 'WARNING!!! ' + msg += 'Variable {0} has not been defined.'.format(var) + warnings.warn(msg) + + if projection == 'regular': + nessy = LatLonNes(comm=comm, dataset=None, xarray=None, info=info, parallel_method=None, + avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None, + create_nes=create_nes, **kwargs) + + elif projection == 'rotated': + nessy = RotatedNes(comm=comm, dataset=None, xarray=None, info=info, parallel_method=None, + avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None, + create_nes=create_nes, **kwargs) + + return nessy \ No newline at end of file diff --git a/nes/load_nes.py b/nes/load_nes.py index c5e8240..699275b 100644 --- a/nes/load_nes.py +++ b/nes/load_nes.py @@ -2,6 +2,7 @@ import sys import os +from venv import create from mpi4py import MPI from netCDF4 import Dataset from nes.nc_projections.default_nes import Nes @@ -10,7 +11,8 @@ from nes.nc_projections.latlon_nes import LatLonNes def open_netcdf(path, comm=None, xarray=False, info=False, parallel_method='Y', - avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None): + avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None, + create_nes=False): """ Open a netCDF file @@ -54,16 +56,14 @@ def open_netcdf(path, comm=None, xarray=False, info=False, parallel_method='Y', if __is_rotated(dataset): nessy = RotatedNes(comm=comm, dataset=dataset, xarray=xarray, info=info, parallel_method=parallel_method, avoid_first_hours=avoid_first_hours, avoid_last_hours=avoid_last_hours, - first_level=first_level, last_level=last_level - ) + first_level=first_level, last_level=last_level, create_nes=create_nes) else: nessy = LatLonNes(comm=comm, dataset=dataset, xarray=xarray, info=info, parallel_method=parallel_method, avoid_first_hours=avoid_first_hours, avoid_last_hours=avoid_last_hours, - first_level=first_level, last_level=last_level) + first_level=first_level, last_level=last_level, create_nes=create_nes) return nessy - def __is_rotated(dataset): """ Check if the netCDF is in rotated pole projection or not. @@ -82,5 +82,3 @@ def __is_rotated(dataset): return True else: return False - - diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index 6e4163a..c661792 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -81,7 +81,8 @@ class Nes(object): Tuple with the name of the dimensions of the Longitude values """ def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, parallel_method='Y', - avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None): + avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None, create_nes=False, + **kwargs): """ Initialize the Nes class @@ -126,47 +127,61 @@ class Nes(object): self.last_level = last_level # NetCDF object - if dataset is not None: - if self.is_xarray: - self.dataset = dataset - self.netcdf = None - else: - self.dataset = None - self.netcdf = dataset - elif self.__ini_path is not None: - if self.is_xarray: - self.dataset = self.__open_dataset() - self.netcdf = None - else: - self.dataset = None - self.netcdf = self.__open_netcdf4() + if create_nes: + self.variables = None - # Lazy variables - self.variables = self.__get_lazy_variables() + self._time = self.__get_time(create_nes) + self._time_bnds = self.__get_time_bnds(create_nes) - # Complete dimension - self._time = self.__get_time() - self._lev = self._get_coordinate_dimension(['lev', 'level', 'lm']) - self._lat = self._get_coordinate_dimension(['lat', 'latitude']) - self._lon = self._get_coordinate_dimension(['lon', 'longitude']) - self._time_bnds = self.__get_time_bnds() + self._lev = {'data': np.array([0]), + 'units': '', + 'positive': 'up'} + self.lev = deepcopy(self._lev) - # Axis limits - self.parallel_method = parallel_method - - self.read_axis_limits = self.set_read_axis_limits() + self._lat, self._lon = self._create_centroids(**kwargs) - # Dimensions screening - self.time = self._time[self.read_axis_limits['t_min']:self.read_axis_limits['t_max']] - self.lev = self._get_coordinate_values(self._lev, 'Z') - self.lat = self._get_coordinate_values(self._lat, 'Y') - self.lon = self._get_coordinate_values(self._lon, 'X') - self.time_bnds = self._time_bnds - - self.write_axis_limits = self.set_write_axis_limits() + self.global_attrs = self.__get_global_attributes(create_nes) + else: + if dataset is not None: + if self.is_xarray: + self.dataset = dataset + self.netcdf = None + else: + self.dataset = None + self.netcdf = dataset + elif self.__ini_path is not None: + if self.is_xarray: + self.dataset = self.__open_dataset() + self.netcdf = None + else: + self.dataset = None + self.netcdf = self.__open_netcdf4() + + # Lazy variables + self.variables = self.__get_lazy_variables() + + # Complete dimension + self._time = self.__get_time() + self._lev = self._get_coordinate_dimension(['lev', 'level', 'lm']) + self._lat = self._get_coordinate_dimension(['lat', 'latitude']) + self._lon = self._get_coordinate_dimension(['lon', 'longitude']) + self._time_bnds = self.__get_time_bnds() + + # Axis limits + self.parallel_method = parallel_method + self.read_axis_limits = self.set_read_axis_limits() + + # Dimensions screening + self.time = self._time[self.read_axis_limits['t_min']:self.read_axis_limits['t_max']] + self.lev = self._get_coordinate_values(self._lev, 'Z') + self.lat = self._get_coordinate_values(self._lat, 'Y') + self.lon = self._get_coordinate_values(self._lon, 'X') + self.time_bnds = self._time_bnds + + self.write_axis_limits = self.set_write_axis_limits() - # NetCDF attributes - self.global_attrs = self.__get_global_attributes() + # NetCDF attributes + self.global_attrs = self.__get_global_attributes() # Writing options self.zip_lvl = 0 @@ -305,13 +320,13 @@ class Nes(object): hours : int Number of hours to avoid first : bool - Indicates if youy want to avoid from the first hours (True) or from the last (False) + Indicates if you want to avoid from the first hours (True) or from the last (False) Default: True Returns ------- int - Possition of the time array + Position of the time array """ from datetime import timedelta if first: @@ -492,7 +507,7 @@ class Nes(object): t_units[4:8], t_units[8:10], t_units[10:12], t_units[13:15], t_units[15:17], t_units[17:-4]) return t_units - def __get_time(self): + def __get_time(self, create_nes=False): """ Get the NetCDF time values @@ -505,8 +520,13 @@ class Nes(object): time = self.variables['time'] else: if self.master: - nc_var = self.netcdf.variables['time'] - time = num2date(nc_var[:], self.__parse_time_unit(nc_var.units), calendar=nc_var.calendar) + if create_nes: + units = "days since 1996-12-31 00:00:00" + calendar = "gregorian" + time = num2date([0.], units=units, calendar=calendar) + else: + nc_var = self.netcdf.variables['time'] + time = num2date(nc_var[:], self.__parse_time_unit(nc_var.units), calendar=nc_var.calendar) time = [aux.replace(second=0, microsecond=0) for aux in time] else: time = None @@ -514,7 +534,7 @@ class Nes(object): self.free_vars('time') return time - def __get_time_bnds(self): + def __get_time_bnds(self, create_nes=False): """ Get the NetCDF time bounds values @@ -527,17 +547,21 @@ class Nes(object): time_bnds = self.variables['time_bnds'] else: if self.master: - if 'time_bnds' in self.netcdf.variables.keys(): - time = self.netcdf.variables['time'] - nc_var = self.netcdf.variables['time_bnds'] - time_bnds = num2date(nc_var[:], self.__parse_time_unit(time.units), calendar=time.calendar).tolist() + if not create_nes: + if 'time_bnds' in self.netcdf.variables.keys(): + time = self.netcdf.variables['time'] + nc_var = self.netcdf.variables['time_bnds'] + time_bnds = num2date(nc_var[:], self.__parse_time_unit(time.units), calendar=time.calendar).tolist() + else: + time_bnds = None else: time_bnds = None else: time_bnds = None time_bnds = self.comm.bcast(time_bnds, root=0) - if 'time_bnds' in self.netcdf.variables.keys(): - self.free_vars('time_bnds') + + self.free_vars('time_bnds') + return time_bnds def _get_coordinate_dimension(self, possible_names): @@ -569,6 +593,7 @@ class Nes(object): nc_var['units'] = '' self.free_vars(dimension_name) + return nc_var def _get_coordinate_values(self, coordinate_info, coordinate_axis): @@ -730,7 +755,7 @@ class Nes(object): self.close() return None - def __get_global_attributes(self): + def __get_global_attributes(self, create_nes=False): """ Read the netcdf global attributes @@ -743,8 +768,9 @@ class Nes(object): if self.is_xarray: gl_attrs = self.dataset.attrs else: - for attrname in self.netcdf.ncattrs(): - gl_attrs[attrname] = getattr(self.netcdf, attrname) + if not create_nes: + for attrname in self.netcdf.ncattrs(): + gl_attrs[attrname] = getattr(self.netcdf, attrname) return gl_attrs def free_vars(self, var_list): @@ -764,7 +790,9 @@ class Nes(object): self.variables = self.__get_lazy_variables() else: for var_name in var_list: - del self.variables[var_name] + if self.variables is not None: + if var_name in self.variables: + del self.variables[var_name] return None def keep_vars(self, var_list): @@ -873,73 +901,78 @@ class Nes(object): chunking : bool Indicates if you want to chunk the output netCDF """ - for i, (var_name, var_dict) in enumerate(self.variables.items()): - if var_dict['data'] is not None: - if self.print_info: - print("Rank {0:03d}: Writing {1} var ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) - try: - if not chunking: - var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self._var_dim, - zlib=self.zip_lvl > 0, complevel=self.zip_lvl) - else: - if self.master: - chunk_size = var_dict['data'].shape - else: - chunk_size = None - chunk_size = self.comm.bcast(chunk_size, root=0) - var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self._var_dim, - zlib=self.zip_lvl > 0, complevel=self.zip_lvl, chunksizes=chunk_size) + if self.variables is not None: + for i, (var_name, var_dict) in enumerate(self.variables.items()): + if var_dict['data'] is not None: if self.print_info: - print("Rank {0:03d}: Var {1} created ({2}/{3})".format( - self.rank, var_name, i + 1, len(self.variables))) - if self.size > 1: - var.set_collective(True) + print("Rank {0:03d}: Writing {1} var ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) + try: + if not chunking: + var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self._var_dim, + zlib=self.zip_lvl > 0, complevel=self.zip_lvl) + else: + if self.master: + chunk_size = var_dict['data'].shape + else: + chunk_size = None + chunk_size = self.comm.bcast(chunk_size, root=0) + var = netcdf.createVariable(var_name, var_dict['data'].dtype, ('time', 'lev',) + self._var_dim, + zlib=self.zip_lvl > 0, complevel=self.zip_lvl, chunksizes=chunk_size) if self.print_info: - print("Rank {0:03d}: Var {1} collective ({2}/{3})".format( + print("Rank {0:03d}: Var {1} created ({2}/{3})".format( self.rank, var_name, i + 1, len(self.variables))) + if self.size > 1: + var.set_collective(True) + if self.print_info: + print("Rank {0:03d}: Var {1} collective ({2}/{3})".format( + self.rank, var_name, i + 1, len(self.variables))) - for att_name, att_value in var_dict.items(): - if att_name == 'data': - - try: - var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], - self.write_axis_limits['z_min']:self.write_axis_limits['z_max'], - self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - self.write_axis_limits['x_min']:self.write_axis_limits['x_max']] = att_value - except ValueError: - var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], - 0, - self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - self.write_axis_limits['x_min']:self.write_axis_limits['x_max']] = att_value - # msg = "*WARNING* '{0}' variable is a 3D field. Setting it on first (0) layer.".format( - # var_name) - # warn(msg) - except IndexError: - raise IndexError("Different shapes. out_shape={0}, data_shp={1}".format( + for att_name, att_value in var_dict.items(): + if att_name == 'data': + + try: var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], self.write_axis_limits['z_min']:self.write_axis_limits['z_max'], self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], - self.write_axis_limits['x_min']:self.write_axis_limits['x_max']].shape, - att_value.shape)) - if self.print_info: - print("Rank {0:03d}: Var {1} data ({2}/{3})".format(self.rank, var_name, i + 1, + self.write_axis_limits['x_min']:self.write_axis_limits['x_max']] = att_value + except ValueError: + var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], + 0, + self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max']] = att_value + # msg = "*WARNING* '{0}' variable is a 3D field. Setting it on first (0) layer.".format( + # var_name) + # warn(msg) + except IndexError: + raise IndexError("Different shapes. out_shape={0}, data_shp={1}".format( + var[self.write_axis_limits['t_min']:self.write_axis_limits['t_max'], + self.write_axis_limits['z_min']:self.write_axis_limits['z_max'], + self.write_axis_limits['y_min']:self.write_axis_limits['y_max'], + self.write_axis_limits['x_min']:self.write_axis_limits['x_max']].shape, + att_value.shape)) + if self.print_info: + print("Rank {0:03d}: Var {1} data ({2}/{3})".format(self.rank, var_name, i + 1, + len(self.variables))) + elif att_name not in ['chunk_size', 'var_dims', 'dimensions']: + var.setncattr(att_name, att_value) + self._set_var_crs(var) + if self.print_info: + print("Rank {0:03d}: Var {1} completed ({2}/{3})".format(self.rank, var_name, i + 1, len(self.variables))) - elif att_name not in ['chunk_size', 'var_dims', 'dimensions']: - var.setncattr(att_name, att_value) - self._set_var_crs(var) - if self.print_info: - print("Rank {0:03d}: Var {1} completed ({2}/{3})".format(self.rank, var_name, i + 1, - len(self.variables))) - except Exception as e: - print("**ERROR** an error has occurred while writing the '{0}' variable".format(var_name)) - # print("**ERROR** an error hase occurred while writing the '{0}' variable".format(var_name), - # file=sys.stderr) - raise e - else: - msg = 'WARNING!!! ' - msg += 'Variable {0} was not loaded. It will not be written.'.format(var_name) - warnings.warn(msg) + except Exception as e: + print("**ERROR** an error has occurred while writing the '{0}' variable".format(var_name)) + # print("**ERROR** an error hase occurred while writing the '{0}' variable".format(var_name), + # file=sys.stderr) + raise e + else: + msg = 'WARNING!!! ' + msg += 'Variable {0} was not loaded. It will not be written.'.format(var_name) + warnings.warn(msg) + def _create_centroids(self): + """ + Must be implemented on inner class + """ return None def _set_crs(self, netcdf): diff --git a/nes/nc_projections/latlon_nes.py b/nes/nc_projections/latlon_nes.py index d5ec6fb..68e49b9 100644 --- a/nes/nc_projections/latlon_nes.py +++ b/nes/nc_projections/latlon_nes.py @@ -1,7 +1,7 @@ #!/usr/bin/env python from nes.nc_projections.default_nes import Nes - +import numpy as np class LatLonNes(Nes): """ @@ -19,7 +19,8 @@ class LatLonNes(Nes): ('lon',) for a regular latitude-longitude projection. """ def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, parallel_method='Y', - avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None): + avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None, create_nes=False, + **kwargs): """ Initialize the LatLonNes class @@ -46,7 +47,11 @@ class LatLonNes(Nes): super(LatLonNes, self).__init__(comm=comm, path=path, info=info, dataset=dataset, xarray=xarray, parallel_method=parallel_method, avoid_first_hours=avoid_first_hours, avoid_last_hours=avoid_last_hours, - first_level=first_level, last_level=last_level) + first_level=first_level, last_level=last_level, create_nes=create_nes, + **kwargs) + + if create_nes: + self._lat, self._lon = self._create_centroids(**kwargs) self._var_dim = ('lat', 'lon') self._lat_dim = ('lat',) @@ -70,6 +75,29 @@ class LatLonNes(Nes): return None + def _create_centroids(self, **kwargs): + + # Calculate center latitudes + lat_c_orig = kwargs['lat_orig'] + (kwargs['inc_lat'] / 2) + self.center_lats = np.linspace( + lat_c_orig, lat_c_orig + (kwargs['inc_lat'] * (kwargs['n_lat'] - 1)), kwargs['n_lat']) + + # Calculate center longitudes + lon_c_orig = kwargs['lon_orig'] + (kwargs['inc_lon'] / 2) + self.center_lons = np.linspace( + lon_c_orig, lon_c_orig + (kwargs['inc_lon'] * (kwargs['n_lon'] - 1)), kwargs['n_lon']) + + return {'data': self.center_lats}, {'data': self.center_lons} + + def _create_bounds(self, **kwargs): + + # This function is not being used + spatial_nv = 2 + boundary_lats = self.create_bounds(self.center_lats, kwargs['inc_lat'], spatial_nv) + boundary_lons = self.create_bounds(self.center_lons, kwargs['inc_lon'], spatial_nv) + + return boundary_lats, boundary_lons + @staticmethod def _set_var_crs(var): """ diff --git a/nes/nc_projections/rotated_nes.py b/nes/nc_projections/rotated_nes.py index 0698405..3249aa3 100644 --- a/nes/nc_projections/rotated_nes.py +++ b/nes/nc_projections/rotated_nes.py @@ -31,7 +31,8 @@ class RotatedNes(Nes): ('rlat', 'rlon') for a rotated projection. """ def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, parallel_method='Y', - avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None): + avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None, create_nes=False, + **kwargs): """ Initialize the RotatedNes class @@ -59,7 +60,8 @@ class RotatedNes(Nes): info=info, dataset=dataset, xarray=xarray, parallel_method=parallel_method, avoid_first_hours=avoid_first_hours, avoid_last_hours=avoid_last_hours, - first_level=first_level, last_level=last_level) + first_level=first_level, last_level=last_level, create_nes=create_nes, + **kwargs) self._rlat = self._get_coordinate_dimension('rlat') self._rlon = self._get_coordinate_dimension('rlon') -- GitLab From 5e6b64fbf37b6d3d8849ac5dfd03703368d8ebe9 Mon Sep 17 00:00:00 2001 From: ctena Date: Wed, 18 May 2022 13:54:34 +0200 Subject: [PATCH 13/73] Added Statistics --- Jupyter_notebooks/Jupyter_bash_nord3v2.cmd | 2 - README.md | 4 +- nes/nc_projections/default_nes.py | 302 +++++++++++++++------ 3 files changed, 224 insertions(+), 84 deletions(-) diff --git a/Jupyter_notebooks/Jupyter_bash_nord3v2.cmd b/Jupyter_notebooks/Jupyter_bash_nord3v2.cmd index 256a6b0..7b2fd04 100644 --- a/Jupyter_notebooks/Jupyter_bash_nord3v2.cmd +++ b/Jupyter_notebooks/Jupyter_bash_nord3v2.cmd @@ -30,8 +30,6 @@ module load cfunits/1.8-foss-2019b-Python-3.7.4 module load xarray/0.19.0-foss-2019b-Python-3.7.4 export PYTHONPATH=/gpfs/scratch/bsc32/bsc32538/NES_tests/NES:${PYTHONPATH} -export PYTHONPATH=/gpfs/scratch/bsc32/bsc32538/SNES_tests/NES/nes:${PYTHONPATH} - # DON'T USE ADDRESS BELOW. # DO USE TOKEN BELOW diff --git a/README.md b/README.md index c49354d..95ad6c1 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ # NES -NetCDF for Earth Science \ No newline at end of file +NetCDF for Earth Science + +test local \ No newline at end of file diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index 6e4163a..da61023 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -81,7 +81,7 @@ class Nes(object): Tuple with the name of the dimensions of the Longitude values """ def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, parallel_method='Y', - avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None): + avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None, create=False): """ Initialize the Nes class @@ -105,6 +105,7 @@ class Nes(object): Indicates the parallelization method that you want. Default over Y axis accepted values: ['Y', 'T'] """ + # MPI Initialization if comm is None: self.comm = MPI.COMM_WORLD @@ -153,7 +154,7 @@ class Nes(object): # Axis limits self.parallel_method = parallel_method - + self.read_axis_limits = self.set_read_axis_limits() # Dimensions screening @@ -162,7 +163,7 @@ class Nes(object): self.lat = self._get_coordinate_values(self._lat, 'Y') self.lon = self._get_coordinate_values(self._lon, 'X') self.time_bnds = self._time_bnds - + self.write_axis_limits = self.set_write_axis_limits() # NetCDF attributes @@ -286,8 +287,9 @@ class Nes(object): self._time_bnds = deepcopy(time_bnds) self.time_bnds = deepcopy(time_bnds) else: - msg = 'WARNING!!! ' - msg += 'The given time bounds list has a different length than the time array. Time bounds will not be set.' + msg = "WARNING!!! " + msg += "The given time bounds list has a different length than the time array. " + msg += "(time:{0}, bnds:{1}). Time bounds will not be set.".format(len(self._time), len(time_bnds)) warnings.warn(msg) else: msg = 'WARNING!!! ' @@ -296,29 +298,176 @@ class Nes(object): warnings.warn(msg) return None - def get_time_id(self, hours, first=True): + def free_vars(self, var_list): """ - Get the index of the corresponding time value. + Erase the selected variables from the variables information. Parameters ---------- - hours : int - Number of hours to avoid - first : bool - Indicates if youy want to avoid from the first hours (True) or from the last (False) - Default: True + var_list : list, str + List (or single string) of the variables to be loaded + """ + if isinstance(var_list, str): + var_list = [var_list] - Returns - ------- - int - Possition of the time array + if self.is_xarray: + self.dataset = self.dataset.drop_vars(var_list) + self.variables = self.__get_lazy_variables() + else: + for var_name in var_list: + del self.variables[var_name] + return None + + def keep_vars(self, var_list): """ - from datetime import timedelta - if first: - idx = self._time.index(self._time[0] + timedelta(hours=hours)) + Keep the selected variables and erases the rest. + + Parameters + ---------- + var_list : list, str + List (or single string) of the variables to be loaded + """ + if isinstance(var_list, str): + var_list = [var_list] + + to_remove = list(set(self.variables.keys()).difference(set(var_list))) + + self.free_vars(to_remove) + return None + + def get_time_interval(self): + time_interval = self._time[1] - self._time[0] + time_interval = int(time_interval.seconds // 3600) + return time_interval + + # ================================================================================================================== + # Statistics + # ================================================================================================================== + + def last_time_step(self): + if self.parallel_method == 'T': + raise NotImplementedError("Statistics are not implemented on time axis paralelitation method.") + aux_time = self._time[0].replace(hour=0, minute=0, second=0, microsecond=0) + self._time = [aux_time] + self.time = [aux_time] + + for var_name, var_info in self.variables.items(): + if var_info['data'] is None: + self.load(var_name) + aux_data = var_info['data'][-1, :] + if len(aux_data.shape) == 3: + aux_data = aux_data.reshape((1, aux_data.shape[0], aux_data.shape[1], aux_data.shape[2])) + self.variables[var_name]['data'] = aux_data + self.hours_start = 0 + self.hours_end = 0 + return None + + def daily_statistic(self, op, type_op='calendar'): + if self.parallel_method == 'T': + raise NotImplementedError("Statistics are not implemented on time axis paralelitation method.") + time_interval = self.get_time_interval() + if type_op == 'calendar': + aux_time_bounds = [] + aux_time = [] + day_list = [date_aux.day for date_aux in self.time] + for var_name, var_info in self.variables.items(): + if var_info['data'] is None: + self.load(var_name) + stat_data = None + for day in np.unique(day_list): + idx_first = next(i for i, val in enumerate(day_list, 0) if val == day) + idx_last = len(day_list) - next(i for i, val in enumerate(reversed(day_list), 1) if val == day) + if idx_first != idx_last: # To avoid single time step statistic + if idx_last != len(day_list): + if op == 'mean': + data_aux = var_info['data'][idx_first:idx_last + 1, :, :, :].mean(axis=0) + elif op == 'max': + data_aux = var_info['data'][idx_first:idx_last + 1, :, :, :].max(axis=0) + elif op == 'min': + data_aux = var_info['data'][idx_first:idx_last + 1, :, :, :].min(axis=0) + else: + raise NotImplementedError("Statistic operation '{0}' is not implemented.".format(op)) + aux_time_bounds.append([self.time[idx_first], self.time[idx_last]]) + else: + if op == 'mean': + data_aux = data[idx_first:, :, :, :].mean(axis=0) + elif op == 'max': + data_aux = var_info['data'][idx_first:, :, :, :].max(axis=0) + elif op == 'min': + data_aux = var_info['data'][idx_first:, :, :, :].min(axis=0) + else: + raise NotImplementedError("Statistic operation '{0}' is not implemented.".format(op)) + aux_time_bounds.append([self.time[idx_first], self.time[-1]]) + + data_aux = data_aux.reshape((1, data_aux.shape[0], data_aux.shape[1], data_aux.shape[2])) + aux_time.append(self.time[idx_first].replace(hour=0, minute=0, second=0)) + # Append over time dimension + if stat_data is None: + stat_data = data_aux.copy() + else: + stat_data = np.vstack([stat_data, data_aux]) + self.variables[var_name]['data'] = stat_data + self.variables[var_name]['cell_methods'] = "time: {0} (interval: {1}hr)".format(op, time_interval) + self.time = aux_time + self._time = self.time + + self.set_time_bnds(aux_time_bounds) + + elif type_op == 'alltsteps': + for var_name, var_info in self.variables.items(): + if var_info['data'] is None: + self.load(var_name) + if op == 'mean': + aux_data = var_info['data'].mean(axis=0) + elif op == 'max': + aux_data = var_info['data'].max(axis=0) + elif op == 'min': + aux_data = var_info['data'].min(axis=0) + else: + raise NotImplementedError("Statistic operation '{0}' is not implemented.".format(op)) + if len(aux_data.shape) == 3: + aux_data = aux_data.reshape((1, aux_data.shape[0], aux_data.shape[1], aux_data.shape[2])) + self.variables[var_name]['data'] = aux_data + self.variables[var_name]['cell_methods'] = "time: {0} (interval: {1}hr)".format(op, time_interval) + + aux_time = self.time[0].replace(hour=0, minute=0, second=0, microsecond=0) + aux_time_bounds = [[self.time[0], self.time[-1]]] + self.time = [aux_time] + self._time = self.time + + self.set_time_bnds(aux_time_bounds) + + elif type_op == 'withoutt0': + for var_name, var_info in self.variables.items (): + if var_info['data'] is None: + self.load(var_name) + if op == 'mean': + aux_data = var_info['data'][1:, :].mean(axis=0) + elif op == 'max': + aux_data = var_info['data'][1:, :].max(axis=0) + elif op == 'min': + aux_data = var_info['data'][1:, :].min(axis=0) + else: + raise NotImplementedError("Statistic operation '{0}' is not implemented.".format(op)) + if len(aux_data.shape) == 3: + aux_data = aux_data.reshape((1, aux_data.shape[0], aux_data.shape[1], aux_data.shape[2])) + self.variables[var_name]['data'] = aux_data + self.variables[var_name]['cell_methods'] = "time: {0} (interval: {1}hr)".format(op, time_interval) + aux_time = self._time[1].replace(hour=0, minute=0, second=0, microsecond=0) + aux_time_bounds = [[self._time[1], self._time[-1]]] + self.time = [aux_time] + self._time = self.time + + self.set_time_bnds(aux_time_bounds) else: - idx = self._time.index(self._time[-1] - timedelta(hours=hours)) + 1 - return idx + raise NotImplementedError("Statistic operation type '{0}' is not implemented.".format(type_op)) + self.hours_start = 0 + self.hours_end = 0 + return None + + # ================================================================================================================== + # Reading + # ================================================================================================================== def set_read_axis_limits(self): """ @@ -334,7 +483,7 @@ class Nes(object): 'y_min': None, 'y_max': None, 'z_min': None, 'z_max': None, 't_min': None, 't_max': None} - + if self.parallel_method == 'Y': y_len = self._lat['data'].shape[0] axis_limits['y_min'] = (y_len // self.size) * self.rank @@ -374,41 +523,29 @@ class Nes(object): axis_limits['z_max'] = self.last_level return axis_limits - def set_write_axis_limits(self): + def get_time_id(self, hours, first=True): """ - Calculate the 4D writing axis limits + Get the index of the corresponding time value. + + Parameters + ---------- + hours : int + Number of hours to avoid + first : bool + Indicates if youy want to avoid from the first hours (True) or from the last (False) + Default: True Returns ------- - dict - Dictionary with the 4D limits of the rank data to write. - t_min, t_max, z_min, z_max, y_min, y_max, x_min and x_max + int + Possition of the time array """ - axis_limits = {'x_min': None, 'x_max': None, - 'y_min': None, 'y_max': None, - 'z_min': None, 'z_max': None, - 't_min': None, 't_max': None} - - if self.parallel_method == 'Y': - y_len = self._lat['data'].shape[0] - axis_limits['y_min'] = (y_len // self.size) * self.rank - if self.rank + 1 < self.size: - axis_limits['y_max'] = (y_len // self.size) * (self.rank + 1) - elif self.parallel_method == 'X': - x_len = self._lon['data'].shape[-1] - axis_limits['x_min'] = (x_len // self.size) * self.rank - if self.rank + 1 < self.size: - axis_limits['x_max'] = (x_len // self.size) * (self.rank + 1) - elif self.parallel_method == 'T': - t_len = len(self._time) - axis_limits['t_min'] = ((t_len // self.size) * self.rank) - if self.rank + 1 < self.size: - axis_limits['t_max'] = (t_len // self.size) * (self.rank + 1) - + from datetime import timedelta + if first: + idx = self._time.index(self._time[0] + timedelta(hours=hours)) else: - raise NotImplementedError("Parallel method '{meth}' is not implemented. Use one of these: {accept}".format( - meth=self.parallel_method, accept=['X', 'Y', 'T'])) - return axis_limits + idx = self._time.index(self._time[-1] - timedelta(hours=hours)) + 1 + return idx def open(self): """ @@ -747,42 +884,45 @@ class Nes(object): gl_attrs[attrname] = getattr(self.netcdf, attrname) return gl_attrs - def free_vars(self, var_list): - """ - Erase the selected variables from the variables information. - - Parameters - ---------- - var_list : list, str - List (or single string) of the variables to be loaded - """ - if isinstance(var_list, str): - var_list = [var_list] - - if self.is_xarray: - self.dataset = self.dataset.drop_vars(var_list) - self.variables = self.__get_lazy_variables() - else: - for var_name in var_list: - del self.variables[var_name] - return None + # ================================================================================================================== + # Writing + # ================================================================================================================== - def keep_vars(self, var_list): + def set_write_axis_limits(self): """ - Keep the selected variables and erases the rest. + Calculate the 4D writing axis limits - Parameters - ---------- - var_list : list, str - List (or single string) of the variables to be loaded + Returns + ------- + dict + Dictionary with the 4D limits of the rank data to write. + t_min, t_max, z_min, z_max, y_min, y_max, x_min and x_max """ - if isinstance(var_list, str): - var_list = [var_list] + axis_limits = {'x_min': None, 'x_max': None, + 'y_min': None, 'y_max': None, + 'z_min': None, 'z_max': None, + 't_min': None, 't_max': None} - to_remove = list(set(self.variables.keys()).difference(set(var_list))) + if self.parallel_method == 'Y': + y_len = self._lat['data'].shape[0] + axis_limits['y_min'] = (y_len // self.size) * self.rank + if self.rank + 1 < self.size: + axis_limits['y_max'] = (y_len // self.size) * (self.rank + 1) + elif self.parallel_method == 'X': + x_len = self._lon['data'].shape[-1] + axis_limits['x_min'] = (x_len // self.size) * self.rank + if self.rank + 1 < self.size: + axis_limits['x_max'] = (x_len // self.size) * (self.rank + 1) + elif self.parallel_method == 'T': + t_len = len(self._time) + axis_limits['t_min'] = ((t_len // self.size) * self.rank) + if self.rank + 1 < self.size: + axis_limits['t_max'] = (t_len // self.size) * (self.rank + 1) - self.free_vars(to_remove) - return None + else: + raise NotImplementedError("Parallel method '{meth}' is not implemented. Use one of these: {accept}".format( + meth=self.parallel_method, accept=['X', 'Y', 'T'])) + return axis_limits def _create_dimensions(self, netcdf): """ -- GitLab From 613993a09239668fd4ed06b5ab7d8bb51eb083d3 Mon Sep 17 00:00:00 2001 From: ctena Date: Wed, 18 May 2022 15:08:37 +0200 Subject: [PATCH 14/73] Documenting --- CHANGELOG.md | 21 +++++++++++++++++---- nes/__init__.py | 2 +- nes/nc_projections/default_nes.py | 26 ++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9314db3..5d55066 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,19 @@ # NES CHANGELOG -### 0.0.0 - 2022/04/20 - - - Skeleton \ No newline at end of file +### 0.0.1 +* Changes and new features: + * First beta release + * Open NetCDF: + * Regular Latitude-Longitude + * Rotated Lat-Lon + * Statistics: + * Daily_mean + * Daily_max + * Daily_min + * Last time step + * Parallelization: + * By time axis + * By Y axis + * By X axis + * Create NetCDF: + * Regular Latitude-Longitude \ No newline at end of file diff --git a/nes/__init__.py b/nes/__init__.py index ec5b69a..c91cab9 100644 --- a/nes/__init__.py +++ b/nes/__init__.py @@ -1,4 +1,4 @@ __date__ = "2022-MM-DD" -__version__ = "0.0.0" +__version__ = "0.0.1" from nes.load_nes import open_netcdf diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index da61023..6e0dd87 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -15,6 +15,7 @@ from numpy.ma.core import MaskError from copy import deepcopy import datetime + class Nes(object): """ @@ -336,6 +337,14 @@ class Nes(object): return None def get_time_interval(self): + """ + Calculate the interrval of hours between time steps + + Returns + ------- + int + Number of hours between time steps + """ time_interval = self._time[1] - self._time[0] time_interval = int(time_interval.seconds // 3600) return time_interval @@ -345,6 +354,9 @@ class Nes(object): # ================================================================================================================== def last_time_step(self): + """ + Modify variables to keep only the last time step + """ if self.parallel_method == 'T': raise NotImplementedError("Statistics are not implemented on time axis paralelitation method.") aux_time = self._time[0].replace(hour=0, minute=0, second=0, microsecond=0) @@ -363,6 +375,20 @@ class Nes(object): return None def daily_statistic(self, op, type_op='calendar'): + """ + Calculate daily statistic + + Parameters + ---------- + op : str + Statistic to perform. Accepted values: "max", "mean" and "min" + type_op : str + Type of statistic to perform. Accepted values: "calendar", "alltsteps", and "withoutt0" + - "calendar": Calculate the statistic using the time metadata. + It will avoid single time step by day calculations + - "alltsteps": Calculate a single time statistic with all the time steps. + - "withoutt0": Calculate a single time statistic with all the time steps avoiding the first one. + """ if self.parallel_method == 'T': raise NotImplementedError("Statistics are not implemented on time axis paralelitation method.") time_interval = self.get_time_interval() -- GitLab From c607cf65aeb0d9c47c8018880faaefafa9790112 Mon Sep 17 00:00:00 2001 From: ctena Date: Wed, 18 May 2022 17:03:50 +0200 Subject: [PATCH 15/73] Documenting --- CHANGELOG.md | 21 +- Jupyter_notebooks/Jupyter_bash_nord3v2.cmd | 2 - Jupyter_notebooks/NES_simple_test.ipynb | 501 +++++++++++++++++++++ README.md | 4 +- nes/__init__.py | 2 +- nes/nc_projections/default_nes.py | 322 +++++++++---- 6 files changed, 766 insertions(+), 86 deletions(-) create mode 100644 Jupyter_notebooks/NES_simple_test.ipynb diff --git a/CHANGELOG.md b/CHANGELOG.md index 9314db3..5d55066 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,19 @@ # NES CHANGELOG -### 0.0.0 - 2022/04/20 - - - Skeleton \ No newline at end of file +### 0.0.1 +* Changes and new features: + * First beta release + * Open NetCDF: + * Regular Latitude-Longitude + * Rotated Lat-Lon + * Statistics: + * Daily_mean + * Daily_max + * Daily_min + * Last time step + * Parallelization: + * By time axis + * By Y axis + * By X axis + * Create NetCDF: + * Regular Latitude-Longitude \ No newline at end of file diff --git a/Jupyter_notebooks/Jupyter_bash_nord3v2.cmd b/Jupyter_notebooks/Jupyter_bash_nord3v2.cmd index 256a6b0..7b2fd04 100644 --- a/Jupyter_notebooks/Jupyter_bash_nord3v2.cmd +++ b/Jupyter_notebooks/Jupyter_bash_nord3v2.cmd @@ -30,8 +30,6 @@ module load cfunits/1.8-foss-2019b-Python-3.7.4 module load xarray/0.19.0-foss-2019b-Python-3.7.4 export PYTHONPATH=/gpfs/scratch/bsc32/bsc32538/NES_tests/NES:${PYTHONPATH} -export PYTHONPATH=/gpfs/scratch/bsc32/bsc32538/SNES_tests/NES/nes:${PYTHONPATH} - # DON'T USE ADDRESS BELOW. # DO USE TOKEN BELOW diff --git a/Jupyter_notebooks/NES_simple_test.ipynb b/Jupyter_notebooks/NES_simple_test.ipynb new file mode 100644 index 0000000..b0eca7f --- /dev/null +++ b/Jupyter_notebooks/NES_simple_test.ipynb @@ -0,0 +1,501 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# NES - NetCDF for Earth Science" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from nes import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Open NetCDF" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 164 ms, sys: 120 ms, total: 284 ms\n", + "Wall time: 14.5 s\n" + ] + } + ], + "source": [ + "cams_file = \"/gpfs/scratch/bsc32/bsc32538/a4mg/nmmb-monarch/ARCHIVE/000/2022050312/MONARCH_d01_2022050312.nc\"\n", + "%time nessy = open_netcdf(path=cams_file, info=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Time\n", + "NES.time : list of time steps (datetime)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[datetime.datetime(2022, 5, 3, 12, 0),\n", + " datetime.datetime(2022, 5, 3, 13, 0),\n", + " datetime.datetime(2022, 5, 3, 14, 0),\n", + " datetime.datetime(2022, 5, 3, 15, 0),\n", + " datetime.datetime(2022, 5, 3, 16, 0),\n", + " datetime.datetime(2022, 5, 3, 17, 0),\n", + " datetime.datetime(2022, 5, 3, 18, 0),\n", + " datetime.datetime(2022, 5, 3, 19, 0),\n", + " datetime.datetime(2022, 5, 3, 20, 0),\n", + " datetime.datetime(2022, 5, 3, 21, 0),\n", + " datetime.datetime(2022, 5, 3, 22, 0),\n", + " datetime.datetime(2022, 5, 3, 23, 0),\n", + " datetime.datetime(2022, 5, 4, 0, 0),\n", + " datetime.datetime(2022, 5, 4, 1, 0),\n", + " datetime.datetime(2022, 5, 4, 2, 0),\n", + " datetime.datetime(2022, 5, 4, 3, 0),\n", + " datetime.datetime(2022, 5, 4, 4, 0),\n", + " datetime.datetime(2022, 5, 4, 5, 0),\n", + " datetime.datetime(2022, 5, 4, 6, 0),\n", + " datetime.datetime(2022, 5, 4, 7, 0),\n", + " datetime.datetime(2022, 5, 4, 8, 0),\n", + " datetime.datetime(2022, 5, 4, 9, 0),\n", + " datetime.datetime(2022, 5, 4, 10, 0),\n", + " datetime.datetime(2022, 5, 4, 11, 0),\n", + " datetime.datetime(2022, 5, 4, 12, 0),\n", + " datetime.datetime(2022, 5, 4, 13, 0),\n", + " datetime.datetime(2022, 5, 4, 14, 0),\n", + " datetime.datetime(2022, 5, 4, 15, 0),\n", + " datetime.datetime(2022, 5, 4, 16, 0),\n", + " datetime.datetime(2022, 5, 4, 17, 0),\n", + " datetime.datetime(2022, 5, 4, 18, 0),\n", + " datetime.datetime(2022, 5, 4, 19, 0),\n", + " datetime.datetime(2022, 5, 4, 20, 0),\n", + " datetime.datetime(2022, 5, 4, 21, 0),\n", + " datetime.datetime(2022, 5, 4, 22, 0),\n", + " datetime.datetime(2022, 5, 4, 23, 0),\n", + " datetime.datetime(2022, 5, 5, 0, 0),\n", + " datetime.datetime(2022, 5, 5, 1, 0),\n", + " datetime.datetime(2022, 5, 5, 2, 0),\n", + " datetime.datetime(2022, 5, 5, 3, 0),\n", + " datetime.datetime(2022, 5, 5, 4, 0),\n", + " datetime.datetime(2022, 5, 5, 5, 0),\n", + " datetime.datetime(2022, 5, 5, 6, 0),\n", + " datetime.datetime(2022, 5, 5, 7, 0),\n", + " datetime.datetime(2022, 5, 5, 8, 0),\n", + " datetime.datetime(2022, 5, 5, 9, 0),\n", + " datetime.datetime(2022, 5, 5, 10, 0),\n", + " datetime.datetime(2022, 5, 5, 11, 0),\n", + " datetime.datetime(2022, 5, 5, 12, 0),\n", + " datetime.datetime(2022, 5, 5, 13, 0),\n", + " datetime.datetime(2022, 5, 5, 14, 0),\n", + " datetime.datetime(2022, 5, 5, 15, 0),\n", + " datetime.datetime(2022, 5, 5, 16, 0),\n", + " datetime.datetime(2022, 5, 5, 17, 0),\n", + " datetime.datetime(2022, 5, 5, 18, 0),\n", + " datetime.datetime(2022, 5, 5, 19, 0),\n", + " datetime.datetime(2022, 5, 5, 20, 0),\n", + " datetime.datetime(2022, 5, 5, 21, 0),\n", + " datetime.datetime(2022, 5, 5, 22, 0),\n", + " datetime.datetime(2022, 5, 5, 23, 0),\n", + " datetime.datetime(2022, 5, 6, 0, 0),\n", + " datetime.datetime(2022, 5, 6, 1, 0),\n", + " datetime.datetime(2022, 5, 6, 2, 0),\n", + " datetime.datetime(2022, 5, 6, 3, 0),\n", + " datetime.datetime(2022, 5, 6, 4, 0),\n", + " datetime.datetime(2022, 5, 6, 5, 0),\n", + " datetime.datetime(2022, 5, 6, 6, 0),\n", + " datetime.datetime(2022, 5, 6, 7, 0),\n", + " datetime.datetime(2022, 5, 6, 8, 0),\n", + " datetime.datetime(2022, 5, 6, 9, 0),\n", + " datetime.datetime(2022, 5, 6, 10, 0),\n", + " datetime.datetime(2022, 5, 6, 11, 0),\n", + " datetime.datetime(2022, 5, 6, 12, 0),\n", + " datetime.datetime(2022, 5, 6, 13, 0),\n", + " datetime.datetime(2022, 5, 6, 14, 0),\n", + " datetime.datetime(2022, 5, 6, 15, 0),\n", + " datetime.datetime(2022, 5, 6, 16, 0),\n", + " datetime.datetime(2022, 5, 6, 17, 0),\n", + " datetime.datetime(2022, 5, 6, 18, 0),\n", + " datetime.datetime(2022, 5, 6, 19, 0),\n", + " datetime.datetime(2022, 5, 6, 20, 0),\n", + " datetime.datetime(2022, 5, 6, 21, 0),\n", + " datetime.datetime(2022, 5, 6, 22, 0),\n", + " datetime.datetime(2022, 5, 6, 23, 0),\n", + " datetime.datetime(2022, 5, 7, 0, 0),\n", + " datetime.datetime(2022, 5, 7, 1, 0),\n", + " datetime.datetime(2022, 5, 7, 2, 0),\n", + " datetime.datetime(2022, 5, 7, 3, 0),\n", + " datetime.datetime(2022, 5, 7, 4, 0),\n", + " datetime.datetime(2022, 5, 7, 5, 0),\n", + " datetime.datetime(2022, 5, 7, 6, 0),\n", + " datetime.datetime(2022, 5, 7, 7, 0),\n", + " datetime.datetime(2022, 5, 7, 8, 0),\n", + " datetime.datetime(2022, 5, 7, 9, 0),\n", + " datetime.datetime(2022, 5, 7, 10, 0),\n", + " datetime.datetime(2022, 5, 7, 11, 0),\n", + " datetime.datetime(2022, 5, 7, 12, 0),\n", + " datetime.datetime(2022, 5, 7, 13, 0),\n", + " datetime.datetime(2022, 5, 7, 14, 0),\n", + " datetime.datetime(2022, 5, 7, 15, 0),\n", + " datetime.datetime(2022, 5, 7, 16, 0),\n", + " datetime.datetime(2022, 5, 7, 17, 0),\n", + " datetime.datetime(2022, 5, 7, 18, 0),\n", + " datetime.datetime(2022, 5, 7, 19, 0),\n", + " datetime.datetime(2022, 5, 7, 20, 0),\n", + " datetime.datetime(2022, 5, 7, 21, 0),\n", + " datetime.datetime(2022, 5, 7, 22, 0),\n", + " datetime.datetime(2022, 5, 7, 23, 0),\n", + " datetime.datetime(2022, 5, 8, 0, 0)]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy.time\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Level, Latitude, Longitude" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'data': masked_array(data=[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,\n", + " 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],\n", + " mask=False,\n", + " fill_value=999999,\n", + " dtype=int32),\n", + " 'dimensions': ('lm',),\n", + " 'units': '',\n", + " 'long_name': 'layer id'}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy.lev" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'data': masked_array(\n", + " data=[[16.371021, 16.43293 , 16.494629, ..., 16.494629, 16.43293 ,\n", + " 16.371021],\n", + " [16.503883, 16.565914, 16.627739, ..., 16.627739, 16.565918,\n", + " 16.503883],\n", + " [16.636723, 16.69888 , 16.760828, ..., 16.760828, 16.698881,\n", + " 16.636723],\n", + " ...,\n", + " [58.41168 , 58.525536, 58.63936 , ..., 58.63936 , 58.525547,\n", + " 58.41168 ],\n", + " [58.49049 , 58.604454, 58.718372, ..., 58.718372, 58.604454,\n", + " 58.49049 ],\n", + " [58.56883 , 58.6829 , 58.796925, ..., 58.796925, 58.682903,\n", + " 58.56883 ]],\n", + " mask=False,\n", + " fill_value=1e+20,\n", + " dtype=float32),\n", + " 'dimensions': ('rlat', 'rlon'),\n", + " 'long_name': 'latitude',\n", + " 'units': 'degrees_north',\n", + " 'standard_name': 'latitude',\n", + " 'coordinates': 'lon lat'}" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy.lat" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Variables\n", + "\n", + "- List of variables in lazy mode: No data" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['lmp', 'IM', 'JM', 'LM', 'IHRST', 'I_PAR_STA', 'J_PAR_STA', 'NPHS', 'NCLOD', 'NHEAT', 'NPREC', 'NRDLW', 'NRDSW', 'NSRFC', 'AVGMAXLEN', 'MDRMINout', 'MDRMAXout', 'MDIMINout', 'MDIMAXout', 'IDAT', 'DXH', 'SG1', 'SG2', 'DSG1', 'DSG2', 'SGML1', 'SGML2', 'SLDPTH', 'ISLTYP', 'IVGTYP', 'NCFRCV', 'NCFRST', 'FIS', 'GLAT', 'GLON', 'PD', 'VLAT', 'VLON', 'ACPREC', 'CUPREC', 'MIXHT', 'PBLH', 'RLWTOA', 'RSWIN', 'U10', 'USTAR', 'V10', 'RMOL', 'T2', 'relative_humidity_2m', 'T', 'U', 'V', 'SH2O', 'SMC', 'STC', 'AERO_ACPREC', 'AERO_CUPREC', 'AERO_DEPDRY', 'AERO_OPT_R', 'DRE_SW_TOA', 'DRE_SW_SFC', 'DRE_LW_TOA', 'DRE_LW_SFC', 'ENG_SW_SFC', 'ADRYDEP', 'WETDEP', 'PH_NO2', 'HSUM', 'POLR', 'aerosol_optical_depth_dim', 'aerosol_optical_depth', 'satellite_AOD_dim', 'satellite_AOD', 'aerosol_loading_dim', 'aerosol_loading', 'clear_sky_AOD_dim', 'clear_sky_AOD', 'layer_thickness', 'mid_layer_pressure', 'interface_pressure', 'relative_humidity', 'mid_layer_height', 'mid_layer_height_agl', 'air_density', 'dry_pm10_mass', 'dry_pm2p5_mass', 'QC', 'QR', 'QS', 'QG', 'aero_dust_001', 'aero_dust_002', 'aero_dust_003', 'aero_dust_004', 'aero_dust_005', 'aero_dust_006', 'aero_dust_007', 'aero_dust_008', 'aero_ssa_001', 'aero_ssa_002', 'aero_ssa_003', 'aero_ssa_004', 'aero_ssa_005', 'aero_ssa_006', 'aero_ssa_007', 'aero_ssa_008', 'aero_om_001', 'aero_om_002', 'aero_om_003', 'aero_om_004', 'aero_om_005', 'aero_om_006', 'aero_bc_001', 'aero_bc_002', 'aero_so4_001', 'aero_no3_001', 'aero_no3_002', 'aero_no3_003', 'aero_nh4_001', 'aero_unsp_001', 'aero_unsp_002', 'aero_unsp_003', 'aero_unsp_004', 'aero_unsp_005', 'aero_pol_001', 'aero_pol_002', 'aero_pol_003', 'aero_pol_004', 'aero_pol_005', 'aero_pol_006', 'aero_pol_007', 'aero_pol_008', 'aero_pol_009', 'aero_pol_010', 'NO2', 'NO', 'O3', 'NO3', 'N2O5', 'HNO3', 'HONO', 'PNA', 'H2O2', 'NTR', 'ROOH', 'FORM', 'ALD2', 'ALDX', 'PAR', 'CO', 'MEPX', 'MEOH', 'FACD', 'PAN', 'PACD', 'AACD', 'PANX', 'OLE', 'ETH', 'IOLE', 'TOL', 'CRES', 'OPEN', 'MGLY', 'XYL', 'ISOP', 'ISPD', 'TERP', 'SO2', 'SULF', 'ETOH', 'ETHA', 'CL2', 'HOCL', 'FMCL', 'HCL', 'BENZENE', 'SESQ', 'NH3', 'DMS', 'SOAP_I', 'SOAP_T', 'SOAP_F', 'SOAP_A', 'O', 'O1D', 'OH', 'HO2', 'XO2', 'XO2N', 'MEO2', 'HCO3', 'C2O3', 'CXO3', 'ROR', 'TO2', 'TOLRO2', 'CRO', 'XYLRO2', 'ISOPRXN', 'TRPRXN', 'SULRXN', 'CL', 'CLO', 'TOLNRXN', 'TOLHRXN', 'XYLNRXN', 'XYLHRXN', 'BENZRO2', 'BNZNRXN', 'BNZHRXN', 'SESQRXN', 'aerosol_extinction_dim', 'aerosol_extinction_DUST_1', 'aerosol_extinction_DUST_2', 'aerosol_extinction_DUST_3', 'aerosol_extinction_DUST_4', 'aerosol_extinction_DUST_5', 'aerosol_extinction_DUST_6', 'aerosol_extinction_DUST_7', 'aerosol_extinction_DUST_8', 'aerosol_extinction_SALT_total', 'aerosol_extinction_OM_total', 'aerosol_extinction_BC_total', 'aerosol_extinction_SO4_total', 'aerosol_extinction_NO3_total', 'aerosol_extinction_NH4_total', 'aerosol_extinction_UNSPC_1', 'aerosol_extinction_UNSPC_2', 'aerosol_extinction_UNSPC_3', 'aerosol_extinction_UNSPC_4', 'aerosol_extinction_UNSPC_5', 'aerosol_extinction_POLLEN_total'])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy.variables.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'O3': {'data': None,\n", + " 'dimensions': ('time', 'lm', 'rlat', 'rlon'),\n", + " 'long_name': 'TRACERS_054',\n", + " 'units': 'unknown',\n", + " 'standard_name': 'TRACERS_054',\n", + " 'coordinates': 'lon lat',\n", + " 'grid_mapping': 'rotated_pole'}}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Selecting only one variable and descarting the rest.\n", + "nessy.keep_vars('O3')\n", + "nessy.variables" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rank 000: Loading O3 var (1/1)\n", + "Rank 000: Loaded O3 var ((109, 24, 361, 467))\n", + "CPU times: user 1.22 s, sys: 6.8 s, total: 8.02 s\n", + "Wall time: 41.7 s\n" + ] + } + ], + "source": [ + "# Loading variable data from NetCDF file\n", + "%time nessy.load()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(109, 24, 361, 467)\n", + "('time', 'lm', 'rlat', 'rlon')\n" + ] + } + ], + "source": [ + "print(nessy.variables['O3']['data'].shape)\n", + "print(nessy.variables['O3']['dimensions'])" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1.13 s, sys: 601 ms, total: 1.73 s\n", + "Wall time: 14.4 s\n" + ] + } + ], + "source": [ + "# Writing NetCDF\n", + "%time nessy.to_netcdf('o3_test.nc')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Statistics" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 440 ms, sys: 80.1 ms, total: 520 ms\n", + "Wall time: 522 ms\n" + ] + } + ], + "source": [ + "%time nessy.daily_statistic(op=\"mean\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(5, 24, 361, 467)\n", + "('time', 'lm', 'rlat', 'rlon')\n" + ] + } + ], + "source": [ + "print(nessy.variables['O3']['data'].shape)\n", + "print(nessy.variables['O3']['dimensions'])" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 43 ms, sys: 32.2 ms, total: 75.1 ms\n", + "Wall time: 693 ms\n" + ] + } + ], + "source": [ + "%time nessy.to_netcdf('o3_daily_mean_test.nc')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Metadata 'cell_methods': time: mean (interval: 1hr)\n", + "Time: [datetime.datetime(2022, 5, 3, 0, 0), datetime.datetime(2022, 5, 4, 0, 0), datetime.datetime(2022, 5, 5, 0, 0), datetime.datetime(2022, 5, 6, 0, 0), datetime.datetime(2022, 5, 7, 0, 0)]\n", + "Time bounds: 5\n", + "[datetime.datetime(2022, 5, 3, 12, 0), datetime.datetime(2022, 5, 3, 23, 0)]\n" + ] + } + ], + "source": [ + "print(\"Metadata 'cell_methods':\", nessy.variables['O3']['cell_methods'])\n", + "\n", + "print(\"Time:\", nessy.time)\n", + "print(\"Time bounds:\", len(nessy.time_bnds))\n", + "\n", + "print(nessy.time_bnds[0])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/README.md b/README.md index c49354d..95ad6c1 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ # NES -NetCDF for Earth Science \ No newline at end of file +NetCDF for Earth Science + +test local \ No newline at end of file diff --git a/nes/__init__.py b/nes/__init__.py index ec5b69a..c91cab9 100644 --- a/nes/__init__.py +++ b/nes/__init__.py @@ -1,4 +1,4 @@ __date__ = "2022-MM-DD" -__version__ = "0.0.0" +__version__ = "0.0.1" from nes.load_nes import open_netcdf diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index 6e4163a..6e0dd87 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -15,6 +15,7 @@ from numpy.ma.core import MaskError from copy import deepcopy import datetime + class Nes(object): """ @@ -81,7 +82,7 @@ class Nes(object): Tuple with the name of the dimensions of the Longitude values """ def __init__(self, comm=None, path=None, info=False, dataset=None, xarray=False, parallel_method='Y', - avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None): + avoid_first_hours=0, avoid_last_hours=0, first_level=0, last_level=None, create=False): """ Initialize the Nes class @@ -105,6 +106,7 @@ class Nes(object): Indicates the parallelization method that you want. Default over Y axis accepted values: ['Y', 'T'] """ + # MPI Initialization if comm is None: self.comm = MPI.COMM_WORLD @@ -153,7 +155,7 @@ class Nes(object): # Axis limits self.parallel_method = parallel_method - + self.read_axis_limits = self.set_read_axis_limits() # Dimensions screening @@ -162,7 +164,7 @@ class Nes(object): self.lat = self._get_coordinate_values(self._lat, 'Y') self.lon = self._get_coordinate_values(self._lon, 'X') self.time_bnds = self._time_bnds - + self.write_axis_limits = self.set_write_axis_limits() # NetCDF attributes @@ -286,8 +288,9 @@ class Nes(object): self._time_bnds = deepcopy(time_bnds) self.time_bnds = deepcopy(time_bnds) else: - msg = 'WARNING!!! ' - msg += 'The given time bounds list has a different length than the time array. Time bounds will not be set.' + msg = "WARNING!!! " + msg += "The given time bounds list has a different length than the time array. " + msg += "(time:{0}, bnds:{1}). Time bounds will not be set.".format(len(self._time), len(time_bnds)) warnings.warn(msg) else: msg = 'WARNING!!! ' @@ -296,29 +299,201 @@ class Nes(object): warnings.warn(msg) return None - def get_time_id(self, hours, first=True): + def free_vars(self, var_list): """ - Get the index of the corresponding time value. + Erase the selected variables from the variables information. Parameters ---------- - hours : int - Number of hours to avoid - first : bool - Indicates if youy want to avoid from the first hours (True) or from the last (False) - Default: True + var_list : list, str + List (or single string) of the variables to be loaded + """ + if isinstance(var_list, str): + var_list = [var_list] + + if self.is_xarray: + self.dataset = self.dataset.drop_vars(var_list) + self.variables = self.__get_lazy_variables() + else: + for var_name in var_list: + del self.variables[var_name] + return None + + def keep_vars(self, var_list): + """ + Keep the selected variables and erases the rest. + + Parameters + ---------- + var_list : list, str + List (or single string) of the variables to be loaded + """ + if isinstance(var_list, str): + var_list = [var_list] + + to_remove = list(set(self.variables.keys()).difference(set(var_list))) + + self.free_vars(to_remove) + return None + + def get_time_interval(self): + """ + Calculate the interrval of hours between time steps Returns ------- int - Possition of the time array + Number of hours between time steps + """ + time_interval = self._time[1] - self._time[0] + time_interval = int(time_interval.seconds // 3600) + return time_interval + + # ================================================================================================================== + # Statistics + # ================================================================================================================== + + def last_time_step(self): + """ + Modify variables to keep only the last time step + """ + if self.parallel_method == 'T': + raise NotImplementedError("Statistics are not implemented on time axis paralelitation method.") + aux_time = self._time[0].replace(hour=0, minute=0, second=0, microsecond=0) + self._time = [aux_time] + self.time = [aux_time] + + for var_name, var_info in self.variables.items(): + if var_info['data'] is None: + self.load(var_name) + aux_data = var_info['data'][-1, :] + if len(aux_data.shape) == 3: + aux_data = aux_data.reshape((1, aux_data.shape[0], aux_data.shape[1], aux_data.shape[2])) + self.variables[var_name]['data'] = aux_data + self.hours_start = 0 + self.hours_end = 0 + return None + + def daily_statistic(self, op, type_op='calendar'): """ - from datetime import timedelta - if first: - idx = self._time.index(self._time[0] + timedelta(hours=hours)) + Calculate daily statistic + + Parameters + ---------- + op : str + Statistic to perform. Accepted values: "max", "mean" and "min" + type_op : str + Type of statistic to perform. Accepted values: "calendar", "alltsteps", and "withoutt0" + - "calendar": Calculate the statistic using the time metadata. + It will avoid single time step by day calculations + - "alltsteps": Calculate a single time statistic with all the time steps. + - "withoutt0": Calculate a single time statistic with all the time steps avoiding the first one. + """ + if self.parallel_method == 'T': + raise NotImplementedError("Statistics are not implemented on time axis paralelitation method.") + time_interval = self.get_time_interval() + if type_op == 'calendar': + aux_time_bounds = [] + aux_time = [] + day_list = [date_aux.day for date_aux in self.time] + for var_name, var_info in self.variables.items(): + if var_info['data'] is None: + self.load(var_name) + stat_data = None + for day in np.unique(day_list): + idx_first = next(i for i, val in enumerate(day_list, 0) if val == day) + idx_last = len(day_list) - next(i for i, val in enumerate(reversed(day_list), 1) if val == day) + if idx_first != idx_last: # To avoid single time step statistic + if idx_last != len(day_list): + if op == 'mean': + data_aux = var_info['data'][idx_first:idx_last + 1, :, :, :].mean(axis=0) + elif op == 'max': + data_aux = var_info['data'][idx_first:idx_last + 1, :, :, :].max(axis=0) + elif op == 'min': + data_aux = var_info['data'][idx_first:idx_last + 1, :, :, :].min(axis=0) + else: + raise NotImplementedError("Statistic operation '{0}' is not implemented.".format(op)) + aux_time_bounds.append([self.time[idx_first], self.time[idx_last]]) + else: + if op == 'mean': + data_aux = data[idx_first:, :, :, :].mean(axis=0) + elif op == 'max': + data_aux = var_info['data'][idx_first:, :, :, :].max(axis=0) + elif op == 'min': + data_aux = var_info['data'][idx_first:, :, :, :].min(axis=0) + else: + raise NotImplementedError("Statistic operation '{0}' is not implemented.".format(op)) + aux_time_bounds.append([self.time[idx_first], self.time[-1]]) + + data_aux = data_aux.reshape((1, data_aux.shape[0], data_aux.shape[1], data_aux.shape[2])) + aux_time.append(self.time[idx_first].replace(hour=0, minute=0, second=0)) + # Append over time dimension + if stat_data is None: + stat_data = data_aux.copy() + else: + stat_data = np.vstack([stat_data, data_aux]) + self.variables[var_name]['data'] = stat_data + self.variables[var_name]['cell_methods'] = "time: {0} (interval: {1}hr)".format(op, time_interval) + self.time = aux_time + self._time = self.time + + self.set_time_bnds(aux_time_bounds) + + elif type_op == 'alltsteps': + for var_name, var_info in self.variables.items(): + if var_info['data'] is None: + self.load(var_name) + if op == 'mean': + aux_data = var_info['data'].mean(axis=0) + elif op == 'max': + aux_data = var_info['data'].max(axis=0) + elif op == 'min': + aux_data = var_info['data'].min(axis=0) + else: + raise NotImplementedError("Statistic operation '{0}' is not implemented.".format(op)) + if len(aux_data.shape) == 3: + aux_data = aux_data.reshape((1, aux_data.shape[0], aux_data.shape[1], aux_data.shape[2])) + self.variables[var_name]['data'] = aux_data + self.variables[var_name]['cell_methods'] = "time: {0} (interval: {1}hr)".format(op, time_interval) + + aux_time = self.time[0].replace(hour=0, minute=0, second=0, microsecond=0) + aux_time_bounds = [[self.time[0], self.time[-1]]] + self.time = [aux_time] + self._time = self.time + + self.set_time_bnds(aux_time_bounds) + + elif type_op == 'withoutt0': + for var_name, var_info in self.variables.items (): + if var_info['data'] is None: + self.load(var_name) + if op == 'mean': + aux_data = var_info['data'][1:, :].mean(axis=0) + elif op == 'max': + aux_data = var_info['data'][1:, :].max(axis=0) + elif op == 'min': + aux_data = var_info['data'][1:, :].min(axis=0) + else: + raise NotImplementedError("Statistic operation '{0}' is not implemented.".format(op)) + if len(aux_data.shape) == 3: + aux_data = aux_data.reshape((1, aux_data.shape[0], aux_data.shape[1], aux_data.shape[2])) + self.variables[var_name]['data'] = aux_data + self.variables[var_name]['cell_methods'] = "time: {0} (interval: {1}hr)".format(op, time_interval) + aux_time = self._time[1].replace(hour=0, minute=0, second=0, microsecond=0) + aux_time_bounds = [[self._time[1], self._time[-1]]] + self.time = [aux_time] + self._time = self.time + + self.set_time_bnds(aux_time_bounds) else: - idx = self._time.index(self._time[-1] - timedelta(hours=hours)) + 1 - return idx + raise NotImplementedError("Statistic operation type '{0}' is not implemented.".format(type_op)) + self.hours_start = 0 + self.hours_end = 0 + return None + + # ================================================================================================================== + # Reading + # ================================================================================================================== def set_read_axis_limits(self): """ @@ -334,7 +509,7 @@ class Nes(object): 'y_min': None, 'y_max': None, 'z_min': None, 'z_max': None, 't_min': None, 't_max': None} - + if self.parallel_method == 'Y': y_len = self._lat['data'].shape[0] axis_limits['y_min'] = (y_len // self.size) * self.rank @@ -374,41 +549,29 @@ class Nes(object): axis_limits['z_max'] = self.last_level return axis_limits - def set_write_axis_limits(self): + def get_time_id(self, hours, first=True): """ - Calculate the 4D writing axis limits + Get the index of the corresponding time value. + + Parameters + ---------- + hours : int + Number of hours to avoid + first : bool + Indicates if youy want to avoid from the first hours (True) or from the last (False) + Default: True Returns ------- - dict - Dictionary with the 4D limits of the rank data to write. - t_min, t_max, z_min, z_max, y_min, y_max, x_min and x_max + int + Possition of the time array """ - axis_limits = {'x_min': None, 'x_max': None, - 'y_min': None, 'y_max': None, - 'z_min': None, 'z_max': None, - 't_min': None, 't_max': None} - - if self.parallel_method == 'Y': - y_len = self._lat['data'].shape[0] - axis_limits['y_min'] = (y_len // self.size) * self.rank - if self.rank + 1 < self.size: - axis_limits['y_max'] = (y_len // self.size) * (self.rank + 1) - elif self.parallel_method == 'X': - x_len = self._lon['data'].shape[-1] - axis_limits['x_min'] = (x_len // self.size) * self.rank - if self.rank + 1 < self.size: - axis_limits['x_max'] = (x_len // self.size) * (self.rank + 1) - elif self.parallel_method == 'T': - t_len = len(self._time) - axis_limits['t_min'] = ((t_len // self.size) * self.rank) - if self.rank + 1 < self.size: - axis_limits['t_max'] = (t_len // self.size) * (self.rank + 1) - + from datetime import timedelta + if first: + idx = self._time.index(self._time[0] + timedelta(hours=hours)) else: - raise NotImplementedError("Parallel method '{meth}' is not implemented. Use one of these: {accept}".format( - meth=self.parallel_method, accept=['X', 'Y', 'T'])) - return axis_limits + idx = self._time.index(self._time[-1] - timedelta(hours=hours)) + 1 + return idx def open(self): """ @@ -747,42 +910,45 @@ class Nes(object): gl_attrs[attrname] = getattr(self.netcdf, attrname) return gl_attrs - def free_vars(self, var_list): - """ - Erase the selected variables from the variables information. + # ================================================================================================================== + # Writing + # ================================================================================================================== - Parameters - ---------- - var_list : list, str - List (or single string) of the variables to be loaded - """ - if isinstance(var_list, str): - var_list = [var_list] - - if self.is_xarray: - self.dataset = self.dataset.drop_vars(var_list) - self.variables = self.__get_lazy_variables() - else: - for var_name in var_list: - del self.variables[var_name] - return None - - def keep_vars(self, var_list): + def set_write_axis_limits(self): """ - Keep the selected variables and erases the rest. + Calculate the 4D writing axis limits - Parameters - ---------- - var_list : list, str - List (or single string) of the variables to be loaded + Returns + ------- + dict + Dictionary with the 4D limits of the rank data to write. + t_min, t_max, z_min, z_max, y_min, y_max, x_min and x_max """ - if isinstance(var_list, str): - var_list = [var_list] + axis_limits = {'x_min': None, 'x_max': None, + 'y_min': None, 'y_max': None, + 'z_min': None, 'z_max': None, + 't_min': None, 't_max': None} - to_remove = list(set(self.variables.keys()).difference(set(var_list))) + if self.parallel_method == 'Y': + y_len = self._lat['data'].shape[0] + axis_limits['y_min'] = (y_len // self.size) * self.rank + if self.rank + 1 < self.size: + axis_limits['y_max'] = (y_len // self.size) * (self.rank + 1) + elif self.parallel_method == 'X': + x_len = self._lon['data'].shape[-1] + axis_limits['x_min'] = (x_len // self.size) * self.rank + if self.rank + 1 < self.size: + axis_limits['x_max'] = (x_len // self.size) * (self.rank + 1) + elif self.parallel_method == 'T': + t_len = len(self._time) + axis_limits['t_min'] = ((t_len // self.size) * self.rank) + if self.rank + 1 < self.size: + axis_limits['t_max'] = (t_len // self.size) * (self.rank + 1) - self.free_vars(to_remove) - return None + else: + raise NotImplementedError("Parallel method '{meth}' is not implemented. Use one of these: {accept}".format( + meth=self.parallel_method, accept=['X', 'Y', 'T'])) + return axis_limits def _create_dimensions(self, netcdf): """ -- GitLab From f6e7c064167715b72ac1181120c77df89451b13d Mon Sep 17 00:00:00 2001 From: ctena Date: Mon, 23 May 2022 14:18:20 +0200 Subject: [PATCH 16/73] Corrected error while loading 1D variables --- nes/nc_projections/default_nes.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index 6e0dd87..7ad8fb2 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -830,7 +830,9 @@ class Nes(object): """ nc_var = self.netcdf.variables[var_name] var_dims = nc_var.dimensions - if len(var_dims) == 2: + if len(var_dims) < 2: + data = nc_var[:] + elif len(var_dims) == 2: data = nc_var[self.read_axis_limits['y_min']:self.read_axis_limits['y_max'], self.read_axis_limits['x_min']:self.read_axis_limits['x_max']] data = data.reshape(1, 1, data.shape[-2], data.shape[-1]) @@ -851,7 +853,8 @@ class Nes(object): # self.read_axis_limits['y_min']:self.read_axis_limits['y_max'], # self.read_axis_limits['x_min']:self.read_axis_limits['x_max']] else: - raise NotImplementedError('Only can be read netCDF with 4 dimensions or less') + raise NotImplementedError('Error with {0}. Only can be read netCDF with 4 dimensions or less'.format( + var_name)) # Missing to nan try: -- GitLab From b736a93919af735b584b4f455a5824eb0fa6a500 Mon Sep 17 00:00:00 2001 From: ctena Date: Tue, 24 May 2022 13:24:28 +0200 Subject: [PATCH 17/73] Bugfix on daily_mean --- nes/nc_projections/default_nes.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/nes/nc_projections/default_nes.py b/nes/nc_projections/default_nes.py index 7ad8fb2..b661971 100644 --- a/nes/nc_projections/default_nes.py +++ b/nes/nc_projections/default_nes.py @@ -2,11 +2,8 @@ import sys import os -from urllib.parse import _NetlocResultMixinStr import warnings import numpy as np -from pandas import DataFrame, read_csv -import timeit from xarray import open_dataset from netCDF4 import Dataset, num2date, date2num from mpi4py import MPI @@ -416,7 +413,7 @@ class Nes(object): aux_time_bounds.append([self.time[idx_first], self.time[idx_last]]) else: if op == 'mean': - data_aux = data[idx_first:, :, :, :].mean(axis=0) + data_aux = var_info['data'][idx_first:, :, :, :].mean(axis=0) elif op == 'max': data_aux = var_info['data'][idx_first:, :, :, :].max(axis=0) elif op == 'min': -- GitLab From 67d512e2d00c7459173dac59f3348f20c9b5dc8c Mon Sep 17 00:00:00 2001 From: Alba Vilanova Cortezon Date: Tue, 31 May 2022 14:53:43 +0200 Subject: [PATCH 18/73] #10 Implement creation of rotated grids --- .../jupyter_test_create_netcdf.ipynb | 479 +++++++++++- .../jupyter_test_time_bnds.ipynb | 721 ++++++++++++++++++ jupyter_notebooks/nc_serial_test3_alba.nc | Bin 0 -> 10688833 bytes jupyter_notebooks/regular_grid.nc | Bin 0 -> 10434 bytes jupyter_notebooks/rotated_grid.nc | Bin 0 -> 17606 bytes 5 files changed, 1191 insertions(+), 9 deletions(-) create mode 100644 jupyter_notebooks/jupyter_test_time_bnds.ipynb create mode 100644 jupyter_notebooks/nc_serial_test3_alba.nc create mode 100644 jupyter_notebooks/regular_grid.nc create mode 100644 jupyter_notebooks/rotated_grid.nc diff --git a/jupyter_notebooks/jupyter_test_create_netcdf.ipynb b/jupyter_notebooks/jupyter_test_create_netcdf.ipynb index f0f42d8..2ddbf8c 100644 --- a/jupyter_notebooks/jupyter_test_create_netcdf.ipynb +++ b/jupyter_notebooks/jupyter_test_create_netcdf.ipynb @@ -22,14 +22,14 @@ "inc_lon = 0.1\n", "n_lat = 10\n", "n_lon = 10\n", - "nessy2 = create_nes(comm=None, info=False, projection='regular', create_nes=True,\n", - " lat_orig=lat_orig, lon_orig=lon_orig, inc_lat=inc_lat, inc_lon=inc_lon, \n", - " n_lat=n_lat, n_lon=n_lon)" + "regular_grid = create_nes(comm=None, info=False, projection='regular', create_nes=True,\n", + " lat_orig=lat_orig, lon_orig=lon_orig, inc_lat=inc_lat, inc_lon=inc_lon, \n", + " n_lat=n_lat, n_lon=n_lon)" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -40,7 +40,17 @@ "Rank 000: NetCDF ready to write\n", "Rank 000: Dimensions done\n" ] - }, + } + ], + "source": [ + "regular_grid.to_netcdf('regular_grid.nc', info=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ { "data": { "text/html": [ @@ -405,7 +415,7 @@ "Data variables:\n", " crs |S1 b''\n", "Attributes:\n", - " Conventions: CF-1.7" + " Conventions: CF-1.7" ], "text/plain": [ "\n", @@ -427,16 +437,467 @@ } ], "source": [ - "nessy2.to_netcdf('regular_grid.nc', info=True)\n", "xr.open_dataset('regular_grid.nc')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "centre_lat = 51\n", + "centre_lon = 10\n", + "west_boundary = -35\n", + "south_boundary = -27\n", + "inc_rlat = 0.2\n", + "inc_rlon = 0.2\n", + "n_lat = 10\n", + "n_lon = 10\n", + "grid_north_pole_latitude = 90\n", + "grid_north_pole_longitude = 135\n", + "rotated_grid = create_nes(comm=None, info=False, projection='rotated', create_nes=True,\n", + " centre_lat=centre_lat, centre_lon=centre_lon,\n", + " west_boundary=west_boundary, south_boundary=south_boundary,\n", + " inc_rlat=inc_rlat, inc_rlon=inc_rlon, n_lat=n_lat, n_lon=n_lon, \n", + " grid_north_pole_latitude=grid_north_pole_latitude,\n", + " grid_north_pole_longitude=grid_north_pole_longitude)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rank 000: Creating rotated_grid.nc\n", + "Rank 000: NetCDF ready to write\n", + "Rank 000: Dimensions done\n" + ] + } + ], + "source": [ + "rotated_grid.to_netcdf('rotated_grid.nc', info=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:       (time: 1, lev: 1, rlat: 10, rlon: 10)\n",
+       "Coordinates:\n",
+       "  * time          (time) datetime64[ns] 1996-12-31\n",
+       "  * lev           (lev) float64 0.0\n",
+       "  * rlat          (rlat) float64 -27.0 -26.8 -26.6 -26.4 ... -25.6 -25.4 -25.2\n",
+       "  * rlon          (rlon) float64 -35.0 -34.8 -34.6 -34.4 ... -33.6 -33.4 -33.2\n",
+       "Data variables:\n",
+       "    lat           (rlat, rlon) float64 -27.0 -26.8 -26.6 ... -25.6 -25.4 -25.2\n",
+       "    lon           (rlat, rlon) float64 -35.0 -34.8 -34.6 ... -33.6 -33.4 -33.2\n",
+       "    rotated_pole  |S1 b''\n",
+       "Attributes:\n",
+       "    Conventions:  CF-1.7
" + ], + "text/plain": [ + "\n", + "Dimensions: (time: 1, lev: 1, rlat: 10, rlon: 10)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 1996-12-31\n", + " * lev (lev) float64 0.0\n", + " * rlat (rlat) float64 -27.0 -26.8 -26.6 -26.4 ... -25.6 -25.4 -25.2\n", + " * rlon (rlon) float64 -35.0 -34.8 -34.6 -34.4 ... -33.6 -33.4 -33.2\n", + "Data variables:\n", + " lat (rlat, rlon) float64 ...\n", + " lon (rlat, rlon) float64 ...\n", + " rotated_pole |S1 ...\n", + "Attributes:\n", + " Conventions: CF-1.7" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "xr.open_dataset('rotated_grid.nc')" + ] } ], "metadata": { diff --git a/jupyter_notebooks/jupyter_test_time_bnds.ipynb b/jupyter_notebooks/jupyter_test_time_bnds.ipynb new file mode 100644 index 0000000..088aced --- /dev/null +++ b/jupyter_notebooks/jupyter_test_time_bnds.ipynb @@ -0,0 +1,721 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from nes import *\n", + "import xarray as xr\n", + "import datetime\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\ntest = \"/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/OUT/stats_bnds/monarch/a45g/regional/daily_max/O3_all/O3_all-000_2021080300.nc\"\\nnessy = open_netcdf(path=test, info=True)\\nnessy.keep_vars([\\'O3_all\\'])\\nnessy.load()\\nnessy.to_netcdf(\\'nc_serial_test2_alba.nc\\', info=True)\\n'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"\"\"\n", + "test = \"/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/OUT/stats_bnds/monarch/a45g/regional/daily_max/O3_all/O3_all-000_2021080300.nc\"\n", + "nessy = open_netcdf(path=test, info=True)\n", + "nessy.keep_vars(['O3_all'])\n", + "nessy.load()\n", + "nessy.to_netcdf('nc_serial_test2_alba.nc', info=True)\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'data': None, 'dimensions': (), 'grid_mapping_name': 'rotated_latitude_longitude', 'grid_north_pole_latitude': 39.0, 'grid_north_pole_longitude': -170.0} \n" + ] + } + ], + "source": [ + "test = \"/gpfs/scratch/bsc32/bsc32538/mr_multiplyby/OUT/stats_bnds/monarch/a45g/regional/daily_max/O3_all/O3_all-000_2021080300.nc\"\n", + "nessy = open_netcdf(path=test, info=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[datetime.datetime(2020, 2, 20, 0, 0),\n", + " datetime.datetime(2020, 2, 15, 0, 0)]], dtype=object)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "array = np.array([[datetime.datetime(year=2020, month=2, day=20), \n", + " datetime.datetime(year=2020, month=2, day=15)]])\n", + "nessy.set_time_bnds(array)\n", + "nessy.time_bnds" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/esarchive/scratch/avilanova/software/NES/nes/nc_projections/default_nes.py:970: UserWarning: WARNING!!! Variable O3_all was not loaded. It will not be written.\n", + " warnings.warn(msg)\n" + ] + } + ], + "source": [ + "# nessy.load()\n", + "nessy.to_netcdf('nc_serial_test3_alba.nc')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rank 000: Loading O3_all var (1/1)\n", + "Rank 000: Loaded O3_all var ((1, 24, 271, 351))\n" + ] + } + ], + "source": [ + "nessy.load()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "nessy.to_netcdf('nc_serial_test3_alba.nc')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'data': masked_array(\n", + " data=[[[[2.82636070e-09, 2.83436141e-09, 2.82522827e-09, ...,\n", + " 2.96334601e-09, 2.94810221e-09, 2.91839553e-09],\n", + " [2.80930834e-09, 2.57182142e-09, 2.55521360e-09, ...,\n", + " 2.56395216e-09, 2.55890820e-09, 2.89073032e-09],\n", + " [2.79031842e-09, 2.53415999e-09, 2.50317100e-09, ...,\n", + " 2.56737764e-09, 2.58685584e-09, 2.85498758e-09],\n", + " ...,\n", + " [4.54469973e-09, 2.31674457e-09, 2.22753971e-09, ...,\n", + " 3.90127353e-09, 3.89643118e-09, 3.95452204e-09],\n", + " [4.54129534e-09, 3.39469808e-09, 2.30205255e-09, ...,\n", + " 3.88824706e-09, 3.88372090e-09, 3.95252631e-09],\n", + " [4.55012028e-09, 4.54941684e-09, 4.55885596e-09, ...,\n", + " 3.93945099e-09, 3.94256938e-09, 3.94736510e-09]],\n", + " \n", + " [[1.61966751e-09, 1.62850033e-09, 1.62801062e-09, ...,\n", + " 1.74583636e-09, 1.74684045e-09, 1.74125825e-09],\n", + " [1.60704539e-09, 1.41438683e-09, 1.39824063e-09, ...,\n", + " 1.43241041e-09, 1.45136980e-09, 1.73744363e-09],\n", + " [1.59303792e-09, 1.41264567e-09, 1.43958856e-09, ...,\n", + " 1.43522705e-09, 1.45869528e-09, 1.72746673e-09],\n", + " ...,\n", + " [3.39471939e-09, 2.65527422e-09, 2.22850582e-09, ...,\n", + " 3.00350167e-09, 3.02176750e-09, 3.04009262e-09],\n", + " [3.42592332e-09, 2.81851942e-09, 2.28753505e-09, ...,\n", + " 2.99818836e-09, 2.99247205e-09, 3.04403525e-09],\n", + " [3.43113582e-09, 3.43824125e-09, 3.44929552e-09, ...,\n", + " 3.05421777e-09, 3.04752024e-09, 3.04445491e-09]],\n", + " \n", + " [[6.52169652e-10, 6.62677024e-10, 6.71934786e-10, ...,\n", + " 6.84429291e-10, 6.85826118e-10, 6.81504464e-10],\n", + " [6.54959087e-10, 6.65219158e-10, 6.72430500e-10, ...,\n", + " 7.02121916e-10, 6.88325397e-10, 6.78990253e-10],\n", + " [6.57915333e-10, 6.72102929e-10, 6.82566170e-10, ...,\n", + " 7.10820458e-10, 7.07094217e-10, 6.77522760e-10],\n", + " ...,\n", + " [2.26027863e-09, 2.27629537e-09, 2.22616392e-09, ...,\n", + " 1.80253423e-09, 1.80225357e-09, 1.75757697e-09],\n", + " [2.25028196e-09, 2.24872521e-09, 2.25445618e-09, ...,\n", + " 1.78916737e-09, 1.75583581e-09, 1.73717007e-09],\n", + " [2.25827335e-09, 2.26974151e-09, 2.28325270e-09, ...,\n", + " 1.80090465e-09, 1.77703174e-09, 1.75434933e-09]],\n", + " \n", + " ...,\n", + " \n", + " [[6.20177729e-11, 6.26959387e-11, 6.28658792e-11, ...,\n", + " 7.74274672e-11, 7.81546980e-11, 7.60479180e-11],\n", + " [6.20486787e-11, 4.91600684e-11, 4.88878833e-11, ...,\n", + " 8.30884250e-11, 8.02152303e-11, 7.64004970e-11],\n", + " [6.20976950e-11, 4.84989236e-11, 4.85273696e-11, ...,\n", + " 8.46209977e-11, 8.60716498e-11, 9.29777644e-11],\n", + " ...,\n", + " [6.15721710e-11, 5.85051035e-11, 5.68927752e-11, ...,\n", + " 7.66955388e-11, 7.87262894e-11, 8.41871295e-11],\n", + " [6.17081941e-11, 5.77536560e-11, 5.71826440e-11, ...,\n", + " 8.49015233e-11, 8.82505458e-11, 9.20043208e-11],\n", + " [6.09760506e-11, 6.03529102e-11, 6.24047411e-11, ...,\n", + " 9.69636524e-11, 9.73700426e-11, 9.67554162e-11]],\n", + " \n", + " [[6.17567178e-11, 6.23894963e-11, 6.25706292e-11, ...,\n", + " 9.04916420e-11, 8.90077803e-11, 8.43536768e-11],\n", + " [6.17901147e-11, 4.59270816e-11, 4.57923699e-11, ...,\n", + " 1.06383589e-10, 1.05693093e-10, 9.44862175e-11],\n", + " [6.18271337e-11, 4.17853495e-11, 3.94594427e-11, ...,\n", + " 1.34135009e-10, 1.37096737e-10, 1.13853482e-10],\n", + " ...,\n", + " [5.87425456e-11, 5.60845814e-11, 5.33429169e-11, ...,\n", + " 6.52061183e-11, 6.64711411e-11, 7.06842501e-11],\n", + " [5.92315016e-11, 5.72428251e-11, 5.51245403e-11, ...,\n", + " 7.10893150e-11, 7.38196310e-11, 7.53354532e-11],\n", + " [5.72967125e-11, 5.87497967e-11, 6.08200851e-11, ...,\n", + " 7.97847274e-11, 8.28124236e-11, 7.89215707e-11]],\n", + " \n", + " [[6.15217946e-11, 6.21571961e-11, 6.23377391e-11, ...,\n", + " 1.08401239e-10, 1.07494236e-10, 1.08711720e-10],\n", + " [6.15563989e-11, 4.56989759e-11, 4.46428450e-11, ...,\n", + " 1.30999808e-10, 1.26581134e-10, 1.39005307e-10],\n", + " [6.15933693e-11, 3.98656906e-11, 3.75483949e-11, ...,\n", + " 1.37105632e-10, 1.48587462e-10, 1.83946344e-10],\n", + " ...,\n", + " [4.68582569e-11, 4.44464673e-11, 4.43960736e-11, ...,\n", + " 5.86025117e-11, 5.84869791e-11, 6.32652056e-11],\n", + " [4.99817097e-11, 4.49490271e-11, 4.43218864e-11, ...,\n", + " 6.19639479e-11, 6.07859180e-11, 6.55651922e-11],\n", + " [4.98553143e-11, 4.61104453e-11, 4.96835975e-11, ...,\n", + " 6.42673414e-11, 6.38328765e-11, 6.38894007e-11]]]],\n", + " mask=False,\n", + " fill_value=1e+20,\n", + " dtype=float32),\n", + " 'dimensions': ('time', 'lev', 'rlat', 'rlon'),\n", + " 'units': 'kg/m3',\n", + " 'long_name': 'TRACERS_044',\n", + " 'coordinates': 'lat lon',\n", + " 'cell_methods': 'time: maximum (interval: 1hr)',\n", + " 'grid_mapping': 'rotated_pole'}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy.variables['O3_all']" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[datetime.datetime(2020, 2, 20, 0, 0),\n", + " datetime.datetime(2020, 2, 15, 0, 0)]], dtype=object)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nessy.time_bnds" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:       (time: 1, time_nv: 2, lev: 24, rlat: 271, rlon: 351)\n",
+       "Coordinates:\n",
+       "  * time          (time) datetime64[ns] 2021-08-03\n",
+       "  * lev           (lev) float64 0.0 1.0 2.0 3.0 4.0 ... 19.0 20.0 21.0 22.0 23.0\n",
+       "    lat           (rlat, rlon) float64 16.35 16.43 16.52 ... 58.83 58.68 58.53\n",
+       "    lon           (rlat, rlon) float64 -22.18 -22.02 -21.85 ... 88.05 88.23\n",
+       "  * rlat          (rlat) float64 -27.0 -26.8 -26.6 -26.4 ... 26.4 26.6 26.8 27.0\n",
+       "  * rlon          (rlon) float64 -35.0 -34.8 -34.6 -34.4 ... 34.4 34.6 34.8 35.0\n",
+       "Dimensions without coordinates: time_nv\n",
+       "Data variables:\n",
+       "    time_bnds     (time, time_nv) datetime64[ns] 2020-02-20 2020-02-15\n",
+       "    O3_all        (time, lev, rlat, rlon) float32 ...\n",
+       "    rotated_pole  |S1 b''\n",
+       "Attributes:\n",
+       "    Conventions:  CF-1.7\n",
+       "    comment:      Generated on marenostrum4
" + ], + "text/plain": [ + "\n", + "Dimensions: (time: 1, time_nv: 2, lev: 24, rlat: 271, rlon: 351)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 2021-08-03\n", + " * lev (lev) float64 0.0 1.0 2.0 3.0 4.0 ... 19.0 20.0 21.0 22.0 23.0\n", + " lat (rlat, rlon) float64 ...\n", + " lon (rlat, rlon) float64 ...\n", + " * rlat (rlat) float64 -27.0 -26.8 -26.6 -26.4 ... 26.4 26.6 26.8 27.0\n", + " * rlon (rlon) float64 -35.0 -34.8 -34.6 -34.4 ... 34.4 34.6 34.8 35.0\n", + "Dimensions without coordinates: time_nv\n", + "Data variables:\n", + " time_bnds (time, time_nv) datetime64[ns] ...\n", + " O3_all (time, lev, rlat, rlon) float32 ...\n", + " rotated_pole |S1 ...\n", + "Attributes:\n", + " Conventions: CF-1.7\n", + " comment: Generated on marenostrum4" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "xr.open_dataset('nc_serial_test3_alba.nc')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/jupyter_notebooks/nc_serial_test3_alba.nc b/jupyter_notebooks/nc_serial_test3_alba.nc new file mode 100644 index 0000000000000000000000000000000000000000..de4f352c0ae3c2cb6cbbf2f879215ffad5036091 GIT binary patch literal 10688833 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%0DrzTtQTKT_=;rH1pQGp%ohddK=_|3p2^tdE6y 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

NZ0x&WoN6Zk>9CY1sw)70OfCuMn5V`*GtQ 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%0DChwBfJx+eH7BAIqOJ{aXI*>F4ry z`MvyKJdnr-;)P6pNaTq^z7TJSKf)*A5%Gy9uLSZ-CC`X>|2*AhIG#Yg0&Kz{P% zsY1SL@D}+?JSIL9uQ~FYBhQKNqIggIcR6@ad?;S@ z{+(vyOz~_a-->th(M_#Cj9byvf7}*vQ`GIcb#_5}$KIxC+oKR~b((2e_d-**#Ax)- zywfy~d&D&KpK9t?!hQ_-3GBxZ_eC9ppSh^G~dht=(;ceHY3f z*muEAJlERm0VDCbuWvB*$J}k2-kt>A0Q=|0P|A6&ecQH8EErs`h-5KEA@;W#-w!-^oew+T_(jF(7#@$hun>WS&3i0nNt-U;a zgK6I9F2plXuTXb=(&BXUR8v3mbyK$}>TzSMPZ2l8I&P}JA-)~!xOI;f;JlAkFs*y9 zX`1eDXBxiS+_bE?4Rq}tP5p{{n&xl!H;wlkg8uGDnT9v9ejB=wZ!aa^P9fjE2fi(D zUWd;;bc?AUG!CC%iq(Q+L8zX#aIxwD$wgrhCA%@$D_qKXYsJ zzu48(UyXHG-vu1&UjWC(&GxbWcskZwa|XZqyAQ$VufTe0*&p0m{uqGchk;jJJ<;OO zW)RwUAfIjzF3qchL&FSkXFYki9ap|O&(wtrP1C6(OzVZ0n1&&jnU}sn#Q45 zq5adVP4kAM(BAV})4JDaQ@`1D&~Ksj!Z8-Rf1!E*u@=V>)Up4K)vx3AdC&9d{QADA z@8|UtUZ1Wv^7{3A^!xOC_4{={bboZebpLce3-52_{nq{0^N4&tdR}^dZX}*(-i^+2aS)$c;Wb|98a0!D{;JO{8f&}%<-x5s_~mSo;AKT-Yds{V?Jx`VW4?3De?|F_`LU5Nl|PwJ3-hb;ZDIaZK6Vq4pOvqbzYFtuVt!A|_sakBgFt_1 z_yzq#eiG>~fqoVv zl*mV!yp+gKl|1G8gRd%i%XK7wk;lYmnY<=`i{v@+op?|DSIC3nL-ArEKPK{IBwva* zJ^8c2qvTUhUQOgz@oXaBig)88tAJDY*ud0XvNht#yCeP-b-T_TYq4*I{l~%zmsnhu zy52PWagS;I;Bn{!FPpl-ADH^hzcS6A{Eq&_{TNnc9m7qiWALpz8JCs|P{-guM;$}$ z+~3;kuv1O*BjH5_2-_U&&P_CCcl zZOi)p2w;oZ5WW$7Q#-u`ds4oiYBw_U+B zcyMn09`(5k|1LPVvL`qJ#C^niUu2)lhhU#v*AsQQuHD_% zp1yq8G+zA_j$4=Y3OA!(A-I{=UUvV&w4V8+X}IPu9Dj9F$v`! zjjcT`zZLq=*d97{H`DwZ_D`tG9E`Zdk)~nZKt#!xA7_PZT=H{ zTUNUp{T_7*zS(0I`*)u?XHnpb)qdMVaz>)e?Zr!_w_^a}x-X9VqK~P24C}Cd0Jz8f4vzIlW8Jkrg7wxi7wfF$2k>k9nCq$IxNf@7xpuz% z!3CxzT#WCzkeqri_|!cBF7;P{M?(+rX8QVie7^rprs3&ZOyjS&qP@i(re(pMruFr4 zrs?c^OkIonpo8y6|KtY{&l!*S(+5q%)Q6zwO)$-CJ`BAMTIW&QOtg020a_WWKl6Bf zKInWrf93Z%eZQ`U*Qe{vyng*2{l3iKtKYBtk$Hb~zjXg}KXrc#?|0Ju=kw6>iF{s( z&oA?N>iOz<>-h(chsOBOc;Wa-98Vfwf#a<){x}{rJ~du7ejUfN#<#}1=lE~Thh;E7 zG+#7-G@mrTG~YD;G#}k%n4g-j{(Q_|&1cQ;#QCoIuY8c19}@G0@<(Pq3Cu6bH<|gT zk&l?43iDNA{!%^*%x{tTt}y=<=EKbVsC=pX>AEAIX6Dz(e4Ckn6Z3IlepbF#{w~bt zk@?+qM!v7g|MUaj3;rO#aP$xPiTp)=8cZ~3|W-P7+A{lAb0D)}J%0A5Js2l0gXLcAgV2;>p*NrP9& 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 $l@xEQZ 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

8w+FhbUqd^qSOw~nJu<&f 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