GREB: Multilevel CO2 Doubling Experiment

Now that we’ve got a handle on the input and output files, let’s take the GREB model out for a test drive.
The CO2 subroutine is easy to find; it’s called co2_level. There is also a CO2 variable defined in the initialization portion of the program called CO2_ctrl which is set to 240 for the control run. Do not confuse this “control” variable with the CO2 level as it is set in this subroutine.
!+++++++++++++++++++++++++++++++++++++++
subroutine co2_level(it, year, CO2)
!+++++++++++++++++++++++++++++++++++++++
USE mo_numerics, ONLY: ndays_yr, ndt_days
USE mo_physics, ONLY: log_exp
CO2 = 680.
if( log_exp .eq. 12 .or. log_exp .eq. 13 ) then
CO2_1950=310.; CO2_2000=370.; CO2_2050=520.
if (year <= 2000.) CO2=CO2_1950 + 60./50.*(year-1950.)
if (year > 2000. .and. year <= 2050.) CO2=CO2_2000 + 150./50.*(year-2000.)
if (year > 2050. .and. year <= 2100.) CO2=CO2_2050 + 180./50.*(year-2050.)
end if
end subroutine co2_level
As you can see, out of the box, the CO2 level is set to a static value for the duration of the scenario. This scenario is set for a CO2 level two times that used in the control run. We can easily reset it for a range of values, recompile, and process the output. And so I did for the following values: 85, 170, 340, 680, 1360, 2720. The results are shown in the following table and chart. ‘dT’ is calcuated as the difference in the equilbrium temp (60 years) from the next lower level of CO2. The results are charted above and in the table below.
| CO2 PPM | Tsurf K | dT K |
| 85 | 273.6 | NA |
| 170 | 275.6 | 2.0 |
| 340 | 277.9 | 2.3 |
| 680 | 280.5 | 2.6 |
| 1360 | 283.3 | 2.8 |
| 2720 | 286.1 | 2.8 |
A couple of quick observations on the above chart and table. As you can see, the dT increases slightly with each doubling. There is a ‘jerk’ in the first year as the surface temperature jumps in response to the non-equilibrium CO2 level before continuing smoothly. The model has no “weather”; it evolves without noise. It reaches equilibrium relatively quickly.