GIVE CO2 output for reproducing Fig. 1 of Rennert et al 2022

Hi all!

I’m modifying the code for the GIVE model (as downloaded from: Comprehensive Evidence Implies a Higher Social Cost of CO2 - Replication Data and Code | Zenodo) and encountered (seemingly) an inconsistency in the output CO2 emissions.

In particular, median CO2 emissions as stored at “output/figure1_data.csv” are approximately 40Gt in 2020 (as in Fig. 1 of Rennert et al. (2022)), whereas those stored at “output/Figure1/results/Socioeconomic_co2_emissions.csv” are approximately 11Gt in 2020.

What is the difference between the CO2 emissions as stored in these two places? I couldn’t think of a simple conversion factor that could explain the discrepancy.

Thanks for your help!

Max :slight_smile:

Hi @maxkotz thank you for the message and your interest! I believe the multiplier you need here is converting GtCO2 to GtC with 44/12.

The results/Socioeconomic_co2_emissions.csv file is created during the call to compute_rff_scc function which saves raw data from the Monte Carlo run, and the MimiGIVE model uses CO2 emissions in GtCO2 so the output from the MimiGIVE model runs are in GtCO2.

Taking a look at the compute_figure1_data function in the compute_scenarios.jl file you’ll see this piece of code:

    df_emissions = load(joinpath(detail_dir, "results", "Socioeconomic_co2_emissions.csv"), colparsers = Dict(:co2_emissions => Float64)) |>
                   @mutate(variable = "CO₂ emissions") |>
                   @mutate(co2_emissions = _.co2_emissions * 44 / 12) |> # Convert from Gt C to Gt CO2
                   @rename(:co2_emissions => :value, :time => :year) |>
                   @filter(_.year >= 2020 && _.year <= 2300) |>
                   @select(:year, :variable, :value) |>
                   @mutate(year = Date(_.year)) |>
                   @dissallowna() |>

In particular noting the line

@mutate(co2_emissions = _.co2_emissions * 44 / 12) |> # Convert from Gt C to Gt CO2

which takes data from the Socioeconomic_co2_emissions.csv file and converts it to GtCO2 for the data used to create the Figure.

Let me know if that makes sense!

You also may find this guide helpful when modifying MimiGIVE MimiGIVE.jl/HowToGuide_AddNewSector.ipynb at main · rffscghg/MimiGIVE.jl · GitHub It depends a bit what you’re trying to do but it could help out!

Thanks so much for the quick reply @lrennels ! That makes perfect sense, and thanks for pointing out the relevant part of compute_rff_scc.

Also thanks for the guide describing how to modify MimiGIVE! I’ve been adding new damage functions to GIVE and so great to see that there is a guide for that :slight_smile: if I encounter further issues I’ll look there first!

Thanks :slight_smile:

1 Like

No problem at all! Glad to help.

Re. MimiGIVE if what you’re doing is working for you no need to change things I just wanted to point that out. In the spirit of collaboration and open source work we really want people to add, modify, explore etc. so don’t hesitate to ask questions about Mimi on this forum, and ping us directly on the MimiGIVE repository by adding an Issue and tagging me. I can hopefully answer questions, and also continue to augment our helper documents to make research easier! Even if something is unclear or doesn’t seem to be working as expecting re. that document I certainly want to know.

I don’t have a document written yet on how to modify the package, just how to augment from a baseline m = MimiGIVE.get_model … that’s on our list though.