In class we analyzed the grey gas "leaky greenhouse" model with 2 atmospheric layers and 1 surface layer and a constant atmospheric absorptivity / emissivity \(\epsilon\). In particular we worked out the following results:
\(OLR = (1-\epsilon)^2 \sigma T_s^4 + \epsilon (1-\epsilon) \sigma T_1^4 + \epsilon \sigma T_2^4\)
where the three terms represent contributions to the outgoing longwave radiation from (respectively) the surface, the lower atmospheric layer, and the upper atmospheric layer.
and the radiative equilibrium solution for this model is
\(T_s = \bigg(\frac{2+\epsilon}{2-\epsilon}\bigg)^\frac{1}{4} T_e\)
\(T_1 = \bigg(\frac{1+\epsilon}{2-\epsilon}\bigg)^\frac{1}{4} T_e\)
\(T_2 = \bigg(\frac{1}{2-\epsilon}\bigg)^\frac{1}{4} T_e\)
with \(T_e\) the planetary emission temperature.
Suppose the column is initially in radiative equilibrium with \(\epsilon = 0.48\). We then abruptly add extra greenhouse gases to the atmosphere, causing a 10% increase in \(\epsilon\). Calculate using pencil and paper
Show your work throughout (i.e. don't just write down some numbers).
IMPORTANT: Work out your answers analytically, i.e. using pencil and paper! You may wish to verify your answers using ColumnModel.py
with 2 levels, but this is not necessary.
Using a column model object from ColumnModel.py
with a large number of levels in the atmosphere (your choice), make a plot showing (on the same graph) the temperature profile as a function of pressure at two different radiative equilibrium states: before and after a 10% increase in eps
(representing an increase in greenhouse gases). Before plotting the temperatures, verify that the column is very close to energy balance in both states.
column
object contains a variable called OLR_sfc
, which keeps track of the contribution to the total OLR from the surface. Using this, repeat the calculation from Question 1 with your numerical column model. Specifically, calculate the changes in the OLR contributions coming from the surface
The column
object also contains an array called OLR_atm
which (you guessed it!) keeps track of the contributions to the total OLR
from each atmospheric layer. Use this to calculate the changes in the atmospheric contributions to the total OLR, just like you did above. But this time, present your results as a graph of OLR changes versus pressure (plot both curves on the same figure).
Verify that your answers from parts 2 and 3 are qualitatively consistent with what you found in Question 1 (the number will not be identical). To compare the atmospheric contributions to what you found in the 2-layer atmosphere, sum up all the elements of OLR_atm
above and below 500 hpa.
Include all your code.
column
object are stored as ordered arrays, where each element represents the value at one pressure level. The pressure levels themselves are stored in the element .p
(in units of mb or hPa).sum()
. You will have to use the array indexing to specify just the parts of the array you want. Here is a commented example:# create an array of 6 random numbers
joe = np.random.random(6)
print joe # the whole array
print joe[0:3] # just the first 3 elements
print joe[3:6] # just the last 3 elements
print joe[3:] # a shortcut that means "start at element [3] and go to the end"
Here is some example code making a nice graph of temperature versus pressure, and adding the surface temperature as a single point.
Note that the column in this example is not at radiative equilibrium!
# Create a column object
import ClimateUtils as clim
import ColumnModel
col1 = ColumnModel.column( params={'num_levels':100} )
# Make the plot
fig = figure( figsize=(10,8) ) # you can fiddle with the figure dimensions
ax = fig.add_subplot(111) # creates an axis object inside the figure window
ax.plot( col1.Tatm, col1.p , 'b-' ) # plots atmospheric temperature
ax.plot( col1.Ts, clim.ps, 'bo', markersize=16 ) # adds a big blue dot for surface temperature
# The color is specified by the letter 'b' above...
# you can also use 'r' (red), 'y' (yellow), 'g' (green), 'k' (black) and others
ax.invert_yaxis() # this line flips the graph upside down so low pressure is above high pressure!
ax.set_xlabel('Temperature (K)', fontsize=16)
ax.set_ylabel('Pressure (hPa)', fontsize=16 )
ax.grid() # this just draws nice grid lines
Repeat all of Question 2, but this time use convective adjustment to put the column into radiative-convective equilibrium rather than simple radiative equilibrium. Use a critical lapse rate of 6 K / km.
Follow the examples on this page: http://www.atmos.albany.edu/facstaff/brose/classes/ENV480_Spring2014/styled-5/code-3/index.html
In particular, to create your column, do something like this:
rce_col = ColumnModel.column( params = {'adj_lapse_rate':6, 'abs_coeff':1.7E-4, 'num_levels':50} )
This will set up a 50-atmospheric-layer column that adjusts to 6 K / km, and also changes the default value of \(\epsilon\) in order to get a surface temperature of 288 K (compensating for the cooling effect of the convection).
Just as in Question 2, you will have to first make sure your column is in energy balance, and then apply a greenhouse gas forcing by increasing eps
by 10%.
Repeat steps 1-3 from Question 2. Include all your code.
Comment on the differences in greenhouse warming between Radiative Equilibrium and Radiative-Convective Equilibrium.