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)
| 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==