'Program name: C:\temp\Calvin.CR3 'Date written: 12/22/2010 'Note: Flag(1) must be set high for the program to execute, which is set low at ' the end of the program!!!!!!!! ' Output processing previously done in the 21X datalogger: '100 Output_Table 2.00 Sec '1 100 L '2 Plot_ID L '3 Day_RTM L '4 Hour_Minute_RTM L '5 Amb_CO2 L '6 LBSL L '7 MinLagTim L '8 MinSamTim L '9 Air_Temp L '10 Batt_V L '11 Volume_ml L '12 Press_mb L '13 Area_m2 L '200 Output_Table 2.00 Sec '1 200 L '2 Plot_ID L '3 Day_RTM L '4 Hour_Minute_RTM L '5 Seconds_RTM L '6 CO2_ppm L '7 Soil_Temp L '300 Output_Table 2.00 Sec '1 300 L '2 Plot_ID L '3 Day_RTM L '4 Hour_Minute_RTM L '5 Seconds_RTM L '6 CO2_ppm L '7 Soil_Temp L '8 MinML1 L '9 OrgML1 L '400 Output_Table 2.00 Sec '1 400 L '2 Plot_ID L '3 Day_RTM L '4 Hour_Minute_RTM L '5 Seconds_RTM L '6 CO2_ppm L '7 Soil_Temp L 'covariance '2 Plot_ID L '3 Day_RTM L '4 Hour_Minute_RTM L '5 Soil_Temp L '6 Slope L '7 r2 L '8 Flux L '9 MeanTim_1 L '10 MeanCO2 L '11 SDx L '12 SDy L 'covariance '13 Mean_Min L '14 Mean_Org L '15 SD_Min L '16 SD_Org L '\\\\\\\\\\\\\\\\\\\\\\\\\ DECLARATIONS ///////////////////////// Public Flag(2) As Boolean Public OutputFlag(2) As Boolean Public Plot_ID Public Elapsed Public CO2_ppm Public Soil_Temp Public Slope Public r2 Public Flux Public Amb_CO2 Public LBSL Public MinLagTim Public MinSamTim Public Air_Temp Public Batt_V Public Volume_ml Public Press_mb Public Area_m2 Public Scrub Public Slow_Scrb Public ModTimer Public CO2diff Public Cov_Co2_output(7) Alias Cov_Co2_output(1) = var_timesampl_CO2 Alias Cov_Co2_output(2) = cov_timesampl_CO2 Alias Cov_Co2_output(3) = MeanTim_1 Alias Cov_Co2_output(4) = MeanCO2 Alias Cov_Co2_output(5) = SDx Alias Cov_Co2_output(6) = SDy Alias Cov_Co2_output(7) = r 'Public MeanTim_1 'Public MeanCO2 'Public SDx 'Public SDy 'Public r Public SDy_SDx Public MolVol Public Temp_K Public Cov_Co2_input(2) Alias Cov_Co2_input(1) = timesampl Alias Cov_Co2_input(2) = co2sample Public Temp_res Public Ln_res Public LnR_1000 Public Ref_T Public VinML1_1 Public Cov_xxx_input(2) Alias Cov_xxx_input(1) = MinML1 Alias Cov_xxx_input(2) = OrgML1 Public Mean_Min Public Mean_Org Public SD_Min Public SD_Org '\\\\\\\\\\\\\\\\\\\\\\\\ OUTPUT SECTION //////////////////////// DataTable(Table100,OutputFlag(1),300) ' *** may want to change allocation, Sample(1, Plot_ID, FP2) Sample(1, Amb_CO2, FP2) Sample(1, LBSL, FP2) Sample(1, MinLagTim, FP2) Sample(1, MinSamTim, FP2) Sample(1, Air_Temp, FP2) Sample(1, Batt_V, FP2) Sample(1, Volume_ml, FP2) Sample(1, Press_mb, FP2) Sample(1, Area_m2, FP2) EndTable DataTable(Table200,OutputFlag(2),300) ' *** may want to change allocation Sample(1, Plot_ID, FP2) Sample(1, CO2_ppm, FP2) Sample(1, Soil_Temp, FP2) EndTable DataTable(Table300,OutputFlag(3),300) ' *** may want to change allocation Sample(1, Plot_ID, FP2) Sample(1, CO2_ppm, FP2) Sample(1, Soil_Temp, FP2) Sample(1, MinML1, FP2) Sample(1, OrgML1, FP2) EndTable DataTable(Table400,OutputFlag(4),300) ' *** may want to change allocation Sample(1, Plot_ID, FP2) Sample(1, CO2_ppm, FP2) Sample(1, Soil_Temp, FP2) EndTable DataTable(Table500,OutputFlag(5),-1) ' *** may want to change allocation Sample(1, Plot_ID, FP2) Sample(1, Soil_Temp, FP2) Sample(1, Slope, FP2) Sample(1, r2, FP2) Sample(1, Flux, FP2) Average(1, MinML1, FP2, False) Average(1, OrgML1, FP2, False) StdDev(1, MinML1, FP2, False) StdDev(1, OrgML1, FP2, False) EndTable ' Data Tables to get Covariance outputs same as 21X DataTable(Cov_Co2,Elapsed >= MinSamTim,300) ' *** may want to change allocation Average (1,timesampl,IEEE4,False) Average (1,co2sample,IEEE4,False) StdDev (1,timesampl,IEEE4,False) StdDev (1,co2sample,IEEE4,False) Covariance (2,co2sample,IEEE4,False,2) EndTable '\\\\\\\\\\\\\\\\\\\\\\\\\ SUBROUTINES ////////////////////////// Sub Subroutine1 VoltDiff(CO2_ppm, 1,AutoRange, 1, True, 0,_60Hz, 0.2, 0) VoltDiff(Press_mb, 1,AutoRange, 4, True, 0,_60Hz, 0.23, 0) BrHalf(Temp_res, 1,AutoRange, 5, VX1, 1, 300, True, 0,_60Hz, 1, 0) Temp_res = 0.01*(Temp_res/(1.0-Temp_res)) Temp_res = 1 / Temp_res Ln_res = LOG(Temp_res) LnR_1000 = Ln_res * 0.001 Soil_Temp=0.0015+0.2382*LnR_1000+0*LnR_1000^2+102*LnR_1000^3+0*LnR_1000^4+0*LnR_1000^5 Soil_Temp = 1 / Soil_Temp Soil_Temp = Soil_Temp + -273.15 PanelTemp(Ref_T, 250) TCDiff(Air_Temp,1,AutoRange,2,TypeT,Ref_T,True,0,_60Hz,1,0) Battery(Batt_V) EndSub '\\\\\\\\\\\\\\\\\\\\\\\\\\\ PROGRAM //////////////////////////// BeginProg Scan(2,Sec, 3, 0) MinLagTim = 300 '**** make sure initial settings are correct MinSamTim = 600 '**** Volume_ml = 4786 '**** Area_m2 = .05067 '**** Scrub = 1 '**** Slow_Scrb = 1 '**** Subroutine1 ' measure sensors If Flag(1) = False Then ExitScan 'set Flag(1) = True to run program CallTable Table100 If (Scrub = 1) Then Timer(0,uSec,2) PortSet(1, 1) Do Elapsed=Timer(0,Sec,4) If (Slow_Scrb <> 0) Then CO2diff = CO2_ppm - LBSL If (CO2diff < 30) Then PortSet(1, 0) ModTimer = Elapsed MOD 6 EndIf If (ModTimer < 2) Then PortSet(1, 1) EndIf Subroutine1 CallTable Table200 If (CO2_ppm < LBSL) Then If (CO2_ppm >= 0) Then ExitDo EndIf Loop EndIf PortSet(1, 0) Timer(0,Sec,2) BrHalf(VinML1_1, 1,mv5000, 9, VX3, 1, 5000, False,0,_60Hz, 5, 0) ' **** change mult MinML1=1.07+6.4*VinML1_1+-6.4*VinML1_1^2+4.7*VinML1_1^3+0*VinML1_1^4+0*VinML1_1^5 MinML1 = MinML1 + -1.6 MinML1 = MinML1 * 11.905 OrgML1=1.07+6.4*VinML1_1+-6.4*VinML1_1^2+4.7*VinML1_1^3+0*VinML1_1^4+0*VinML1_1^5 OrgML1 = OrgML1 + -1.3 OrgML1 = OrgML1 * 12.987 Timer(0,Sec,2) Do Subroutine1 Elapsed=Timer(0,Sec,4) CallTable Table300 If (Elapsed >= MinLagTim) Then If (CO2_ppm >= LBSL) Then ExitDo EndIf Loop Timer(0,Sec,2) Do Subroutine1 Elapsed=Timer(0,Sec,4) timesampl = Elapsed co2sample = CO2_ppm CallTable Table400 CallTable Cov_Co2 If Elapsed >= MinSamTim Then ExitDo Loop If ( Cov_Co2.Output(1,1) ) Then GetRecord (var_timesampl_CO2,Cov_Co2,1) r = cov_timesampl_CO2/(SDx * SDy) SDy_SDx = SDy / SDx Slope = r * SDy_SDx r2 = r * r MolVol = Volume_ml * 0.0446 MolVol = MolVol * 0.001 MolVol = MolVol * Press_mb MolVol = MolVol * 0.00987 Temp_K = Air_Temp + 273 MolVol = MolVol / Temp_K MolVol = MolVol * 273 Flux = Slope * MolVol Flux = Flux / Area_m2 EndIf CallTable Table500 Flag(1) = False ' user has to manually set high? NextScan EndProg