Skip to content

Commit

Permalink
Merge pull request #44 from rffscghg/agmip-mcs
Browse files Browse the repository at this point in the history
Agmip mcs
  • Loading branch information
lrennels authored Apr 23, 2024
2 parents 011210f + ae1a2d0 commit ad7007d
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 11 deletions.
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Mimi = "1.4"
MimiBRICK = "1"
MimiCIAM = "1"
MimiFAIRv1_6_2 = "1"
MimiMooreEtAlAgricultureImpacts = "1"
MimiMooreEtAlAgricultureImpacts = "2"
MimiRFFSPs = "1"
MimiSSPs = "1"
Mimi_NAS_pH = "1"
Expand Down
32 changes: 23 additions & 9 deletions src/main_mcs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ using Distributions, Dates, Mimi, CSVFiles, DataFrames, MimiMooreEtAlAgriculture
import Mimi: SampleStore, add_RV!, add_transform!, add_save!

"""
get_mcs(trials;
get_mcs(trials;
socioeconomics_source::Symbol = :RFF,
mcs_years = 1750:2300,
fair_parameter_set::Symbol = :random,
fair_parameter_set_ids::Union{Vector{Int}, Nothing} = nothing,
rffsp_sampling::Symbol = :random,
rffsp_sampling_ids::Union{Vector{Int}, Nothing} = nothing,
save_list::Vector = []
save_list::Vector = [],
Agriculture_gtap::String = "midDF"
)
Return a Monte Carlo Simulation definition of type Mimi.SimulationDefinition that
Expand All @@ -32,6 +33,9 @@ pairs, that will be used in a Monte Carlo Simulation.
set to `nothing` and ignored.
- `save_list` (default []) - which parameters and varaibles to save for each trial,
entered as a vector of Tuples (:component_name, :variable_name)
- Agriculture_gtap (default midDF) - specify the `Agriculture_gtap` input parameter as one of
`["AgMIP_AllDF", "AgMIP_NoNDF", "highDF", "lowDF", "midDF"]`, indicating which
gtap damage function the component should use.
"""
function get_mcs(trials;
socioeconomics_source::Symbol = :RFF,
Expand All @@ -40,7 +44,8 @@ function get_mcs(trials;
fair_parameter_set_ids::Union{Vector{Int}, Nothing} = nothing,
rffsp_sampling::Symbol = :random,
rffsp_sampling_ids::Union{Vector{Int}, Nothing} = nothing,
save_list::Vector = []
save_list::Vector = [],
Agriculture_gtap::String = "midDF"
)

# check some argument conditions
Expand Down Expand Up @@ -181,12 +186,18 @@ function get_mcs(trials;
end

# add Agriculture mcs over gtap region damage function parameterizations
ag_sample_stores = MimiMooreEtAlAgricultureImpacts.get_probdists_gtap_df(trials)
for coef in [1,2,3] # three coefficients defined with an anonymous dimension
for (i, region) in enumerate(["USA","CAN","WEU","JPK","ANZ","EEU","FSU","MDE","CAM","LAM","SAS","SEA","CHI","MAF","SSA","SIS"]) # fund regions for ag
rv_name = Symbol("rv_gtap_coef$(coef)_$region")
add_RV!(mcs, rv_name, ag_sample_stores[i, coef])
add_transform!(mcs, :Agriculture, :gtap_df, :(=), rv_name, [region, coef])
ag_sample_stores = MimiMooreEtAlAgricultureImpacts.get_probdists_gtap_df(Agriculture_gtap, trials)

# If ag sample stores are available for a given Agriculture_gtap damage function
# then ag_sample_stores will be a Vector, and otherwise will return a
# warning and `nothing`.
if !isnothing(ag_sample_stores)
for coef in [1,2,3] # three coefficients defined with an anonymous dimension
for (i, region) in enumerate(["USA","CAN","WEU","JPK","ANZ","EEU","FSU","MDE","CAM","LAM","SAS","SEA","CHI","MAF","SSA","SIS"]) # fund regions for ag
rv_name = Symbol("rv_gtap_coef$(coef)_$region")
add_RV!(mcs, rv_name, ag_sample_stores[i, coef])
add_transform!(mcs, :Agriculture, :gtap_df, :(=), rv_name, [region, coef])
end
end
end

Expand Down Expand Up @@ -345,6 +356,8 @@ function run_mcs(;trials::Int64 = 10000,
socioeconomics_source = :RFF
end

Agriculture_gtap = _get_mooreag_gtap(m)

# Get an instance of the mcs
mcs = get_mcs(trials;
socioeconomics_source = socioeconomics_source,
Expand All @@ -354,6 +367,7 @@ function run_mcs(;trials::Int64 = 10000,
rffsp_sampling = rffsp_sampling,
rffsp_sampling_ids = rffsp_sampling_ids,
save_list = save_list,
Agriculture_gtap = Agriculture_gtap
)

# run monte carlo trials
Expand Down
1 change: 1 addition & 0 deletions src/main_model.jl
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,7 @@ function get_model(; Agriculture_gtap::String = "midDF",
gtap_df = MimiMooreEtAlAgricultureImpacts.gtap_df_all[:, :, gtap_idx]

update_param!(m, :Agriculture, :gtap_df, gtap_df)
update_param!(m, :Agriculture, :gtap_name, Agriculture_gtap)
update_param!(m, :Agriculture, :floor_on_damages, Agriculture_floor_on_damages)
update_param!(m, :Agriculture, :ceiling_on_benefits, Agriculture_ceiling_on_benefits)
update_param!(m, :Agriculture, :agrish0, Array{Float64, 1}(readdlm(joinpath(MimiMooreEtAlAgricultureImpacts.fund_datadir, "agrish0.csv"), ',', skipstart=1)[:,2]))
Expand Down
5 changes: 4 additions & 1 deletion src/scc.jl
Original file line number Diff line number Diff line change
Expand Up @@ -510,14 +510,17 @@ function _compute_scc_mcs(mm::MarginalModel,
socioeconomics_source = :RFF
end

Agriculture_gtap = _get_mooreag_gtap(mm.base)

mcs = get_mcs(n;
socioeconomics_source=socioeconomics_source,
mcs_years = _model_years,
fair_parameter_set = fair_parameter_set,
fair_parameter_set_ids = fair_parameter_set_ids,
rffsp_sampling = rffsp_sampling,
rffsp_sampling_ids = rffsp_sampling_ids,
save_list = save_list
save_list = save_list,
Agriculture_gtap = Agriculture_gtap
)

if post_mcs_creation_function!==nothing
Expand Down
14 changes: 14 additions & 0 deletions src/utils/utils.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,17 @@ This is a small helper function useful for internals like the mcs.
function _get_module_name(m::Model, comp_name::Symbol)
return nameof(m.md.namespace[comp_name].comp_id.module_obj)
end

"""
Return the name of the Moore agriculture GTAP damage function specification in
model `m`. This is a small helper function useful for internals like the mcs.
"""
function _get_mooreag_gtap(m::Model)

# model may not have been run yet, so need to get model parameter name to look
# up the value
model_param_name = Mimi.get_model_param_name(m, :Agriculture, :gtap_name)
Agriculture_gtap = Mimi.model_param(m, model_param_name).value

return Agriculture_gtap
end

0 comments on commit ad7007d

Please sign in to comment.