From 60a4ce158dfd3b372b3daea2dcc1e0f0383fefd9 Mon Sep 17 00:00:00 2001 From: jreniel Date: Mon, 5 Apr 2021 09:22:05 -0400 Subject: [PATCH] Fixed interpolation methods for tides --- adcircpy/cmd/best_track_run.py | 2 -- adcircpy/forcing/tides/hamtide.py | 14 +++++++++++--- adcircpy/forcing/tides/tpxo.py | 13 +++++++++++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/adcircpy/cmd/best_track_run.py b/adcircpy/cmd/best_track_run.py index 75327f80..e2b47820 100644 --- a/adcircpy/cmd/best_track_run.py +++ b/adcircpy/cmd/best_track_run.py @@ -54,6 +54,4 @@ def main(): ) logging.Formatter.converter = lambda *args: datetime.now( tz=timezone('UTC')).timetuple() - # if len(args.constituents) == 0: - # args.constituents = ['all'] BestTrackRunCommand(args).run() diff --git a/adcircpy/forcing/tides/hamtide.py b/adcircpy/forcing/tides/hamtide.py index f2f3d144..27bf8672 100644 --- a/adcircpy/forcing/tides/hamtide.py +++ b/adcircpy/forcing/tides/hamtide.py @@ -134,13 +134,21 @@ def _get_interpolation( yi = yi.flatten() dataset = self._get_dataset(variable, constituent) zi = dataset[netcdf_variable][yidx, xidx].flatten() - - return griddata( + values = griddata( (xi[~zi.mask], yi[~zi.mask]), zi[~zi.mask], (xq, yq), - method='linear' + method='linear', + fill_value=np.nan + ) + nan_idxs = np.where(np.isnan(values)) + values[nan_idxs] = griddata( + (xi[~zi.mask], yi[~zi.mask]), + zi[~zi.mask], + (xq[nan_idxs], yq[nan_idxs]), + method='nearest', ) + return values def _prepend_path(self, filename: str) -> str: if self.path is None: diff --git a/adcircpy/forcing/tides/tpxo.py b/adcircpy/forcing/tides/tpxo.py index 1c02a5c1..b95b0c2a 100644 --- a/adcircpy/forcing/tides/tpxo.py +++ b/adcircpy/forcing/tides/tpxo.py @@ -118,9 +118,18 @@ def _get_interpolation(self, tpxo_array: np.ndarray, constituent: str, ) # "method" can be 'spline' or any string accepted by griddata()'s method kwarg. - return griddata( + values = griddata( (x[_idx], y[_idx]), array[_idx], (_x, _y), - method='linear' + method='linear', + fill_value=np.nan, ) + nan_idxs = np.where(np.isnan(values)) + values[nan_idxs] = griddata( + (x[_idx], y[_idx]), + array[_idx], + (_x[nan_idxs], _y[nan_idxs]), + method='nearest', + ) + return values