<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Biospherica</title>
	<atom:link href="http://joewheatley.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://joewheatley.net</link>
	<description>Earth Vegetation</description>
	<lastBuildDate>Thu, 29 Jul 2010 15:16:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Survey</title>
		<link>http://joewheatley.net/survey/</link>
		<comments>http://joewheatley.net/survey/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 16:37:22 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://joewheatley.net/?p=2315</guid>
		<description><![CDATA[If you are a professional with interest in weather/climate impacts in agriculture Biospherica would like to hear your views.
Please click here to take the online survey.
It takes about 6 minutes. All questions are optional.
Thanks!
]]></description>
			<content:encoded><![CDATA[<p>If you are a professional with interest in weather/climate impacts in agriculture <em>Biospherica</em> would like to hear your views.</p>
<p>Please click <strong><a href="https://www.surveymonkey.com/s/89LYFV6">here</a> </strong>to take the online survey.</p>
<p>It takes about 6 minutes. All questions are optional.</p>
<p>Thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://joewheatley.net/survey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Large-scale vegetation-rainfall correlations in Africa</title>
		<link>http://joewheatley.net/response-of-african-vegetation-to-drought/</link>
		<comments>http://joewheatley.net/response-of-african-vegetation-to-drought/#comments</comments>
		<pubDate>Wed, 12 May 2010 16:35:59 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Climate]]></category>
		<category><![CDATA[ecosystem model]]></category>
		<category><![CDATA[Africa]]></category>
		<category><![CDATA[Drought]]></category>
		<category><![CDATA[NDVI]]></category>

		<guid isPermaLink="false">http://joewheatley.net/?p=2012</guid>
		<description><![CDATA[Weather and climatic variability affect vegetation on continental scales. Intuitively, healthy vegetation is greener. A quantitative index of &#8220;greenness&#8221; called Normalised Difference Vegetation Index (NDVI) was developed by NASA.  The index takes values between 0 and 1. NDVI is related to the fraction of photosynthetically active radiation absorbed by the vegetation canopy. It is a [...]]]></description>
			<content:encoded><![CDATA[<p>Weather and climatic variability affect vegetation on continental scales. Intuitively, healthy vegetation is greener. A quantitative index of &#8220;greenness&#8221; called <em>Normalised Difference Vegetation Index</em> (<strong><a href="http://www.nasa.gov/topics/earth/features/obscure_data.html">NDVI</a></strong>) was developed by NASA.  The index takes values between 0 and 1. NDVI is related to the fraction of photosynthetically active radiation absorbed by the vegetation canopy. It is a powerful tool in vegetation monitoring.</p>
<p>Quantifying the relationship between weather and vegetation on a regional scale is a statistical problem which requires long time-series of NDVI. <strong><a href="http://glcf.umd.edu/data/gimms/" target="_blank">GIMMS</a></strong> is a  25 year (1981-2006) NDVI dataset based on inputs from a sequence of NOAA weather satellites carrying <strong><a href="http://noaasis.noaa.gov/NOAASIS/ml/avhrr.html">AVHRR</a></strong> radiometers. The GIMMS team removed satellite drift, calibration  effects <em>etc.</em>[1] Of course NDVI has a complex spatial variation which is related to variations in  vegetation cover type, not to weather variations. To isolate the impact of weather variations, it makes sense to &#8220;standardize&#8221; NDVI. <em>Vegetation Condition Index</em> (VCI) is:</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=VCI%3D%5Cfrac%7BNDVI%20%5C%3B%20%5C%3A-%5C%3B%20%5C%3ANDVI_%7Bmin%7D%7D%7BNDVI_%7Bmax%7D-NDVI_%7Bmin%7D%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='VCI=\frac{NDVI \; \:-\; \:NDVI_{min}}{NDVI_{max}-NDVI_{min}}' title='VCI=\frac{NDVI \; \:-\; \:NDVI_{min}}{NDVI_{max}-NDVI_{min}}' class='latex' /></p>
<p>For example, NDVI<sub>min</sub> might refer to the minimum local May NDVI value observed during 1981-2006. A tropical rainforest and a semi-arid region have very different NDVI, but both may have VCI close to  1 during a favourable period.</p>
<p>The maps below show the correlation between VCI and 3-month <a href="http://joewheatley.net/visualizing-drought/" target="_blank">Standardized Precipitation Index</a> (SPI3) computed for Africa by calendar month. GIMMS 8km NDVI was upscaled to 200km to match the scale of gridded monthly climate datasets for precipitation (<a href="http://lwf.ncdc.noaa.gov/oa/wmo/wdcamet-ncdc.html">GPCP</a>).[2] The red areas correspond to areas of high correlation between VCI and SPI3. Vegetation in these areas responsive to rainfall variations on a 3-month timescale. A striking feature  is the line high correlation in the Sahel   region. Vegetation in the Sahel is highly sensitive to drought. Southern Africa is also highly rainfall sensitive during Dec-May. It is impressive that the combination of datasets of very different origins (GPCP and GIMMS) produces spatially and temporally consistent information.</p>
<h2 style="text-align: center;">Sensitivity of Vegetation to Precipitation 1981-2006</h2>
<p><a href="http://joewheatley.net/wp-content/uploads/2010/05/AF_VCI_SPI3Hyrbid_correl1.png"><img class="aligncenter size-large wp-image-2230" title="AF_VCI_SPI3Hyrbid_correl" src="http://joewheatley.net/wp-content/uploads/2010/05/AF_VCI_SPI3Hyrbid_correl1-1024x754.png" alt="AF_VCI_SPI3Hyrbid_correl" width="1024" height="754" /></a></p>
<h3>R code snippets</h3>
<p>Most of the effort is in pre-processing the climate and NDVI data so that they share the same projection, grid, time coordinate etc. GDAL and the interp() function from the akima package were used for this purpose. Eventually we end up with SPI3 and VCI data represented by N × T matrices where N = Nx ×Ny is the dimension of the spatial maps and T is the number of observations. From there,  SPI3 and VCI maps were organized by calendar month,</p>
<p><code>vci.m   &lt;- lapply(seq(1:12),function(m) vci[,seq(from=m, to=T, by=12)])<br />
spi3.m &lt;- lapply(seq(1:12), function(m) spi3[,seq(from=m, to=T, by=12)])</code></p>
<p>Correlation maps between VCI and SPI3  for each calendar month are obtained from,</p>
<p><code>corr.maps &lt;- lapply(seq(1:12),function(m) sapply(seq(1:N), function(i) cor( vci.m[[m]][i,],spi3.m[[m]][i,]) ))</code></p>
<p>Finally the above map table was produced using spplot() from the sp package with overlays from the maps package.</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">[1] <span style="color: #888888;"> Tucker, C.J., J.E. Pinzon, and M.E. Brown (2004),  Global Inventory Modeling and Mapping Studies, NA94apr15b.n11-VIg, 2.0,  Global  Land Cover Facility, University of Maryland, College Park, Maryland,  04/15/1994.</span></p>
<p style="text-align: left;">[2]<span style="color: #888888;"> SG: Adler, R.F., G.J. Huffman, A. Chang, R.  Ferraro, P. Xie,     J. Janowiak, B. Rudolf, U. Schneider, S. Curtis, D. Bolvin, A.  Gruber, J. Susskind, P.     Arkin, 2003: The Version 2 Global Precipitation Climatology Project  (GPCP) Monthly     Precipitation Analysis (1979-Present). J. Hydrometeor., 4,1147-1167. </span></p>
]]></content:encoded>
			<wfw:commentRss>http://joewheatley.net/response-of-african-vegetation-to-drought/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visualizing Drought</title>
		<link>http://joewheatley.net/visualizing-drought/</link>
		<comments>http://joewheatley.net/visualizing-drought/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 15:24:43 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[time-series]]></category>
		<category><![CDATA[water stress]]></category>

		<guid isPermaLink="false">http://joewheatley.net/?p=1877</guid>
		<description><![CDATA[The impacts of drought depend on time-scale. On short time-scales, drought means dry soil. On long time-scales, it means dry rivers and empty reservoirs. A region may simultaneously experience dry conditions on one time-scale and wet conditions on another e.g. wet soil but low streamflow or visa versa.
Standardized Precipitation Index (SPI) is a widely used [...]]]></description>
			<content:encoded><![CDATA[<p>The impacts of drought depend on time-scale. On short time-scales, drought means dry soil. On long time-scales, it means dry rivers and empty reservoirs. A region may simultaneously experience dry conditions on one time-scale and wet conditions on another e.g. wet soil but low streamflow or visa versa.</p>
<p><strong><a href="http://iridl.ldeo.columbia.edu/maproom/.Global/.Precipitation/SPI.html" target="_blank">Standardized Precipitation Index</a></strong> (SPI) is a widely used measure of drought which can be defined for any time-scale of interest. For any location, SPI is normally distributed with zero mean and unit standard deviation. Index values &gt; 2 indicate exceptionally wet conditions for that location, values &lt; -2 indicate exceptionally dry conditions for that location, etc. Historical precipitation is the only input needed to compute SPI.</p>
<p>Australia experienced drought between 2002 and 2007. The image below shows SPI computed for a location in the drought-prone Murray-Darling basin of New South Wales. The time-series run from Jan 1948 to Jan 2010 and the index was calculated for time-scales from 1 to 12 months. Precipitation data is from <strong><a href="http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanalysis.derived.surfaceflux.html" target="_blank">NCEP Reanalysis</a></strong> [1] in a 1.875° × 1.875° grid cell centred at 30°S 145°E.</p>
<p style="text-align: center;">
<p style="text-align: left;">
<p style="text-align: center;"><a href="http://joewheatley.net/wp-content/uploads/2010/03/SPI.png"><img class="aligncenter size-large wp-image-1888" title="SPI" src="http://joewheatley.net/wp-content/uploads/2010/03/SPI-1024x320.png" alt="SPI" width="1024" height="320" /></a></p>
<p style="text-align: left;">
<p style="text-align: left;">The drought of 2002 to 2007 shows up very clearly. It was preceeded by a wet period between 2005 and 2001. While 2009 showed an episode of severe drought at short time-scales, SPI at was normal/wet at longer time-scales during 2009. Agricultural yields recovered.</p>
<h2 style="text-align: left;">Calculating SPI-<em>M</em></h2>
<p style="text-align: left;">
<p style="text-align: left;">
<p>Empirical rainfall probability distributions are far from normal (gaussian) and often approximate a shifted gamma distribution. The empirical cumulative probability distributions are used to transform the rainfall time-series into time-series of percentile probabilities. A normally distributed precipitation index is found by pretending that these percentile probabilities derive from a standard cumulative normal distribution and inverting to find the index values.</p>
<p>This is simple in <em>R</em>. If the vector <em>data </em>contains rainfall infall data, then:</p>
<p><code>fit.cdf &lt;- ecdf(data)<br />
cdfs &lt;- sapply(data,fit.cdf)<br />
SPI &lt;- qnorm(cdfs)<br />
</code></p>
<p>Tha rainfall data are M-month moving averages (current and previous months). A separate index is calculated for each calendar month to remove seasonality. The R code used to compute SPI values (based in NCEP Reanalysis or other data sets such as <strong><a href="http://www.gewex.org/gpcp.html" target="_blank">GCPC</a></strong>) is <a href="http://joewheatley.net/wp-content/uploads/2010/03/SPI.txt" target="_blank"><strong>here</strong></a>.</p>
<p>[1] The NCEP/NCAR 40-year reanalysis project, Bull. Amer. Meteor. Soc., 77,  437-470, 1996</p>
]]></content:encoded>
			<wfw:commentRss>http://joewheatley.net/visualizing-drought/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ensemble Prediction</title>
		<link>http://joewheatley.net/ensemble-prediction/</link>
		<comments>http://joewheatley.net/ensemble-prediction/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 16:33:23 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[weather forecast]]></category>

		<guid isPermaLink="false">http://joewheatley.net/?p=1770</guid>
		<description><![CDATA[Weather is unpredictable. Small differences in initial conditions can develop into big differences in the pattern of circulation, in the timing and location of cyclones, rainfall etc. This is true no matter how good the initial observing system is.
The approach taken by organisations such as ECMWF or NCEP is to re-run numerical forecast models with [...]]]></description>
			<content:encoded><![CDATA[<p>Weather is unpredictable. Small differences in initial conditions can develop into big differences in the pattern of circulation, in the timing and location of cyclones, rainfall etc. This is true no matter how good the initial observing system is.</p>
<p>The approach taken by organisations such as ECMWF or NCEP is to re-run numerical forecast models with a range of carefully chosen initial conditions. The collection of runs is called the <em>ensemble</em>. Ensemble prediction systems (EPS) give <em>probabilistic forecasts</em> for variables such as rainfall, temperature etc. Current operational EPS have 20 (GFS)  or 51 (ECMWF) ensemble members from which the probability distributions are derived. ECMWF give an overview of their system<strong> <a href="http://www.ecmwf.int/about/information_leaflets/EPS.pdf" target="_blank">here</a></strong>. The probability distributions capture part of the intrinsic uncertainty in weather or climate.</p>
<p>The graph below shows histograms of 20 ensemble member temperatures near some major cities. The data were extracted from NCEP <strong><a href="http://www.nco.ncep.noaa.gov/pmb/products/gens/" target="_blank">GENS</a> </strong>16-day 2m temperature forecast produced at 00UTC 2 Feb 2010 (i.e GFS forecasts for 18 Feb).</p>
<p style="text-align: center;"><a href="http://joewheatley.net/wp-content/uploads/2010/02/ensembleHistograms2.png"><img class="size-large wp-image-1799 aligncenter" title="ensembleHistograms2" src="http://joewheatley.net/wp-content/uploads/2010/02/ensembleHistograms2-1024x985.png" alt="ensembleHistograms2" width="528" height="508" /></a></p>
<p>The maps below show some corresponding ensemble statistics for the entire globe (1° resolution, equal area cylindrical projection).</p>
<p style="text-align: center;"><a href="http://joewheatley.net/wp-content/uploads/2010/02/ensembleStats.png"><img class="size-large wp-image-1793 aligncenter" title="ensembleStats" src="http://joewheatley.net/wp-content/uploads/2010/02/ensembleStats-1024x619.png" alt="ensembleStats" width="1024" height="619" /></a></p>
<p style="text-align: left;">The upper map indicates that forecast uncertainty (standard error) is high between 40° and 60° in both hemispheres (related to the chaotic behaviour of  jet streams.) Currently, 16 day temperatures north of Lake Baikal in Siberia are very uncertain, for example. The contours indicate ensemble median temperatures.</p>
<p style="text-align: left;">Skewness in ensemble temperatures is shown in the lower map. For example, large negative skewness is found in north central US, eastern mediterranean, and Paraguay/Mato Grosso. This suggests tail risk of low temperatures relative to ensemble mean in these areas.</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: center;">
<p>EPS is the future of weather and climate forecasting. These systems produce huge amounts of data. Building useful applications of EPS is both a challenge and an opportunity.</p>
<p>For anyone interested, the <em><strong>R</strong></em> code used to produce these graphs is given <strong><a href="http://joewheatley.net/wp-content/uploads/2010/02/ensemble.R" target="_blank">here</a></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://joewheatley.net/ensemble-prediction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visualizing the jet stream</title>
		<link>http://joewheatley.net/visualizing-the-jet-stream/</link>
		<comments>http://joewheatley.net/visualizing-the-jet-stream/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 21:11:41 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Climate]]></category>
		<category><![CDATA[weather forecast]]></category>

		<guid isPermaLink="false">http://joewheatley.net/?p=1704</guid>
		<description><![CDATA[Jet streams are narrow tubes of strong westerly winds which circle the earth at ≈ 10km elevation. These strong winds separate regions of cold and warm air. Surface weather at mid-latitudes is affected by the chaotic meanderings of jet streams.

The above wind speed maps are based on NCEP GFS analysis at 300mb pressure level (equivalent to [...]]]></description>
			<content:encoded><![CDATA[<p>Jet streams are narrow tubes of strong westerly winds which circle the earth at ≈ 10km elevation. These strong winds separate regions of cold and warm air. Surface weather at mid-latitudes is affected by the chaotic meanderings of jet streams.</p>
<p><a href="http://joewheatley.net/wp-content/uploads/2010/01/jetstream.png"><img class="aligncenter size-large wp-image-1706" title="jetstream" src="http://joewheatley.net/wp-content/uploads/2010/01/jetstream-1023x566.png" alt="jetstream" width="1023" height="566" /></a></p>
<p>The above wind speed maps are based on NCEP GFS analysis at 300mb pressure level (equivalent to ≈ 10km). The speed scale is in m/s.</p>
<p>There are many interesting things to notice about these maps. Firstly, there are several (5 or 6) planetary scale meanders of the jet stream. The meanders are called <em>planetary</em> or <em>Rossby</em> waves. Secondly, the enclosed area is larger and wind speeds higher in the northern hemisphere. This situation is reversed during the southern winter. Notice the closed loop of clockwise circulating air close to New Zealand. In this case a jet stream meander has grown large, become unstable and broken off. The loop encloses a pocket of cold air. Such detached loops can persist and remain in the same location for days.</p>
<p>The graphic below shows the GFS 300mb analysis wind speeds for ooUTC 19 Jan 2010 and the forecast wind speeds for 00UTC 20 &amp; 21 January.  Rossby wave propogation can be seen clearly (the ridges and troughs advance anticlockwise in the Northern hemisphere, clockwise in the Southern Hemisphere)</p>
<p><a href="http://joewheatley.net/wp-content/uploads/2010/01/jetstream.forecast.png"><img class="aligncenter size-full wp-image-1753" title="jetstream.forecast" src="http://joewheatley.net/wp-content/uploads/2010/01/jetstream.forecast.png" alt="jetstream.forecast" width="834" height="795" /></a></p>
<h3>code</h3>
<p>300mb wind velocities (zonal wind component <em>Uvel</em> and meridonal wind component <em>Vvel</em>) at 300mb were extracted from 0.5° GFS grib files. In an <strong><a href="../ncep-global-forecast-system/" target="_blank">earlier post</a></strong> complete GFS forecasts in grib2 format were downloaded and relevant fields extracted using the wgrib2 utility. In fact, it is possible to download only the required fields. This much faster partial-http option uses <strong><a href="http://curl.haxx.se/" target="_blank">cURL</a></strong> and an easy to use <strong><a href="http://www.perl.org/" target="_self">Perl</a> </strong>script called <strong><a href="http://www.cpc.noaa.gov/products/wesley/get_gfs.html" target="_self">get_gfs.pl</a></strong> from NCEP.</p>
<p><strong><a href="http://joewheatley.net/wp-content/uploads/2010/01/jet.R" target="_blank">jet.R</a></strong> is the script which produced the above graphics. Here Roger Bivand&#8217;s <em>sp</em> and <em>rgdal</em> packages are used to transform the latitude-longitude GFS projection to  a polar projection. For example, wind speeds in the northern hemisphere are contained in the <em>SpatialGridDataFrame</em> object <em>sg_north.</em> It is transformed into <em>Universal Polar Stereographic</em> (<em>ups </em>in the Proj.4 library) using<br />
<code>sg_north &lt;- spTransform(sg, CRS("+proj=ups +north"))<br />
sg_north@bbox &lt;- polar_north@bbox</code><br />
Unfortunately<em> spTransform()</em> produces a <em>SpatialPoints</em> object, because the grid is non-uniform after transformation. To recover a <em>SpatialGrid</em> object, the <em>interp()</em> function from package <em>akima</em> was used to resample back onto a regular grid. This is the slowest part of <em>jet.R.<br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://joewheatley.net/visualizing-the-jet-stream/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NCEP Global Forecast System</title>
		<link>http://joewheatley.net/ncep-global-forecast-system/</link>
		<comments>http://joewheatley.net/ncep-global-forecast-system/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 11:14:32 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Climate]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[GFS]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[weather forecast]]></category>

		<guid isPermaLink="false">http://joewheatley.net/?p=1192</guid>
		<description><![CDATA[Just about everyone is familiar with weather maps. There are many situations where it is useful to combine the underlying numerical weather data with other types of information. Accessing  the weather data is a necessary first step.
The output from the U.S. National Centers for Environmental Prediction (NCEP) Global  Forecast System (GFS) is freely available. The [...]]]></description>
			<content:encoded><![CDATA[<p>Just about everyone is familiar with weather maps. There are many situations where it is useful to combine the underlying numerical weather data with other types of information. Accessing  the weather data is a necessary first step.</p>
<p>The output from the U.S. National Centers for Environmental Prediction (<strong><a href="http://www.nco.ncep.noaa.gov/" target="_blank">NCEP</a></strong>) Global  Forecast System (GFS) is freely available. The surface resolution of the model is ≈ 0.3º× 0.3°. The model runs every 6 hours, producing forecasts at 3-hourly intervals extending out to 16 days. As an example of output from GFS, the map (below) shows the predicted average  temperature at 2 metres over the entire globe for the next 24 hr (date of this post). The map shows predicted cold conditions in Europe, and the continuing heatwave in Australia.</p>
<p><a href="http://joewheatley.net/wp-content/uploads/2009/12/t2m.jpeg"><img class="aligncenter size-large wp-image-1685" title="t2m" src="http://joewheatley.net/wp-content/uploads/2009/12/t2m-1024x572.jpg" alt="t2m" width="1024" height="572" /></a></p>
<h3>How the map was made</h3>
<p><strong><a href="http://www.nco.ncep.noaa.gov/pmb/products/gfs/" target="_blank">GFS forecasts</a></strong> are in a format called GRIB2. According to Wikipedia, <em><strong>&#8220;</strong>GRIB (GRIdded Binary) is a mathematically concise data format commonly used in meteorology to store historical and forecast weather data.&#8221; </em>GRIB files contain physical fields such as temperature, humidity etc defined on a spatial grid, as well as boundary conditions such as vegetation type and elevation. The data might be assimilated from observations, or output from a forecast model.</p>
<p>The first step is to translate the GRIB into a raster format such as <strong><a href="http://www.unidata.ucar.edu/software/netcdf/" target="_blank">netcdf</a></strong> which can be read in <em>R</em><strong><em>. </em></strong>For example, the GRIB2 file <em>gfs.2009121700/gfs.t00z.sfluxgrbf03.grib2</em> contains the 3-hr forecast surface data on 17 Dec 2009  produced at 00 UTC (midnight universal time). An inventory of the data contained in this file can be seen <strong><a href="http://www.nco.ncep.noaa.gov/pmb/products/gfs/gfs.t00z.sfluxgrbf00.grib2.shtml" target="_blank">here</a></strong>. Download this forecast as <em>temp.grb</em></p>
<p><code>loc=file.path("ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.2009121700/gfs.t00z.sfluxgrbf03.grib2")<br />
download.file(loc,"temp.grb",mode="wb")</code></p>
<p>To read <em>temp.grb</em> a utility called <strong><a href="http://www.cpc.noaa.gov/products/wesley/wgrib2/" target="_blank">wgrib2</a></strong> needs to be installed on your system. Then data such as land fraction can extracted into a netcdf file <em>LAND.nc</em> using the <em>R</em> shell command</p>
<p><code>shell("wgrib2 -s temp03.grb | grep :LAND: | wgrib2 -i temp00.grb -netcdf LAND.nc",intern=T)</code></p>
<p>The ncdf package can now be used to read the contents of <em>LAND.nc</em>.</p>
<p><code>library(ncdf)<br />
landFrac &lt;-open.ncdf("LAND.nc")<br />
land &lt;- get.var.ncdf(landFrac,"LAND_surface")<br />
x &lt;- get.var.ncdf(landFrac,"longitude")<br />
y &lt;- get.var.ncdf(landFrac,"latitude")</code></p>
<p>The 1152×576 matrix <em>land</em> takes values 1 for land and 0 for water (sea-ice is 1). x and y are the longitude and latitude of the non-uniform GFS grid.</p>
<p>2m temperature data can be read in the same way. The average of the first 8  forecasts was called <em>t2m.mean</em> and plotted using <em>image.plot()</em> from the fields package:</p>
<p><code>library(fields)<br />
rgb.palette &lt;- colorRampPalette(c("snow1","snow2","snow3","seagreen","orange","firebrick"), space = "rgb")#colors<br />
image.plot(x,y,t2m.mean,col=rgb.palette(200),axes=F,main=as.expression(paste("GFS 24hr Average 2M Temperature",day,"00 UTC",sep="")),axes=F,legend.lab="o C")<br />
contour(x,y,land,add=TRUE,lwd=1,levels=0.99,drawlabels=FALSE,col="grey30") #add land outline </code></p>
]]></content:encoded>
			<wfw:commentRss>http://joewheatley.net/ncep-global-forecast-system/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How big is the uncertainty in the global temperature trend?</title>
		<link>http://joewheatley.net/serial-correlation-and-global-temperature-trend-uncertainty/</link>
		<comments>http://joewheatley.net/serial-correlation-and-global-temperature-trend-uncertainty/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 22:41:59 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Climate]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://joewheatley.net/?p=1399</guid>
		<description><![CDATA[The global temperature record shows strong serial correlation. This boosts the uncertainty in the slope of the global warming trend. Here the uncertainty in the trend is derived using one of the satellite datasets.
warming in the satellite era
Data from satellites have been used to construct a global temperature record beginning in December 1978. This covers [...]]]></description>
			<content:encoded><![CDATA[<p>The global temperature record shows strong serial correlation. This boosts the uncertainty in the slope of the global warming trend. Here the uncertainty in the trend is derived using one of the satellite datasets.</p>
<h3>warming in the satellite era</h3>
<p>Data from satellites have been used to construct a global temperature record beginning in December 1978. This covers the recent warming period. The University of Alabama at Huntsville (UAH) <strong><a href="http://vortex.nsstc.uah.edu/public/msu/t2lt/tltglhmam_5.2" target="_blank">2LT product</a></strong> gives average temperature of the lower atmosphere derived from microwave radiances. Planck&#8217;s law says that microwave radiances are related to temperature.</p>
<p>The plot below shows UAH monthly time-series and a least-squares regression fit. The slope of the regression line is 0.013ºC/year (equivalent to 0.13°C/decade or 1.3°C/century). Also shown is the <strong><a href="http://data.giss.nasa.gov/gistemp/" target="_blank">Gistemp</a></strong> global temperature time-series over the same time interval. Gistemp is based on surface weather stations. The trend in the Gistemp series is higher, 0.18°C/decade.</p>
<p style="text-align: left;"><a href="http://joewheatley.net/wp-content/uploads/2009/12/anomaly.png"><img class="aligncenter size-large wp-image-1407" title="anomaly" src="http://joewheatley.net/wp-content/uploads/2009/12/anomaly-1024x934.png" alt="anomaly" width="655" height="598" /></a></p>
<h3 style="text-align: left;">uncertainty in trend</h3>
<p>A linear regression fit to global temperatures is a statistical model in which strong residual variations are superposed on a linear warming trend. The residual variations reflect &#8220;noise&#8221; in the climate system. ENSO, random events such as volcanos, and many other modes of variability contribute to the &#8220;noise&#8221;. The &#8220;uncertainty&#8221; in the global warming trend can be estimated in the context of this statistical model.</p>
<p>From this point of view, the UAH monthly data are one realisation of a random sample of length N. In reality we only have one sample, the UAH data from the real world. However, if repeated sampling and slope measurement were possible, it would yield a range of outcomes due to noise. The width of the resulting slope probability distribution reflects the uncertainty in the global warming trend. It is evident that there is strong serial correlation in the residuals. This enhances the uncertainty, because it reduces the effective number of independent degrees of freedom in the data. Fewer degrees of freedom means more uncertainty.</p>
<p>The UAH residuals are fit to an auto-regressive model to account for serial auto-correlation. The Akaike information criterion to choose an optimal order n. For UAH it  turns out that n=2, with coefficients 0.58  and 0.24. To find the slope probability distribution 10,000 time-series were used in a Monte Carlo simulation. Each simulated time-series assumes a UAH trend-line of 0.13°C/decade and an AR(2) noise term parameterized using the AR(2) model fit to the UAH residuals. Linear regression fit on each of these simulated time-series yields the slope probablity distribution.</p>
<p style="text-align: center;"><a href="http://joewheatley.net/wp-content/uploads/2009/12/slope.png"><img class="aligncenter size-large wp-image-1554" title="slope" src="http://joewheatley.net/wp-content/uploads/2009/12/slope-1024x942.png" alt="slope" width="491" height="452" /></a></p>
<p style="text-align: left;">A typical result is shown above along with a fit to the normal distribution. By construction the mean is 0.13°C/decade as expected. The standard error is 0.036°C/decade. This is 3.4 times greater than the standard error with independent and identically distributed (iid) residuals.</p>
<p>The 2σ confidence interval for UAH global temperature trend is 0.05 to 0.2°C/decade. Unfortunately, this is quite a wide window.<em> </em>Would another 30 years of data help? Assuming that the properties of the UAH time-series do not change, and extending the above simulation for another 30 years, the standard error is reduced from 0.035°C/decade to 0.026°C/decade. Better, but still a surprising degree of uncertainty.</p>
<h3><em>R</em> code</h3>
<p>The above analysis was carried out using <em>R</em> functions ar() and arima.sim()</p>
<p><code>fitLin &lt;-lm(GLOBAL~dates)  # linear regression fit to GLOBAL= UAH global temperature, dates = UAH dates<br />
ar.fit &lt;- ar(residuals(fitLin)) # AR model for residuals<br />
N=10000; # number of simulated UAH time-series<br />
fits &lt;- cbind(rep(0,N),rep(0,N))<br />
trend &lt;- coefficients(fitLin)[1] + dates*coefficients(fitLin)[2] # UAH trend line<br />
#Monte Carlo<br />
for( i in 1:N){<br />
warming &lt;- trend+arima.sim(n = NData, list(ar = c(ar.fit$ar[1], ar.fit$ar[2])), sd=sqrt(ar.fit$var.pred)) #generate sample<br />
fit.warm &lt;- lm(warming~dates) # linear fit<br />
fits[i,1] &lt;- coefficients(fit.warm)[1];<br />
fits[i,2] &lt;- coefficients(fit.warm)[2]; # slope of simulated data<br />
}<br />
library(MASS) # MASS library must be installed<br />
gf &lt;- fitdistr(fits[,2],"normal") # fit a normal distribution to the slopes<br />
mn &lt;-gf$estimate[1] #mean<br />
sig &lt;- gf$estimate[2] #standard error<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://joewheatley.net/serial-correlation-and-global-temperature-trend-uncertainty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mapping Biomes</title>
		<link>http://joewheatley.net/mapping-biomes/</link>
		<comments>http://joewheatley.net/mapping-biomes/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 22:00:15 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Agriculture]]></category>
		<category><![CDATA[Land Cover Maps]]></category>
		<category><![CDATA[ecosystem model]]></category>
		<category><![CDATA[R]]></category>

		<guid isPermaLink="false">http://joewheatley.net/?p=915</guid>
		<description><![CDATA[Recently (2008) the European Space Agency produced GlobCover (ESA GlobCover Project, led by MEDIAS-France), the highest resolution (300m) global land cover map to date. GlobCover uses 21 primary land cover classes and many more sub-classes. Land cover classification (LCC) schemes divide the earth into biomes. Biomes are the simplest way to classify vegetation which can [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Recently (2008) the <em>European Space Agency</em> produced <strong><a href="http://ionia1.esrin.esa.int/" target="_blank">GlobCover</a></strong> (<span style="word-spacing: 1.5px; line-height: 1.5;"><span><em>ESA GlobCover Project</em>, led by MEDIAS-France</span></span>), the highest resolution (300m) global land cover map to date. GlobCover uses 21 primary land cover classes and many more sub-classes. Land cover classification (LCC) schemes divide the earth into <em>biomes</em>. Biomes are the simplest way to classify vegetation which can be applied globally. LCC makes sense because the boundaries between different ecosystems (<em>ecotones</em>) are sharp. However, definitions vary and there is no agreed standard set of biomes.<sup>[1]</sup></p>
<p style="text-align: left;">
<h3 style="text-align: left;">GlobCover Example</h3>
<p>Puntarenas is a province on the pacific coast of Costa Rica.  The province has a typical mix of tropical land cover. This includes some spectacular examples of Pacific Rainforest, notably on the Osa Peninsula. Puntarenas has an area of ≈ 11,000 sq. km or about 120,000 GlobCover pixels.</p>
<p style="text-align: center;">
<p>13 land cover types are present in the GlobCover map below. The barplot on the right shows the total amounts present in each class.</p>
<p style="text-align: center;"><a href="http://joewheatley.net/wp-content/uploads/2009/11/puntarenas.png"><img class="aligncenter size-large wp-image-1330" title="puntarenas" src="http://joewheatley.net/wp-content/uploads/2009/11/puntarenas-1024x825.png" alt="puntarenas" width="922" height="743" /></a></p>
<p style="text-align: center;">
<p style="text-align: center;"><a href="http://joewheatley.net/wp-content/uploads/2009/11/legend1.png"><img class="aligncenter size-large wp-image-1212" title="legend" src="http://joewheatley.net/wp-content/uploads/2009/11/legend1-1023x362.png" alt="legend" width="716" height="253" /></a></p>
<p>The GlobCover legend (above) has mixed land cover classes, where more than one biome occurs  inside a map pixel. This is especially true in the man-made biomes (agriculture) . For example, there are three cropland land cover types depending on the relative amounts of other vegetation present.</p>
<h3 style="text-align: left;">GlobCover map making in <em>R</em></h3>
<p><em>R</em> is a programming language, not a specialised geographic information system (GIS) such as GRASS or commercial packages. However applications of <em>R</em> to spatial problems is a growth industry.<sup>[2]</sup> <a href="http://blog.revolution-computing.com/2009/10/geographic-maps-in-r.html" target="_blank"><br />
</a></p>
<p>A GlobCover map similar to the above can be produced for any area of interest. The <em>Geospatial Data Abstraction Library</em> (GDAL) should be installed on your system. <strong><a href="http://fwtools.maptools.org/" target="_blank">FWTools</a></strong> is the place to go. You also need <em>R</em> packages <em>sp</em> and <em>rgdal</em> installed. The regional GLOBCOVER map for Central America can be downloaded from ESA <strong><a href="ftp://us-ext-nas.eo.esa.int/regional/" target="_blank">here</a></strong>. GlobCover is in GeoTiff format i.e. a Tiff image file which contains georeferencing information. The following GDAL command (from command line, or run from R using <em>shell</em>) creates a 4° x 4° submap centred on Costa Rica.<br />
<code><br />
gdalwarp GLOBCOVER_200412_200606_V2.2_CentralAmerica_Reg.tif -te -86 8 -82 12 costaRica.tif<br />
</code></p>
<p style="text-align: left;"><em>costaRica.tif</em> is read into <em>R</em> using the <em>rgdal</em> package:</p>
<p><code>library(rgdal)<br />
costa &lt;- readGDAL("costaRica.tif")</code></p>
<p style="text-align: left;"><em>costa</em> has class <em>SpatialGridDataFrame</em>, which is a class defined in the package <em>sp</em> (loaded when <em>rgdal</em> is loaded).</p>
<p style="text-align: left;">Administative boundaries for Costa Rica were obtained from Global Administrative Areas <a href="http://www.gadm.org/" target="_blank">www.gadm.org</a> (see <strong><a href="http://blog.revolution-computing.com/2009/10/geographic-maps-in-r.html" target="_blank">Revolution R blog post</a></strong>)</p>
<p><code>con &lt;- url("http://gadm.org/data/rda/CRI_adm1.RData")<br />
load(con)<br />
close(con)</code></p>
<p style="text-align: left;">Costa Rican provinces are now contained in the object <em>gadm</em> of class <em>SpatialPolygonsDataFrame</em>. The boundaries of Puntarenas province (excluding Cocos Island) are extracted as follows:</p>
<p><code>Polygons(list(Polygon(gadm@polygons[[6]]@Polygons[[27]]@coords),Polygon(gadm@polygons[[6]]@Polygons[[25]]@coords)),"puntarenas")<br />
temp &lt;- SpatialPolygons(list(temp),proj4string=CRS(proj4string(gadm)))<br />
punt.sp &lt;- SpatialPolygonsDataFrame(temp, data.frame(cbind(2,2), row.names=c("puntarenas")))  # puntarenas<br />
</code></p>
<p style="text-align: left;">The <em>overlay()</em> method  is used to extract the land cover map <em>puntarenas</em> from <em>costa:</em><em> </em></p>
<p style="text-align: left;"><code>puntarenas &lt;- costa<br />
puntarenas.overlay &lt;- overlay(costa,punt.sp)  # 1 in interior of puntarenas polygons, 0 outside<br />
puntarenas$band1 &lt;- costa$band1*puntarenas.overlay</code></p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">Unfortunately <em>overlay() </em>is rather slow, because it applies <em>point.in.polygon()</em> to the entire raster. Eventually <em>puntarenas<em> </em></em>appears as a<em> SpatialGridDataFrame</em><em> </em>which can be plotted using standard <em>R</em> tools such as <em>image()</em>.</p>
<p style="text-align: left;">The code needed to generate the above plot is <strong><a href="http://joewheatley.net/wp-content/uploads/2009/11/costa.R" target="_blank">here</a></strong>.</p>
<h3 style="text-align: left;">footnotes</h3>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">[1] For example, the International Biosphere-Geosphere Programme (<strong><a href="http://www.igbp.net/">IGBP</a></strong>) land cover legend used 17 biomes. The University of Maryland map used 14 biomes. At much lower resolution, numerical weather forecasting models such as US National Center for Climate Prediction Global Forecasting System (NCEP-GFS) also use alternative schemes.</p>
<p style="text-align: left;">
<p style="text-align: center;"><a href="../wp-content/uploads/2009/11/LCTable.png"><img title="LCTable" src="../wp-content/uploads/2009/11/LCTable.png" alt="LCTable" width="526" height="306" /></a></p>
<p style="text-align: center;">
<p style="text-align: left;">[2] Roger S. Bivand, Edzer J. Pebesma, and Virgilio Gómez-Rubio.  <em>Applied Spatial Data Analysis with R</em>.  Springer, New York, 2008</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://joewheatley.net/mapping-biomes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flux Towers: Part II</title>
		<link>http://joewheatley.net/flux-towers-part-ii/</link>
		<comments>http://joewheatley.net/flux-towers-part-ii/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 19:57:08 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Carbon]]></category>
		<category><![CDATA[Climate]]></category>
		<category><![CDATA[Forests]]></category>
		<category><![CDATA[ecosystem model]]></category>
		<category><![CDATA[eddy covariance]]></category>
		<category><![CDATA[Terrestrial Carbon]]></category>
		<category><![CDATA[water stress]]></category>

		<guid isPermaLink="false">http://joewheatley.net/?p=742</guid>
		<description><![CDATA[Flux tower eddy covariance instruments measure CO2 flux between an ecosystem and the atmosphere. Observed CO2 fluxes (also called NEE, Net Ecosystem Exchange) can be correlated with locally measured solar intensity, temperature, humidity etc. With enough data, a detailed picture of the local response of the ecosystem to environmental variables to be built up. Flux [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1075" class="wp-caption aligncenter" style="width: 800px"><a href="http://joewheatley.net/wp-content/uploads/2009/10/forestimage.png"><img class="size-large wp-image-1075  " title="forestimage" src="http://joewheatley.net/wp-content/uploads/2009/10/forestimage-1024x112.png" alt="forestimage" width="790" height="112" /></a><p class="wp-caption-text">West of Ireland oak woodland - October 11 </p></div>
<p>Flux tower <strong><a href="http://joewheatley.net/flux-towers-part-i/" target="_blank">eddy covariance instruments</a></strong> measure CO2 flux between an ecosystem and the atmosphere. Observed CO2 fluxes (also called NEE, <em>Net Ecosystem Exchange</em>) can be correlated with locally measured solar intensity, temperature, humidity etc. With enough data, a detailed picture of the local response of the ecosystem to environmental variables to be built up. Flux towers are one of the important tools for quantitative understanding the sensitivity of vegetation to climatic variability.</p>
<p>CO2 flux data  are noisy, to say the least. If you want to understand ecosystem reponse, you need a statistical model.  This post gives some simple ideas and R code showing how such a model can be developed. The example used is <strong><a href="http://atmos.seas.harvard.edu/lab/hf/CO2exchange.html" target="_blank">Harvard Forest</a></strong> [1], Massachussetts, a temperate deciduous broadleaf forest for which a large amount of flux tower data (collected by Munger &amp; Wofsy) is available. It could equally be applied to tropical forest, grassland, cropland etc at one of the 200+ fluxnet sites worldwide. The model falls short of the full scientific rigour given in the references, but it can easily be developed into a more complete tool.</p>
<p>The main interest here is ecosystem response to sunlight i.e. photosynthesis. The light dependent part of the NEE is GEP (Gross Ecosystem Production), while the light independent part is RE (ecosystem respiration).</p>
<h3>Pre-processing</h3>
<p>As always, the first steps are about getting the data into the right form. We use half-hourly data for 1991-2007  for Harvard Forest  i.e <a href="http://public.ornl.gov/ameriflux/dataproducts.shtml" target="_blank">Ameriflux</a> Level 2, site code <em>USHa-1</em>. This raw data has not been subject to any gap-filling statistical treatment. Here are the pre-processing steps:</p>
<ol>
<li>download the annual data files and create a dataframe harvard using the rbind() combining all of the data</li>
<li>replace missing data (e.g. -9999) with &#8220;NA&#8221;</li>
<li>add a new fornight index, indicating to which fortnight of the year each row of data belongs</li>
<li>select a subset of the Ameriflux variables of interest. e.g. column headings c(&#8221;YEAR&#8221;,&#8221;DTIME&#8221;,&#8221;FN&#8221;,&#8221;TA&#8221;,&#8221;NEE&#8221;,&#8221;TS1&#8243;,&#8221;VPD&#8221;,&#8221;PAR_in&#8221;)</li>
<li>drop rows of data when one or more variables are undefined</li>
<li>group the data according to fortnights index i.e. create a list of 26 elements where each element is a dataframe containing all data sharing the same fortnight index.</li>
<li>drop &#8220;dark&#8221; data i.e. rows of data where PAR &lt; 30.</li>
</ol>
<p>The environmental variables retained at step 4 are TA (atmospheric temperature), TS1  (soil temperature), VPD (vapour pressure deficit) and PAR (photosynthetically active radiation). PAR is solar radiation in the range 0.4-0.7 microns which is energetic enough to contribute to photosynthesis. It has units μ mols s<sup>-1</sup> m<sup>-2</sup>. (1 μ mole = 6 x 10<sup>17</sup>.)</p>
<p>Here is what the R code looks like: <code><br />
<span style="color: #ff6600;">#download the annual data files and create a dataframe harvard</span><br />
loc=file.path("ftp://cdiac.ornl.gov/pub/ameriflux/data/Level2/Sites_ByID/US-Ha1/with_gaps/usmaharv_1991_L2.csv"); # Ameriflux US_Ha1 download.file(loc,"temp.dat");<br />
ha_1991=read.csv("temp.dat", header=FALSE,skip=20); .........................<br />
loc=file.path("ftp://cdiac.ornl.gov/pub/ameriflux/data/Level2/Sites_ByID/US-Ha1/with_gaps/usmaharv_2007_L2.csv"); # Ameriflux US_Ha1 download.file(loc,"temp.dat");<br />
ha_2007=read.csv("temp.dat", header=FALSE,skip=20); harvard &lt;- rbind(ha_1991,ha_1992,ha_....._2006,ha_2007); # merged dataframes<br />
<span style="color: #ff6600;">#replace missing data with "NA"</span><br />
temp &lt;- (harvard[,] == -9999 | harvard[,] == -6999); #replace -9999 or -6999 with NAs<br />
harvard[temp]=NA;<br />
<span style="color: #ff6600;">#add a new fortnight index</span><br />
lims &lt;- seq(from=1,to=365,by=14); # fortnightly data<br />
lims[27] &lt;- 367; # bound adjust, last fortnight has extra days fortnight<br />
&lt;- function(d) {sum(ifelse(d&lt;lims,0,1))}  # convert from DOY to fortnights<br />
harvard &lt;- data.frame( "FN" = sapply(harvard$DOY,fortnight),harvard)  # add fortnight labels 1..26 column<br />
#select a subset of the Ameriflux variables of interest<br />
sub&lt;- c("YEAR","DTIME","FN","TA","NEE","TS1","VPD","PAR_in")<br />
harvardS &lt;- harvard[,colnames(harvard) %in% sub, drop=FALSE] # subset dataframe<br />
<span style="color: #ff6600;">#  drop data when U* &lt; 0.2 m/s</span><br />
u_cut &lt;- (harvard$UST &lt; 0.2|is.na(harvard$UST));<br />
<span style="color: #ff6600;">#drop every row of data when one or more variables are undefined</span><br />
x &lt;- is.na(harvardS$TA);<br />
y &lt;- is.na(harvardS$NEE);<br />
z &lt;- is.na(harvardS$TS1);<br />
u &lt;- is.na(harvardS$VPD);<br />
v &lt;- is.na(harvardS$PAR_in);<br />
w &lt;- !(x|y|z|u|v|u_cut);  #boolean. w is true when all variables are defined and U* &gt; 0.2 m/s<br />
harvardS &lt;- data.frame("YEAR"=harvard$YEAR[w],"FN"=harvard$FN[w],"TA"=harvard$TA[w],"NEE" = harvard$NEE[w], "TS1" = harvard$TS1[w], "VPD" = harvard$VPD[w],"PAR" = harvard$PAR_in[w])<br />
<span style="color: #ff6600;">#group the data according to fortnights index</span><br />
getF &lt;- function(i) {subset(harvardS,FN==i)}<br />
# list of dataframes according to fortnight index<br />
harvardF &lt;- lapply(seq(1:26),getF) # generate list<br />
<span style="color: #ff6600;">#drop "dark" data i.e. rows of data where PAR &lt; 30.</span><br />
harvardS.light &lt;- subset(harvardS,PAR&gt;30)#day only<br />
getF.light &lt;- function(i) {subset(harvardS.light,FN==i)}<br />
<span style="color: #ff6600;"># list of dataframes according to fortnight value</span><br />
harvardF.light &lt;- lapply(seq(1:26),getF.light) # generate list</code></p>
<p><em>harvardF.light</em> contains the required clean daytime half-hourly data grouped by fortnight index.</p>
<h3>Model-Building</h3>
<p>The plots below show NEE versus PAR. Fortnights 8 &amp; 22 (mid April &amp; late October) are winter months with positive NEE and little evidence of photosynthetic response. Fortnights 14 &amp; 18 (early July and late August) show photosynthesis (-ve NEE) and a strong response to PAR.</p>
<p style="text-align: center;"><a href="http://joewheatley.net/wp-content/uploads/2009/10/gep.png"><img class="size-large wp-image-1005  aligncenter" title="gep" src="http://joewheatley.net/wp-content/uploads/2009/10/gep-1024x958.png" alt="gep" width="717" height="671" /></a></p>
<p>The NEE-PAR curves during summer months saturate at high light levels. This is not too surprising. Photosynthesis is limited by water and CO2 availability and so cannot increase indefinitely with increasing PAR. A simple light saturation model is [2]</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=%5Cmathrm%7BNEE%7D%20%3D%20%5Cmathrm%7BR_E%7D%20-%7B%7B%5Calpha%20%5Cbeta%20%5Cmathrm%7BPAR%7D%7D%20%5Cover%20%7B%5Cbeta%20%2B%20%5Calpha%20%5Cmathrm%7BPAR%7D%7D%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\mathrm{NEE} = \mathrm{R_E} -{{\alpha \beta \mathrm{PAR}} \over {\beta + \alpha \mathrm{PAR}}}' title='\mathrm{NEE} = \mathrm{R_E} -{{\alpha \beta \mathrm{PAR}} \over {\beta + \alpha \mathrm{PAR}}}' class='latex' /></p>
<p>The second term on the right-hand-side represents GEP.  At low light levels GEP ≈ αPAR. The parameter α is called the &#8220;photosynthetic efficiency&#8221;. At high light levels,  GEP ≈ β and so β is the light saturation GEP.</p>
<p>This 3-parameter simple light saturation model can be fit to extract parameters for each fortnightly period. However, a better model recognises that photosynthesis responds to changes in moisture availability and temperature. This effect can be introduced by replacing <img src='http://s.wordpress.com/latex.php?latex=%5Calpha%20%5Crightarrow%20%5Calpha%20%5Cepsilon&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha \rightarrow \alpha \epsilon' title='\alpha \rightarrow \alpha \epsilon' class='latex' /> in the numerator of GEP, where ε depends on atmospheric temperature TA and vapour pressure deficit VPD. ε=1 under optimal temperature and humidity conditions, otherwise ε&lt;1. We need to input a reasonable model for how quickly GEP falls away about the optimal values of TA (at about 25C) and VPD (at zero  kPa). After some experimenting, the following model was found to be reasonable[3]</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=%5Cepsilon%20%3D%20%7B%5Clambda%5E2%20%5Cover%20%7B%5Cmathrm%7B%5Cleft%28TA-25%20%5Cright%29%7D%5E2%20%2B%20%5Clambda%5E2%7D%20%7D%20%7B%5Cmu%5E2%20%5Cover%20%7B%5Cmathrm%7BVPD%7D%5E2%20%2B%20%5Cmu%5E2%7D%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\epsilon = {\lambda^2 \over {\mathrm{\left(TA-25 \right)}^2 + \lambda^2} } {\mu^2 \over {\mathrm{VPD}^2 + \mu^2}}' title='\epsilon = {\lambda^2 \over {\mathrm{\left(TA-25 \right)}^2 + \lambda^2} } {\mu^2 \over {\mathrm{VPD}^2 + \mu^2}}' class='latex' /></p>
<p><img src='http://s.wordpress.com/latex.php?latex=%5Clambda&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\lambda' title='\lambda' class='latex' /> and <img src='http://s.wordpress.com/latex.php?latex=%5Cmu&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\mu' title='\mu' class='latex' /> are two additional parameters which must be determined. This 5-parameter model can be fit for each of the photosynthetically active periods 11-20.</p>
<p>The nls() function in R carries out a numerical maximum likelihood fit using least squares. Unlike ordinary linear least squares, it is not guaranteed to converge. The model and initial parameter values have to be chosen carefully. A good approach is to use parameters from the simple light saturation model as initial values in nls(). Here is the code needed to do the 5-parameter model fits</p>
<p><code><br />
#fits.mid is a list of fitted R objects<br />
for(i in start_period:end_period) {<br />
fits.mid[[i]] &lt;- nls(NEE~ gamma - alpha*beta*(lambda^2/((TA-25)^2+lambda^2))*mu^2/(VPD^2+mu^2)*PAR/(beta+alpha*PAR), data = harvardF.light[[i]], start=list(gamma=1,alpha=0.02,beta=40,lambda=40,mu=1),trace=F); </code></p>
<p>In fact, λ and μ are not expected to vary much during the summer period, since they depend on leaf properties at the cellular level.  Indeed they turn out to be roughly constant for fortnight periods 11-20. It is reasonable to replace them by their average values μ<sub>av</sub> = 2.1kPa and λ<sub>av</sub>=34 μ mols s<sup>-1</sup> m<sup>-2</sup>. With ε determined in this way, a final 3-parameter model fit is carried out. Once again the three parameters are RE, α and β but this time the model takes better account of temperature and moisture sensitivity, via ε.</p>
<h3>Results</h3>
<p>The model suggests that VPD is an important factor limiting GEP. e.g. vapour pressure deficit of 1kPa reduces GEP by 20% when <img src='http://s.wordpress.com/latex.php?latex=%5Cmu%20%3D%202&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\mu = 2' title='\mu = 2' class='latex' />kPa. This effect is seen in the plots below.</p>
<p style="text-align: center;"><a href="http://joewheatley.net/wp-content/uploads/2009/10/nee.png"><img class="size-large wp-image-1015  aligncenter" title="nee" src="http://joewheatley.net/wp-content/uploads/2009/10/nee-1024x813.png" alt="nee" width="819" height="650" /></a></p>
<p>The implication of this is that about 30% of the apparent &#8220;light saturation&#8221; of the NEE PAR response is due to water stress (VPD). The remainder is due to CO2 availability and possibly other constraints.</p>
<p>The plot below shows the variation of parameters R_E , β and α with fortnight index. Only β shows a strong variation during the summer months, with a peak in early June</p>
<p style="text-align: center;"><a href="http://joewheatley.net/wp-content/uploads/2009/10/params.png"><img class="size-large wp-image-1024  aligncenter" title="params" src="http://joewheatley.net/wp-content/uploads/2009/10/params-1024x481.png" alt="params" width="1024" height="481" /></a></p>
<p><img src='http://s.wordpress.com/latex.php?latex=%5Calpha%5E%7B-1%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha^{-1}' title='\alpha^{-1}' class='latex' /> corresponds to the number of  photosynthetically active photons  arriving at the forest canopy for every CO2 molecule trapped by photosynthesis. This number is about 14.</p>
<p>A common feature of future climate scenarios is competition between increased CO2 availability and increased water stress layed out on a global scale. Clearly flux tower data are good place to look for these effects.</p>
<p>The R script for the model and plots can be found <strong><a href="http://joewheatley.net/wp-content/uploads/2009/10/harvardforestlevel2.txt" target="_blank">here</a></strong>.</p>
<h3>References</h3>
<p>[1] <em>Factors controlling CO<sub>2</sub> exchange on timescales from hourly to decadal at Harvard Forest, </em>Urbanski, S., C. Barford, S. Wofsy, C. Kucharik, E. Pyle, J. Budney, K.</p>
<p>McKain, D. Fitzjarrald, M. Czikowsky, J. W. Munger<a href="http://www.agu.org/pubs/crossref/2007.../2006JG000293.shtml" target="_blank"> http://www.agu.org/pubs/crossref/2007&#8230;/2006JG000293.shtml</a></p>
<p>[2] See for example, <em>An evaluation of models for partitioning eddy covariance-measured<br />
net ecosystem exchange into photosynthesis and respiration</em> P. Stoy <em>et al</em>, <a href="http://www.geos.ed.ac.uk/homes/pstoy/Stoy_06b.pdf" target="_blank">http://www.geos.ed.ac.uk/homes/pstoy/Stoy_06b.pdf</a></p>
<p>[3] More detailed models are give in <em><span class="pb_article_title">An empirical model simulating diurnal and seasonal CO<sub>2</sub> flux for diverse vegetation types and climate conditions</span></em><span class="pb_authors">, M. Saito, S. Maksyutov, R. Hirata, and A. D. Richardson. </span><a href="http //www.biogeosciences.net/6/585/2009/bg-6-585-2009.html" target="_blank">http //www.biogeosciences.net/6/585/2009/bg-6-585-2009.html</a> &amp; references.</p>
]]></content:encoded>
			<wfw:commentRss>http://joewheatley.net/flux-towers-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flux Towers: Part I</title>
		<link>http://joewheatley.net/flux-towers-part-i/</link>
		<comments>http://joewheatley.net/flux-towers-part-i/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 10:05:37 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Carbon]]></category>
		<category><![CDATA[Forests]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[carbon sources and sinks]]></category>
		<category><![CDATA[eddy covariance]]></category>
		<category><![CDATA[Flux tower]]></category>
		<category><![CDATA[Terrestrial Carbon]]></category>

		<guid isPermaLink="false">http://joewheatley.net/?p=654</guid>
		<description><![CDATA[Most solar energy absorbed at the earth&#8217;s surface is radiated back into space. For every high energy solar photon absorbed, about 20 degraded thermal photons are eventually radiated back. Ecosystems hitch a ride on this process. The starting point is of course plant photosynthesis which converts sunlight into chemical energy:  . The reverse process (respiration, [...]]]></description>
			<content:encoded><![CDATA[<p>Most solar energy absorbed at the earth&#8217;s surface is radiated back into space. For every high energy solar photon absorbed, about 20 degraded thermal photons are eventually radiated back. Ecosystems hitch a ride on this process. The starting point is of course plant photosynthesis which converts sunlight into chemical energy:  <img src='http://s.wordpress.com/latex.php?latex=%5Cmathrm%7BCO_2%7D%2B%5Cmathrm%7BH_2O%7D%2B%5Cmathrm%7Bphotons%7D%5Crightarrow%20%5Cmathrm%7Bsugars%7D%2B%5Cmathrm%7BO_2%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\mathrm{CO_2}+\mathrm{H_2O}+\mathrm{photons}\rightarrow \mathrm{sugars}+\mathrm{O_2}' title='\mathrm{CO_2}+\mathrm{H_2O}+\mathrm{photons}\rightarrow \mathrm{sugars}+\mathrm{O_2}' class='latex' />. The reverse process (respiration, burning of sugars and emission of CO2) converts the energy captured by photosynthesis into an almost unbelievable variety of alternative chemical forms, and also into mechanical energy and heat. Following carbon is a way to track energy flow through an ecosystem.</p>
<p>Respiration CO2 derives from maintainance and growth respiration by vascular plants (&#8221;autotrophic&#8221; respiration) and also by the decay of organic matter in soil and litter layers (&#8221;heterotrophic&#8221; respiration). At the ecosystem level, the net exchange of CO2 with the atmosphere is called<em> Net Ecosystem Exchange</em> (NEE). NEE is just the difference between total ecosystem respiration (RE) and photosynthesis (or Gross Ecosystem Production, GEP) :</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=%5Cmathrm%7BNEE%7D%20%3D%20%20%5Cmathrm%7BRE%7D-%5Cmathrm%7BGEP%7D%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\mathrm{NEE} =  \mathrm{RE}-\mathrm{GEP} ' title='\mathrm{NEE} =  \mathrm{RE}-\mathrm{GEP} ' class='latex' /></p>
<p style="text-align: center;">
<p style="text-align: left;">At night, GEP <img src='http://s.wordpress.com/latex.php?latex=%3D%200&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='= 0' title='= 0' class='latex' /> and the flux of CO2 from the ecosystem to the atmosphere equals RE. During daylight hours, GEP switches on and NEE is normally negative during the growing season. Of course NEE depends on sunlight, air temperature, soil moisture etc. Fortunately this important property of ecosystems is directly measurable.</p>
<h3>Eddy Covariance</h3>
<p style="text-align: left;"><a href="http://joewheatley.net/wp-content/uploads/2009/09/eddycovariance.jpg"><img class="size-full wp-image-675 alignleft" style="margin: 0px 10px;" title="eddycovariance" src="http://joewheatley.net/wp-content/uploads/2009/09/eddycovariance.jpg" alt="eddycovariance" width="325" height="201" /></a> Under normal conditions, air motion above vegetation is turbulent. This fact is the basis of a statistical technique called <em>eddy covariance</em> which measures the flux of CO2 between ecosystem and atmosphere. A setup similar to the one shown on the left is mounted on a tower rising above the top of the vegetation canopy. The setup consists of a gas analyser (measuring instantaneous CO2 concentration), and an anemometer (capable of measuring the instantaneous vertical component of the wind velocity).</p>
<p style="text-align: left;">To a good approximation, the CO2 flux is just the covariance of the vertical wind speed <img src='http://s.wordpress.com/latex.php?latex=w&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='w' title='w' class='latex' /> with the CO2 concentration <img src='http://s.wordpress.com/latex.php?latex=%5Crho&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\rho' title='\rho' class='latex' />. For example, if <img src='http://s.wordpress.com/latex.php?latex=w&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='w' title='w' class='latex' /> and <img src='http://s.wordpress.com/latex.php?latex=%5Crho&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\rho' title='\rho' class='latex' /> are uncorrelated, the flux is zero. The covariance can be obtained by recording data at high frequency over 30min intervals, say. This gives a time-series of CO2 fluxes at half-hour intervals. The eddy covariance technique gives information on NEE on a spatial scale which is typically <img src='http://s.wordpress.com/latex.php?latex=%5Capprox%201%20km%5E2&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\approx 1 km^2' title='\approx 1 km^2' class='latex' />. Of course, the technique also works for other trace gases or water vapour. There is a good <strong><a href="http://en.wikipedia.org/wiki/Eddy_covariance" target="_blank">wikipedia article</a> </strong>on eddy covariance which provides additional details.</p>
<p style="text-align: left;">According to <strong><a href="http://www.fluxnet.ornl.gov/fluxnet/overview.cfm" target="_blank">Fluxnet</a></strong>, there about 500 flux towers making continuous eddy covariance measurements of NEE worldwide. Given the diversity of Earth&#8217;s ecosystems, this is a small number. Flux tower data is rare and valuable.</p>
<h3>NEE Data</h3>
<p>With this technical explanation out of the way, we get to look at NEE for some real ecosystems. Access to (mainly North American) flux tower data was obtained through the  <a href="http://public.ornl.gov/ameriflux/">ameriflux</a> network. Two different forest ecosystems are compared<strong>. <a href="http://atmos.seas.harvard.edu/lab/hf/index.html" target="_blank">Harvard forest</a></strong> is a 1200Ha temperate broadleaf deciduous forest in Massachussetts. This secondary growth forest has been studied intensively since it was established in 1907.<sup>[1]</sup> A 30m flux tower has measured NEE at Harvard Forest since 1993.<strong><a href="http://daac.ornl.gov/LBA/guides/CD10_CO_Tapajos.html" target="_blank"> km 67 Sanatarem flux tower</a></strong> on the other hand is located in primary tropical rainforest, Tapajos National Forest, Para State, Brazil. Three years of data are available 2000-2003 from this 64m tower.</p>
<p>Half-hourly time-series of CO2 fluxes were generated as shown below using the statistical programming language <strong><em>R.</em></strong></p>
<p style="text-align: center;"><a href="http://joewheatley.net/wp-content/uploads/2009/09/nee.png"><img class="aligncenter size-large wp-image-819" title="nee" src="http://joewheatley.net/wp-content/uploads/2009/09/nee-940x1024.png" alt="nee" width="752" height="819" /></a></p>
<p>The qualitative features of CO2 fluxes are as expected. Namely, both forests lose carbon at night while daytime fluxes tend to be negative, temperate forest shows a strong seasonal signal and there is a much weaker wet/dry seasonal signal in the tropical forest. There are some surprises, however. Peak summer carbon fluxes at Harvard Forest are as large as Santarem tropical forest fluxes <img src='http://s.wordpress.com/latex.php?latex=%5Capprox%20-0.4%20mgCm%5E%7B-2%7D%20s%5E%7B-1%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\approx -0.4 mgCm^{-2} s^{-1}' title='\approx -0.4 mgCm^{-2} s^{-1}' class='latex' />. Another surprise is that there is stronger carbon absorbtion by the tropical forest during the dry season, which seems to contradict intuition about dry season water stress.<sup>[2]</sup> Perhaps the biggest surprise is the relative performance of the two forests as net carbon sources or sinks.</p>
<h3>Sources or Sinks?</h3>
<p>Cumulative NEE shows whether these forests are sources or sinks of carbon. This is simply obtained by applying <strong><em>R</em></strong>&#8217;s cumsum() function to the half-hourly time-series above. The graph (below) shows that Harvard forest has been a strong and even accelerating sink for CO2 (= 2tC/Ha/y) since 1992, even though it is 100 years old. By contrast, primary forest at the Santarem site was a source of CO2 between 2002 and 2005. Researcher suggest this may be due to the presence of excess dead wood in the area following earlier disturbances e.g. 1998 El Nino drought.<sup>[2]</sup></p>
<p style="text-align: center;">
<p style="text-align: center;">
<p style="text-align: left;">
<p style="text-align: center;"><a href="http://joewheatley.net/wp-content/uploads/2009/09/cumulativenee.png"><img class="aligncenter size-large wp-image-888" title="cumulativenee" src="http://joewheatley.net/wp-content/uploads/2009/09/cumulativenee-1024x898.png" alt="cumulativenee" width="717" height="629" /></a></p>
<p style="text-align: left;">It is remarkable that Harvard Forest is still an agressive carbon sink (0.25KgC/m2/y) after 100 years of growth.</p>
<h3 style="text-align: left;">Conclusions</h3>
<p style="text-align: left;">The above illustrates some of the surprises and complexity of real ecosystem data. When memory effects are large, intuition can be a very poor guide. Models, such as those used in long-term climate research, are necessarily simplifications of reality.</p>
<p style="text-align: left;">This is the <strong><a href="http://joewheatley.net/wp-content/uploads/2009/09/ameriflux.txt" target="_blank">R code</a></strong> used to download, process and plot the flux tower data. In a follow-on post an ecosystem model for Havard Forest NEE will be built in <strong><em>R</em></strong>.</p>
<h4 style="text-align: left;">References</h4>
<p style="text-align: left;">
<p style="text-align: left;">[1] <em>Forests in Time: The Enviromental Consequences of change in New England</em>, by D. Foster and J. Aber, 2004</p>
<p>[2] <em>Carbon in Amazon Forests: Unexpected Seasonal Fluxes and Disturbance-Induced Losses, </em>Saleska et al<em>, </em>Science vol. 302 2003<em><br />
</em></p>
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://joewheatley.net/flux-towers-part-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.641 seconds -->
