Skip to content

Commit 2251e7d

Browse files
committed
Add error handling to Regridders.regrid
1 parent 0ac7132 commit 2251e7d

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

ext/InterpolationsRegridderExt.jl

Lines changed: 8 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,13 @@ 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)) && error(
127+
"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)",
128+
)
129+
122130
FT = ClimaCore.Spaces.undertype(regridder.target_space)
123131
dimensions_FT = ntuple(
124132
i ->

test/data_handling.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,12 @@ ClimaComms.init(context)
145145
regridder_type = :InterpolationsRegridder,
146146
file_reader_kwargs = (; preprocess_func = (data) -> 0.0 * data),
147147
regridder_kwargs = (;
148-
extrapolation_bc = (Intp.Flat(), Intp.Flat(), Intp.Flat())
148+
extrapolation_bc = (Intp.Flat(), Intp.Flat())
149149
),
150150
)
151151

152152
@test data_handler.regridder.extrapolation_bc ==
153-
(Intp.Flat(), Intp.Flat(), Intp.Flat())
153+
(Intp.Flat(), Intp.Flat())
154154
field = DataHandling.regridded_snapshot(data_handler)
155155
@test extrema(field) == (0.0, 0.0)
156156
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)