FREE AIR CO2 ENRICHMENT (FACE) FINE-ROOT DATA REPORT:
        Root-length Production, Mortality, and Standing Crop
        Annual Totals by Depth Interval
-----------------------------------------------------------------------
DESCRIPTION OF FILES 
--------------------
This report documents 4 data files with names of root_production.dat,
root_mortality.dat, root_crop.dat, and root_annual_totals.dat.
**********
Description applicable to root_production.dat, root_mortality.dat, and 
root_crop.dat:
These data on root length were recorded biweekly during the growing 
season on five FACE plots from 1998 through 2007.  Beginning in 2004, 
data also were recorded monthly during the winter.
Methods for collecting these data are documented in Norby, R.J., J. Ledford,    
C.D. Reilly, N.E. Miller, and E.G. O'Neill (2004) Fine-root production
dominates response of a deciduous forest to atmospheric CO2 enrichment. 
Proc. Natl. Acad. Sci. 101:9689-9693. 
The calculation of root-length production, mortality, and standing
crop is described in Hendrick, R.L. and K.S.Pregitzer (1993)
The dynamics of fine root length, biomass, and nitrogen content in 
two northern hardwood ecosystems. Can. J. For. Res. 23:2507-2520. 
Estimates of production and mortality during the interval between the last
observation of one year and the first observation of the next year are 
based on the net change in standing crop.
 
**********
Description applicable to root_annual_totals.dat:
  
Fine-root length per minirhizotron tube were converted to grams root 
per square meter ground area as described in: Iversen CM, Ledford J,
Norby RJ. 2008. CO2 enrichment increases carbon and nitrogen input from 
fine roots in a deciduous forest. New Phytologist 179:837-847.
Annual sums (April 1 to March 31) of production and mortality by depth
interval include estimates of production and mortality per individual
minirhizotron tube during the interval between the last observation of 
one year and the first observation of the next year. 
**********
LIST OF FILES
-------------
root_production.dat
root_mortality.dat
root_crop.dat
root_annual_totals.dat
FORMAT OF THE ASCII DATA FILES
------------------------------
Contents and format of root_production.dat 
Variable  Variable   Variable  Starting  Ending  Units     Definition and
          type       width     column    column            comments
DAY       Integer    2         1         2       d         Day of the month 
MONTH     Character  3         3         5       m         Month
YEAR      Integer    4         6         9       y         Year
PROD1     Real       8         12        19      mm/tube   Production ring 1
PROD2     Real       8         20        27      mm/tube   Production ring 2
PROD3     Real       8         28        35      mm/tube   Production ring 3
PROD4     Real       8         36        43      mm/tube   Production ring 4
PROD5     Real       8         44        51      mm/tube   Production ring 5
**********
Contents and format of root_mortality.dat
Variable  Variable   Variable  Starting  Ending  Units     Definition and
          type       width     column    column            comments
DAY       Integer    2         1         2       d         Day of the month 
MONTH     Character  3         3         5       m         Month
YEAR      Integer    4         6         9       y         Year
MORT1     Real       8         12        19      mm/tube   Mortality ring 1
MORT2     Real       8         20        27      mm/tube   Mortality ring 2
MORT3     Real       8         28        35      mm/tube   Mortality ring 3
MORT4     Real       8         36        43      mm/tube   Mortality ring 4
MORT5     Real       8         44        51      mm/tube   Mortality ring 5
**********
Contents and format of root_crop.dat 
Variable  Variable   Variable  Starting  Ending  Units     Definition and
          type       width     column    column            comments
DAY       Integer    2         1         2       d         Day of the month 
MONTH     Character  3         3         5       m         Month
YEAR      Integer    4         6         9       y         Year
CROP1     Real       8         12        19      mm/tube   Crop ring 1
CROP2     Real       8         20        27      mm/tube   Crop ring 2
CROP3     Real       8         28        35      mm/tube   Crop ring 3
CROP4     Real       8         36        43      mm/tube   Crop ring 4
CROP5     Real       8         44        51      mm/tube   Crop ring 5
**********
Contents and format of root_annual_totals.dat 
Variable    Variable   Variable  Starting  Ending  Units  Definition and
            type       width     column    column         comments
YEAR        Integer    4         1         4         y      Year
RING        Integer    1         7         7         -      plot #
DEPTH       Character  5         11        15        m      Depth Interval 
TOT_PROD    Real       6         19        24       g/m2    Total Production 
TOT_MORT    Real       6         30        35       g/m2    Total Mortality
PEAK_CROP   Real       6         44        49       g/m2    Peak Standing Crop
**********
SAMPLE LISTINGS OF THE ASCII DATA FILES
----------------------------------------
The missing-value indicator for the fine-root data is -999.00.
root_production.dat
First listed records
03APR1998     18.92   58.42   33.06   18.55    7.33
17APR1998      1.66   31.34   18.26   15.87   11.06
**********
Last listed records
16FEB2006      1.19    9.59    1.53    0.00    5.70
15MAR2006      1.48    2.80    0.00    7.66    6.99
**********
root_mortality.dat
First listed records
03APR1998      2.34    0.33    6.41    2.45   14.81
17APR1998      2.54    3.61    8.56    0.82    8.29
**********
Last listed records
16FEB2006      9.38   18.16   14.73   14.10    2.51
15MAR2006     19.79   14.41    2.46    7.75    9.34
**********
root_crop.dat
First listed records
19FEB1998      9.40   27.00  120.90   35.40   59.90
03APR1998     18.90   58.40  134.40   46.50   40.90
**********
Last listed records
16FEB2006    146.10  355.60   98.80   31.30  252.10
15MAR2006    127.80  344.00   96.40   31.20  251.60
**********
root_annual_totals.dat
First listed records
1998  1    0-15    82.83      48.98         79.50
1998  1   15-30    63.38      42.11         21.59
**********
Last listed records
2007  5   30-45    95.18      93.68        126.44
2007  5   45-60    69.52      86.37         80.76
**********
SPREADSHEET SOFTWARE TO ACCESS THE DATA
--------------------------------------------
Since these fine-root data files are space-delimited ASCII text, 
the files can be imported to spreadsheet software such as Excel.
**********
SAS and FORTRAN CODES TO ACCESS THE DATA
----------------------------------------
The following three SAS codes will read the fine-root data files.
/* SAS code to read root_production.dat */
/*   Input Variables: */
/*         sdate - Date represented as ddmmmyyyy */
/*         prod1 - Ring 1 production */
/*         prod2 - Ring 2 production */
/*         prod3 - Ring 3 production */
/*         prod4 - Ring 4 production */
/*         prod5 - Ring 5 production */
data production;
   array prod[5] prod1-prod5;
   infile "root_production.dat";
   if _N_ = 1 then do;
      /* Read header records. */
      input /////////;
   end;
   input @1 sdate date9. @12 (prod1 - prod5 ) (8.2);
proc print;
run;
**********
/* SAS code to read root_mortality.dat */
/*   Input Variables: */
/*         sdate - Date represented as ddmmmyyyy */
/*         mort1 - Ring 1 mortality */
/*         mort2 - Ring 2 mortality */
/*         mort3 - Ring 3 mortality */
/*         mort4 - Ring 4 mortality */
/*         mort5 - Ring 5 mortality */
data mortality;
   array mort [5] mort1-mort5;
   infile "root_mortality.dat";
   if _N_ = 1 then do;
      /* Read header records. */
      input /////////;
   end;
   input @1 sdate date9. @12 (mort1 - mort5 ) (8.2);
proc print;
run;
**********
/* SAS code to read root_crop.dat
/*   Input Variables: */
/*         sdate - Date represented as ddmmmyyyy */
/*         crop1 - Ring 1 standing crop*/
/*         crop2 - Ring 2 standing crop*/
/*         crop3 - Ring 3 standing crop*/
/*         crop4 - Ring 4 standing crop*/
/*         crop5 - Ring 5 standing crop*/
data crop;
   array crop [5] crop1-crop5;
   infile "root_crop.dat";
   if _N_ = 1 then do;
      /* Read header records. */
      input /////////;
   end;
   input @1 sdate date9. @12 (crop1 - crop5 ) (8.2);
proc print;
run;
**********
/* SAS code to read root_annual_totals.dat
/*   Input Variables: */
/*         year - Year */
/*         ring - Ring number (1-5) */
/*         depth - Depth interval */
/*         tot_prod - Total production (g/m2) */
/*         tot_mort - Total mortality (g/m2) */
/*         peak_crop - Peak standing crop (g/m2) */
data fr_totals; 
   infile "root_annual_totals.dat";
   if _N_ = 1 then input //////////;
   length depth $ 5;
   input @1 year @7 ring @11 depth @19 tot_prod 6.2 
         @30 tot_mort 6.2 @44 peak_crop 6.2; 
proc print;
run;
**********
The following three FORTRAN codes will read the fine-root data files.
      program root_production
!     read the root_production.dat file
      implicit none
!     Input variables:
!           day   - Day of the month
!           month - Month
!           year  - Year
!           prod1 - Fine-root production for ring 1 
!           prod2 - Fine-root production for ring 2 
!           prod3 - Fine-root production for ring 3 
!           prod4 - Fine-root production for ring 4 
!           prod5 - Fine-root production for ring 5 
      integer :: day, year, nrec, ioerror, i
      real    :: prod(5)
      character(len=3) :: month
      open(unit = 10, file = 'root_production.dat',&
         &status = 'old', iostat = ioerror)
      if(ioerror < 0) then
         write(6,'("Error opening input file.")')
         stop
      endif
!     input header records
      read(10,'(/////////)')
      if(ioerror /= 0) then
         write(6,'("Input error reading header records.")')
         stop
      endif
      nrec = 0   !initialize counter for summing number of input records
   10 continue
      read(10,'(i2, a3, i4, 2x, 5f8.2)', iostat = ioerror)&
        & day, month, year, (prod(i), i= 1,5)
      if(ioerror < 0) then
         write(6,'("End-of-file")')
         write(6,'("Number of data records read = ", i5)') nrec
        stop
      endif
      write(6,'(i2,a3,i4,2x,5f8.2)')&
         & day, month, year, (prod(i), i= 1,5)
      nrec = nrec + 1
      go to 10   !read next record
      close (10)
      stop
      end
**********
      program root_mortality
!     read the root_mortality.dat file
      implicit none
!     Input variables:
!           day   - Day of the month
!           month - Month
!           year  - Year
!           mort1 - Fine-root mortality for ring 1 
!           mort2 - Fine-root mortality for ring 2 
!           mort3 - Fine-root mortality for ring 3 
!           mort4 - Fine-root mortality for ring 4 
!           mort5 - Fine-root mortality for ring 5 
      integer :: day, year, nrec, ioerror, i
      real    :: mort(5)
      character(len=3) :: month
      open(unit = 10, file = 'root_mortality.dat',&
         &status = 'old', iostat = ioerror)
      if(ioerror < 0) then
         write(6,'("Error opening input file.")')
         stop
      endif
!     input header records
      read(10,'(/////////)')
      if(ioerror /= 0) then
         write(6,'("Input error reading header records.")')
         stop
      endif
      nrec = 0   !initialize counter for summing number of input records
   10 continue
      read(10,'(i2, a3, i4, 2x, 5f8.2)', iostat = ioerror)&
        & day, month, year, (mort(i), i= 1,5)
      if(ioerror < 0) then
         write(6,'("End-of-file")')
         write(6,'("Number of data records read = ", i5)') nrec
        stop
      endif
      write(6,'(i2,a3,i4,2x,5f8.2)')&
         & day, month, year, (mort(i), i= 1,5)
      nrec = nrec + 1
      go to 10   !read next record
      close (10)
      stop
      end
**********
      program root_crop
!     read the root_crop.dat file
      implicit none
!     Input variables:
!           day   - Day of the month
!           month - Month
!           year  - Year
!           crop1 - Fine-root standing crop for ring 1 
!           crop2 - Fine-root standing crop for ring 2 
!           crop3 - Fine-root standing crop for ring 3 
!           crop4 - Fine-root standing crop for ring 4 
!           crop5 - Fine-root standing crop for ring 5 
      integer :: day, year, nrec, ioerror, i
      real    :: crop(5)
      character(len=3) :: month
      open(unit = 10, file = 'root_crop.dat',&
         &status = 'old', iostat = ioerror)
      if(ioerror < 0) then
         write(6,'("Error opening input file.")')
         stop
      endif
!     input header records
      read(10,'(/////////)')
      if(ioerror /= 0) then
         write(6,'("Input error reading header records.")')
         stop
      endif
      nrec = 0   !initialize counter for summing number of input records
   10 continue
      read(10,'(i2, a3, i4, 2x, 5f8.2)', iostat = ioerror)&
        & day, month, year, (crop(i), i= 1,5)
      if(ioerror < 0) then
         write(6,'("End-of-file")')
         write(6,'("Number of data records read = ", i5)') nrec
        stop
      endif
      write(6,'(i2,a3,i4,2x,5f8.2)')&
         & day, month, year, (crop(i), i= 1,5)
      nrec = nrec + 1
      go to 10   !read next record
      close (10)
      stop
      end
**********
      program root_totals
!     read the root_annual_totals.dat file
      implicit none
!     Input variables:
!           year - Year 
!           ring - Ring number (1-5) 
!           depth - Depth interval 
!           tot_prod - Total Production (g/m2) 
!           tot_mort - Total Mortality (g/m2) 
!           peak_crop - Peak Standing Crop (g/m2) 
      integer :: year, ring, nrec, ioerror 
      real    :: tot_prod, tot_mort, peak_crop 
      character(len=5) :: depth 
      open(unit = 10, file = 'root_annual_totals.dat',&
         &status = 'old', iostat = ioerror)
      if(ioerror < 0) then
         write(6,'("Error opening input file.")')
         stop
      endif
!     input header records
      read(10,'(//////////)')
      if(ioerror /= 0) then
         write(6,'("Input error reading header records.")')
         stop
      endif
      nrec = 0   !initialize counter for summing the number of input records
   10 continue
      read(10,'(i4,2x,i1,3x,a5,3x,f6.2,5x,f6.2,8x,f6.2)', iostat = ioerror)&
        & year, ring, depth, tot_prod, tot_mort, peak_crop
      if(ioerror < 0) then
         write(6,'("End-of-file")')
         write(6,'("Number of data records read = ", i5)') nrec
        stop
      endif
      write(6,'(i4,2x,i1,3x,a5,3x,f6.2,5x,f6.2,8x,f6.2)', iostat = ioerror)&
        & year, ring, depth, tot_prod, tot_mort, peak_crop
      nrec = nrec + 1
      go to 10   !read next record
      close (10)
      stop
      end