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