Skip to content

Commit dab8774

Browse files
Fix interpolation with gaussian fieldlist input (#28)
1 parent 63bde1d commit dab8774

File tree

4 files changed

+42
-31
lines changed

4 files changed

+42
-31
lines changed

docs/release_notes/version_0.3_updates.rst

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,16 @@ Version 0.3 Updates
22
/////////////////////////
33

44

5-
Version 0.3.0
5+
Version 0.3.1
66
===============
77

8+
Fixes
9+
++++++++++++++++
10+
- fixed issue when failed to interpolate from certain reduced Gaussian grids (e.g. O2560, O1280) to regular latitude-longitude grids when the input was an earthkit-data GRIB :xref:`fieldlist`
11+
12+
13+
Version 0.3.0
14+
===============
815

916
New features
1017
++++++++++++++++

earthkit/regrid/gridspec.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
# implementation is available via earthkit-geo.
2525

2626

27-
def same_coord(x, y):
28-
return abs(x - y) < DEGREE_EPS
27+
def same_coord(x, y, eps=DEGREE_EPS):
28+
return abs(x - y) < eps
2929

3030

3131
class GridSpec(dict):
@@ -86,9 +86,9 @@ def __eq__(self, o):
8686
return True
8787

8888
@staticmethod
89-
def same_area(area1, area2):
89+
def same_area(area1, area2, eps=DEGREE_EPS):
9090
if len(area1) == len(area2):
91-
return all(same_coord(v1, v2) for v1, v2 in zip(area1, area2))
91+
return all(same_coord(v1, v2, eps=eps) for v1, v2 in zip(area1, area2))
9292
return False
9393

9494
def has_default_area(self):
@@ -235,19 +235,20 @@ def __init__(self, gs):
235235

236236
self._octahedral = None
237237
self._N = None
238+
self._eps = 0.12
238239

239240
def __eq__(self, o):
240241
if not super().__eq__(o):
241242
return False
242243

243-
if self.same_area(self["area"], o["area"]):
244+
if self.same_area(self["area"], o["area"], eps=self._eps):
244245
return True
245246

246247
# check if west the same for global grids
247248
if self.is_global() and o.is_global():
248249
west = self.normalise_lon(self.west, 0)
249250
west_o = self.normalise_lon(o.west, 0)
250-
if same_coord(west, west_o):
251+
if same_coord(west, west_o, eps=self._eps):
251252
return True
252253

253254
# TODO: add code for non global grids

tests/test_gridspec.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@
5353
({"grid": "O32", "shape": [5248]}, {"grid": [10, 10]}),
5454
({"grid": "O32", "area": [90, 0, -90, 360]}, {"grid": [10, 10]}),
5555
({"grid": "O32", "area": [87.8638, 0, -87.8638, 357.5]}, {"grid": [10, 10]}),
56+
(
57+
{"grid": "O32", "area": [87.8638, 0.01, -87.8638, 357.5]},
58+
{"grid": [10, 10]},
59+
),
60+
(
61+
{"grid": "O32", "area": [87.8638, 0, -87.8638, 357.6]},
62+
{"grid": [10, 10]},
63+
),
5664
({"grid": "O32", "global": 1}, {"grid": [10, 10]}),
5765
(
5866
{"grid": "O32", "global": 1, "area": [87.8638, 0, -87.8638, 357.5]},
@@ -62,6 +70,11 @@
6270
({"grid": "N32", "shape": [6114]}, {"grid": [10, 10]}),
6371
({"grid": "N32", "area": [90, 0, -90, 360]}, {"grid": [10, 10]}),
6472
({"grid": "N32", "area": [87.8638, 0, -87.8638, 357.188]}, {"grid": [10, 10]}),
73+
({"grid": "N32", "area": [87.8638, 0, -87.8638, 357.189]}, {"grid": [10, 10]}),
74+
(
75+
{"grid": "N32", "area": [87.8638, 0.01, -87.8638, 357.188]},
76+
{"grid": [10, 10]},
77+
),
6578
({"grid": "N32", "global": 1}, {"grid": [10, 10]}),
6679
(
6780
{"grid": "N32", "global": 1, "area": [87.8638, 0, -87.8638, 357.188]},
@@ -91,28 +104,18 @@ def test_gridspec_ok(gs_in, gs_out):
91104
({"grid": "O32", "area": [90, 0, -90, 359.999]}, {"grid": [10, 10]}, None),
92105
({"grid": "O32", "area": [90, -0.1, -90, 360]}, {"grid": [10, 10]}, None),
93106
(
94-
{"grid": "O32", "area": [87.8638, 0, -87.8638, 357.6]},
107+
{"grid": "O32", "area": [87.8638, 0, -87.8638, 357.7]},
95108
{"grid": [10, 10]},
96109
None,
97110
),
98111
(
99-
{"grid": "O32", "area": [87.8638, 0.01, -87.8638, 357.5]},
112+
{"grid": "O32", "area": [87.8638, 0.2, -87.8638, 357.5]},
100113
{"grid": [10, 10]},
101114
None,
102115
),
103116
({"grid": "N32", "shape": 6599680}, {"grid": [10, 10]}, None),
104117
({"grid": "N32", "area": [90, 0, -90, 359.999]}, {"grid": [10, 10]}, None),
105118
({"grid": "N32", "area": [90, -0.1, -90, 360]}, {"grid": [10, 10]}, None),
106-
(
107-
{"grid": "N32", "area": [87.8638, 0, -87.8638, 357.189]},
108-
{"grid": [10, 10]},
109-
None,
110-
),
111-
(
112-
{"grid": "N32", "area": [87.8638, 0.01, -87.8638, 357.188]},
113-
{"grid": [10, 10]},
114-
None,
115-
),
116119
],
117120
)
118121
def test_gridspec_bad(gs_in, gs_out, err):

tests/test_local.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ def test_local_healpix_nested_to_ll(method):
142142
({"grid": "O32", "shape": [5248]}, {"grid": [10, 10]}),
143143
({"grid": "O32", "area": [90, 0, -90, 360]}, {"grid": [10, 10]}),
144144
({"grid": "O32", "area": [87.8638, 0, -87.8638, 357.5]}, {"grid": [10, 10]}),
145+
({"grid": "O32", "area": [87.8638, 0.01, -87.8638, 357.5]}, {"grid": [10, 10]}),
145146
({"grid": "O32", "global": 1}, {"grid": [10, 10]}),
146147
(
147148
{"grid": "O32", "global": 1, "area": [87.8638, 0, -87.8638, 357.5]},
@@ -151,6 +152,15 @@ def test_local_healpix_nested_to_ll(method):
151152
({"grid": "N32", "shape": [6114]}, {"grid": [10, 10]}),
152153
({"grid": "N32", "area": [90, 0, -90, 360]}, {"grid": [10, 10]}),
153154
({"grid": "N32", "area": [87.8638, 0, -87.8638, 357.188]}, {"grid": [10, 10]}),
155+
({"grid": "N32", "area": [87.8638, 0, -87.8638, 357.189]}, {"grid": [10, 10]}),
156+
(
157+
{"grid": "N32", "area": [87.8638, 0.01, -87.8638, 357.188]},
158+
{"grid": [10, 10]},
159+
),
160+
(
161+
{"grid": "O32", "area": [87.8638, 0, -87.8638, 357.6]},
162+
{"grid": [10, 10]},
163+
),
154164
({"grid": "N32", "global": 1}, {"grid": [10, 10]}),
155165
(
156166
{"grid": "N32", "global": 1, "area": [87.8638, 0, -87.8638, 357.188]},
@@ -181,28 +191,18 @@ def test_local_gridspec_ok(gs_in, gs_out):
181191
({"grid": "O32", "area": [90, 0, -90, 359.999]}, {"grid": [10, 10]}, None),
182192
({"grid": "O32", "area": [90, -0.1, -90, 360]}, {"grid": [10, 10]}, None),
183193
(
184-
{"grid": "O32", "area": [87.8638, 0, -87.8638, 357.6]},
194+
{"grid": "O32", "area": [87.8638, 0, -87.8638, 357.7]},
185195
{"grid": [10, 10]},
186196
None,
187197
),
188198
(
189-
{"grid": "O32", "area": [87.8638, 0.01, -87.8638, 357.5]},
199+
{"grid": "O32", "area": [87.8638, 0.2, -87.8638, 357.5]},
190200
{"grid": [10, 10]},
191201
None,
192202
),
193203
({"grid": "N32", "shape": 6599680}, {"grid": [10, 10]}, None),
194204
({"grid": "N32", "area": [90, 0, -90, 359.999]}, {"grid": [10, 10]}, None),
195205
({"grid": "N32", "area": [90, -0.1, -90, 360]}, {"grid": [10, 10]}, None),
196-
(
197-
{"grid": "N32", "area": [87.8638, 0, -87.8638, 357.189]},
198-
{"grid": [10, 10]},
199-
None,
200-
),
201-
(
202-
{"grid": "N32", "area": [87.8638, 0.01, -87.8638, 357.188]},
203-
{"grid": [10, 10]},
204-
None,
205-
),
206206
({"grid": "H4", "ordering": "any"}, {"grid": [10, 10]}, ValueError),
207207
],
208208
)

0 commit comments

Comments
 (0)