#!/usr/bin/perl
# Simulation of CO2 removal from the atmosphere following achievement of zero emissions,
# per Dr. Roy Spencer's 2023 version "simple model." Reference:
# Spencer, R. W. (2023). ENSO Impact on the Declining CO2 Sink Rate. J Mari Scie Res Ocean, 6(4), 163-170, https://doi.org/10.33140/jmsro.06.04.03
# By Dave Burton, www.sealevel.info. Uncopyrighted.
$equilibrium_level = 293.6;
$sink_rate = 0.0202;
$starting_level = $co2level = 421.08;
$starting_year = $year = 2023;
# input is the current CO2 level, in ppmv
# output is the amount of CO2 removed in one year by natural sinks, assuming ENSO neutral conditions
sub removal_rate {
local($co2level) = shift;
local($removalrate) = 0;
local($co2elevation) = $co2level - $equilibrium_level;
if ($co2level <= $equilibrium_level) {
$removalrate = 0;
} else {
$removalrate = $co2elevation * $sink_rate;
}
return $removalrate;
}
# DEBUG PRINT
# print "Removal rates as a function of CO2 level:\n";
# for ($i=270; $i<=500; $i++) {
# $removalrate = &removal_rate($i);
# printf("$i %2.4f\n", $removalrate);
# }
# print "\n";
# SIMULATE DECLINE IN CO2 LEVEL IF EMISSIONS SUDDENLY WENT TO ZERO
$efoldinglife = 1 / $sink_rate;
$ln2 = 0.69314718056; # ln(2)
$e = 2.71828182846;
$halflife = $efoldinglife * $ln2;
$halflevel = ($equilibrium_level + $starting_level) / 2;
printf("Simulated CO2 level, starting at %6.2f ppmv in $year, and zero emissions,\n", $co2level);
print "per Dr. Roy Spencer's 2023 version Simple Model. Reference:\n";
print "Spencer, RW (2023). ENSO Impact on the Declining CO2 Sink Rate. J Mari Scie \nRes Ocean, 6(4), 163-170, https://doi.org/10.33140/jmsro.06.04.03\n\n";
printf("Equilibrium CO2 level is %6.2f, half-way down to that is %5.2f ppmv.\n", $equilibrium_level, $halflevel);
printf("Half-life is %5.2f years, e-folding lifetime (adjustment time) is %5.2f years.\n", $halflife, $efoldinglife);
$msg1_done = $msg2_done = $msg3_done = 0;
print "YEAR CO2\n";
while ($co2level > 330) {
printf("$year %6.1f\n", $co2level);
if (($co2level <= $halflevel) && !$msg3_done) {
printf( "** %5.1f ppmv: half of the %5.1f ppmv CO2 above equilibrium is gone **\n",
$halflevel, ($starting_level - $equilibrium_level) );
$msg3_done = 1;
}
$year += 1;
$removalrate = &removal_rate( $co2level );
$co2level -= $removalrate;
if (($year - $starting_year) >= $halflife) {
if (!$msg1_done) {
printf( "** date %6.1f: One half-life (%2.1f years) reached **\n",
($starting_year + $halflife), $halflife);
$msg1_done = 1;
}
}
if (($year - $starting_year) >= $efoldinglife) {
if (!$msg2_done) {
printf( "** date %6.1f: e-folding life (%2.1f years) and level (%6.2f ppmv) reached **\n",
($starting_year + $efoldinglife), $efoldinglife,
((($starting_level - $equilibrium_level) / $e) + $equilibrium_level) );
$msg2_done = 1;
}
}
}
exit(0);