From 4b5ee921cfbf95497984d07dbed298b2fd2f8e7a Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Tue, 6 Jun 2023 22:48:27 -0600 Subject: [PATCH 1/2] Add format and engine attributes to MeshDescriptor These are used to set the NetCDF fromat and (where applicable) the xarray output engine. --- pyremap/descriptor/lat_lon_2d_grid_descriptor.py | 2 +- pyremap/descriptor/lat_lon_grid_descriptor.py | 5 +++-- pyremap/descriptor/mesh_descriptor.py | 10 ++++++++++ pyremap/descriptor/mpas_edge_mesh_descriptor.py | 5 +++-- pyremap/descriptor/mpas_mesh_descriptor.py | 5 +++-- pyremap/descriptor/point_collection_descriptor.py | 5 +++-- pyremap/descriptor/projection_grid_descriptor.py | 5 +++-- 7 files changed, 26 insertions(+), 11 deletions(-) diff --git a/pyremap/descriptor/lat_lon_2d_grid_descriptor.py b/pyremap/descriptor/lat_lon_2d_grid_descriptor.py index 579db40..c470337 100644 --- a/pyremap/descriptor/lat_lon_2d_grid_descriptor.py +++ b/pyremap/descriptor/lat_lon_2d_grid_descriptor.py @@ -136,7 +136,7 @@ def to_scrip(self, scripFileName): scripFileName : str The path to which the SCRIP file should be written """ - outFile = netCDF4.Dataset(scripFileName, 'w') + outFile = netCDF4.Dataset(scripFileName, 'w', format=self.format) nLat, nLon = self.lat.shape diff --git a/pyremap/descriptor/lat_lon_grid_descriptor.py b/pyremap/descriptor/lat_lon_grid_descriptor.py index 39dcc29..cc56ebb 100644 --- a/pyremap/descriptor/lat_lon_grid_descriptor.py +++ b/pyremap/descriptor/lat_lon_grid_descriptor.py @@ -212,7 +212,7 @@ def to_scrip(self, scripFileName): scripFileName : str The path to which the SCRIP file should be written """ - outFile = netCDF4.Dataset(scripFileName, 'w') + outFile = netCDF4.Dataset(scripFileName, 'w', format=self.format) nLat = len(self.lat) nLon = len(self.lon) @@ -296,7 +296,8 @@ def to_esmf(self, esmfFileName): ds_out.attrs['gridType'] = 'unstructured mesh' ds_out.attrs['version'] = '0.9' - ds_out.to_netcdf(esmfFileName) + ds_out.to_netcdf(esmfFileName, format=self.format, + engine=self.engine) def _set_coords(self, latVarName, lonVarName, latDimName, lonDimName): diff --git a/pyremap/descriptor/mesh_descriptor.py b/pyremap/descriptor/mesh_descriptor.py index 25d6c47..7c8cbb4 100644 --- a/pyremap/descriptor/mesh_descriptor.py +++ b/pyremap/descriptor/mesh_descriptor.py @@ -31,6 +31,14 @@ class MeshDescriptor: coords : dict A dictionary that can be used to construct an xarray.DataArray for each coordinate in the mesh or grid + + format : {'NETCDF4', 'NETCDF4_CLASSIC', 'NETCDF3_64BIT', + 'NETCDF3_CLASSIC'} + The NetCDF file format to use. Default is ``'NETCDF4'`` + + engine : {'netcdf4', 'scipy', 'h5netcdf'} + The library to use for xarray NetCDF output. The default is + ``'netcdf4'`` """ def __init__(self, meshName=None, regional=None): """ @@ -50,6 +58,8 @@ def __init__(self, meshName=None, regional=None): self.dims = None self.dimSizes = None self.coords = None + self.format = 'NETCDF4' + self.engine = None def to_scrip(self, scripFileName): """ diff --git a/pyremap/descriptor/mpas_edge_mesh_descriptor.py b/pyremap/descriptor/mpas_edge_mesh_descriptor.py index 58e92ee..d2cbf3a 100644 --- a/pyremap/descriptor/mpas_edge_mesh_descriptor.py +++ b/pyremap/descriptor/mpas_edge_mesh_descriptor.py @@ -78,7 +78,7 @@ def to_scrip(self, scripFileName): """ inFile = netCDF4.Dataset(self.fileName, 'r') - outFile = netCDF4.Dataset(scripFileName, 'w') + outFile = netCDF4.Dataset(scripFileName, 'w', format=self.format) # Get info from input file latCell = inFile.variables['latCell'][:] @@ -214,4 +214,5 @@ def to_esmf(self, esmfFileName): ds_out.attrs['gridType'] = 'unstructured mesh' ds_out.attrs['version'] = '0.9' - ds_out.to_netcdf(esmfFileName) + ds_out.to_netcdf(esmfFileName, format=self.format, + engine=self.engine) diff --git a/pyremap/descriptor/mpas_mesh_descriptor.py b/pyremap/descriptor/mpas_mesh_descriptor.py index ad803d5..2204a18 100644 --- a/pyremap/descriptor/mpas_mesh_descriptor.py +++ b/pyremap/descriptor/mpas_mesh_descriptor.py @@ -101,7 +101,7 @@ def to_scrip(self, scripFileName): raise ValueError('A SCRIP file won\'t work for remapping vertices') inFile = netCDF4.Dataset(self.fileName, 'r') - outFile = netCDF4.Dataset(scripFileName, 'w') + outFile = netCDF4.Dataset(scripFileName, 'w', format=self.format) # Get info from input file latCell = inFile.variables['latCell'][:] @@ -193,4 +193,5 @@ def to_esmf(self, esmfFileName): ds_out.attrs['gridType'] = 'unstructured mesh' ds_out.attrs['version'] = '0.9' - ds_out.to_netcdf(esmfFileName) + ds_out.to_netcdf(esmfFileName, format=self.format, + engine=self.engine) diff --git a/pyremap/descriptor/point_collection_descriptor.py b/pyremap/descriptor/point_collection_descriptor.py index c463020..2e8e248 100644 --- a/pyremap/descriptor/point_collection_descriptor.py +++ b/pyremap/descriptor/point_collection_descriptor.py @@ -85,7 +85,7 @@ def to_scrip(self, scripFileName): The path to which the SCRIP file should be written """ - outFile = netCDF4.Dataset(scripFileName, 'w') + outFile = netCDF4.Dataset(scripFileName, 'w', format=self.format) nPoints = len(self.lat) @@ -166,4 +166,5 @@ def to_esmf(self, esmfFileName): ds_out.attrs['gridType'] = 'unstructured mesh' ds_out.attrs['version'] = '0.9' - ds_out.to_netcdf(esmfFileName) + ds_out.to_netcdf(esmfFileName, format=self.format, + engine=self.engine) diff --git a/pyremap/descriptor/projection_grid_descriptor.py b/pyremap/descriptor/projection_grid_descriptor.py index 7c9c1f1..3abaf2f 100644 --- a/pyremap/descriptor/projection_grid_descriptor.py +++ b/pyremap/descriptor/projection_grid_descriptor.py @@ -184,7 +184,7 @@ def to_scrip(self, scripFileName): scripFileName : str The path to which the SCRIP file should be written """ - outFile = netCDF4.Dataset(scripFileName, 'w') + outFile = netCDF4.Dataset(scripFileName, 'w', format=self.format) nx = len(self.x) ny = len(self.y) @@ -274,7 +274,8 @@ def to_esmf(self, esmfFileName): ds_out.attrs['gridType'] = 'unstructured mesh' ds_out.attrs['version'] = '0.9' - ds_out.to_netcdf(esmfFileName) + ds_out.to_netcdf(esmfFileName, format=self.format, + engine=self.engine) def project_to_lat_lon(self, X, Y): """ From 91270b5f2ffe0537d39ef5250020545316df389d Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Tue, 6 Jun 2023 22:53:52 -0600 Subject: [PATCH 2/2] Update to v1.0.0 --- ci/recipe/meta.yaml | 2 +- docs/versions.rst | 3 +++ pyremap/__init__.py | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ci/recipe/meta.yaml b/ci/recipe/meta.yaml index df1caa3..a4c64f7 100644 --- a/ci/recipe/meta.yaml +++ b/ci/recipe/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pyremap" %} -{% set version = "0.0.16" %} +{% set version = "1.0.0" %} package: name: {{ name|lower }} diff --git a/docs/versions.rst b/docs/versions.rst index 385960b..7ae0a74 100644 --- a/docs/versions.rst +++ b/docs/versions.rst @@ -16,6 +16,7 @@ Documentation On GitHub `v0.0.14`_ `0.0.14`_ `v0.0.15`_ `0.0.15`_ `v0.0.16`_ `0.0.16`_ +`v1.0.0`_ `1.0.0`_ ================ =============== .. _`stable`: ../stable/index.html @@ -30,6 +31,7 @@ Documentation On GitHub .. _`v0.0.14`: ../0.0.14/index.html .. _`v0.0.15`: ../0.0.15/index.html .. _`v0.0.16`: ../0.0.16/index.html +.. _`v1.0.0`: ../1.0.0/index.html .. _`main`: https://github.com/MPAS-Dev/pyremap/tree/main .. _`0.0.6`: https://github.com/MPAS-Dev/pyremap/tree/0.0.6 .. _`0.0.7`: https://github.com/MPAS-Dev/pyremap/tree/0.0.7 @@ -42,3 +44,4 @@ Documentation On GitHub .. _`0.0.14`: https://github.com/MPAS-Dev/pyremap/tree/0.0.14 .. _`0.0.15`: https://github.com/MPAS-Dev/pyremap/tree/0.0.15 .. _`0.0.16`: https://github.com/MPAS-Dev/pyremap/tree/0.0.16 +.. _`1.0.0`: https://github.com/MPAS-Dev/pyremap/tree/1.0.0 diff --git a/pyremap/__init__.py b/pyremap/__init__.py index 019f3c6..e31100e 100644 --- a/pyremap/__init__.py +++ b/pyremap/__init__.py @@ -10,5 +10,5 @@ from pyremap.polar import get_polar_descriptor, get_polar_descriptor_from_file from pyremap.remapper import Remapper -__version_info__ = (0, 0, 16) +__version_info__ = (1, 0, 0) __version__ = '.'.join(str(vi) for vi in __version_info__)