Alternative Carbon Dioxide Calculation

After finding another paper on this subject I thought I would write a quick follow up to the previous post on the simple greenhouse model. This paper used a climate model to calculate the surface temperature of a planet with varying incident illumination and carbon dioxide partial pressure. The resulting graph is probably a simpler way for people to determine the level of the carbon dioxide necessary to meet their desired aim.

Global Average Brightness Temperature for April 2003
Credit: AIRS, the Atmospheric InfraRed Sounder

To keep this brief, the paper is called Carbonate-silicate cycle predictions of Earth-like planetary climates and testing the habitable zone concept and it investigates the connection between weather, carbon dioxide levels and surface temperature. However, most importantly, within the paper they provide an empirical equation for the mean global surface temperature for a given carbon dioxide level and incident solar flux. This equation can be used to produce a simple graph which links those three values. This chart can then be used to define the level of carbon dioxide required to achieve a certain temperature for a planet at a certain distance as desired.

Unfortunately, the equation produced in that paper is not an elegant physical model but is just a brute force numerical fit to the data.  This means it is a little unwieldy and you may wish to avert your eyes…

Horrendous Equation
\[\begin{array}{rcl} T_s(S, pCO_2) & = & 4.809 \\ & – & 222.0X \\ & – & 68.44X^2 \\ & – & 6.737X^3 \\ & – & 0.206X^4 \\ & + & 1414XY \\ & + & 446.4X^2Y \\ & + & 44.41X^3Y \\ & + & 1.364X^4Y \\ & – & 2964XY^2 \\ & – & 978.4X^2Y^2 \\ & – & 98.86X^3Y^2 \\ & – & 3.059X^4Y^2 \\ & + & 2655XY^3 \\ & + & 907.5X^2Y^3 \\ & + & 92.87X^3Y^3 \\ & + & 2.892X^4Y^3 \\ & – & 868.4XY^4 \\ & – & 304.6X^2Y^4 \\ & – & 31.48X^3Y^4 \\ & – & 0.985X^4Y^4 \\ & + & 1045Y \\ & – & 1496Y^2 \\ & + & 1064Y^3 \\ & – & 281.1Y^4\end{array}\]

\(X = \ln(pCO_2)\), \(pCO_2\) is the partial pressure of carbon dioxide in bar and \(Y\) is the incident stellar flux relative to that received by Earth (i.e. divided by the solar constant). Also, it is important to note that this relationship is only valid for planets orbiting within the habitable zone of sun-like stars 

Now, this equation is actually more than a little unwieldy. If you know the carbon dioxide level and the incident flux then you can calculate the surface temperature. You probably don’t want to do that by hand though! However, if you want to calculate what level of carbon dioxide is needed to achieve a particular temperature, well, that’s rather more difficult.

Conveniently, I have produced a graph that shows the constant temperature curves for a range of surface temperatures. Using this you can define the incident stellar flux (or the distance around the sun-like star) and the temperature you want your planet to be then just look up the approximate carbon dioxide partial pressure.

Constant temperature curves

Using this chart is somewhat easier than the method described in the previous post and it is probably sufficiently accurate for most world building purposes as it will allow a ball park estimate of the carbon dioxide level to achieve a desired surface temperature for a given stellar flux. This is much quicker and perfectly adequate for world building. It is however instructive to delve into the details discussed in the previous post if you are not afraid of the equations.

After those two equation heavy posts I will try to write some softer articles next to provide some relief. I am still unsure where the best balance is for people reading this blog, so please do let me know whether the equations are helpful or just too much.

Be first to read the blog

Enter your email address to be notified of new blog posts and keep up with Exocosm news.



  • I see my own program was inaccurate for low stellar flux. I took the equation here on wiki:
    Where the forcing = 5.35 * natural log of (C/Co).

    After setting the base CO2/H2O warming level to produce Earth-like average temperature addition to the equilibrium temperature when the solar flux = 1, I then reversed the above forcing equation and used a climate sensitivity factor of 0.8 to find the required CO2 level for different solar flux levels.

    There is a base level of warming of 34 degrees for CO2 = 0.4 millibar. For solar flux = 0.5, and bond albedo = 0.3, I need to add 25.076 extra degrees to reach 0 degrees C, and this requires a total partial pressure of CO2 of 140.132 millibar, inclusive of the original 0.4 millibar. When I look at your chart I see that for solar flux = 0.5, the temperature is above 0 degrees when the CO2 partial pressure is 1 bar/1000 millibar, so unfortunately my attempt at modelling it was wrong by an order of magnitude!

    • I have also tried to come up with simple models before and invariably they are inaccurate in some way. It turns out climate science is not simple! I suspect that some of the equations you can find only apply to small perturbations from existing conditions. The chart shown above from this paper didn’t use that technique so it is probably more accurate. I can’t confirm that though!

      While it is interesting to try and derive things from scratch (i.e. the previous blog post) I suspect that for worldbuilding purposes a simple lookup chart is by far the best option. Just don’t look at the hidden “Horrendous Equation” to see what lies underneath…

      • I was too curious, so I put the horrendous equation into a Python code so I’d only need to type it once, and I was able to recover the correct temperature (289K/16C) for solar flux = 1, and pCO2 = 0.000288 bar (the pre-industrial level). This suggests it was implemented correctly.

        However, I noticed two things:
        -CO2 in the paper you link is listed as the natural logarithm, but then in Fig.4 it is shown as log10(pCO2). I recover the correct temperature for Earth CO2 and flux at log10, but not if I use log to the base e.
        -In your graph, for Earth flux = 1, temperature is over 70 degrees celsius when partial pressure is above 1 bar. In my code, even if I put CO2 all the way to 10 bar (which is the limit of the model) I retrieve only 335K/62C. This suggests I implemented it wrongly. The runaway temperature in the paper is 355K/81C.

        • Doing the maths in base e is more natural, hence the use of ln in the equation. However, when you plot the output it is sensible to use a log scale which is much easier to read with base 10. Perhaps I should add a note to explain that because, as you point out, it can cause confusion.

          Also, at some point I might share on Github the Python code I use to produce the diagrams. I’d feel obliged to make it neater and more user friendly before I do that though.