Here's a variant of the same little Perl program, but using Roy's simple model to estimate the CO2 removal rates.

The results are similar to the first version: Counting 280 ppmv as "pre-industrial," 2/3 of the anthropogenic CO2 is gone from the atmosphere in 60 years (exactly halfway between Dick Lindzen's "50 years" and Roy Spencer's "70 years").

Using Roy's simple model makes the tiny program even tinier:

#!/usr/bin/perl

# estimate CO2 removal rate in ppmv/yr as a function of CO2 level in ppmv, per Dr. Roy Spencer's "simple model"

sub removal_rate {

local(\$co2level) = shift;

local(\$removalrate) = 0;

local(\$co2elevation) = \$co2level - 295.1;

local(\$ratio) = 47.73;

if (\$co2level <= 295.1) {

\$removalrate = 0;

} else {

\$removalrate = \$co2elevation * 0.0233;

}

return \$removalrate;

}

# SIMULATE DECLINE IN CO2 LEVEL IF EMISSIONS SUDDENLY WENT TO ZERO

\$co2level = 410;

\$year = 2019;

print "Simulated CO2 level decline, with level starting at \$co2level ppmv in \$year, and zero emissions:\n";

while (\$co2level > 300) {

printf("\$year %5.1f\n", \$co2level);

\$year += 1;

\$removalrate = &removal_rate( \$co2level );

\$co2level -= \$removalrate;

}

Here's the result of a simulation run, with CO2 starting at 410 ppmv in 2019, and zero emissions:

`2019 410.0`
`2020 407.3`
`2021 404.7`
`2022 402.2`
`2023 399.7`
`2024 397.2`
`2025 394.8`
`2026 392.5`
`2027 390.3`
`2028 388.0`
`2029 385.9`
`2030 383.8`
`2031 381.7`
`2032 379.7`
`2033 377.7`
`2034 375.8`
`2035 373.9`
`2036 372.1`
`2037 370.3`
`2038 368.5`
`2039 366.8`
`2040 365.1`
`2041 363.5`
`2042 361.9`
`2043 360.4`
`2044 358.8`
`2045 357.3`
`2046 355.9`
`2047 354.5`
`2048 353.1`
`2049 351.7`
`2050 350.4`
`2051 349.1`
`2052 347.9`
`2053 346.6`
`2054 345.4`
`2055 344.3`
`2056 343.1`
`2057 342.0`
`2058 340.9`
`2059 339.8`
`2060 338.8`
`2061 337.8`
`2062 336.8`
`2063 335.8`
`2064 334.9`
`2065 333.9`
`2066 333.0`
`2067 332.2`
`2068 331.3`
`2069 330.4`
`2070 329.6`
`2071 328.8`
`2072 328.0`
`2073 327.3  <== residence time (Te) = 54 years (using 280 ppmv as base)`
`2074 326.5`
`2075 325.8`
`2076 325.1`
`2077 324.4`
`2078 323.7`
`2079 323.0  <== two-thirds of the anthropogenic CO2 is gone in 60 years (using 280 ppmv as base)`
`2080 322.4`
`2081 321.7`
`2082 321.1`
`2083 320.5`
`2084 319.9`
`2085 319.3`
`2086 318.8`
`2087 318.2`
`2088 317.7`
`2089 317.2`
`2090 316.6`
`2091 316.1`
`2092 315.7`
`2093 315.2`
`2094 314.7`
`2095 314.3`
`2096 313.8`
`2097 313.4`
`2098 312.9`
`2099 312.5`
`2100 312.1`
`2101 311.7`
`2102 311.3`
`2103 311.0`
`2104 310.6`
`2105 310.2`
`2106 309.9`
`2107 309.5`
`2108 309.2`
`2109 308.9`
`2110 308.5`
`2111 308.2`
`2112 307.9`
`2113 307.6`
`2114 307.3`
`2115 307.1`
`2116 306.8`
`2117 306.5`
`2118 306.2`
`2119 306.0`
`2120 305.7`
`2121 305.5`
`2122 305.2`
`2123 305.0`
`2124 304.8`
`2125 304.5`
`2126 304.3`
`2127 304.1`
`2128 303.9`
`2129 303.7`
`2130 303.5`
`2131 303.3`
`2132 303.1`
`2133 302.9`
`2134 302.7`
`2135 302.6`
`2136 302.4`
`2137 302.2`
`2138 302.0`
`2139 301.9`
`2140 301.7`
`2141 301.6`
`2142 301.4`
`2143 301.3`
`2144 301.1`
`2145 301.0`
`2146 300.9`
`2147 300.7`
`2148 300.6`
`2149 300.5`
`2150 300.3`
`2151 300.2`
`2152 300.1`

The files (including a Windows command-line Perl executable, and a "run_simulation.bat" file to run the simulation at a Windows command prompt), are here:
https://sealevel.info/CO2_Residence_Times/allfiles2.zip

Warmest regards,
Dave

On Thu, Apr 11, 2019 at 1:48 AM David Burton <ncdave4life@gmail.com> wrote:

Dear Ed,

It is trivially true that changes to the average atmospheric CO2 level must be equal to the difference between the processes which add to that level and the processes which subtract from it.

1 ppmv CO2 (molecular wt 44.01) has mass 8.053 Gt, of which 12/44-ths or 2.196 Gt is carbon. (Note: I have a hard time remembering such numbers, so I have a
crib sheet of conversion factors on my web site.)

We have good economic data for the global production & use of fossil fuels, so we can trivially calculate anthropogenic emissions from those sources. But everything else is harder.

It's not too bad on the emissions side, because it is generally acknowledged that fossil fuels are the main source of anthropogenic CO2 emissions. So even if estimates of the other sources (concrete, land use changes, etc.) are badly botched, we still will be "in the ballpark" for our anthropogenic emissions estimates. Those emissions are currently estimated to be a little over 10 Gt carbon per year, equivalent to almost 5 ppmv CO2 per year.

The various processes which remove CO2 from the air (mainly terrestrial greening, and dissolution in seawater) have rates which are governed by many factors, but those factors are surely dominated by just one: the average atmospheric CO2 level.

Note that simple physics & chemistry cannot possibly govern the removal rate, because the most important factors are probably biological.

Note also that those processes cannot be significantly affected by the emission rate of "fossil" (anthropogenic) CO2. There simply is no plausible physical mechanism for such a coupling. It is the CO2 level, not the CO2 emission rate, which primary governs the CO2 removal rate.

Now, as it happens, the CO2 removal rate has generally been very close to half the anthropogenic CO2 emission rate, for many years, with the result that CO2 levels have increased only about half as fast as would have happened w/o the negative feedbacks that remove CO2 at an accelerating rate (which apparently came as a big surprise for Hansen et al (1988), and is one of the main reasons their predictions 30 years ago were so far off). As CO2 emission rates have increased, CO2 levels have also unsurprisingly increased, and as CO2 levels have risen, CO2 removal rates have also unsurprisingly risen. The one really surprising thing about it is the certainly coincidental fact that CO2 removal rates have been consistently near half the anthropogenic CO2 emission rates.

Back in 1988, Hansen & his seven illustrious co-authors equated emissions with level increases, which means they assumed that rising CO2 levels would not cause an acceleration in the processes that remove CO2. But now a remarkable number of supposed authorities on climate change make the opposite mistake: they suffer from the delusion that CO2 removal rates are governed by the emission rates, and that it is some sort of law that "half of the CO2 we emit stays in the atmosphere." That leads to imbecilic claims that anthropogenic CO2 emissions must be lowered to zero to stop the rise in CO2 levels, and to the idiotic notion of a "carbon budget."  (Actually, if anthropogenic CO2 emission rates were merely halved, CO2 levels would completely cease rising, at least for quite a while.)

Okay, enough of that rant. Back to the subject at hand...

We can quite easily tabulate the CO2 removal rate as a function of atmospheric CO2 level. I didn't bother to do it exactly, because for back-of-envelope purposes there's no need for extreme precision.

We just need a few data points, and we can interpolate between them. Since we have
six decades of Mauna Loa CO2 measurement data, let's use six decadal averages: 1958-1968, 1968-1978, 1978-1988, 1988-1998, 1998-2008, 2008-2018.

I try very hard to avoid biasing my results according to my expectations, but it's just about humanly impossible. The only way to avoid it is to not have any expectations! So, I purposefully did not examine Roy's spreadsheet, before doing my similar (but cruder!) exercise. So I did not (yet) make use of his nice table of carbon emission levels. What I did was a lot rougher. Here's what I did.

I started with the assumption that we can approximate the historic CO2 emission rates as twice the rate of CO2 level increase, and thus that we can approximate the CO2 removal rate as equal to the rate of CO2 level increase. ("Version 2" will refine this by incorporating the actual emission data, copied from Roy's spreadsheet.)
http://sealevel.info/CO2_Residence_Times/simple_spreadsheet_relating_CO2_removal_rates_to_CO2_levels_v1.html  <== exported as a web page

 Decade Start level End level Avg level E: increase/yr F: Avg level-280 Ratio F/E 1958-1968 315.34 323.04 319.190 0.770 39.190 50.90 1968-1978 323.04 335.40 329.220 1.236 49.220 39.82 1978-1988 335.40 351.57 343.485 1.617 63.485 39.26 1988-1998 351.57 366.70 359.135 1.513 79.135 52.30 1998-2008 366.70 385.60 376.150 1.890 96.150 50.87 2008-2018 385.60 408.40 397.000 2.280 117.000 51.32 Averages: 1.551 74.030 47.73

column D has the average CO2 level over the decade,
column E has the average annual CO2 level increase during that decade,
column F has the average CO2 level minus 280 ppmv (i.e., the "CO2 elevation" above preindustrial).

The last column is the ratio of the "CO2 elevation" (column F) to the rate of increase (column E).

Note that the last column doesn't vary much.

Using the crude approximation that the rate of increase has, historically, been very roughly equal to the removal rate, I wrote a little Perl program, which estimates the removal rate as a function of the CO2 level, by interpolating between those six data points:

http://sealevel.info/CO2_Residence_Times/calc_est_co2_removal_rates.pl.txt

`#!/usr/bin/perl`
` `
`# linear interpolation:`
`# takes five inputs, and produces one output. The five inputs are:`
`# \$x is the main input, which is expected to be between \$x1 and \$x2`
`# \$x1 is the lower bound of the input range`
`# \$y1 is the return value if \$x = \$x1`
`# \$x2 is the upper bound of the input range`
`# \$y2 is the return value if \$x = \$x2`
`sub interpolate {`
`  local(\$x,\$x1,\$y1,\$x2,\$y2) = @_;`
`  local(\$xrange) = \$x2 - \$x1;`
`  local(\$yrange) = \$y2 - \$y1;`
`  local(\$result) = ((\$x - \$x1) / \$xrange) * \$yrange + \$y1;`
`  return \$result;`
`}`
` `
` `
`# estimate CO2 removal rate in ppmv/yr as a function of CO2 level in ppmv`
`sub removal_rate {`
`  local(\$co2level) = shift;`
`  local(\$removalrate) = 0;`
`  local(\$co2elevation) = \$co2level - 280;`
`  local(\$ratio) = 47.73;`
`  if (\$co2level <= 280) {`
`    \$removalrate = 0;`
`  } elsif (\$co2level < 319.19) {`
`    \$removalrate = \$co2elevation / 50.90;`
`  } elsif (\$co2level <= 329.220)  {`
`    \$removalrate = &interpolate( \$co2level, 319.19, 0.770, 329.20, 1.236 );`
`  } elsif (\$co2level <= 343.485) {`
`    \$removalrate = &interpolate( \$co2level, 329.20, 1.236, 343.485, 1.617 );`
`  } elsif (\$co2level <= 359.135) {`
`    \$removalrate = &interpolate( \$co2level, 343.485, 1.617, 359.135, 1.513 );`
`  } elsif (\$co2level <= 376.150) {`
`    \$removalrate = &interpolate( \$co2level, 359.135, 1.513, 376.150, 1.890 );`
`  } elsif (\$co2level <= 397.000) {`
`    \$removalrate = &interpolate( \$co2level, 376.150, 1.890, 397.000, 2.280 );`
`  } else {  # > 398`
`    \$removalrate = \$co2elevation / 51.32;`
`  }`
`  return \$removalrate;`
`}`
` `
`# SIMULATE DECLINE IN CO2 LEVEL IF EMISSIONS SUDDENLY WENT TO ZERO`
`\$co2level = 410;`
`\$year = 2019;`
`while (\$co2level > 300) {`
`   printf("\$year %5.1f\n", \$co2level);`
`   \$year += 1;`
`   \$removalrate = &removal_rate( \$co2level );`
`   \$co2level -= \$removalrate;`
`}`

I then ran a simulation: starting at year 2019, with CO2 at 410 ppmv, of what would happen to CO2 levels if anthropogenic CO2 emissions suddenly ceased; this is the output:

`2019 410.0`
`2020 407.5`
`2021 405.0`
`2022 402.5`
`2023 400.2`
`2024 397.8`
`2025 395.5`
`2026 393.3`
`2027 391.1`
`2028 388.9`
`2029 386.8`
`2030 384.7`
`2031 382.6`
`2032 380.6`
`2033 378.6`
`2034 376.7`
`2035 374.8`
`2036 372.9`
`2037 371.1`
`2038 369.3`
`2039 367.6`
`2040 365.9`
`2041 364.2`
`2042 362.6`
`2043 361.0`
`2044 359.5`
`2045 358.0`
`2046 356.4`
`2047 354.9`
`2048 353.4`
`2049 351.8`
`2050 350.2`
`2051 348.7`
`2052 347.1`
`2053 345.5`
`2054 343.9`
`2055 342.3`
`2056 340.7`
`2057 339.2`
`2058 337.7`
`2059 336.2`
`2060 334.8`
`2061 333.4`
`2062 332.0`
`2063 330.7`
`2064 329.4`
`2065 328.2`
`2066 327.0`
`2067 325.9`
`2068 324.8`
`2069 323.8`
`2070 322.8  <== two-thirds of the anthropogenic CO2 is gone in 51 years`
`2071 321.8`
`2072 321.0`
`2073 320.1`
`2074 319.3`
`2075 318.5`
`2076 317.8`
`2077 317.0`
`2078 316.3`
`2079 315.6`
`2080 314.9`
`2081 314.2`
`2082 313.5`
`2083 312.9`
`2084 312.2`
`2085 311.6`
`2086 311.0`
`2087 310.4`
`2088 309.8`
`2089 309.2`
`2090 308.6`
`2091 308.0`
`2092 307.5`
`2093 306.9`
`2094 306.4`
`2095 305.9`
`2096 305.4`
`2097 304.9`
`2098 304.4`
`2099 303.9`
`2100 303.5`
`2101 303.0`
`2102 302.5`
`2103 302.1`
`2104 301.7`
`2105 301.2`
`2106 300.8`
`2107 300.4`
```2108 300.0

```

Note the result: 2/3 of the anthropogenic CO2 gone from the atmosphere in 51 years (very similar to Dick Lindzen's "50 years" and not far from Roy Spencer's "70 years").

It's my bedtime, now, but when I refine this by incorporating real CO2 emission numbers, and from them the more precisely calculated removal rate numbers, I'll let y'all know.

The files (including a Windows command-line Perl executable, and a "run_simulation.bat" file to run the simulation at a Windows command prompt), are here:
https://sealevel.info/CO2_Residence_Times/allfiles.zip

Warmest regards,
Dave