ClimaLand Shared Callbacks
ClimaLand.IntervalBasedCallback
— FunctionIntervalBasedCallback(
period::Dates.Period,
t0::ITime,
dt::Union{ITime, Nothing},
affect!;
initialize = (_, _, _, _) -> nothing,
callback_start::ITime = t0,
)
Returns a SciML DiscreteCallback that calls affect!
every period
. This method is used when the type of period
is a Dates.Period
The returned callback has a condition function that is built on a ClimaDiagnostics EveryCalendarDtSchedule
. The initialize
argument is passed to the DiscreteCallback as keyword arguments. Excluding initialization, the first time the callback will be called is when the simulation is at or past period
+ callback_start
.
IntervalBasedCallback(
period::Union{Number, ITime},
t0::Union{Number, ITime},
dt::Union{Number, ITime, Nothing},
affect!;
initialize = (_, _, _, _) -> nothing,
callback_start::Union{Number, ITime} = t0,
)
Returns a SciML DiscreteCallback that calls affect!
every period
. This method is used when period
is not a Dates.Period
.
The returned callback has a condition function that is built on a ClimaDiagnostics EveryDtSchedule
. The initialize
argument is passed to the DiscreteCallback as keyword arguments. Excluding initialization, the first time the callback will be called is when the simulation is at or past period
+ callback_start
.
ClimaLand.ReportCallback
— FunctionReportCallback(period, t0; dt = nothing)
Return a callback that prints performance and progress summaries every period
ClimaLand.NaNCheckCallback
— FunctionNaNCheckCallback(
nancheck_period::Union{Number, Dates.Period, ITime},
t0;
dt = nothing,
mask = nothing,
)
Constructs a DiscreteCallback which counts the number of NaNs in the state and produces a warning if any are found.
Arguments
nancheck_period
: The interrval between times when the state is checked for NaNs. Can be specified as anITime
, aNumber
, or aDates.Period
.t0
: The start of the simulation.dt
: The timestep of the model (optional), used to check for consistency.mask
: NaNs will not be counted in areas wheremask
is zero
The callback uses ClimaDiagnostics
schedules to determine when to check for NaNs based on the nancheck_period
.
ClimaLand.NonInterpSavingCallback
— FunctionNonInterpSavingCallback(
start_date::Dates.DateTime,
stop_date::Dates.DateTime,
callback_period::Dates.Period;
first_save_date = start_date,
)
Constructs a DiscreteCallback
which saves the time and cache p
at first_save_date
and every callback_period
after. Times are saved as DateTimes, and the saved times and caches are each saved in a vector. They are stored in a NamedTuple
, which is the saved_values
property of the affect!
property of the DiscreteCallback
. For example:
cb = NonInterpSavingCallback(start_date, stop_date, callback_period)
saved_values = cb.affect!.saved_values
saved_times = saved_values.t
- Vector of DateTimes saved_cache = saved_values.saveval
- A vector of caches
Note: This method constructs a callback that uses ITime
for scheduling, and should only be used with simulations that are run with ITime
.
NonInterpSavingCallback(t0, tf, callback_period; t_first_save = t0)
Constructs a DiscreteCallback
which saves the time and cache p
at t_first_save
and every callback_period
after. Times are saved as the same type as t0
, and the saved times and caches are each saved in a vector. They are stored in a NamedTuple
, which is the saved_values
property of the affect!
property of the DiscreteCallback
. For example:
cb = NonInterpSavingCallback(t0, tf, callback_period)
saved_values = cb.affect!.saved_values
saved_times = saved_values.t
- Vector of typeof(t0) saved_cache = saved_values.saveval
- A vector of caches
Note: This method constructs a callback that uses ITime
for scheduling, and should only be used with simulations that are run with ITime
.
ClimaLand.DriverUpdateCallback
— FunctionDriverUpdateCallback(
updatefunc,
update_period,
t0;
dt = nothing,
)
Constructs a DiscreteCallback which updates the cache p.drivers
at each time specified by updateat
, using the function updatefunc
which takes as arguments (p,t). If update_period
is nothing
, then updatefunc
will not be called during the simulation or during intialization. This can be used to disable the driver update for a simulation.
ClimaLand.CheckpointCallback
— FunctionCheckpointCallback(
checkpoint_period::Union{Number, Dates.Period, ITime},
output_dir,
t0;
model,
dt = nothing,
)
Constructs a DiscreteCallback which saves the state to disk with the save_checkpoint
function.
Arguments
checkpoint_period
: The interval between times where checkpoints are saved. Can be specified as a float (in seconds)Dates.Period
, orITime
.output_dir
: The directory where the checkpoint files will be saved.t0
: The start of the simulation.model
: The ClimaLand model object.dt
: The timestep of the model (optional), used to check for consistency.
The callback uses ClimaDiagnostics.EveryCalendarDtSchedule
to determine when to save checkpoints based on the checkpoint_period
. The schedule is initialized with the t0
to ensure that the first checkpoint is saved at the correct time.
The save_checkpoint
function is called with the current state vector u
, the current time t
, and the output_dir
to save the checkpoint to disk.
ClimaLand.get_model_callbacks
— Functionget_model_callbacks(model::AbstractModel; kwargs...)
Returns the a tuple of required callbacks for the model, not including the forcing callbacks for radiation and atmospheric state, which are handled separately.
These are used in the LandSimulation struct; model callbacks are evaluated after the user_callbacks (optional), forcing callbacks (required), but prior to the diagnostic callbacks (optional).
get_model_callbacks(model::AbstractLandModel{FT};
kwargs...
) where {FT}
Creates the tuple of model callbacks for any AbstractLandModel by calling get_model_callbacks
on each component model.
Do not rely on the callbacks being in a particular order based on component order.
get_model_callbacks(component::AbstractCanopyComponent, canopy; kwargs...)
Creates an empty tuple as a default set of model callbacks for canopy component models.
get_model_callbacks(component::AbstractCanopyComponent, canopy; kwargs...)
Creates the pmodel callback and returns it as a single element tuple of model callbacks; we add the callback for the photosynthesis component, and not for the conductance component(PModelConductance).
Note that the Δt passed here is an ITime because it is the Δt used in the simulation.
get_model_callbacks(model::CanopyModel{FT}; start_date, Δt) where {FT}
Creates the tuple of model callbacks for a CanopyModel by calling get_model_callbacks
on each component model.