From 6475d10e61eec5b981a044596c33f43b78f4a68d Mon Sep 17 00:00:00 2001 From: Richard Plevin Date: Tue, 28 May 2019 09:26:34 -0700 Subject: [PATCH 1/2] Fix bug in dotview() for timesteps Add preliminary example sent by James as test/test_broadcast.jl --- src/core/time.jl | 6 +++++- test/test_broadcast.jl | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/test_broadcast.jl diff --git a/src/core/time.jl b/src/core/time.jl index 1122c1e54..008634a3c 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 ? gettime(arg) : arg), args) + Base.dotview(v.data, args...) +end Base.fill!(obj::TimestepArray, value) = fill!(obj.data, value) diff --git a/test/test_broadcast.jl b/test/test_broadcast.jl new file mode 100644 index 000000000..6296c8f62 --- /dev/null +++ b/test/test_broadcast.jl @@ -0,0 +1,18 @@ +# Example sent by James Rising + +@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, collect(1:10)) +set_dimension!(model, :region, ["Tropics", "Subtropics", "Temperates"]) +add_comp!(model, Simple) + +run(model) From 8cf892bc37ddcd2a279571be28ae9eeee68ad24b Mon Sep 17 00:00:00 2001 From: Richard Plevin Date: Thu, 30 May 2019 08:31:42 -0700 Subject: [PATCH 2/2] - Fixed error in dotview method - Integrated test_broadcast.jl into test system --- src/core/time.jl | 2 +- test/runtests.jl | 3 +++ test/test_broadcast.jl | 11 +++++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/core/time.jl b/src/core/time.jl index 008634a3c..109407c7c 100644 --- a/src/core/time.jl +++ b/src/core/time.jl @@ -358,7 +358,7 @@ end # function Base.dotview(v::Mimi.TimestepArray, args...) # convert any timesteps to their underlying index - args = map(arg -> (arg isa AbstractTimestep ? gettime(arg) : arg), args) + args = map(arg -> (arg isa AbstractTimestep ? arg.t : arg), args) Base.dotview(v.data, args...) end 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 index 6296c8f62..c5b281250 100644 --- a/test/test_broadcast.jl +++ b/test/test_broadcast.jl @@ -1,4 +1,7 @@ -# Example sent by James Rising +module TestBroadcast + +using Mimi +using Test @defcomp Simple begin region = Index() @@ -11,8 +14,12 @@ end model = Model() -set_dimension!(model, :time, collect(1:10)) +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