diff --git a/Project.toml b/Project.toml index 992f83c..afc90b1 100644 --- a/Project.toml +++ b/Project.toml @@ -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" diff --git a/src/main_mcs.jl b/src/main_mcs.jl index 2015635..b8587cb 100644 --- a/src/main_mcs.jl +++ b/src/main_mcs.jl @@ -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 @@ -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, @@ -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 @@ -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 @@ -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, @@ -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 diff --git a/src/main_model.jl b/src/main_model.jl index 4738e18..3f80636 100644 --- a/src/main_model.jl +++ b/src/main_model.jl @@ -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])) diff --git a/src/scc.jl b/src/scc.jl index 13e25d7..c2391b2 100644 --- a/src/scc.jl +++ b/src/scc.jl @@ -510,6 +510,8 @@ 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, @@ -517,7 +519,8 @@ function _compute_scc_mcs(mm::MarginalModel, 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 diff --git a/src/utils/utils.jl b/src/utils/utils.jl index 903aefd..3243fd6 100644 --- a/src/utils/utils.jl +++ b/src/utils/utils.jl @@ -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