Skip to content

Commit

Permalink
Add option to allow degenerated grid cells
Browse files Browse the repository at this point in the history
Addresses #60
  • Loading branch information
JiaweiZhuang committed Oct 18, 2019
1 parent b811764 commit bf6075b
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
9 changes: 7 additions & 2 deletions xesmf/backend.py
Expand Up @@ -157,7 +157,7 @@ def add_corner(grid, lon_b, lat_b):


def esmf_regrid_build(sourcegrid, destgrid, method,
filename=None, extra_dims=None):
filename=None, extra_dims=None, ignore_degenerate=None):
'''
Create an ESMF.Regrid object, containing regridding weights.
Expand Down Expand Up @@ -195,6 +195,10 @@ def esmf_regrid_build(sourcegrid, destgrid, method,
For example, if extra_dims=[Nlev, Ntime], then the data field dimension
will be [Nlon, Nlat, Nlev, Ntime]
ignore_degenerate : bool, optional
If False (default), raise error if grids contain degenerated cells
(i.e. triangles or lines, instead of quadrilaterals)
Returns
-------
grid : ESMF.Grid object
Expand Down Expand Up @@ -240,7 +244,8 @@ def esmf_regrid_build(sourcegrid, destgrid, method,
# if the destination grid is larger than the source grid.
regrid = ESMF.Regrid(sourcefield, destfield, filename=filename,
regrid_method=esmf_regrid_method,
unmapped_action=ESMF.UnmappedAction.IGNORE)
unmapped_action=ESMF.UnmappedAction.IGNORE,
ignore_degenerate=ignore_degenerate)

return regrid

Expand Down
10 changes: 8 additions & 2 deletions xesmf/frontend.py
Expand Up @@ -74,7 +74,7 @@ def ds_to_ESMFgrid(ds, need_bounds=False, periodic=None, append=None):

class Regridder(object):
def __init__(self, ds_in, ds_out, method, periodic=False,
filename=None, reuse_weights=False):
filename=None, reuse_weights=False, ignore_degenerate=None):
"""
Make xESMF regridder
Expand Down Expand Up @@ -114,6 +114,10 @@ def __init__(self, ds_in, ds_out, method, periodic=False,
Whether to read existing weight file to save computing time.
False by default (i.e. re-compute, not reuse).
ignore_degenerate : bool, optional
If False (default), raise error if grids contain degenerated cells
(i.e. triangles or lines, instead of quadrilaterals)
Returns
-------
regridder : xESMF regridder object
Expand All @@ -130,6 +134,7 @@ def __init__(self, ds_in, ds_out, method, periodic=False,
self.method = method
self.periodic = periodic
self.reuse_weights = reuse_weights
self.ignore_degenerate = ignore_degenerate

# construct ESMF grid, with some shape checking
self._grid_in, shape_in = ds_to_ESMFgrid(ds_in,
Expand Down Expand Up @@ -217,7 +222,8 @@ def _write_weight_file(self):
print('Create weight file: {}'.format(self.filename))

regrid = esmf_regrid_build(self._grid_in, self._grid_out, self.method,
filename=self.filename)
filename=self.filename,
ignore_degenerate=self.ignore_degenerate)
esmf_regrid_finalize(regrid) # only need weights, not regrid object

def clean_weight_file(self):
Expand Down

0 comments on commit bf6075b

Please sign in to comment.