Estimating Cloud Feedback From Observations

Guest Post by Willis Eschenbach

I had an idea a couple days ago about how to estimate cloud feedback from observations, and it appears to have panned out well. You tell me.

Figure 1. Month-to-month change in 5° gridcell actual temperature ∆T, versus gridcell change in net cloud forcing ∆F. Curved green lines are for illustration only, to highlight how many of the datapoints fall outside those lines in each of the four quadrants. Results have been area-weighted, giving a slightly smaller slope (-1.7 W/m2 per degree) than initally reported (- 1.9 W/m2 per degree). Data colors indicate the location of the gridcell, with the Northern hemisphere starting with blue at the far north, slowly changing to yellow and to red at the equator. From there, purple is southern tropic, through pink to green for the farthest south latitudes. Updated.

Cloud feedback is what effect the changing clouds have if the earth warms. Will the clouds act to increase a warming, or to diminish it? The actual value of the cloud feedback is one of the big unknowns in our current understanding of the climate.

The climate models used by the IPCC all say that as the earth warms, the clouds will act to increase that warming. They all have a strong positive cloud feedback. My thunderstorm and cloud thermostat hypothesis, on the other hand, requires that the cloud feedback be strongly negative, that clouds act to decrease the warming.

My idea involved the use of what are called “gridded monthly climatologies”. A monthly climatology is a long-term month-by-month average of some climate variable of interest. “Gridded” means that the values are given for each, say, 5° latitude by 5° longitude gridbox on the surface of the planet.

My thought was to obtain the monthly actual temperature gridded climatology. This is the real temperature “T” as measured, not the anomaly. In addition, I would need the gridded net cloud forcing “F” from the ERBE (Earth Radiation Budget Experiment) data. Net cloud forcing is the balance of how much solar energy the clouds reflect away from the earth on the one hand, and on the other, how much the same clouds increase the “greenhouse” downwelling longwave radiation (DLR). Net cloud forcing varies depending on the type, thickness, altitude, droplet size, and color of a given cloud. Both positive and negative cloud forcing are common. By convention, positive net cloud forcing (e.g. winter night-time cloud) is warming, while a negative net cloud forcing (e.g. thick afternoon cumulus) is cooling.

Remembering that a cloud feedback is a change in net forcing in reference to a change in temperature, I took the month to month differences of each of the two climatologies . I did this in a circular fashion, each month minus the previous month, starting from February minus January, around to January minus December. That gave me the change in temperature (∆T) and the change in forcing (∆F) for each of the twelve months.

The ERBE satellite only covers between the Arctic and Antarctic circles, the poles aren’t covered. So I trimmed the polar regions from the HadCRUT absolute temperature to match. Then, the HadCRUT3 absolute temperature data are on a 5° grid size, while the ERBE satellite data is on a 2.5° grid. Since the grid midpoints coincided, I was able to use simple averaging to “downsample” the satellite cloud forcing data to correspond with the larger temperature gridcell size.

The results of the investigation are shown in Figure 1. The globally averaged cloud feedback is on the order of -1.9 watts per square metre for every one degree of monthly warming.

This result, if confirmed, strongly supports my hypothesis that the clouds act as a very powerful brake on any warming. At typical Earth surface temperatures, the Stefan-Boltzmann equation gives about five watts per square metre (W/m2) of additional radiation  per degree. That is to say, to warm the surface by 1°C, the amount of incoming energy has to increase by about 5 W/m2. This, of course, means that if there were no feedbacks, a doubling of CO2 (+3.7 watts per square metre per the IPCC) would only cause about 3.7/5 or about three-quarters of a degree of warming. The models jack this three-quarters of a degree up to three degrees of warming by, among things, their large positive cloud feedback.

But this analysis says that the cloud feedback is strongly negative, not positive at all. As a result, a doubling of CO2 could easily cause less than eight-tenths of a degree of warming. If the cloud negative feedback is actually -1.9 W/m2 per degree as shown above, and it were the only feedback, a doubling of CO2 would only cause half a degree of warming …

If confirmed, I think that this is a significant result, so I put it up here for people to check my math and my logic. I’ve fooled myself with simple mistakes before …

Code for the procedures and data is appended below.

All the best,

w.

PS – please, no claims that the “greenhouse effect” is a myth or that DLR doesn’t exist or that DLR can’t transfer energy to the ocean. I’m beyond that, whether you are or not, and more to the point, there are plenty of other places to have that debate. This is a scientific thread with a specific subject, and if necessary I may snip such claims (and responses) to avoid thread drift. If so, I will indicate such excisions.

NOTE: The slope of the trend line in Figure 1 is now properly area-adjusted, making the following section andFigure 2 superfluous. .[UPDATE] I’ve gone back and forth about whether to area-average. The problem is that the gridcells are not the same size everywhere. The usual way to area-average is to multiply the data by the cosine of the mid latitude, so I have done that.

Figure 2 shows the area-adjusted version. Still a significant negative feedback from clouds, but smaller than in the non-adjusted version.

FIGURE 2 REMOVED

Figure 2. Area adjusted cloud feedback. Note the lower estimate of the cloud feedback, a bit smaller than my initial estimate. Color of the dots indicates latitude, ranging from blue at the furthest north through cyan to the equator, then in the southern hemisphere through yellow to red at the furthest south.

Note that we still see the same form in the four quadrants. It is still rare for a large temperature drop to be associated with anything but a rise in the cloud forcing.

I’m still not completely happy with this method of area-adjusting, because it adjusts the data itself. But I think it’s better than no area-adjusting at all. The best way would be to convert both of the datasets to equal-area cells … but that’s a large undertaking and I think the final result won’t be much different from this one.

[UPDATE] Here’s the two hemispheres:

Figure 3. Northern Hemisphere Cloud Feedback. Color of the dots indicates latitude, ranging from blue at the furthest north through yellow in the subtropics, to red at the equator.

Figure 4. Southern Hemisphere Cloud Feedback. Color of the dots indicates latitude, ranging from green at the furthest south through pink in the subtropics, to purple at the equator.

[UPDATE] To better inform the discussion, I have made up the following maps of the variables of interest, month by month. These are the monthly absolute temperatures T, the monthly net cloud forcings F, and the month by month changes (deltas) of those variables, ∆T and ∆F.

Figure 5. Absolute temperature (T)

Figure 6. Net Cloud Forcing (F)

Figure 7. Change in absolute temperature (∆T)

Figure 8. Change in net cloud forcing (∆F)

APPENDIX: R code to read and process the data (not including the updated charts). I've tried to keep wordpress from munging the code, but it likes to either put in or not put in carriage returns.

===================================

# data is read into a three dimentional array [longitude, latitude, month]

diffannual=function(x){# returns month(t+1) minus month(t)

x[,,c(2:12,1)]-x

}

# rotates the circle of months by n

rotannual=function(x,n){

if (n!=0) {

if (n>=0){

x[,,c((n+1):12,1:n)]

} else {

x[,,c((13+n):12,1:(12+n))]

}

} else

x

}

#_averages_2.5°_gridcells_into_5°_gridcells,_for_[long,lat,mon]_array

downsample=function(x){

dx=dim(x)

if (length(dx)==3){

reply=array(NA,c(dx[1]/2,dx[2]/2,dx[3]))

for (i in 1:dx[3]){

reply[,,i]=downsample2d(x[,,i])

}

} else {

reply=downsample2d(x)

}

reply

}

# averages 2.5° gridcells into 5° gridcells for [long, lat] 2D array

downsample2d=function(x){

width=ncol(x)

height=nrow(x)

smallforcing=matrix(NA,height/2,width/2)

for (i in seq(1,height-1,2)){

for (j in seq(1,width-1,2)){

smallforcing[(i+1)/2,(j+1)/2]=mean(c(x[i,j],x[i+1,j],x[i,j+1],x[i+1,j+1]),na.rm=T)

}

}

as.matrix(smallforcing)

}

# EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE End Functions

# LLLLLLLLLLLLLLLLLLLLLLLLLL LOAD DATA ----- gets the files from the web

# HadCRUT absolute temperature data

absurl="http://www.cru.uea.ac.uk/cru/data/temperature/absolute.nc"

download.file(absurl,"HadCRUT absolute.nc")

absnc=open.ncdf("HadCRUT absolute.nc")

download.file("http://badc.nerc.ac.uk/browse/badc/CDs/erbe/erbedata/erbs/mean5jan/data.txt","albedojan.txt")

download.file("http://badc.nerc.ac.uk/browse/badc/CDs/erbe/erbedata/erbs/mean5feb/data.txt","albedofeb.txt")

download.file("http://badc.nerc.ac.uk/browse/badc/CDs/erbe/erbedata/erbs/mean5mar/data.txt","albedomar.txt")

download.file("http://badc.nerc.ac.uk/browse/badc/CDs/erbe/erbedata/erbs/mean5apr/data.txt","albedoapr.txt")

download.file("http://badc.nerc.ac.uk/browse/badc/CDs/erbe/erbedata/erbs/mean5may/data.txt","albedomay.txt")

download.file("http://badc.nerc.ac.uk/browse/badc/CDs/erbe/erbedata/erbs/mean5jun/data.txt","albedojun.txt")

download.file("http://badc.nerc.ac.uk/browse/badc/CDs/erbe/erbedata/erbs/mean5jul/data.txt","albedojul.txt")

download.file("http://badc.nerc.ac.uk/browse/badc/CDs/erbe/erbedata/erbs/mean5aug/data.txt","albedoaug.txt")

download.file("http://badc.nerc.ac.uk/browse/badc/CDs/erbe/erbedata/erbs/mean5sep/data.txt","albedosep.txt")

download.file("http://badc.nerc.ac.uk/browse/badc/CDs/erbe/erbedata/erbs/mean5oct/data.txt","albedooct.txt")

download.file("http://badc.nerc.ac.uk/browse/badc/CDs/erbe/erbedata/erbs/mean5nov/data.txt","albedonov.txt")

download.file("http://badc.nerc.ac.uk/browse/badc/CDs/erbe/erbedata/erbs/mean5dec/data.txt","albedodec.txt")

albnames=c("albedojan.txt","albedofeb.txt","albedomar.txt","albedoapr.txt","albedomay.txt","albedojun.txt","albedojul.txt","albedoaug.txt","albedosep.txt","albedooct.txt","albedonov.txt","albedodec.txt")

# read data into array

forcingblock=array(NA,c(52,144,12))

for (i in 1:12){

erbelist=read.fwf(albnames[i],skip=19,widths=rep(7,13))

erbelist[erbelist==999.99]=NA

erbeout=erbelist[,13][which((erbelist[,1]>-65) & (erbelist[,1]

length(erbeout)

forcingblock[,,i]=matrix(erbeout,52,144,byrow=T)

}

# DOWNSAMPLE FORCING DATA TO MATCH TEMPERATURE DATA,

# and swap lat and long to match HadCRUT data

smallforcing=aperm(downsample(forcingblock),c(2,1,3))

smallforcing[1:72,,]=smallforcing[c(37:72,1:36),,]# adjust start point

# GET ABSOLUTE DATA, TRIM POLAR REGIONS

absblock= get.var.ncdf(absnc,"tem")

smallabs=absblock[,6:31,]

#dim(absblock)

# GET MONTH-TO-MONTH DIFFERENCES

dabs=diffannual(smallabs)

dforcing=diffannual(smallforcing)

dim(dforcing)

#SAVE DATA

save(forcingblock,smallforcing,smallabs,dabs,dforcing,file="erbe_cloud_forcing.tab")

# make cosine weight array

cosarray=array(NA,c(72,26,12))

cosmatrix=matrix(rep(cos(seq(-62.5,62.5,by=5)*2*3.14159/360),72),72,26,byrow=T)

cosmatrix=cosmatrix/mean(cosmatrix[1,])

cosarray[,,1:12]=cosmatrix

cosarray[,,2]

# GET CORRELATION, SLOPE, AND INTERCEPT

#cor(dabs,dforcing,use="pairwise.complete.obs")

module=lm(dforcing~dabs)

m=module$coefficients[2]

b=module$coefficients[1]

#Plot Results

par(mgp=c(2,1,0))

plot(dforcing~dabs,pch=".",main="Cloud Feedback, 65°N to 65°S", col="deepskyblue3",xlab="∆ Temperature (°C)",ylab="∆ Cloud Forcing (W/m2)")

lines(c(m*(-20:15)+b)~c(-20:15),col="blue",lwd=2)

textcolor="lightgoldenrod4"

text(-20,-60,"N = 18,444",adj=c(0,0),col= textcolor)

text(-20,-70,paste("Slope =",round(m,1),"W/m2 per degree C of warming"),adj=c(0,0),col= textcolor)

text(-20,-80,paste("p = ","2E-16"),adj=c(0,0),col= textcolor)

0 0 votes
Article Rating

Discover more from Watts Up With That?

Subscribe to get the latest posts sent to your email.

178 Comments
Inline Feedbacks
View all comments
Steve Garcia
October 8, 2011 8:52 pm

I have the notion that the feedback varies with latitude, as the cloud types vary somewhat with latitude. I agree with Doug in Seattle, where he says (October 8, 2011 at 4:41 pm):

Looks like a random line drawn through an amorphous cloud of points.
This is the same problem I have Dressler, Lindzen & Choi, and Spenser & Braswell. There might be something there, but it sure is well hidden, if it is there.

That is the first thing I saw, how much it looked like Dressler. And the r^2 value is awfully low.
But I am not so sure that the amorphous cloud will exist if is broken down by latitude ranges. I am thinking sorting it out will show more relationship with latitude as a factor.

October 8, 2011 8:55 pm

mt says:
October 8, 2011 at 8:22 pm
Just to be certain, this result is a comparison of the HadCrut 1961-90 average monthly temperatures against the 1985-89 monthly average cloud forcing?
##
no he pulled hadcru absolute
absurl=”http://www.cru.uea.ac.uk/cru/data/temperature/absolute.nc”
download.file(absurl,”HadCRUT absolute.nc”)
absnc=open.ncdf(“HadCRUT absolute.nc”)
But its not clear where he aligns the time.

Neo
October 8, 2011 9:03 pm

With all due respect, the plot looks like a climate scientists idea of a Rorschach test

Scott
October 8, 2011 9:36 pm

Nice work Willis,
I hope this isnt a silly question, however given the work on cosmic ray influence on cloud formation is there any relationship that can be overlaid here?

Geoff Sherrington
October 8, 2011 9:36 pm

Willis, you say “Easy for you to say … seriously, I need two things for that, a land/water mask, and 28 hours in a day …” Agreed.
FWIW, my first reaction was to try to break down the main figure to simpler parts. We surmise that clouds in daytime work differently to clouds at night. So separate them out. Then, the similar question of over land/over water. Then, the special case of ice/snow and albedo competitions*.
Then, it starts to get murky as you think further. Daytime where, night time where? Clear enough at the Equator, rather different at a Pole. Different night lengths allow different times for temperatures to change. If they can’t equilibrate overnight, is there good math in taking a grid cell average over a month? For this example, is a weighted distance infill of grid cells appropriate, especially id a discontinuity affects cloud behaviour?
You mind is sharper than mine, so at about this point of thought I’d give up and go watch South Park, realising that the huge effort is premised on whether feedback is + or -, which is important for some, but which becomes less sexy with each new approach. This is not a denigration, it is a praise for your heroism, for your patience exceeding mine.
*“I wonder if the snow loves the trees and fields, that it kisses them so gently? And then it covers them up snug, you know, with a white quilt; and perhaps it says “Go to sleep, darlings, till the summer comes again.”
― Lewis Carroll, Alice’s Adventures in Wonderland & Through the Looking-Glass

Paul Westhaver
October 8, 2011 10:18 pm

Willis…. In my experience, outliers precisely measured, contain a great deal of information.
Normalize for wind speed of pressure?

October 8, 2011 10:26 pm

Hmm, Willis, You might want to consider other observation datasets. Hadcru has a 1 degree, so you could get a 3 degree from that and resample the 2.5 up to three. use the raster package to resample..
I could do a 2.5 grid for you using GhcnV3, but I’m in the middle of a long data crunching run, so it would be a couple 3 or 4 days.. I’m verified against hadcru… Giss has an equal area…..

October 8, 2011 10:32 pm

Willis if you need a land water mask just ask.
In my package RghcnV3
readMaskDeg1()
I’ve included a 1 degree land ocean mask in the external directory of the package sources.
you can resize using the aggregrate() function.

October 8, 2011 10:33 pm

why not just model in an iterative fashion using your theory until it matches the observed heat density?

October 8, 2011 10:51 pm

Willis,
I tried running your R code, so first some R stuff:
1. The package “ncdf” is used, so somewhere it needs to say
require(“ncdf”)
and of course you have to have that installed.
2. In the download from absurl, I found it necessary to add mode=”wb”
3. The line starting erbeout=erbelist has been mangled, and I haven’t worked out what it should say. It looks like a problem with a < sign.
However, I’ve looked at the data, and it seems, re mt, that you are comparing just the monthly averages of the 1961-1990 temp with the 1985-9 ave of albedo. So it’s just the seasonal change averaged over those years, over the many grid cells.
I can’t see how you can interpret that averaged seasonal change as a feedback, or indeed attach any useful causality. The temp rise is of course mainly from the sun angle, and while that rise could then have an effect on clouds, there is obviously much else that changes seasonally – for example, monsoons, movement of the westerly airstreams. And your analysis heavily emphasises the localisation – temp in a gridcell vs could forcing in a gridcell, whereas cloud systems are likely responding to temperatures elsewhere as well – they do blow around.

RandomReal[]
October 8, 2011 10:52 pm

Willis,
I watched about the first third of a talk by Samuel Stechmann this morning, “Multiscale Models for Atmospheric Convection and Waves”. I’ll get to the rest tomorrow morning (much better than watching the news). Anyway, the lecture covered the MJO and gravity waves (I did not know such things existed). One of the motivations of the work was that the GCMs do a poor job at emulating these oscillations. Your post stirred a thought related to these oscillations, specifically the MJO. By their very nature, such oscillations have to be self propagating or there would be no oscillation.
I have not dug deeply into either Spencer & Braswell or Lindzen & Choi, but a quick reading gives me the impression that their models, as well as your analysis here deal with feedback over time but the positions are stationary. Perhaps, the correlations would be tighter if the moving waves set the reference frame, rather than using geographically fixed positions. It would make the math a little hairy. Just a thought.
One of the problems with the GCMs is that many of the processes that influence the heat flux is that they occur on scales much smaller than the grid size in the simulation. The only way to deal with this is to parameteizer the process so that the output is as close a possible to observations averaged over the grid cell. Since thunderstorms and their influence on atmospheric processes necessary for wave propagation are clearly sub-grid phenomena, I am not surprised that GCMs perform poorly in capturing the MJO and other wave phenomena.
http://online.kitp.ucsb.edu/online/turbulence11/stechmann/
The following talk by Joao Teixeira from CalTech discusses low level clouds in the northeastern Pacific and how parameters might be set. It’s yet another significant problem for the GCMs, because if the proper amount of clouds is improperly emulated, then the improper amount of heat enters or leaves the ocean with significant affects on ocean and air temperatures. These errors are then carried forward throughout the simulation. Mmmm.
Turbulence, Clouds and Climate Models http://online.kitp.ucsb.edu/online/turbulence11/teixeira/
Home page of KITP: http://www.kitp.ucsb.edu/

George E. Smith;
October 8, 2011 10:53 pm

Well I’ll leave this one to all the PhD Physicists out there. I think this is just about the first “Paper” posted here at WUWT, for which I can say enequivocally, that I have no understanding of anything that is presented.
There once was a time, when I could pick up an issue of “Reviews of Modern Physics”, and find papers in which I could not understand any word longer than four letters.
Well here I can understand most; but not all of the words; but that is the sum total of my comprehension. It’s totally bamboozling to me.

Doug in Seattle
October 8, 2011 11:11 pm

Now what could be causing that vertical spread of southern hemisphere data? That is really interesting. Thanks for the color coding. Now what happens when each hemisphere is looked at separately?

Pingo
October 8, 2011 11:20 pm

Separate by latitude to see differences, then by longitude to see if these differences are ‘robust’..

October 8, 2011 11:40 pm

Willis,
I’m puzzled by your implementation of area weighting. You actually modified the values by the weighting. That is unusual, and if you want to do it that way, you should use sqrt(cosarray). You can do weighting in lm(),
just add ,weights=cosarray (and don’t change dabs etc).

Alan S. Blue
October 8, 2011 11:40 pm

The ground-based temperature measurements are, at best, a proxy measurement of the gridcell’s temperatures. They’re a point measurement of a distributed variable. The error bars are similarly the instrumental variance – not the actual estimate of deviation from the gridcell’s “true” temperature, which is necessarily larger.
Thus, this exact same experiment would be far more interesting if applied to the satellite data instead.

Eyal Porat
October 9, 2011 1:13 am

Willis,
As I am not mathematician, or a scientist at that, I have only my instinct and common sense to go with.
I have this nagging question concerning the underlying of the whole idea of cloud feedback:
You state that clouds have a positive feedback at nights. My common sense tells me clouds only mitigate the cooling should there be no clouds. To say clouds have positive feedback would say the atmosphere actually gets warmer at night. I was taught it retains the warming by “blanketing” the surface.
What am I seeing wrong here?

October 9, 2011 1:28 am

Giss in absolute? hmm, i dont think that’s available