Skip to content

Commit 9e18c9b

Browse files
committed
Add error handling to Regridders.regrid
1 parent 6913746 commit 9e18c9b

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

ext/InterpolationsRegridderExt.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import ClimaCore.Fields: Adapt
77
import ClimaCore.Fields: ClimaComms
88

99
import ClimaUtilities.Regridders
10+
import ClimaUtilities.Utils: unwrap
1011

1112
struct InterpolationsRegridder{
1213
SPACE <: ClimaCore.Spaces.AbstractSpace,
@@ -119,6 +120,14 @@ Regrid the given data as defined on the given dimensions to the `target_space` i
119120
This function is allocating.
120121
"""
121122
function Regridders.regrid(regridder::InterpolationsRegridder, data, dimensions)
123+
num_data_dims = ndims(data)
124+
num_dims = length(dimensions)
125+
num_space_dims = unwrap(regridder.num_space_dims)
126+
((num_space_dims != num_data_dims) || (num_space_dims != num_dims)) &&
127+
error(
128+
"Number of dimensions of data ($num_data_dims) does not match the dimension of the space ($num_space_dims) or the number of dimensions passed in ($num_dims)",
129+
)
130+
122131
FT = ClimaCore.Spaces.undertype(regridder.target_space)
123132
dimensions_FT = ntuple(
124133
i ->

test/data_handling.jl

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,10 @@ ClimaComms.init(context)
144144
target_space;
145145
regridder_type = :InterpolationsRegridder,
146146
file_reader_kwargs = (; preprocess_func = (data) -> 0.0 * data),
147-
regridder_kwargs = (;
148-
extrapolation_bc = (Intp.Flat(), Intp.Flat(), Intp.Flat())
149-
),
147+
regridder_kwargs = (; extrapolation_bc = (Intp.Flat(), Intp.Flat())),
150148
)
151149

152-
@test data_handler.regridder.extrapolation_bc ==
153-
(Intp.Flat(), Intp.Flat(), Intp.Flat())
150+
@test data_handler.regridder.extrapolation_bc == (Intp.Flat(), Intp.Flat())
154151
field = DataHandling.regridded_snapshot(data_handler)
155152
@test extrema(field) == (0.0, 0.0)
156153
end

test/regridders.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,21 @@ end
129129
@test regridded_lat_reversed == regridded_lat
130130
@test regridded_lon_reversed == regridded_lon
131131
@test regridded_z_reversed == regridded_z
132+
133+
# Error handling
134+
data = [1.0, 2.0, 3.0, 4.0]
135+
@test_throws ErrorException Regridders.regrid(
136+
reg_hv_reversed,
137+
data,
138+
dimensions3D_reversed,
139+
)
140+
141+
dimensions = ([1.0, 2.0, 3.0],)
142+
@test_throws ErrorException Regridders.regrid(
143+
reg_hv_reversed,
144+
data_z3D_reversed,
145+
dimensions,
146+
)
132147
end
133148

134149
@testset "InterpolationsRegridder" begin

0 commit comments

Comments
 (0)