From eb8515d8a2cd00c878c691c6f42c350243a87cf0 Mon Sep 17 00:00:00 2001 From: Daniel Vedder <daniel.vedder@idiv.de> Date: Fri, 9 Aug 2024 10:38:19 +0200 Subject: [PATCH] Minor additions to utils.jl --- src/core/output.jl | 2 +- src/core/utils.jl | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/core/output.jl b/src/core/output.jl index 40dad75..4b3fd97 100644 --- a/src/core/output.jl +++ b/src/core/output.jl @@ -257,7 +257,7 @@ function visualiseoutput(model::SimulationModel) #XXX remove this? (#81) CairoMakie.activate!() # make sure we're using Cairo for o in keys(model.dataoutputs) output = model.dataoutputs[o] - isnothing(output.plotfunction) && continue + (output.frequency == "never" || isnothing(output.plotfunction)) && continue figure = output.plotfunction(model) isnothing(figure) ? continue : save(joinpath(@param(core.outdir), o*"."*@param(core.figureformat)), figure) diff --git a/src/core/utils.jl b/src/core/utils.jl index 27ef4d7..976b5aa 100644 --- a/src/core/utils.jl +++ b/src/core/utils.jl @@ -46,16 +46,19 @@ end # Allows writing `(August, 2)` instead of `AnnualDate(August, 2)` where an AnnualDate is expected. AnnualDate(ad::Tuple{Int64,Int64}) = AnnualDate(ad...) Base.convert(::Type{AnnualDate}, ad::Tuple{Int64,Int64}) = AnnualDate(ad) +Base.convert(::Type{Tuple{Int64,Int64}}, ad::AnnualDate) = (ad.month, ad.day) # allow creating AnnualDates from a string of the format "8 August" AnnualDate(ad::String) = AnnualDate(Date(ad, dateformat"d U")) Base.convert(::Type{AnnualDate}, ad::String) = AnnualDate(ad) +Base.tryparse(::Type{AnnualDate}, ad::String) = AnnualDate(ad) # Interface with Dates AnnualDate(date::Date) = AnnualDate(month(date), day(date)) Base.convert(::Type{AnnualDate}, ad::Date) = AnnualDate(ad) Dates.month(ad::AnnualDate) = ad.month Dates.day(ad::AnnualDate) = ad.day +Dates.monthday(ad::AnnualDate) = (ad.month, ad.day) Date(year::Int64, ad::AnnualDate) = Date(year, ad.month, ad.day) # Comparison between AnnualDates and with Dates @@ -167,6 +170,19 @@ function bounds(x::Number; max::Number=Inf, min::Number=0) x end +""" + cycle!(vector, n=1) + +Move the first element of the vector to the end, repeat n times. +""" +function cycle!(v::AbstractVector, n::Int64=1) + for i in 1:n + push!(v, v[1]) + deleteat!(v, 1) + end + v +end + """ @areaof(npixels) -- GitLab