diff --git a/src/core/time.jl b/src/core/time.jl index 1122c1e54..109407c7c 100644 --- a/src/core/time.jl +++ b/src/core/time.jl @@ -356,7 +356,11 @@ end # # 4. TimestepArray methods # -Base.dotview(v::Mimi.TimestepArray, args...) = Base.dotview(v.data, args...) +function Base.dotview(v::Mimi.TimestepArray, args...) + # convert any timesteps to their underlying index + args = map(arg -> (arg isa AbstractTimestep ? arg.t : arg), args) + Base.dotview(v.data, args...) +end Base.fill!(obj::TimestepArray, value) = fill!(obj.data, value) diff --git a/test/runtests.jl b/test/runtests.jl index 59fcbef2f..0192d1dc8 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -12,6 +12,9 @@ Mimi.set_defcomp_verbosity(false) @info("test_main_variabletimestep.jl") include("test_main_variabletimestep.jl") + @info("test_broadcast.jl") + include("test_broadcast.jl") + @info("test_metainfo.jl") include("test_metainfo.jl") diff --git a/test/test_broadcast.jl b/test/test_broadcast.jl new file mode 100644 index 000000000..c5b281250 --- /dev/null +++ b/test/test_broadcast.jl @@ -0,0 +1,25 @@ +module TestBroadcast + +using Mimi +using Test + +@defcomp Simple begin + region = Index() + + var = Variable(index=[time, region], unit="\$/yr") + + function run_timestep(p, v, d, t) + v.var[t, :] .= 0 + end +end + +model = Model() +set_dimension!(model, :time, 2015:2024) +set_dimension!(model, :region, ["Tropics", "Subtropics", "Temperates"]) +add_comp!(model, Simple) + +run(model) + +@test all(model[:Simple, :var] .== 0) + +end