Objective: Take a look at how the correction to the forcing scalings affect Hector output.

The resulting changes are to the following 5 aerosol constants:

SI Eq 12 -ρ𝐵𝐶 (new) = ρ𝐵𝐶(old) * ( (0.37+0.07) / (0.28 + 0.07) )**

SI Eq 13 through SI Eq 15 (for all the reflecting forcings) multiply by ( 0.65/0.63 )

SI Eq 16 -ρaci (new) = ρaci (old) * ( 0.88/ 0.81 )

The result will be a about a 5% larger net negative forcing, and a larger positive ARI from BC.
library(dplyr)
library(ggplot2)
library(hector)
library(knitr)

theme_set(theme_bw())

Load and format the data

# The Hector comp files were generated by the raw-data/generate-comp-data.R script
# before an after implementing the new aerosol correction scalar values, note that
# it was not until...
og_data <- read.csv("~/Documents/Hector/tests/testthat/compdata/hector_comp-dev-branch.csv")
new_data <- read.csv("~/Documents/Hector/tests/testthat/compdata/hector_comp-new-aerosol.csv")


og_data$version <- "V3"
new_data$version <- "Updated Aerosols"

# Save a long formatted data frame for easy plotting
long_data <- rbind(og_data, new_data)


# Save a copy of a wide data frame to compute the differences. 
og_data %>%
    select(-version) %>%
    rename(v3_value = value) %>%
    inner_join(new_data) %>%
    rename(aero_value = value) %>%
    mutate(SE = (v3_value - aero_value) ^2,
           percent = 100 * abs(abs(v3_value - aero_value)/v3_value) ) ->
    wide_data
Joining with `by = join_by(scenario, year, variable, units, commit)`

wide_data %>%
    group_by(variable) %>%
    summarise(MSE = mean(SE), percent = mean(percent, na.rm = TRUE)) %>% 
    arrange(desc(percent)) -> 
    summary_stats

kable(summary_stats)
variable MSE percent
RF_CO2 0.0001510 26.7411263
RF_BC 0.0010348 25.7142857
sst 0.0000203 21.8943594
global_tas 0.0000381 13.7688273
RF_tot 0.0001193 12.0917674
RF_aci 0.0010591 8.6419753
RF_SO2 0.0000287 3.1746032
RF_NH3 0.0000075 3.1746032
RF_OC 0.0000018 3.1746032
heatflux 0.0000406 2.6692331
CO2_concentration 0.6836167 0.1841800
atmos_co2 3.1015006 0.1841800
HL_pH 0.0000007 0.0092686
ocean_c 14.3051887 0.0087844

Global Temperature

long_data %>%
    filter(variable == GLOBAL_TAS()) %>%
    ggplot(aes(year, value, color = version)) +
    geom_line() + 
    labs(y = "deg C")


summary_stats %>%
    filter(variable == GLOBAL_TAS())
NA

Aerosol RFs

vars <- c(RF_BC(), RF_OC(), RF_SO2(), RF_NH3(), RF_ACI())

long_data %>%
    filter(variable %in% vars) %>%
    ggplot(aes(year, value, color = version)) +
    geom_line() + 
    labs(y = "W") + 
    facet_wrap("variable", scales = "free")

wide_data %>% 
    filter(variable %in% vars) %>% 
    ggplot(aes(year, percent, color = variable)) + 
    geom_line()

CO2 Variables

vars <- c("CO2_concentration", "RF_CO2", "ocean_c", "HL_pH")

long_data %>%
    filter(variable %in% vars) %>%
    ggplot(aes(year, value, color = version)) +
    geom_line() + 
    facet_wrap("variable", scales = "free")

vars <- c("CO2_concentration", "RF_CO2", "ocean_c", "HL_pH")

wide_data %>%
    filter(variable %in% vars) %>%
    filter(year > 1900) %>% 
    ggplot(aes(year, percent, color = version)) +
    geom_line() + 
    facet_wrap("variable", scales = "free")

Question for Steve

What was your vision for how these changes were going to be added to Hector. Does it mean adding a new corrective parameter per aerosol equation? Or would it be as simple as updating the \(\rho\) scalers with the new ones you’ve come up with that are the product of two scalars?

LS0tCnRpdGxlOiAiQ29ycmVjdGluZyBBZXJvc29sIFJGICIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKT2JqZWN0aXZlOiBUYWtlIGEgbG9vayBhdCBob3cgdGhlIGNvcnJlY3Rpb24gdG8gdGhlIGZvcmNpbmcgc2NhbGluZ3MgYWZmZWN0IEhlY3RvciBvdXRwdXQuIAoKYGBgClRoZSByZXN1bHRpbmcgY2hhbmdlcyBhcmUgdG8gdGhlIGZvbGxvd2luZyA1IGFlcm9zb2wgY29uc3RhbnRzOgoKU0kgRXEgMTIgLc+B8J2QtfCdkLYgKG5ldykgPSDPgfCdkLXwnZC2KG9sZCkgKiAoICgwLjM3KzAuMDcpIC8gKDAuMjggKyAwLjA3KSApKioKClNJIEVxIDEzIHRocm91Z2ggU0kgRXEgMTUgKGZvciBhbGwgdGhlIHJlZmxlY3RpbmcgZm9yY2luZ3MpIG11bHRpcGx5IGJ5ICggMC42NS8wLjYzICkKClNJIEVxIDE2IC3PgWFjaSAobmV3KSA9IM+BYWNpIChvbGQpICogKCAwLjg4LyAwLjgxICkKClRoZSByZXN1bHQgd2lsbCBiZSBhIGFib3V0IGEgNSUgbGFyZ2VyIG5ldCBuZWdhdGl2ZSBmb3JjaW5nLCBhbmQgYSBsYXJnZXIgcG9zaXRpdmUgQVJJIGZyb20gQkMuCgpgYGAKCgpgYGB7cn0KbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGhlY3RvcikKbGlicmFyeShrbml0cikKCnRoZW1lX3NldCh0aGVtZV9idygpKQpgYGAKCkxvYWQgYW5kIGZvcm1hdCB0aGUgZGF0YSAKCmBgYHtyfQojIFRoZSBIZWN0b3IgY29tcCBmaWxlcyB3ZXJlIGdlbmVyYXRlZCBieSB0aGUgcmF3LWRhdGEvZ2VuZXJhdGUtY29tcC1kYXRhLlIgc2NyaXB0CiMgYmVmb3JlIGFuIGFmdGVyIGltcGxlbWVudGluZyB0aGUgbmV3IGFlcm9zb2wgY29ycmVjdGlvbiBzY2FsYXIgdmFsdWVzLCBub3RlIHRoYXQKIyBpdCB3YXMgbm90IHVudGlsLi4uCm9nX2RhdGEgPC0gcmVhZC5jc3YoIn4vRG9jdW1lbnRzL0hlY3Rvci90ZXN0cy90ZXN0dGhhdC9jb21wZGF0YS9oZWN0b3JfY29tcC1kZXYtYnJhbmNoLmNzdiIpCm5ld19kYXRhIDwtIHJlYWQuY3N2KCJ+L0RvY3VtZW50cy9IZWN0b3IvdGVzdHMvdGVzdHRoYXQvY29tcGRhdGEvaGVjdG9yX2NvbXAtbmV3LWFlcm9zb2wuY3N2IikKCgpvZ19kYXRhJHZlcnNpb24gPC0gIlYzIgpuZXdfZGF0YSR2ZXJzaW9uIDwtICJVcGRhdGVkIEFlcm9zb2xzIgoKIyBTYXZlIGEgbG9uZyBmb3JtYXR0ZWQgZGF0YSBmcmFtZSBmb3IgZWFzeSBwbG90dGluZwpsb25nX2RhdGEgPC0gcmJpbmQob2dfZGF0YSwgbmV3X2RhdGEpCgoKIyBTYXZlIGEgY29weSBvZiBhIHdpZGUgZGF0YSBmcmFtZSB0byBjb21wdXRlIHRoZSBkaWZmZXJlbmNlcy4gCm9nX2RhdGEgJT4lCiAgICBzZWxlY3QoLXZlcnNpb24pICU+JQogICAgcmVuYW1lKHYzX3ZhbHVlID0gdmFsdWUpICU+JQogICAgaW5uZXJfam9pbihuZXdfZGF0YSkgJT4lCiAgICByZW5hbWUoYWVyb192YWx1ZSA9IHZhbHVlKSAlPiUKICAgIG11dGF0ZShTRSA9ICh2M192YWx1ZSAtIGFlcm9fdmFsdWUpIF4yLAogICAgICAgICAgIHBlcmNlbnQgPSAxMDAgKiBhYnMoYWJzKHYzX3ZhbHVlIC0gYWVyb192YWx1ZSkvdjNfdmFsdWUpICkgLT4KICAgIHdpZGVfZGF0YQoKYGBgCgoKYGBge3J9Cgp3aWRlX2RhdGEgJT4lCiAgICBncm91cF9ieSh2YXJpYWJsZSkgJT4lCiAgICBzdW1tYXJpc2UoTVNFID0gbWVhbihTRSksIHBlcmNlbnQgPSBtZWFuKHBlcmNlbnQsIG5hLnJtID0gVFJVRSkpICU+JSAKICAgIGFycmFuZ2UoZGVzYyhwZXJjZW50KSkgLT4gCiAgICBzdW1tYXJ5X3N0YXRzCgprYWJsZShzdW1tYXJ5X3N0YXRzKQpgYGAKCgojIEdsb2JhbCBUZW1wZXJhdHVyZSAKCgpgYGB7cn0KbG9uZ19kYXRhICU+JQogICAgZmlsdGVyKHZhcmlhYmxlID09IEdMT0JBTF9UQVMoKSkgJT4lCiAgICBnZ3Bsb3QoYWVzKHllYXIsIHZhbHVlLCBjb2xvciA9IHZlcnNpb24pKSArCiAgICBnZW9tX2xpbmUoKSArIAogICAgbGFicyh5ID0gImRlZyBDIikKCnN1bW1hcnlfc3RhdHMgJT4lCiAgICBmaWx0ZXIodmFyaWFibGUgPT0gR0xPQkFMX1RBUygpKQoKYGBgCiMgQWVyb3NvbCBSRnMgCgoKYGBge3J9CnZhcnMgPC0gYyhSRl9CQygpLCBSRl9PQygpLCBSRl9TTzIoKSwgUkZfTkgzKCksIFJGX0FDSSgpKQoKbG9uZ19kYXRhICU+JQogICAgZmlsdGVyKHZhcmlhYmxlICVpbiUgdmFycykgJT4lCiAgICBnZ3Bsb3QoYWVzKHllYXIsIHZhbHVlLCBjb2xvciA9IHZlcnNpb24pKSArCiAgICBnZW9tX2xpbmUoKSArIAogICAgbGFicyh5ID0gIlciKSArIAogICAgZmFjZXRfd3JhcCgidmFyaWFibGUiLCBzY2FsZXMgPSAiZnJlZSIpCmBgYAoKYGBge3J9CndpZGVfZGF0YSAlPiUgCiAgICBmaWx0ZXIodmFyaWFibGUgJWluJSB2YXJzKSAlPiUgCiAgICBnZ3Bsb3QoYWVzKHllYXIsIHBlcmNlbnQsIGNvbG9yID0gdmFyaWFibGUpKSArIAogICAgZ2VvbV9saW5lKCkKYGBgCgoKIyBDTzIgVmFyaWFibGVzIAoKCmBgYHtyfQp2YXJzIDwtIGMoIkNPMl9jb25jZW50cmF0aW9uIiwgIlJGX0NPMiIsICJvY2Vhbl9jIiwgIkhMX3BIIikKCmxvbmdfZGF0YSAlPiUKICAgIGZpbHRlcih2YXJpYWJsZSAlaW4lIHZhcnMpICU+JQogICAgZ2dwbG90KGFlcyh5ZWFyLCB2YWx1ZSwgY29sb3IgPSB2ZXJzaW9uKSkgKwogICAgZ2VvbV9saW5lKCkgKyAKICAgIGZhY2V0X3dyYXAoInZhcmlhYmxlIiwgc2NhbGVzID0gImZyZWUiKQpgYGAKCmBgYHtyfQp2YXJzIDwtIGMoIkNPMl9jb25jZW50cmF0aW9uIiwgIlJGX0NPMiIsICJvY2Vhbl9jIiwgIkhMX3BIIikKCndpZGVfZGF0YSAlPiUKICAgIGZpbHRlcih2YXJpYWJsZSAlaW4lIHZhcnMpICU+JQogICAgZmlsdGVyKHllYXIgPiAxOTAwKSAlPiUgCiAgICBnZ3Bsb3QoYWVzKHllYXIsIHBlcmNlbnQsIGNvbG9yID0gdmVyc2lvbikpICsKICAgIGdlb21fbGluZSgpICsgCiAgICBmYWNldF93cmFwKCJ2YXJpYWJsZSIsIHNjYWxlcyA9ICJmcmVlIikKYGBgCgoKCiMgUXVlc3Rpb24gZm9yIFN0ZXZlIAoKV2hhdCB3YXMgeW91ciB2aXNpb24gZm9yIGhvdyB0aGVzZSBjaGFuZ2VzIHdlcmUgZ29pbmcgdG8gYmUgYWRkZWQgdG8gSGVjdG9yLiBEb2VzIGl0IG1lYW4gYWRkaW5nIGEgbmV3IGNvcnJlY3RpdmUgcGFyYW1ldGVyIHBlciBhZXJvc29sIGVxdWF0aW9uPyBPciB3b3VsZCBpdCBiZSBhcyBzaW1wbGUgYXMgdXBkYXRpbmcgdGhlICRccmhvJCBzY2FsZXJzIHdpdGggdGhlIG5ldyBvbmVzIHlvdSd2ZSBjb21lIHVwIHdpdGggdGhhdCBhcmUgdGhlIHByb2R1Y3Qgb2YgdHdvIHNjYWxhcnM/IAoKCgoKCgoKCg==