Skip to content

Commit 29c6940

Browse files
committed
Make sure multirate takes only the multiscale route (even if single scale)
1 parent 40cdc84 commit 29c6940

2 files changed

Lines changed: 26 additions & 1 deletion

File tree

src/run.jl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@ function _all_modellists_collection(object)
126126
return false
127127
end
128128

129+
function _error_if_multirate_singlescale(multirate)
130+
multirate || return nothing
131+
error(
132+
"`multirate=true` is only supported for MTG-based multiscale runs. ",
133+
"For one scale, build a one-scale MTG and call `run!(mtg, mapping, ...; multirate=true)`."
134+
)
135+
end
136+
129137
_single_scale_runtime_object(object) = object
130138
_single_scale_runtime_object(mapping::ModelMapping) = _modellist_from_model_mapping(mapping)
131139

@@ -151,7 +159,7 @@ function run!(
151159
return_requested_outputs=false,
152160
requested_outputs_sink=DataFrames.DataFrame
153161
) where {M<:Union{ModelMapping{SingleScale},ModelList}}
154-
multirate && error("`multirate=true` is only supported for MTG runs (`run!(mtg, mapping, ...)`).")
162+
_error_if_multirate_singlescale(multirate)
155163
model_list = _modellist_from_model_mapping(mapping)
156164
_run_modellist_singleton(
157165
model_list,
@@ -228,6 +236,7 @@ function run!(
228236
return_requested_outputs=false,
229237
requested_outputs_sink=DataFrames.DataFrame
230238
) where {T<:Union{AbstractArray,AbstractDict},A}
239+
_error_if_multirate_singlescale(multirate)
231240
if _all_modellists_collection(object)
232241
Base.depwarn(
233242
"`run!` with a collection of `ModelList` is deprecated. Use a collection of `ModelMapping` objects instead.",
@@ -275,6 +284,7 @@ function run!(
275284
return_requested_outputs=false,
276285
requested_outputs_sink=DataFrames.DataFrame
277286
) where {T<:ModelList}
287+
_error_if_multirate_singlescale(multirate)
278288
Base.depwarn(
279289
"`run!(::ModelList, ...)` is deprecated. Use `run!(ModelMapping(...), ...)` instead.",
280290
:run!
@@ -304,6 +314,7 @@ function run!(
304314
return_requested_outputs=false,
305315
requested_outputs_sink=DataFrames.DataFrame
306316
) where {T<:ModelMapping{SingleScale}}
317+
_error_if_multirate_singlescale(multirate)
307318
model_list = _modellist_from_model_mapping(object)
308319

309320
_run_modellist_singleton(
@@ -426,6 +437,7 @@ function run!(
426437
return_requested_outputs=false,
427438
requested_outputs_sink=DataFrames.DataFrame
428439
) where {T<:Union{AbstractArray,AbstractDict}}
440+
_error_if_multirate_singlescale(multirate)
429441
if _all_modellists_collection(object)
430442
Base.depwarn(
431443
"`run!` with a collection of `ModelList` is deprecated. Use a collection of `ModelMapping` objects instead.",

test/test-simulation.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,19 @@ end;
4343
@test_deprecated run!(mtg, mapping_dict, meteo)
4444
end
4545

46+
@testset "Single-scale multirate unsupported" begin
47+
mapping = ModelMapping(
48+
process1=Process1Model(1.0),
49+
process2=Process2Model(),
50+
process3=Process3Model(),
51+
status=(var1=15.0, var2=0.3)
52+
)
53+
meteo = Atmosphere(T=20.0, Wind=1.0, Rh=0.65)
54+
55+
@test_throws "one-scale MTG" run!(mapping, meteo; multirate=true)
56+
@test_throws "one-scale MTG" run!([mapping], meteo; multirate=true)
57+
end
58+
4659
@testset "Simulation: 1 time-step, 0 Atmosphere" begin
4760
mapping = ModelMapping(
4861
Process1Model(1.0);

0 commit comments

Comments
 (0)