Reference Guide: The Mimi API
Mimi.@defcomp
— Macrodefcomp(comp_name::Symbol, ex::Expr)
Define a Mimi component comp_name
with the expressions in ex
. The following types of expressions are supported:
dimension_name = Index()
# defines a dimensionparameter = Parameter(index = [dimension_name], units = "unit_name", default = default_value)
# defines a parameter with optional argumentsvariable = Variable(index = [dimension_name], units = "unit_name")
# defines a variable with optional argumentsinit(p, v, d)
# defines an init function for the componentrun_timestep(p, v, d, t)
# defines a run_timestep function for the component
Parses a @defcomp definition, converting it into a series of function calls that create the corresponding ComponentDef instance. At model build time, the ModelDef (including its ComponentDefs) will be converted to a runnable model.
Mimi.@defsim
— Macrodefsim(expr::Expr)
Define a Mimi SimulationDef
with the expressions in expr
.
Mimi.@defcomposite
— Macrodefcomposite(cc_name, ex)
Define a Mimi CompositeComponentDef cc_name
with the expressions in ex
. Expressions are all shorthand for longer-winded API calls, and include the following:
p = Parameter(...)
v = Variable(varname)
local_name = Component(name)
Component(name) # equivalent to `name = Component(name)`
connect(...)
Variable names are expressed as the component id (which may be prefixed by a module, e.g., Mimi.adder
) followed by a .
and the variable name in that component. So the form is either modname.compname.varname
or compname.varname
, which must be known in the current module.
Unlike leaf components, composite components do not have user-defined init
or run_timestep
functions; these are defined internally to iterate over constituent components and call the associated method on each.
Mimi.MarginalModel
— TypeMarginalModel
A Mimi Model
whose results are obtained by subtracting results of one base
Model from those of another marginal
Model that has a difference of delta
.
Mimi.Model
— TypeModel
A user-facing API containing a ModelInstance
(mi
) and a ModelDef
(md
). This Model
can be created with the optional keyword argument number_type
indicating the default type of number used for the ModelDef
. If not specified the Model
assumes a number_type
of Float64
.
Mimi.add_comp!
— Functionadd_comp!(
obj::AbstractCompositeComponentDef,
comp_def::AbstractComponentDef,
comp_name::Symbol=comp_def.comp_id.comp_name;
first::NothingInt=nothing,
last::NothingInt=nothing,
before::NothingSymbol=nothing,
after::NothingSymbol=nothing,
rename::NothingPairList=nothing
)
Add the component comp_def
to the composite component indicated by obj
. The component is added at the end of the list unless one of the keywords before
or after
is specified. Note that a copy of comp_id
is made in the composite and assigned the give name. The optional argument rename
can be a list of pairs indicating original_name => imported_name
. The optional arguments first
and last
indicate the times bounding the run period for the given component, which must be within the bounds of the model and if explicitly set are fixed. These default to flexibly changing with the model's :time
dimension.
add_comp!(
obj::AbstractCompositeComponentDef,
comp_id::ComponentId,
comp_name::Symbol=comp_id.comp_name;
first::NothingInt=nothing,
last::NothingInt=nothing,
before::NothingSymbol=nothing,
after::NothingSymbol=nothing,
rename::NothingPairList=nothing
)
Add the component indicated by comp_id
to the composite component indicated by obj
. The component is added at the end of the list unless one of the keywords before
or after
is specified. Note that a copy of comp_id
is made in the composite and assigned the give name. The optional arguments first
and last
indicate the times bounding the run period for the given component, which must be within the bounds of the model and if explicitly set are fixed. These default to flexibly changing with the model's :time
dimension.
[Not yet implemented:] The optional argument rename
can be a list of pairs indicating original_name => imported_name
.
add_comp!(obj::AbstractCompositeComponentInstance, ci::AbstractComponentInstance)
Add the (leaf or composite) component ci
to a composite's list of components.
add_comp!(
m::Model, comp_id::ComponentId, comp_name::Symbol=comp_id.comp_name;
first::NothingInt=nothing,
last::NothingInt=nothing,
before::NothingSymbol=nothing,
after::NothingSymbol=nothing,
rename::NothingPairList=nothing
)
Add the component indicated by comp_id
to the model indicated by m
. The component is added at the end of the list unless one of the keywords before
or after
is specified. Note that a copy of comp_id
is made in the composite and assigned the give name. The optional argument rename
can be a list of pairs indicating original_name => imported_name
. The optional arguments first
and last
indicate the times bounding the run period for the given component, which must be within the bounds of the model and if explicitly set are fixed. These default to flexibly changing with the model's :time
dimension.
add_comp!(
m::Model, comp_def::AbstractComponentDef, comp_name::Symbol=comp_id.comp_name;
first::NothingInt=nothing,
last::NothingInt=nothing,
before::NothingSymbol=nothing,
after::NothingSymbol=nothing,
rename::NothingPairList=nothing
)
Add the component comp_def
to the model indicated by m
. The component is added at the end of the list unless one of the keywords, first
, last
, before
, after
. Note that a copy of comp_id
is made in the composite and assigned the give name. The optional argument rename
can be a list of pairs indicating original_name => imported_name
. The optional arguments first
and last
indicate the times bounding the run period for the given component, which must be within the bounds of the model and if explicitly set are fixed. These default to flexibly changing with the model's :time
dimension.
Mimi.add_shared_param!
— Functionadd_shared_param!(md::ModelDef, name::Symbol, value::Any; dims::Array{Symbol}=Symbol[])
User-facing API function to add a shared parameter to Model Def md
with name name
and value value
, and an array of dimension names dims
which dfaults to an empty vector. The is_shared
attribute of the added Model Parameter will be true
.
The value
can by a scalar, an array, or a NamedAray. Optional keyword argument 'dims' is a list of the dimension names of the provided data, and will be used to check that they match the model's index labels. Optional keyword argument datatype
allows user to specify a datatype to use for the shared model parameter.
add_shared_param!(m::Model, name::Symbol, value::Any; dims::Array{Symbol}=Symbol[], datatype::DataType=Nothing)
User-facing API function to add a shared parameter to Model m
with name name
and value value
, and an array of dimension names dims
which dfaults to an empty vector. The is_shared
attribute of the added Model Parameter will be true
.
The value
can by a scalar, an array, or a NamedAray. Optional keyword argument 'dims' is a list of the dimension names of the provided data, and will be used to check that they match the model's index labels. This must be included if the value
is not a scalar, and defaults to an empty vector. Optional keyword argument datatype
allows user to specify a datatype to use for the shared model parameter.
Mimi.connect_param!
— Functionconnect_param!(obj::AbstractCompositeComponentDef, comp_name::Symbol, param_name::Symbol, model_param_name::Symbol;
check_attributes::Bool=true, ignoreunits::Bool=false))
Connect a parameter param_name
in the component comp_name
of composite obj
to the model parameter model_param_name
.
connect_param!(obj::AbstractCompositeComponentDef, comp_def::AbstractComponentDef,
param_name::Symbol, model_param_name::Symbol; check_attributes::Bool=true,
ignoreunits::Bool = false)
Connect a parameter param_name
in the component comp_def
of composite obj
to the model parameter model_param_name
.
connect_param!(obj::AbstractCompositeComponentDef,
dst::Pair{Symbol, Symbol}, src::Pair{Symbol, Symbol},
backup::Union{Nothing, Array}=nothing;
ignoreunits::Bool=false, backup_offset::Union{Nothing, Int} = nothing)
Bind the parameter dst[2]
of one component dst[1]
of composite obj
to a variable src[2]
in another component src[1]
of the same composite using backup
to provide default values and the ignoreunits
flag to indicate the need to check match units between the two. The backup_offset
argument, which is only valid when backup
data has been set, indicates that the backup data should be used for a specified number of timesteps after the source component begins. ie. the value would be 1
if the destination componentm parameter should only use the source component data for the second timestep and beyond.
connect_param!(dst::ComponentReference, dst_name::Symbol, src::ComponentReference, src_name::Symbol)
Connect two components as connect_param!(dst, dst_name, src, src_name)
.
connect_param!(dst::ComponentReference, src::ComponentReference, name::Symbol)
Connect two components with the same name as connect_param!(dst, src, name)
.
connect_param!(m::Model, dst_comp_name::Symbol, dst_par_name::Symbol,
src_comp_name::Symbol, src_var_name::Symbol,
backup::Union{Nothing, Array}=nothing; ignoreunits::Bool=false,
backup_offset::Union{Int, Nothing}=nothing)
Bind the parameter dst_par_name
of one component dst_comp_name
of model m
to a variable src_var_name
in another component src_comp_name
of the same model using backup
to provide default values and the ignoreunits
flag to indicate the need to check match units between the two. The backup_offset
argument, which is only valid when backup
data has been set, indicates that the backup data should be used for a specified number of timesteps after the source component begins. ie. the value would be 1
if the destination componentm parameter should only use the source component data for the second timestep and beyond.
connect_param!(m::Model, comp_name::Symbol, param_name::Symbol, model_param_name::Symbol;
check_attributes::Bool=true, ignoreunits::Bool=false))
Connect a parameter param_name
in the component comp_name
of composite obj
to the model parameter model_param_name
.
connect_param!(m::Model, dst::Pair{Symbol, Symbol}, src::Pair{Symbol, Symbol}, backup::Array; ignoreunits::Bool=false)
Bind the parameter dst[2]
of one component dst[1]
of model m
to a variable src[2]
in another component src[1]
of the same model using backup
to provide default values and the ignoreunits
flag to indicate the need to check match units between the two. The backup_offset
argument, which is only valid when backup
data has been set, indicates that the backup data should be used for a specified number of timesteps after the source component begins. ie. the value would be 1
if the destination componentm parameter should only use the source component data for the second timestep and beyond.
Mimi.create_marginal_model
— Functioncreate_marginal_model(base::Model, delta::Float64=1.0)
Create a MarginalModel
where base
is the baseline model and delta
is the difference used to create the marginal
model. Return the resulting MarginaModel
which shares the internal ModelDef
between the base
and marginal
.
Mimi.delete_param!
— Functiondelete_param!(md::ModelDef, model_param_name::Symbol)
Delete model_param_name
from md
's list of model parameters, and also remove all external parameters connections that were connected to model_param_name
.
delete_param!(m::Model, model_param_name::Symbol)
Delete model_param_name
from a model m
's ModelDef's list of model parameters, and also remove all external parameters connections that were connected to model_param_name
.
Mimi.dim_count
— Functiondim_count(def::AbstractDatumDef)
Return number of dimensions in def
.
dim_count(mi::ModelInstance, dim_name::Symbol)
Return the size of index dim_name
in model instance mi
.
dim_count(m::Model, dim_name::Symbol)
Return the size of index dim_name
in model m
.
Mimi.dim_keys
— Functiondim_keys(m::Model, dim_name::Symbol)
Return keys for dimension dim-name
in model m
.
dim_keys(mi::ModelInstance, dim_name::Symbol)
Return keys for dimension dim-name
in model instance mi
.
Mimi.dim_key_dict
— Functiondim_key_dict(m::Model)
Return a dict of dimension keys for all dimensions in model m
.
Mimi.disconnect_param!
— Functiondisconnect_param!(obj::AbstractCompositeComponentDef, comp_def::AbstractComponentDef, param_name::Symbol)
Remove any parameter connections for a given parameter param_name
in a given component comp_def
which must be a direct subcomponent of composite obj
.
disconnect_param!(obj::AbstractCompositeComponentDef, comp_name::Symbol, param_name::Symbol)
Remove any parameter connections for a given parameter param_name
in a given component comp_def
which must be a direct subcomponent of composite obj
.
disconnect_param!(m::Model, comp_name::Symbol, param_name::Symbol)
Remove any parameter connections for a given parameter param_name
in a given component comp_def
in model m
.
Mimi.explore
— Functionexplore(m::Model)
Produce a UI to explore the parameters and variables of Model m
in an independent window.
explore(mi::ModelInstance)
Produce a UI to explore the parameters and variables of ModelInstance
mi
in an independent window.
explore(sim_inst::SimulationInstance; title="Electron", model_index::Int = 1, scen_name::Union{Nothing, String} = nothing, results_output_dir::Union{Nothing, String} = nothing)
Produce a UI to explore the output distributions of the saved variables in SimulationInstance
sim
for results of model model_index
and scenario with the name scen_name
in a Window with title title
. The optional arguments default to a model_index
of 1
, a scen_name
of nothing
assuming there is no secenario dimension, and a window with title Electron
. The results_output_dir
keyword argument refers to the main output directory as provided to run
, where all subdirectories are held. If provided, results are assumed to be stored there, otherwise it is assumed that results are held in results.sim and not in an output folder.
Mimi.getdataframe
— Functiongetdataframe(m::AbstractModel, comp_name::Symbol, pairs::Pair{Symbol, Symbol}...)
Return a DataFrame with values for the given variables or parameters of model m
indicated by pairs
, where each pair is of the form comp_name => item_name
. If more than one pair is provided, all must refer to items with the same dimensions, which are used to join the respective item values.
getdataframe(m::AbstractModel, pair::Pair{Symbol, NTuple{N, Symbol}})
Return a DataFrame with values for the given variables or parameters indicated by pairs
, where each pair is of the form comp_name => item_name
. If more than one pair is provided, all must refer to items with the same dimensions, which are used to join the respective item values.
getdataframe(m::AbstractModel, comp_name::Symbol, item_name::Symbol)
Return the values for variable or parameter item_name
in comp_name
of model m
as a DataFrame.
Mimi.gettime
— Functiongettime(ts::FixedTimestep)
Return the time (year) represented by Timestep ts
gettime(ts::VariableTimestep)
Return the time (year) represented by Timestep ts
gettime(c::Clock)
Return the time of the timestep held by the c
clock.
Mimi.get_param_value
— Functionget_param_value(ci::AbstractComponentInstance, name::Symbol)
Return the value of parameter name
in (leaf or composite) component ci
.
Mimi.get_var_value
— Functionget_var_value(ci::AbstractComponentInstance, name::Symbol)
Return the value of variable name
in component ci
.
Mimi.hasvalue
— Functionhasvalue(arr::TimestepArray, ts::FixedTimestep)
Return true
or false
, true
if the TimestepArray arr
contains the Timestep ts
.
hasvalue(arr::TimestepArray, ts::VariableTimestep)
Return true
or false
, true
if the TimestepArray arr
contains the Timestep ts
.
hasvalue(arr::TimestepArray, ts::FixedTimestep, idxs::Int...)
Return true
or false
, true
if the TimestepArray arr
contains the Timestep ts
within indices idxs
. Used when Array and Timestep have different FIRST, validating all dimensions.
hasvalue(arr::TimestepArray, ts::VariableTimestep, idxs::Int...)
Return true
or false
, true
if the TimestepArray arr
contains the Timestep ts
within indices idxs
. Used when Array and Timestep have different TIMES, validating all dimensions.
Mimi.is_first
— Functionis_first(ts::AbstractTimestep)
Return true or false, true if ts
is the first timestep to be run.
Mimi.is_last
— Functionis_last(ts::FixedTimestep)
Return true or false, true if ts
is the last timestep to be run.
is_last(ts::VariableTimestep)
Return true or false, true if ts
is the last timestep to be run. Note that you may run next_timestep
on ts
, as ths final timestep has not been run through yet.
Mimi.is_time
— Functionis_time(ts::AbstractTimestep, t::Int)
Deprecated function to return true or false, true if the current time (year) for ts
is t
Mimi.is_timestep
— Functionis_timestep(ts::AbstractTimestep, t::Int)
Deprecated function to return true or false, true if ts
timestep is step t
.
Mimi.modeldef
— Functionmodeldef(mi)
Return the ModelDef
contained by ModelInstance mi
.
modeldef(m)
Return the ModelDef
contained by Model m
.
Base.nameof
— Functionnameof(obj::NamedDef) = obj.name
Return the name of def
. NamedDef
s include DatumDef
, ComponentDef
, and CompositeComponentDef
Mimi.parameter_dimensions
— Functionparameter_dimensions(obj::AbstractComponentDef, param_name::Symbol)
Return the names of the dimensions of parameter param_name
exposed in the component definition indicated by obj
.
parameter_dimensions(obj::AbstractComponentDef, comp_name::Symbol, param_name::Symbol)
Return the names of the dimensions of parameter param_name
in component comp_name
, which is exposed in composite component definition indicated byobj
.
Mimi.parameter_names
— Functionparameter_names(md::ModelDef, comp_name::Symbol)
Return a list of all parameter names for a given component comp_name
in a model def md
.
Base.replace!
— Functionreplace!(
m::Model,
old_new::Pair{Symbol, ComponentDef},
before::NothingSymbol=nothing,
after::NothingSymbol=nothing,
reconnect::Bool=true
)
For the pair comp_name => comp_def
in old_new
, replace the component with name comp_name
in the model m
with the new component specified by comp_def
. The new component is added in the same position as the old component, unless one of the keywords before
or after
is specified for a different position. The optional boolean argument reconnect
with default value true
indicates whether the existing parameter connections should be maintained in the new component. Returns a ComponentReference for the added component.
Mimi.replace_comp!
— Functionreplace_comp!(
m::Model, comp_def::ComponentDef, comp_name::Symbol=comp_id.comp_name;
before::NothingSymbol=nothing,
after::NothingSymbol=nothing,
reconnect::Bool=true
)
Deprecated function for replacing the component with name comp_name
in model m
with the new component specified by comp_def
. Use the following syntax instead:
replace!(m, comp_name => comp_def; kwargs...)
See docstring for replace!
for further description of available functionality.
replace_comp!(
m::Model, comp_id::ComponentId, comp_name::Symbol=comp_id.comp_name;
before::NothingSymbol=nothing,
after::NothingSymbol=nothing,
reconnect::Bool=true
)
Deprecated function for replacing the component with name comp_name
in model m
with the new component specified by comp_id
. Use the following syntax instead:
replace!(m, comp_name => Mimi.compdef(comp_id); kwargs...)
See docstring for replace!
for further description of available functionality.
Base.run
— FunctionBase.run(mm::MarginalModel; ntimesteps::Int=typemax(Int))
Run the marginal model mm
once with ntimesteps
.
Base.run(mi::ModelInstance, ntimesteps::Int=typemax(Int),
dimkeys::Union{Nothing, Dict{Symbol, Vector{T} where T <: DimensionKeyTypes}}=nothing)
Run the ModelInstance
mi
once with ntimesteps
and dimension keys dimkeys
.
Base.run(m::Model; ntimesteps::Int=typemax(Int), rebuild::Bool=false,
dim_keys::Union{Nothing, Dict{Symbol, Vector{T} where T <: DimensionKeyTypes}}=nothing)
Run model m
once.
Base.run(sim_def::SimulationDef{T},
models::Union{Vector{M}, AbstractModel},
samplesize::Int;
ntimesteps::Int=typemax(Int),
trials_output_filename::Union{Nothing, AbstractString}=nothing,
results_output_dir::Union{Nothing, AbstractString}=nothing,
pre_trial_func::Union{Nothing, Function}=nothing,
post_trial_func::Union{Nothing, Function}=nothing,
scenario_func::Union{Nothing, Function}=nothing,
scenario_placement::ScenarioLoopPlacement=OUTER,
scenario_args=nothing,
results_in_memory::Bool=true) where {T <: AbstractSimulationData, M <: AbstractModel}
Run the simulation definition sim_def
for the models
using samplesize
samples.
Optionally run the models
for ntimesteps
, if specified, else to the maximum defined time period. Note that trial data are applied to all the associated models even when running only a portion of them.
If provided, the generated trials and results will be saved in the indicated trials_output_filename
and results_output_dir
respectively. If results_in_memory
is set to false, then results will be cleared from memory and only stored in the results_output_dir
.
If pre_trial_func
or post_trial_func
are defined, the designated functions are called just before or after (respectively) running a trial. The functions must have the signature:
fn(sim_inst::SimulationInstance, trialnum::Int, ntimesteps::Int, tup::Tuple)
where tup
is a tuple of scenario arguments representing one element in the cross-product of all scenario value vectors. In situations in which you want the simulation loop to run only some of the models, the remainder of the runs can be handled using a pre_trial_func
or post_trial_func
.
If provided, scenario_args
must be a Vector{Pair}
, where each Pair
is a symbol and a Vector
of arbitrary values that will be meaningful to scenario_func
, which must have the signature:
scenario_func(sim_inst::SimulationInstance, tup::Tuple)
By default, the scenario loop encloses the simulation loop, but the scenario loop can be placed inside the simulation loop by specifying scenario_placement=INNER
. When INNER
is specified, the scenario_func
is called after any pre_trial_func
but before the model is run.
Returns the type SimulationInstance
that contains a copy of the original SimulationDef
, along with mutated information about trials, in addition to the model list and results information.
Mimi.set_dimension!
— Functionset_dimension!(ccd::CompositeComponentDef, name::Symbol, keys::Union{Int, Vector, Tuple, AbstractRange})
Set the values of ccd
dimension name
to integers 1 through count
, if keys
is an integer; or to the values in the vector or range if keys
is either of those types.
set_dimension!(obj::AbstractComponentDef, name::Symbol, dim::Dimension)
Set the dimension name
in obj
to dim
.
set_dimension!(m::Model, name::Symbol, keys::Union{Vector, Tuple, AbstractRange})
Set the values of m
dimension name
to integers 1 through count
, if keys
is an integer; or to the values in the vector or range if
keys`` is either of those types.
Mimi.set_leftover_params!
— Functionset_leftover_params!(md::ModelDef, parameters::Dict)
Set all of the parameters in ModelDef
md
that don't have a value and are not connected to some other component to a value from a dictionary parameters
. This method assumes the dictionary keys are Symbols (or convertible into Symbols ie. Strings) that match the names of unset parameters in the model. All resulting connected model parameters will be shared model parameters.
Note that this function set_leftover_params! has been deprecated, and uses should be transitioned to using
updateleftoverparams!` with keys specific to component-parameter pairs i.e. (compname, paramname) => value in the dictionary.
set_leftover_params!(m::Model, parameters::Dict)
Set all of the parameters in Model
m
that don't have a value and are not connected to some other component to a value from a dictionary parameters
. This method assumes the dictionary keys are strings (or convertible into Strings ie. Symbols) that match the names of unset parameters in the model, and all resulting new model parameters will be shared parameters.
Note that this function set_leftover_params! has been deprecated, and uses should be transitioned to using
updateleftoverparams!` with keys specific to component-parameter pairs i.e. (compname, paramname) => value in the dictionary.
Mimi.set_param!
— Functionset_param!(md::ModelDef, comp_name::Symbol,
value_dict::Dict{Symbol, Any}, param_names)
Call set_param!()
for each name in param_names
, retrieving the corresponding value from value_dict[param_name]
.
set_param!(md::ModelDef, comp_name::Symbol, param_name::Symbol, value; dims=nothing)
Set the value of parameter param_name
in component comp_name
of Model Def md
to value
. This will create a shared model parameter with name param_name
and connect comp_name
's parameter param_name
to it.
The value
can by a scalar, an array, or a NamedAray. Optional keyword argument 'dims' is a list of the dimension names of the provided data, and will be used to check that they match the model's index labels.
set_param!(md::ModelDef, comp_name::Symbol, param_name::Symbol, model_param_name::Symbol,
value; dims=nothing)
Set the value of parameter param_name
in component comp_name
of Model Def md
to value
. This will create a shared model parameter with name model_param_name
and connect comp_name
's parameter param_name
to it.
The value
can by a scalar, an array, or a NamedAray. Optional keyword argument 'dims' is a list of the dimension names of the provided data, and will be used to check that they match the model's index labels.
set_param!(md::ModelDef, comp_def::AbstractComponentDef, param_name::Symbol,
model_param_name::Symbol, value; dims=nothing)
Set the value of parameter param_name
in component comp_def
of Model Def md
to value
. This will create a shared model parameter with name model_param_name
and connect comp_name
's parameter param_name
to it.
The value
can by a scalar, an array, or a NamedAray. Optional keyword argument 'dims' is a list of the dimension names of the provided data, and will be used to check that they match the model's index labels.
set_param!(md::ModelDef, param_name::Symbol, value; dims=nothing)
Set the value of parameter param_name in all components of the Model Def
mdthat have a parameter of the specified name to
value. This will create a shared model parameter with name
param_name` and connect all component parameters with that name to it.
The value
can by a scalar, an array, or a NamedAray. Optional keyword argument 'dims' is a list of the dimension names of the provided data, and will be used to check that they match the model's index labels.
set_param!(ref::ComponentReference, name::Symbol, value)
Set a component parameter as set_param!(reference, name, value)
. This creates a unique name :compname_paramname in the model's model parameter list, and sets the parameter only in the referenced component to that value.
set_param!(m::Model, comp_name::Symbol, param_name::Symbol, value; dims=nothing)
Set the parameter of a component comp_name
in a model m
to a given value
. The value
can by a scalar, an array, or a NamedAray. Optional keyword argument 'dims' is a list of the dimension names of the provided data, and will be used to check that they match the model's index labels.
set_param!(m::Model, comp_name::Symbol, param_name::Symbol, model_param_name::Symbol, value; dims=nothing)
Set the parameter param_name
of a component comp_name
in a model m
to a given value
, storing the value in the model's parameter list by the provided name model_param_name
. The value
can by a scalar, an array, or a NamedAray. Optional keyword argument 'dims' is a list of the dimension names of the provided data, and will be used to check that they match the model's index labels.
set_param!(m::Model, param_name::Symbol, value; dims=nothing)
Set the value of a parameter in all components of the model that have a parameter of the specified name.
Mimi.TimestepIndex
— TypeTimestepIndex
A user-facing type used to index into a TimestepArray
in run_timestep
functions, containing an Int index
that indicates the position in the array in terms of timesteps.
Mimi.TimestepValue
— TypeTimestepValue
A user-facing type used to index into a TimestepArray
in run_timestep
functions, containing a value
of the same Type as the times in the TimstepArray
which is used to index into the array at that position, with an optional Int offset
in terms of timesteps.
Mimi.update_param!
— Functionupdate_param!(obj::AbstractCompositeComponentDef, name::Symbol, value; update_timesteps = nothing)
Update the value
of a model parameter in composite obj
, referenced by name
. The update_timesteps keyword argument is deprecated, we keep it here just to provide warnings.
update_param!(mi::ModelInstance, name::Symbol, value)
Update the value
of a model parameter in ModelInstance
mi
, referenced by name
. This is an UNSAFE update as it does not dirty the model, and should be used carefully and specifically for things like our MCS work.
update_param!(mi::ModelInstance, comp_name::Symbol, param_name::Symbol, value)
Update the value
of a model parameter in ModelInstance
mi
, connected to component comp_name
's parameter param_name
. This is an UNSAFE updat as it does not dirty the model, and should be used carefully and specifically for things like our MCS work.
update_param!(md::ModelDef, comp_name::Symbol, param_name::Symbol, value)
Update the value
of the unshared model parameter in Model Def md
connected to component comp_name
's parameter param_name
.
update_param!(ref::ComponentReference, name::Symbol, value)
Update a component parameter as update_param!(reference, name, value)
. This uses the unique name :compname_paramname in the model's model parameter list, and updates the parameter only in the referenced component to that value.
update_param!(m::Model, name::Symbol, value; update_timesteps = nothing)
Update the value
of an model parameter in model m
, referenced by name
. The update_timesteps keyword argument is deprecated, we keep it here just to provide warnings.
update_param!(m::Model, comp_name::Symbol, param_name::Symbol, value)
Update the value
of the unshared model parameter in Model m
's Model Def connected to component comp_name
's parameter param_name
.
Mimi.update_params!
— Functionupdate_params!(obj::AbstractCompositeComponentDef, parameters::Dict; update_timesteps = nothing)
For each (k, v) in the provided parameters
dictionary, update_param!
is called to update the model parameter identified by k to value v.
For updating unshared parameters, each key k must be a Tuple matching the name of a component in obj
and the name of an parameter in that component.
For updating shared parameters, each key k must be a symbol or convert to a symbol matching the name of a shared model parameter that already exists in the model.
update_params!(m::Model, parameters::Dict; update_timesteps = nothing)
For each (k, v) in the provided parameters
dictionary, update_param!
is called to update the model parameter identified by k to value v.
For updating unshared parameters, each key k must be a Tuple matching the name of a component in obj
and the name of an parameter in that component.
For updating shared parameters, each key k must be a symbol or convert to a symbol matching the name of a shared model parameter that already exists in the model.
Mimi.update_leftover_params!
— Functionupdate_leftover_params!(md::ModelDef, parameters::Dict)
Update all of the parameters in ModelDef
md
that don't have a value and are not connected to some other component to a value from a dictionary parameters
. This method assumes the dictionary keys are Tuples of Symbols (or convertible to Symbols ie. Strings) of (compname, paramname) that match the component-parameter pair of unset parameters in the model. All resulting connected model parameters will be unshared model parameters.
update_leftover_params!(m::Model, parameters::Dict)
Update all of the parameters in Model
m
that don't have a value and are not connected to some other component to a value from a dictionary parameters
. This method assumes the dictionary keys are Tuples of Symbols (or convertible to Symbols ie. Strings) of (compname, paramname) that match the component-parameter pair of unset parameters in the model. All resulting connected model parameters will be unshared model parameters.
Mimi.variable_dimensions
— Functionvariable_dimensions(obj::AbstractCompositeComponentDef, comp_path::ComponentPath, var_name::Symbol)
Return the names of the dimensions of variable var_name
exposed in the composite component definition indicated byobj
along the component path comp_path
. The comp_path
is of type Mimi.ComponentPath
with the single field being an NTuple of symbols describing the relative (to a composite) or absolute (relative to ModelDef) path through composite nodes to specific composite or leaf node.
variable_dimensions(obj::AbstractCompositeComponentDef, comp::Symbol, var_name::Symbol)
Return the names of the dimensions of variable var_name
exposed in the composite component definition indicated by obj
for the component comp
, which exists in a flat model.
variable_dimensions(obj::AbstractCompositeComponentDef, comp::Symbol, var_name::Symbol)
Return the names of the dimensions of variable var_name
exposed in the composite component definition indicated by obj
along the component path comp_path
. The comp_path
is a tuple of symbols describing the relative (to a composite) or absolute (relative to ModelDef) path through composite nodes to specific composite or leaf node.
variable_dimensions(obj::AbstractComponentDef, name::Symbol)
Return the names of the dimensions of variable name
exposed in the component definition indicated by obj
.
Mimi.variable_names
— Functionvariable_names(md::AbstractCompositeComponentDef, comp_name::Symbol)
Return a list of all variable names for a given component comp_name
in a model def md
.
variable_names(comp_def::AbstractComponentDef)
Return a list of all variable names for a given component comp_def
.