This website maintained by Belinda Medlyn: b.medlyn@unsw.edu.au
Last updated Sept. 01
Hosted by Biological Science
at University of NSW
Mirror sites:
http://www.ed.ac.uk/~bmedlyn/maestra/
http://www.gwdg.de/~aibrom/maestra/
MAESTRO/MAESTRA is a model of forest canopy radiation absorption and photosynthesis. The model has a long history, going back to the work of Norman & Jarvis in the 1970's and 80's. Ying Ping Wang improved and tested the model for his PhD thesis, and it was published in Wang & Jarvis (1990) Agric For Meteorol 51:257-280. A lot of other people have worked on the model over the years, and as of 1997 there were several versions of the model in existence, most of which were complicated and difficult to understand or modify. For the purposes of the ECOCRAFT project, I have revised a version of the MAESTRO model which I obtained in early 1997 from Ying-Ping Wang. The revised model was renamed to MAESTRA. The major revisions included: (i) removing redundant and ‘spaghetti’ code; (ii) modularising the code to make the program easier to understand and modify; (iii) incorporating standard formulations of physiological sub-modules (Farquhar - von Caemmerer, Ball-Berry).
Model description:
Please Note! The MAESTRA program is provided freely here. We expect you to use it in good faith. Please contact us if you would like to use the program in your work. Also, we take no responsibility for errors encountered in the model or in outputs generated by the model.
IMPORTANT 12/01/00: IF YOU DOWNLOAD THE PROGRAM FILES AFTER THIS DATE, YOU MUST CHANGE ANY EXISTING PARAMETER FILES (phy.dat AND trees.dat) SO THAT, IN ANY BLOCK OF PARAMETERS CONTAINING DATES, THE DATES COME LAST IN THE BLOCK - OTHERWISE THE PROGRAM CRASHES!
Documentation: The file DOC.ZIP (85 KB, zipped RTF files) contains:
Executable: There are hourly ( EXE24.ZIP) and half-hourly ( EXE48.ZIP) versions of the program, updated 11/09/01. Each of these files (650 KB, zipped) contain:
Code: The file MAESTRA.ZIP (updated 11/09/01; 88 KB, zipped) contains:
Plot details:
Canopy structure:
Meteorological data: on an hourly or daily basis
Photosynthesis Parameters:
Stomatal Conductance Parameters:
Respiration Parameters:
Reflectance and Transmittance Parameters:
The outputs from MAESTRA are the hourly values of absorbed radiation, photosynthesis and transpiration of the target tree. Useful validation data are intercepted PAR and CO2 and H2O fluxes.
Soil water content and its effect on stomatal conductance. Soil
water content may be specified in the met.dat file by adding a column 'SW'.
This will be converted into a soil moisture deficit using the two additional
parameters SWMAX and SWMIN which must be given in the namelist ENVIRON in
met.dat. The soil moisture deficit is given by SMD = (SWMAX - SW) / (SWMAX
- SWMIN). Thus SW should be in the same units as SWMAX and SWMIN.
The effect of soil moisture on stomatal condutance is calculated as f(SMD)
= 1 - SMD1*exp(SMD2*SMD) where SMD1, SMD2 are parameters. This function is
implemented for all three stomatal conductance models. The parameters SMD1,
SMD2 should be added to the relevant namelists in phy.dat.
In the code you will note that work is also under way to add back in the
water balance routines used by Barton & Massheder - however this has not
yet been completed.
Quantum yield of electron transport. Previously this was specified
as AJQ in namelist JMAXPARS in phy.dat. Alternatively, you can now specify
different values according to date, layer, and age class, as you can for JMAX,
VCMAX, etc. This is done by adding namelists
&AJQCON NODATES, NOLAYERS, NOAGES \
&AJQ
DATES, VALUES \
to phy.dat.
Alternative formulations of the temperature dependences of Km and Gamma*. Use the temperature dependences found by Bernacchi et al (2001) Plant Cell Environ. 24:253-260 by adding the parameter IECO = 0 in namelist JMAXPARS in file phy.dat. The default IECO = 1 is to use the temperature dependences opted for by the ECOCRAFT group.
Estimating incident radiation. The program can use the formula of
Bristow & Campbell (1984) Ag For Met 31: 159-166 to calculate incident
PAR from air temperature. To use this option it is necessary to put the namelist
& BRISTO DELTAT \
in the met.dat file. DELTAT should have 12 values representing the mean
monthly daily temperature amplitude for each month of the year.
Stem maintenance respiration on an area basis. To specify stem maintenance
respiration on an area basis rather than a mass basis, change the namelist
WRESP in phy.dat to have the following parameters:
RMA - maintenance respiration per unit stem surface area (instead of RM,
the rate per unit mass)
STEMFORM - used to calculate total stem surface area. Stem SA = STEMFORM
* PI * HT * DBH^2
Parameters RTEMP, Q10W, EFFY stay the same.
Outputs. Mean canopy temperature (TCAN) is output on an hourly basis. There is also a column for water evaporation but this is non-operational at the moment.
Bugs. In the version of 14/3/99, a cosine was added to the calculation of WNS1 in TRANSD. This change should not have been made and has been corrected in the current version.
Thermal radiation. The formula used to estimate incident thermal radiation was changed to that of Monteith & Unsworth (1990) Principles of Environmental Physics V2 p53 - this formula takes into account higher radiation from cloudy skies.
Understorey. A program has been written to calculate radiation absorption and photosynthesis by a grass understorey. This program is not available on this web site but may be obtained by writing to Belinda Medlyn.
CHANGES TO 12/1/00Fixed millennium bug. Dates should still be specified as ‘DD/MM/YY’. YY = 50 - 99, years 1950-1999 assumed; YY = 00 - 49, years 2000 – 2049 assumed. Someone else can change the program come 2050 …
Powerstation Version: Changes made so that program compiles in Microsoft Fortran PowerStation. IMPORTANT: in input files, arrays involving strings (e.g. dates) must come at the end of the namelist, after all numbers – this means a change to the input file.
Added incident total short-wave radiation to hourly input met data options. Column ‘RAD’ in W m-2.
Added new VPD function for Jarvis stomatal conductance.
F(VPD) = min(1,1/(VK1*VPD^VK2))
with parameters VK1 and VK2 in namelist JARGS in phy.dat. To use, set j
= 3 in namelist MODELGS in confile.dat.
Bugs Fixed: (in order of importance)
(1) The photosynthesis subroutine PHOTOSYN was returning gross photosynthesis,
not net, for the Ball-Berry-Leuning case.
(2) A correction to the subroutine DIST in radn.for to handle the case where
the ray is completely outwith the crown.
(3) Handle correctly the cases where Jmax or Vcmax <= 0, where photosynthesis
is below the light compensation point, and to calculate Gamma* when T <
0.
(4) If physiology is only specified for one age class, but LAD distributions
are specified for several, the physiology data must be copied into arrays
for the other age classes.
(5) In the calculation of the beam fraction of incident radiation, a more
accurate estimate of the zenith angle is now used.
New Parameters Added:
(1) The initial slope of the light-response curve of electron transport
is now the parameter AJQ (namelist: JMAXPARS in phy.dat). Default value:
ALPHAQ = 0.425 mol mol-1 (defined in maestcom).
(2) Added parameters to force Jmax and Vcmax to go to zero at low temperatures.
They begin to decline linearly to zero at T = TVJUP °C and reach zero
at T = TVJDN °C. TVJUP, TVJDN are in namelist VCMAXPARS in phy.dat.
Default values: -100.
The MAESTEST program. I added a new program to the family, which prints out radiation incident at specified grid points. It is useful for testing measurements made with PAR sensors. The input file, points.dat, contains the co-ordinates of the sensors. The output file, testflx.dat, gives beam, diffuse, and total transmission of PAR to the sensors for each half-hour.
Direct beam fraction at low sun angles. The program uses Spitter's routine to differentiate beam & diffuse fractions. This was only developed for sun angles > 80 deg (from vertical). The problem was how to estimate the diffuse fraction for very low sun angles. I have now assumed that all radiation is diffuse > 80 deg.
Respiration is now set to zero if the air temperature is < TBELOW degrees.TBELOW is specified in the RDPARS namelist in phy.dat.
Daily shortwave irradiance. In daily met files, you can specifiy incident radiation as global shortwave radiation (in MJ m-2 d-1) - the column heading should be 'SI'. Either 'SI' or 'PAR' must be specified.
The calculation of photosynthesis on sunlit foliage can now be done separately for each angle class, by setting the switch MODELSS = 2 (in MODEL namelist, confile.dat).
Leaf phenology. The model of leaf expansion used by Wang, Rey & Jarvis (1998, GCB) has been added. This can be used instead of specifying leaf areas. Note, however, that it does assume that all trees have the same leaf area. Instead of the namelist INDIVLAREA or ALLLAREA, add the following to trees.dat:
Respiration. The program can now calculate growth and maintenance respiration for foliage, stem, branch, fine root and coarse root separately. Foliage maintenance respiration, and stem growth and maintenance are calculated as before. The following namelists give the parameters required to calculate branch and root maintenance respiration rates (in phy.dat):
SLA can be specified by layer, age and date, in a similar fashion to JMAX, VCMAX & LEAFN. Use the following namelists (in phy.dat):
PAR Histogram. The program can print out a frequency histogram of PAR within each tree crown during the simulation. To get the histogram, put IOHIST = 1 in the CONTROL namelist in confile.dat. Then add a namelist which gives the size of the histogram intervals (in umol m-2 s-1) to confile.dat. An example:
Stomatal conductance (Jarvis model). I added some alternative functions for responses in the Jarvis model.
Sumtrees program. This program takes normal output files, in which fluxes are specified for each tree (dayflx.dat, hrflux.dat,histo.dat) and computes totals on an area basis. You can specify which trees you want summed, and weightings for them (e.g. for diameter classes) by using an input file sumcon.dat with the following namelist:
The crown can have a box shape. Put CSHAPE = 'BOX' in the CANOPY namelist in str.dat.
You can specify a list of target trees to use, rather than just one. In confile.dat, add ITARGETS = list of target tree numbers to the TREESCON namelist (instead of NOTARGET or NORANDOM). e.g.
&TREESCON NOTREES = 50 ITARGETS = 5 10 15 20The wind speed declines exponentially with depth in the canopy. The exponential coefficient is given in STR.DAT:
&AERO EXTWINDwhere the windspeed at canopy depth D, W(D) is given by W(D) = W(0)*exp(-EXTWIND*D). Default: EXTWIND = 0.
Transpiration rate is also calculated from the conductance of the whole canopy. This is printed out in hrflux.dat to compare with the transpiration rate calculated by applying the Penman-Monteith equation to each grid point. The canopy stomatal conductance is calculated as the sum of the individual leaf conductances. The canopy boundary layer conductance is calculated from
If these parameters aren't specified, this calculation is not done. This part is not fully tested yet.
Entered the equations for stem respiration rate from Collelongo (Valentini et al 1996, Global Change Biol 2: 199 - 207). The stem respiration rate is given by
To indicate that you want to use this model, add MODELRW = 1 to the MODEL namelist in confile.dat. The parameters of the temperature dependence, ie RTEMPW and Q10W should be entered using the WRESP namelist as usual.
You can now enter the mean leaf inclination angle and the program will calculate the fractions of foliage area in each angle class assuming an elliptical distribution (instead of having to enter the ELP parameter). Just add the parameter AVGANG (in degrees) to the LIA namelist in str.dat. (NB previous methods of entering the LIA distribution are still supported).
Leaf temperature is now printed out in PTFLX.DAT.
A minimum (cuticular) conductance was added to the Jarvis model, to avoid the stomatal conductance going to zero.
The units of the output files were changed to more sensible units (mainly umol m-2 s-1). The new units are shown in the output files.
The photosynthesis calculations can be done for sunlit and shaded foliage separately, or done assuming that the absorbed radiation at a grid point is spread evenly over the foliage at that grid point. Use the flag MODELSS in confile.dat to control this.
The latitude and longitude are now specified in the met.dat file.
Added Spitter's formula to calculate the diffuse fraction of radiation. For hourly data, FBEAM is no longer necessary. For daily data, the incident radiation should be entered in columns 'PAR' and 'FBEAM' (rather than RBM and RDF), where FBEAM is not necessary. (Spitters et al 1986, Agric For Meteorol 38: 217-229)
Bug fix - Fixed a bug in the subroutine SUN - the date used to calculate the daylength was fixed! Added a routine to calculate the julian date (DAYJUL). Also added a routine to calculate the Julian day (JDATE).
Night-time foliar respiration is calculated and subtracted from hourly and daily CO2 flux.
Woody maintenance respiration is calculated from the woody biomass, which in turn is calculated using an allometric relation with height and diameter. The diameter should be input in the file trees.dat, in a similar format to the height and radius, i.e.
NAMELIST /ALLDIAM/ NODATES, DATES, VALUES
or
NAMELIST /INDIVDIAM/ NODATES, DATES, VALUES
where the diameter is in m. The allometric relationship is given by:
WBIOM = COEFFT * HEIGHT * DIAM^EXPONT (1)
where: WBIOM is the woody biomass (in kg DW tree-1), HEIGHT is the total height of the tree in m (green height + trunk length), DIAM is the diameter in m, and COEFFT and EXPONT are parameters. The diameters should be specified at the height for which they were used to develop this allometric relationship. The allometric parameters should be added to the file STR.DAT using the namelist:
NAMELIST /ALLOM/ COEFFT, EXPONT
The woody maintenance respiration rate is given by a Q10 relationship:
RESPW = RMW * exp(Q10W * (TAIR - RTEMPW)) * WBIOM (2)
where RMW is the maintenance respiration rate (in umol kg-1 DW s-1 or nmol g-1 DW s-1) at temperature RTEMPW and Q10W is the temperature response factor. The maintenance respiration is calculated on an hourly basis and output in the hourly and daily files. The daily woody growth respiration is calculated from the increment in woody biomass on that day according to
RESPWG = WBINC * EFFY
where EFFY is the efficiency of woody biomass growth (mol CO2 g-1 DW) and WBINC is the daily increment in woody biomass (g DW d-1) which is calculated from the changes in height and diameter, using the allometric relation (1). The parameters required for the calculation of woody respiration rates should be added to PHY.DAT using
NAMELIST /WRESP/ EFFY,RMW,RTEMPW,Q10W
Note that the photosynthesis values reported in the hourly and daily output files are net of foliar respiration but not of woody respiration. The woody maintenance respiration is reported in both the hourly and daily output files. The woody growth respiration is calculated on a daily basis & so is reported only in the daily output file. Note that Franz says woody growth respiration will probably lag the actual growth by approx. one week. We could add a lag to the calculation of the growth rate. Also we could add some kind of fix to make a relationship with temperature. However we don't have the time course of the growth in any fine detail so it's probably not worth making these corrections to the growth respiration calculation.
The temperature at which respiration rates (foliage, woody) are specified must be given - RTEMP (deg C) in the physiology file.
The program now integrates the physiology parameters to give the correct value for each layer (you used to have to have the radiation layers a multiple of the physiology layers). This is for the reflectance, transmittance, Jmax, Vcmax , leaf N and Rd. In the input files:
Added new shapes for the canopy. The new possible shapes are:
Re-structured the input files to make them more self-contained. I did not want to change the format of the input files but the division of parameters between files was not very logical. I think it is now very logical and should not have to be changed again. Now:
G(zenith) = (1 + DIFSKY*cos(zenith)) / (1 + 2/PI * DIFSKY)
For a uniform overcast sky, DIFSKY = 0.0 (default). See Wang & Jarvis (1990) Silva Carelica 15:167-180 and Steven & Unsworth (1980) Quart. J. Roy. Meteorol. Soc. 105: 593-602 for more information about DIFSKY.
Included a simulation of shadecloth covering a greenhouse around the trees. I assume that the greenhouse is rectangular in shape and the corners are at co-ordinates (0,0), (0,YMAX), (XMAX,0), (XMAX,YMAX). I added a parameter SHADEHT to namelist PLOT in trees.dat, which is the height of shadecloth on the greenhouse (in m). It is assumed that no rays pass through the shadecloth.