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