Answer all questions below, using the example code as a guide.
Just like last time, you will submit your work as a single notebook file. Save your notebook as
[your last name]_Assignment04.ipynb
Again, try to make sure your notebook runs from start to finish without error. Follow the same instructions as in Assignment 3.
Submit your complete notebook file by email to brose@albany.edu
In [ ]:
# The usual import statements to get us started
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import climlab
In [ ]:
lat = np.arange(-85., 90., 10.)
print lat
Now suppose that we have an array of temperature data on this grid. Each data point represents the zonal average temperature, that is, the average temperature across all longitudes at that particular latitude.
Here we create and plot some "fake" temperature data with the same array size as lat
. The formula used here to create the data is just for illustration and is not important.
In [ ]:
x = np.sin(np.deg2rad(lat))
T = 288. + 10.*x - 15*(3*x**2-1)
print 'The array T is ', T
plt.plot(lat, T)
plt.xlim(-90,90)
plt.xticks([-90,-60,-30,0,30,60,90])
plt.grid()
plt.title('T versus latitude')
We want to calculate the global average temperature.
(a) We might naively think that we can just take a simple average of the numbers in the array called T
. Write Python code to take this average in two different ways:
for
loop to step through all the numbers in the arraynp.mean()
shortcutVerify that your two different calculations give the same result.
(b) Because T
represents zonal average temperature, unfortunately taking a simple average of the array T
as you just did does NOT give a meaningful global average temperature. Explain why, thinking about the spherical shape of the Earth.
(c) FOR BONUS POINTS: provide a formula that DOES give a meaningful global average temperature, and write Python code to calculate it.
Using climlab
, set up a 1D energy balance model with annual mean insolation and default parameters (no albedo feedback).
a) Integrate to equilibrium. Verify that the global mean planetary energy balance is closed.
b) Repeat part (a) after decreasing $A$ (the constant in the OLR parameterization) by 4 W m$^{-2}$ (a global warming experiment). What is the radiative forcing in this experiment?
c) Make two nicely labeled graphs, each with 2 curves (including legends):
d) Did the heat transport change? Why or why not?
e) Calculate the change $\Delta T$ in global mean temperature.
f) Based on this temperature change, and refering back to your notes from earlier in the semester, calculate the feedback and gain for this model.
g) What parameter do you think you would have to change in the model to get a different feedback? What physical process do you think this might represent?
Here is a little bit of code to get you started:
In [ ]:
# Create the EBM with all default parameters, including annual mean insolation
model1 = climlab.EBM_annual()
print model1
Repeat Question 1, this time using a model with an interactive snow/ice line. Follow this example code to set up the model with appropriate albedo values:
(a) - (f): same as Question 1
(g) Compare to your results from Question 1 and comment on the effects of the interactive ice line on:
In [ ]:
# By providing explicit albedo parameters including ai (the albedo of cold icy regions),
# we get a model with an interactive ice line
ice_model = climlab.EBM_annual(a0=0.3, a2=0.078, ai=0.62, Tf=-10.)
print ice_model
These exercises are largely inspired by Table 3.3 of the Primer. Use our climlab
version of the diffusive EBM to answer these questions:
(a) Using the parameter values from Question 3 with interactive ice edge, determine what decrease of the solar constant from its default (present-day) value of $S_0 = 1365.2$ W m$^{-2}$ is required just to glaciate the Earth completely (ice edge at 0ºN).
This will require some trial and error!
In [ ]:
# Here is an example of changing the solar constant in an existing model:
print 'The current solar constant is ', ice_model.subprocess.insolation.S0, 'W/m2.'
# Now change it
ice_model.subprocess.insolation.S0 = 1350.
print 'The new solar constant is ', ice_model.subprocess.insolation.S0, 'W/m2.'
# You can also pass S0 as an input argument when creating a new model:
newmodel = climlab.EBM_annual(S0=1350., a0=0.3, a2=0.078, ai=0.62, Tf=-10.)
print 'The solar constant in newmodel is ', newmodel.subprocess.insolation.S0, 'W/m2.'
(b) Repeat part (a) but with some different parameter values. Parameters include $A$, $B$, $D$, albedo values, and the ice threshold temperature $T_f$. Each one of these can be specified as input arguments when you create a new model, as illustrated above.
Provide a very brief justification for your parameter choices (e.g. what are you trying to investigate?). How does the change in parameters affect your answer about the minimum solar constant decrease necessary to freeze over the model Earth?
Once the Earth is just fully glaciated, begin to increase the solar constant. Determine how much of an increase in the solar constant is required before the ice retreats from the equator. How do you interpret this value?
Allow the climate to reach equilibrium after the ice retreats. What does the Earth look like now in your model? Is it much colder, much warmer, or about the same as our present-day climate?
For this question you can use whatever parameter values you like -- those from Question 3 or Question 4, or something else. Just make sure that you state clearly what are doing.
In [ ]: