From ba0b01ac09baeb86c856779bf67ea07f5efb25d1 Mon Sep 17 00:00:00 2001 From: czarakas Date: Wed, 3 Mar 2021 18:05:22 -0700 Subject: [PATCH 01/12] Preliminary implementation of Kumarathunge et al. temperature acclimation --- biogeochem/EDPatchDynamicsMod.F90 | 5 +- biogeophys/FatesPlantRespPhotosynthMod.F90 | 137 ++++++++++++++++++--- main/EDParamsMod.F90 | 15 ++- main/EDTypesMod.F90 | 7 ++ main/FatesHistoryInterfaceMod.F90 | 85 ++++++++++++- 5 files changed, 229 insertions(+), 20 deletions(-) diff --git a/biogeochem/EDPatchDynamicsMod.F90 b/biogeochem/EDPatchDynamicsMod.F90 index ea0b2918db..9c129061fb 100644 --- a/biogeochem/EDPatchDynamicsMod.F90 +++ b/biogeochem/EDPatchDynamicsMod.F90 @@ -2087,7 +2087,10 @@ subroutine zero_patch(cp_p) currentPatch%ed_laisha_z(:,:,:) = nan currentPatch%ed_parsun_z(:,:,:) = nan currentPatch%ed_parsha_z(:,:,:) = nan - currentPatch%psn_z(:,:,:) = 0._r8 + currentPatch%psn_z(:,:,:) = 0._r8 + currentPatch%aj_z(:,:,:) = 0._r8 + currentPatch%ac_z(:,:,:) = 0._r8 + currentPatch%ap_z(:,:,:) = 0._r8 currentPatch%f_sun(:,:,:) = nan currentPatch%tr_soil_dir(:) = nan ! fraction of incoming direct radiation that is transmitted to the soil as direct diff --git a/biogeophys/FatesPlantRespPhotosynthMod.F90 b/biogeophys/FatesPlantRespPhotosynthMod.F90 index bfe01d25be..dea90e7a41 100644 --- a/biogeophys/FatesPlantRespPhotosynthMod.F90 +++ b/biogeophys/FatesPlantRespPhotosynthMod.F90 @@ -46,9 +46,11 @@ module FATESPlantRespPhotosynthMod use PRTGenericMod, only : store_organ use PRTGenericMod, only : repro_organ use PRTGenericMod, only : struct_organ - use EDParamsMod, only : ED_val_base_mr_20, stomatal_model + use EDParamsMod, only : ED_val_base_mr_20, stomatal_model, temp_acclim use PRTParametersMod, only : prt_params + use TemperatureType, only : temperature_type + ! CIME Globals use shr_log_mod , only : errMsg => shr_log_errMsg @@ -77,7 +79,7 @@ module FATESPlantRespPhotosynthMod !-------------------------------------------------------------------------------------- - subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) + subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime, temperature_inst) ! ----------------------------------------------------------------------------------- ! !DESCRIPTION: @@ -119,6 +121,7 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) type(bc_in_type),intent(in) :: bc_in(nsites) type(bc_out_type),intent(inout) :: bc_out(nsites) real(r8),intent(in) :: dtime + type(temperature_type) , intent(in) :: temperature_inst ! LOCAL VARIABLES: @@ -498,6 +501,7 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) call LeafLayerBiophysicalRates(currentPatch%ed_parsun_z(cl,ft,iv), & ! in + temperature_inst, & !in ft, & ! in currentCohort%vcmax25top, & ! in currentCohort%jmax25top, & ! in @@ -540,6 +544,9 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) co2_cpoint, & ! in lmr_z(iv,ft,cl), & ! in currentPatch%psn_z(cl,ft,iv), & ! out + currentPatch%aj_z(cl,ft,iv), & ! out + currentPatch%ac_z(cl,ft,iv), & ! out + currentPatch%ap_z(cl,ft,iv), & ! out rs_z(iv,ft,cl), & ! out anet_av_z(iv,ft,cl), & ! out c13disc_z(cl,ft,iv)) ! out @@ -552,6 +559,9 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) currentCohort%npp_tstep = 0.0_r8 currentCohort%resp_tstep = 0.0_r8 currentCohort%gpp_tstep = 0.0_r8 + currentCohort%aj_sum_tstep = 0.0_r8 + currentCohort%ac_sum_tstep = 0.0_r8 + currentCohort%ap_sum_tstep = 0.0_r8 currentCohort%rdark = 0.0_r8 currentCohort%resp_m = 0.0_r8 currentCohort%ts_net_uptake = 0.0_r8 @@ -567,6 +577,9 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) nv = currentCohort%nv call ScaleLeafLayerFluxToCohort(nv, & !in currentPatch%psn_z(cl,ft,1:nv), & !in + currentPatch%aj_z(cl,ft,1:nv), & !in + currentPatch%ac_z(cl,ft,1:nv), & !in + currentPatch%ap_z(cl,ft,1:nv), & !in lmr_z(1:nv,ft,cl), & !in rs_z(1:nv,ft,cl), & !in currentPatch%elai_profile(cl,ft,1:nv), & !in @@ -577,6 +590,9 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) maintresp_reduction_factor, & !in currentCohort%g_sb_laweight, & !out currentCohort%gpp_tstep, & !out + currentCohort%aj_sum_tstep, & !out + currentCohort%ac_sum_tstep, & !out + currentCohort%ap_sum_tstep, & !out currentCohort%rdark, & !out currentCohort%c13disc_clm, & !out cohort_eleaf_area) !out @@ -591,6 +607,9 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) ! or dark respiration cohort_eleaf_area = 0.0_r8 currentCohort%gpp_tstep = 0.0_r8 + currentCohort%aj_sum_tstep = 0.0_r8 + currentCohort%ac_sum_tstep = 0.0_r8 + currentCohort%ap_sum_tstep = 0.0_r8 currentCohort%rdark = 0.0_r8 currentCohort%g_sb_laweight = 0.0_r8 currentCohort%ts_net_uptake(:) = 0.0_r8 @@ -721,6 +740,9 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) ! convert from kgC/indiv/s to kgC/indiv/timestep currentCohort%resp_m = currentCohort%resp_m * dtime currentCohort%gpp_tstep = currentCohort%gpp_tstep * dtime + currentCohort%aj_sum_tstep = currentCohort%aj_sum_tstep * dtime + currentCohort%ac_sum_tstep = currentCohort%ac_sum_tstep * dtime + currentCohort%ap_sum_tstep = currentCohort%ap_sum_tstep * dtime currentCohort%ts_net_uptake = currentCohort%ts_net_uptake * dtime if ( debug ) write(fates_log(),*) 'EDPhoto 911 ', currentCohort%gpp_tstep @@ -856,6 +878,9 @@ subroutine LeafLayerPhotosynthesis(f_sun_lsl, & ! in co2_cpoint, & ! in lmr, & ! in psn_out, & ! out + aj_out, & ! out + ac_out, & ! out + ap_out, & ! out rstoma_out, & ! out anet_av_out, & ! out c13disc_z) ! out @@ -912,6 +937,9 @@ subroutine LeafLayerPhotosynthesis(f_sun_lsl, & ! in real(r8), intent(in) :: lmr ! Leaf Maintenance Respiration (umol CO2/m**2/s) real(r8), intent(out) :: psn_out ! carbon assimilated in this leaf layer umolC/m2/s + real(r8), intent(out) :: aj_out ! RuBP-limited gross photosynthesis (umol CO2/m2/s) + real(r8), intent(out) :: ac_out ! Rubisco-limited gross photosynthesis (umol CO2/m2/s) + real(r8), intent(out) :: ap_out ! Product-limited gross photosynthesis (umol CO2/m2/s) real(r8), intent(out) :: rstoma_out ! stomatal resistance (1/gs_lsl) (s/m) real(r8), intent(out) :: anet_av_out ! net leaf photosynthesis (umol CO2/m**2/s) ! averaged over sun and shade leaves. @@ -996,6 +1024,9 @@ subroutine LeafLayerPhotosynthesis(f_sun_lsl, & ! in anet_av_out = -lmr psn_out = 0._r8 + aj_out = 0._r8 + ac_out = 0._r8 + ap_out = 0._r8 ! The cuticular conductance already factored in maximum resistance as a bound ! no need to re-bound it @@ -1011,6 +1042,9 @@ subroutine LeafLayerPhotosynthesis(f_sun_lsl, & ! in !Loop aroun shaded and unshaded leaves psn_out = 0._r8 ! psn is accumulated across sun and shaded leaves. + aj_out = 0._r8 + ac_out = 0._r8 + ap_out = 0._r8 rstoma_out = 0._r8 ! 1/rs is accumulated across sun and shaded leaves. anet_av_out = 0._r8 gstoma = 0._r8 @@ -1190,10 +1224,16 @@ subroutine LeafLayerPhotosynthesis(f_sun_lsl, & ! in ! weight per unit sun and sha leaves. if(sunsha == 1)then !sunlit psn_out = psn_out + agross * f_sun_lsl + aj_out = aj_out + aj * f_sun_lsl + ac_out = ac_out + ac * f_sun_lsl + ap_out = ap_out + ap * f_sun_lsl anet_av_out = anet_av_out + anet * f_sun_lsl gstoma = gstoma + 1._r8/(min(1._r8/gs, rsmax0)) * f_sun_lsl else - psn_out = psn_out + agross * (1.0_r8-f_sun_lsl) + psn_out = psn_out + agross * (1.0_r8-f_sun_lsl) + aj_out = aj_out + aj * (1.0_r8-f_sun_lsl) + ac_out = ac_out + ac * (1.0_r8-f_sun_lsl) + ap_out = ap_out + ap * (1.0_r8-f_sun_lsl) anet_av_out = anet_av_out + anet * (1.0_r8-f_sun_lsl) gstoma = gstoma + & 1._r8/(min(1._r8/gs, rsmax0)) * (1.0_r8-f_sun_lsl) @@ -1233,6 +1273,9 @@ subroutine LeafLayerPhotosynthesis(f_sun_lsl, & ! in ! (leaves are off, or have reduced to 0) psn_out = 0._r8 + aj_out = 0._r8 + ac_out = 0._r8 + ap_out = 0._r8 anet_av_out = 0._r8 rstoma_out = min(rsmax0,cf/(stem_cuticle_loss_frac*stomatal_intercept(ft))) @@ -1252,6 +1295,9 @@ end subroutine LeafLayerPhotosynthesis subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv psn_llz, & ! in %psn_z(1:currentCohort%nv,ft,cl) + aj_llz, & ! in %aj_z(1:currentCohort%nv,ft,cl) + ac_llz, & ! in %ac_z(1:currentCohort%nv,ft,cl) + ap_llz, & ! in %ap_z(1:currentCohort%nv,ft,cl) lmr_llz, & ! in lmr_z(1:currentCohort%nv,ft,cl) rs_llz, & ! in rs_z(1:currentCohort%nv,ft,cl) elai_llz, & ! in %elai_profile(cl,ft,1:currentCohort%nv) @@ -1262,6 +1308,9 @@ subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv maintresp_reduction_factor, & ! in g_sb_laweight, & ! out currentCohort%g_sb_laweight [m/s] [m2-leaf] gpp, & ! out currentCohort%gpp_tstep + aj_sum, & ! out currentCohort%aj_sum_tstep + ac_sum, & ! out currentCohort%ac_sum_tstep + ap_sum, & ! out currentCohort%ap_sum_tstep rdark, & ! out currentCohort%rdark c13disc_clm, & ! out currentCohort%c13disc_clm cohort_eleaf_area ) ! out [m2] @@ -1279,6 +1328,9 @@ subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv ! Arguments integer, intent(in) :: nv ! number of active leaf layers real(r8), intent(in) :: psn_llz(nv) ! layer photosynthesis rate (GPP) [umolC/m2leaf/s] + real(r8), intent(in) :: aj_llz(nv) ! layer RuBP-limited photosynthesis rate [umolC/m2leaf/s] + real(r8), intent(in) :: ac_llz(nv) ! layer Rubisco-limited photosynthesis rate [umolC/m2leaf/s] + real(r8), intent(in) :: ap_llz(nv) ! layer Product-limited photosynthesis rate [umolC/m2leaf/s] real(r8), intent(in) :: lmr_llz(nv) ! layer dark respiration rate [umolC/m2leaf/s] real(r8), intent(in) :: rs_llz(nv) ! leaf layer stomatal resistance [s/m] real(r8), intent(in) :: elai_llz(nv) ! exposed LAI per layer [m2 leaf/ m2 pft footprint] @@ -1290,6 +1342,9 @@ subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv real(r8), intent(out) :: g_sb_laweight ! Combined conductance (stomatal + boundary layer) for the cohort ! weighted by leaf area [m/s]*[m2] real(r8), intent(out) :: gpp ! GPP (kgC/indiv/s) + real(r8), intent(out) :: aj_sum ! RuBP-limited GPP (kgC/indiv/s) + real(r8), intent(out) :: ac_sum ! Rubisco-limited GPP (kgC/indiv/s) + real(r8), intent(out) :: ap_sum ! Product-limited GPP (kgC/indiv/s) real(r8), intent(out) :: rdark ! Dark Leaf Respiration (kgC/indiv/s) real(r8), intent(out) :: cohort_eleaf_area ! Effective leaf area of the cohort [m2] real(r8), intent(out) :: c13disc_clm ! unpacked Cohort level c13 discrimination @@ -1306,6 +1361,9 @@ subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv cohort_eleaf_area = 0.0_r8 g_sb_laweight = 0.0_r8 gpp = 0.0_r8 + aj_sum = 0.0_r8 + ac_sum = 0.0_r8 + ap_sum = 0.0_r8 rdark = 0.0_r8 do il = 1, nv ! Loop over the leaf layers this cohort participates in @@ -1331,6 +1389,11 @@ subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv ! GPP [umolC/m2leaf/s] * [m2 leaf ] -> [umolC/s] (This is cohort group sum) gpp = gpp + psn_llz(il) * cohort_layer_eleaf_area + !RuBP-, rubisco-, and product-limited GPP + aj_sum = aj_sum + aj_llz(il) * cohort_layer_eleaf_area + ac_sum = ac_sum + ac_llz(il) * cohort_layer_eleaf_area + ap_sum = ap_sum + ap_llz(il) * cohort_layer_eleaf_area + ! Dark respiration ! [umolC/m2leaf/s] * [m2 leaf] (This is the cohort group sum) rdark = rdark + lmr_llz(il) * cohort_layer_eleaf_area @@ -1365,6 +1428,9 @@ subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv rdark = rdark * umolC_to_kgC * maintresp_reduction_factor / nplant gpp = gpp * umolC_to_kgC / nplant + aj_sum = aj_sum * umolC_to_kgC / nplant + ac_sum = ac_sum * umolC_to_kgC / nplant + ap_sum = ap_sum * umolC_to_kgC / nplant if ( debug ) then write(fates_log(),*) 'EDPhoto 816 ', gpp @@ -1811,6 +1877,7 @@ end subroutine LeafLayerMaintenanceRespiration ! ==================================================================================== subroutine LeafLayerBiophysicalRates( parsun_lsl, & + temperature_inst, & ft, & vcmax25top_ft, & jmax25top_ft, & @@ -1843,8 +1910,9 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & ! Arguments ! ------------------------------------------------------------------------------ - + real(r8), intent(in) :: parsun_lsl ! PAR absorbed in sunlit leaves for this layer + type(temperature_type) , intent(in) :: temperature_inst integer, intent(in) :: ft ! (plant) Functional Type Index real(r8), intent(in) :: nscaler ! Scale for leaf nitrogen profile real(r8), intent(in) :: vcmax25top_ft ! canopy top maximum rate of carboxylation at 25C @@ -1864,7 +1932,7 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & real(r8), intent(out) :: tpu ! triose phosphate utilization rate ! (umol CO2/m**2/s) real(r8), intent(out) :: co2_rcurve_islope ! initial slope of CO2 response curve (C4 plants) - + ! Locals ! ------------------------------------------------------------------------------- real(r8) :: vcmax25 ! leaf layer: maximum rate of carboxylation at 25C @@ -1888,26 +1956,55 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & real(r8) :: vcmaxse ! entropy term for vcmax (J/mol/K) real(r8) :: jmaxse ! entropy term for jmax (J/mol/K) real(r8) :: tpuse ! entropy term for tpu (J/mol/K) + + real(r8) :: tgrowth ! average growing temperature + real(r8) :: thome ! average home temperature + real(r8) :: jvr ! ratio of Jmax25 / Vcmax25 + real(r8) :: vcmaxc ! scaling factor for high temperature inhibition (25 C = 1.0) real(r8) :: jmaxc ! scaling factor for high temperature inhibition (25 C = 1.0) real(r8) :: tpuc ! scaling factor for high temperature inhibition (25 C = 1.0) - vcmaxha = EDPftvarcon_inst%vcmaxha(FT) - jmaxha = EDPftvarcon_inst%jmaxha(FT) + associate( t10 => temperature_inst%t_a10_patch, & ! Input: [real(r8) (:) ] 10-day running mean of the 2 m temperature (K) + t30 => temperature_inst%t_a30_patch) ! Input: [real(r8) (:) ] 30-day running mean of the 2 m temperature (K) + + if (temp_acclim == 0) then !No temperature acclimation + vcmaxha = EDPftvarcon_inst%vcmaxha(FT) + jmaxha = EDPftvarcon_inst%jmaxha(FT) + vcmaxhd = EDPftvarcon_inst%vcmaxhd(FT) + jmaxhd = EDPftvarcon_inst%jmaxhd(FT) + vcmaxse = EDPftvarcon_inst%vcmaxse(FT) + jmaxse = EDPftvarcon_inst%jmaxse(FT) + else if (temp_acclim == 1) then !Kumarathunge et al. temperature acclimation, Thome=Tgrowth + tgrowth = t30(1)-tfrz + thome = t30(1)-tfrz + vcmaxha = (42.6 + (1.14*tgrowth))*1000 !J/mol + jmaxha = 40.71*1000 !J/mol + vcmaxhd = 200*1000 !J/mol + jmaxhd = 200*1000 !J/mol + vcmaxse = (645.13 - (0.38*tgrowth)) + jmaxse = 658.77 - (0.84*thome) - 0.52*(tgrowth-thome) + jvr = 2.56 - (0.0375*thome)-(0.0202*(tgrowth-thome)) + else if (temp_acclim == 2) then !Kumarathunge et al. temperature acclimation, Thome=25C + tgrowth = t30(1)-tfrz + thome = 25 !degrees C + vcmaxha = (42.6 + (1.14*tgrowth))*1000 !J/mol + jmaxha = 40.71*1000 !J/mol + vcmaxhd = 200*1000 !J/mol + jmaxhd = 200*1000 !J/mol + vcmaxse = (645.13 - (0.38*tgrowth)) + jmaxse = 658.77 - (0.84*thome) - 0.52*(tgrowth-thome) + jvr = 2.56 - (0.0375*thome)-(0.0202*(tgrowth-thome)) + end if + tpuha = EDPftvarcon_inst%tpuha(FT) - - vcmaxhd = EDPftvarcon_inst%vcmaxhd(FT) - jmaxhd = EDPftvarcon_inst%jmaxhd(FT) tpuhd = EDPftvarcon_inst%tpuhd(FT) - - vcmaxse = EDPftvarcon_inst%vcmaxse(FT) - jmaxse = EDPftvarcon_inst%jmaxse(FT) tpuse = EDPftvarcon_inst%tpuse(FT) - + vcmaxc = fth25_f(vcmaxhd, vcmaxse) jmaxc = fth25_f(jmaxhd, jmaxse) tpuc = fth25_f(tpuhd, tpuse) - + if ( parsun_lsl <= 0._r8) then ! night time vcmax = 0._r8 jmax = 0._r8 @@ -1917,7 +2014,13 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & ! Vcmax25top was already calculated to derive the nscaler function vcmax25 = vcmax25top_ft * nscaler - jmax25 = jmax25top_ft * nscaler + if (temp_acclim == 0) then + jmax25 = jmax25top_ft * nscaler + else if (temp_acclim == 1) then + jmax25 = vcmax25*jvr + else if (temp_acclim == 2) then + jmax25 = vcmax25*jvr + end if tpu25 = tpu25top_ft * nscaler co2_rcurve_islope25 = co2_rcurve_islope25top_ft * nscaler @@ -1939,6 +2042,8 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & vcmax = vcmax * btran return + end associate + end subroutine LeafLayerBiophysicalRates subroutine lowstorage_maintresp_reduction(frac, pft, maintresp_reduction_factor) diff --git a/main/EDParamsMod.F90 b/main/EDParamsMod.F90 index 8162939bc3..a4987d593f 100644 --- a/main/EDParamsMod.F90 +++ b/main/EDParamsMod.F90 @@ -43,7 +43,8 @@ module EDParamsMod real(r8),protected, public :: ED_val_patch_fusion_tol real(r8),protected, public :: ED_val_canopy_closure_thresh ! site-level canopy closure point where trees take on forest (narrow) versus savannah (wide) crown allometry integer,protected, public :: stomatal_model !switch for choosing between stomatal conductance models, 1 for Ball-Berry, 2 for Medlyn - + integer,protected, public :: temp_acclim !switch for turning on and off temperature acclimation, 0 for off, 1 for Kumarathunge et al. temperature acclimation + logical,protected, public :: active_crown_fire ! flag, 1=active crown fire 0=no active crown fire character(len=param_string_length),parameter :: fates_name_active_crown_fire = "fates_fire_active_crown_fire" @@ -82,6 +83,7 @@ module EDParamsMod character(len=param_string_length),parameter,public :: ED_name_patch_fusion_tol= "fates_patch_fusion_tol" character(len=param_string_length),parameter,public :: ED_name_canopy_closure_thresh= "fates_canopy_closure_thresh" character(len=param_string_length),parameter,public :: ED_name_stomatal_model= "fates_leaf_stomatal_model" + character(len=param_string_length),parameter,public :: ED_name_temp_acclim= "fates_leaf_temp_acclim" ! Resistance to active crown fire @@ -195,6 +197,7 @@ subroutine FatesParamsInit() ED_val_patch_fusion_tol = nan ED_val_canopy_closure_thresh = nan stomatal_model = -9 + temp_acclim = 0 hydr_kmax_rsurf1 = nan hydr_kmax_rsurf2 = nan hydr_psi0 = nan @@ -305,6 +308,9 @@ subroutine FatesRegisterParams(fates_params) call fates_params%RegisterParameter(name=ED_name_stomatal_model, dimension_shape=dimension_shape_scalar, & dimension_names=dim_names_scalar) + + call fates_params%RegisterParameter(name=ED_name_temp_acclim, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) call fates_params%RegisterParameter(name=hydr_name_kmax_rsurf1, dimension_shape=dimension_shape_scalar, & dimension_names=dim_names_scalar) @@ -458,6 +464,10 @@ subroutine FatesReceiveParams(fates_params) data=tmpreal) stomatal_model = nint(tmpreal) + call fates_params%RetreiveParameter(name=ED_name_temp_acclim, & + data=tmpreal) + temp_acclim = nint(tmpreal) + call fates_params%RetreiveParameter(name=hydr_name_kmax_rsurf1, & data=hydr_kmax_rsurf1) @@ -565,7 +575,8 @@ subroutine FatesReportParams(is_master) write(fates_log(),fmt0) 'ED_val_cohort_age_fusion_tol = ',ED_val_cohort_age_fusion_tol write(fates_log(),fmt0) 'ED_val_patch_fusion_tol = ',ED_val_patch_fusion_tol write(fates_log(),fmt0) 'ED_val_canopy_closure_thresh = ',ED_val_canopy_closure_thresh - write(fates_log(),fmt0) 'stomatal_model = ',stomatal_model + write(fates_log(),fmt0) 'stomatal_model = ',stomatal_model + write(fates_log(),fmt0) 'temp_acclim = ',temp_acclim write(fates_log(),fmt0) 'hydr_kmax_rsurf1 = ',hydr_kmax_rsurf1 write(fates_log(),fmt0) 'hydr_kmax_rsurf2 = ',hydr_kmax_rsurf2 write(fates_log(),fmt0) 'hydr_psi0 = ',hydr_psi0 diff --git a/main/EDTypesMod.F90 b/main/EDTypesMod.F90 index 7288a4ef99..c63e2e9503 100644 --- a/main/EDTypesMod.F90 +++ b/main/EDTypesMod.F90 @@ -268,6 +268,10 @@ module EDTypesMod real(r8) :: gpp_acc real(r8) :: gpp_acc_hold + real(r8) :: aj_sum_tstep ! RuBP-limited gross Primary Production (see above *) + real(r8) :: ac_sum_tstep ! Rubisco-limited gross Primary Production (see above *) + real(r8) :: ap_sum_tstep ! Product-limited gross Primary Production (see above *) + real(r8) :: npp_tstep ! Net Primary Production (see above *) real(r8) :: npp_acc real(r8) :: npp_acc_hold @@ -506,6 +510,9 @@ module EDTypesMod ! PHOTOSYNTHESIS real(r8) :: psn_z(nclmax,maxpft,nlevleaf) ! carbon assimilation in each canopy layer, pft, and leaf layer. umolC/m2/s + real(r8) :: aj_z(nclmax,maxpft,nlevleaf) ! RuBP-limited carbon assimilation in each canopy layer, pft, and leaf layer. umolC/m2/s + real(r8) :: ac_z(nclmax,maxpft,nlevleaf) ! Rubisco-limited carbon assimilation in each canopy layer, pft, and leaf layer. umolC/m2/s + real(r8) :: ap_z(nclmax,maxpft,nlevleaf) ! Product-limited carbon assimilation in each canopy layer, pft, and leaf layer. umolC/m2/s ! ROOTS real(r8) :: btran_ft(maxpft) ! btran calculated seperately for each PFT:- diff --git a/main/FatesHistoryInterfaceMod.F90 b/main/FatesHistoryInterfaceMod.F90 index aa5e7db161..a01d701efc 100644 --- a/main/FatesHistoryInterfaceMod.F90 +++ b/main/FatesHistoryInterfaceMod.F90 @@ -255,13 +255,22 @@ module FatesHistoryInterfaceMod integer :: ih_agb_si integer :: ih_npp_si integer :: ih_gpp_si + integer :: ih_aj_si + integer :: ih_ac_si + integer :: ih_ap_si integer :: ih_aresp_si integer :: ih_maint_resp_si integer :: ih_growth_resp_si integer :: ih_ar_canopy_si integer :: ih_gpp_canopy_si + integer :: ih_aj_canopy_si + integer :: ih_ac_canopy_si + integer :: ih_ap_canopy_si integer :: ih_ar_understory_si integer :: ih_gpp_understory_si + integer :: ih_aj_understory_si + integer :: ih_ac_understory_si + integer :: ih_ap_understory_si integer :: ih_canopy_biomass_si integer :: ih_understory_biomass_si @@ -3373,6 +3382,9 @@ subroutine update_history_hifrq(this,nc,nsites,sites,bc_in,dt_tstep) real(r8) :: per_dt_tstep ! Time step in frequency units (/s) associate( hio_gpp_si => this%hvars(ih_gpp_si)%r81d, & + hio_aj_si => this%hvars(ih_aj_si)%r81d, & + hio_ac_si => this%hvars(ih_ac_si)%r81d, & + hio_ap_si => this%hvars(ih_ap_si)%r81d, & hio_npp_si => this%hvars(ih_npp_si)%r81d, & hio_aresp_si => this%hvars(ih_aresp_si)%r81d, & hio_maint_resp_si => this%hvars(ih_maint_resp_si)%r81d, & @@ -3388,8 +3400,14 @@ subroutine update_history_hifrq(this,nc,nsites,sites,bc_in,dt_tstep) hio_ar_crootm_si_scpf => this%hvars(ih_ar_crootm_si_scpf)%r82d, & hio_ar_frootm_si_scpf => this%hvars(ih_ar_frootm_si_scpf)%r82d, & hio_gpp_canopy_si => this%hvars(ih_gpp_canopy_si)%r81d, & + hio_aj_canopy_si => this%hvars(ih_aj_canopy_si)%r81d, & + hio_ac_canopy_si => this%hvars(ih_ac_canopy_si)%r81d, & + hio_ap_canopy_si => this%hvars(ih_ap_canopy_si)%r81d, & hio_ar_canopy_si => this%hvars(ih_ar_canopy_si)%r81d, & hio_gpp_understory_si => this%hvars(ih_gpp_understory_si)%r81d, & + hio_aj_understory_si => this%hvars(ih_aj_understory_si)%r81d, & + hio_ac_understory_si => this%hvars(ih_ac_understory_si)%r81d, & + hio_ap_understory_si => this%hvars(ih_ap_understory_si)%r81d, & hio_ar_understory_si => this%hvars(ih_ar_understory_si)%r81d, & hio_rdark_canopy_si_scls => this%hvars(ih_rdark_canopy_si_scls)%r82d, & hio_livestem_mr_canopy_si_scls => this%hvars(ih_livestem_mr_canopy_si_scls)%r82d, & @@ -3508,6 +3526,14 @@ subroutine update_history_hifrq(this,nc,nsites,sites,bc_in,dt_tstep) hio_gpp_si(io_si) = hio_gpp_si(io_si) + & ccohort%gpp_tstep * g_per_kg * n_perm2 * per_dt_tstep + + hio_aj_si(io_si) = hio_aj_si(io_si) + & + ccohort%aj_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep + hio_ac_si(io_si) = hio_ac_si(io_si) + & + ccohort%ac_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep + hio_ap_si(io_si) = hio_ap_si(io_si) + & + ccohort%ap_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep + hio_aresp_si(io_si) = hio_aresp_si(io_si) + & aresp * g_per_kg * n_perm2 * per_dt_tstep hio_growth_resp_si(io_si) = hio_growth_resp_si(io_si) + & @@ -3572,6 +3598,12 @@ subroutine update_history_hifrq(this,nc,nsites,sites,bc_in,dt_tstep) ! bulk fluxes are in gC / m2 / s hio_gpp_canopy_si(io_si) = hio_gpp_canopy_si(io_si) + & ccohort%gpp_tstep * g_per_kg * n_perm2 * per_dt_tstep + hio_aj_canopy_si(io_si) = hio_aj_canopy_si(io_si) + & + ccohort%aj_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep + hio_ac_canopy_si(io_si) = hio_ac_canopy_si(io_si) + & + ccohort%ac_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep + hio_ap_canopy_si(io_si) = hio_ap_canopy_si(io_si) + & + ccohort%ap_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep hio_ar_canopy_si(io_si) = hio_ar_canopy_si(io_si) + & aresp * g_per_kg * n_perm2 * per_dt_tstep @@ -3593,7 +3625,13 @@ subroutine update_history_hifrq(this,nc,nsites,sites,bc_in,dt_tstep) ! ! bulk fluxes are in gC / m2 / s hio_gpp_understory_si(io_si) = hio_gpp_understory_si(io_si) + & - ccohort%gpp_tstep * g_per_kg * n_perm2 * per_dt_tstep + ccohort%gpp_tstep * g_per_kg * n_perm2 * per_dt_tstep + hio_aj_understory_si(io_si) = hio_aj_understory_si(io_si) + & + ccohort%aj_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep + hio_ac_understory_si(io_si) = hio_ac_understory_si(io_si) + & + ccohort%ac_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep + hio_ap_understory_si(io_si) = hio_ap_understory_si(io_si) + & + ccohort%ap_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep hio_ar_understory_si(io_si) = hio_ar_understory_si(io_si) + & aresp * g_per_kg * n_perm2 * per_dt_tstep @@ -4858,6 +4896,21 @@ subroutine define_history_vars(this, initialize_variables) avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & ivar=ivar, initialize=initialize_variables, index = ih_gpp_si ) + call this%set_history_var(vname='AJ', units='gC/m^2/s', & + long='RuBP-limited gross primary production', use_default='active', & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + ivar=ivar, initialize=initialize_variables, index = ih_aj_si ) + + call this%set_history_var(vname='AC', units='gC/m^2/s', & + long='Rubisco-limited gross primary production', use_default='active', & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + ivar=ivar, initialize=initialize_variables, index = ih_ac_si ) + + call this%set_history_var(vname='AP', units='gC/m^2/s', & + long='Product-limited gross primary production', use_default='active', & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + ivar=ivar, initialize=initialize_variables, index = ih_ap_si ) + call this%set_history_var(vname='AR', units='gC/m^2/s', & long='autotrophic respiration', use_default='active', & avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & @@ -4902,6 +4955,21 @@ subroutine define_history_vars(this, initialize_variables) avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & ivar=ivar, initialize=initialize_variables, index = ih_gpp_canopy_si ) + call this%set_history_var(vname='AJ_CANOPY', units='gC/m^2/s', & + long='RuBP-limited gross primary production of canopy plants', use_default='active', & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + ivar=ivar, initialize=initialize_variables, index = ih_aj_canopy_si ) + + call this%set_history_var(vname='AC_CANOPY', units='gC/m^2/s', & + long='Rubisco-limited gross primary production of canopy plants', use_default='active', & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + ivar=ivar, initialize=initialize_variables, index = ih_ac_canopy_si ) + + call this%set_history_var(vname='AP_CANOPY', units='gC/m^2/s', & + long='Product-limited gross primary production of canopy plants', use_default='active', & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + ivar=ivar, initialize=initialize_variables, index = ih_ap_canopy_si ) + call this%set_history_var(vname='AR_CANOPY', units='gC/m^2/s', & long='autotrophic respiration of canopy plants', use_default='active', & avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & @@ -4912,6 +4980,21 @@ subroutine define_history_vars(this, initialize_variables) avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & ivar=ivar, initialize=initialize_variables, index = ih_gpp_understory_si ) + call this%set_history_var(vname='AJ_UNDERSTORY', units='gC/m^2/s', & + long='RuBP-limited gross primary production of understory plants', use_default='active', & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + ivar=ivar, initialize=initialize_variables, index = ih_aj_understory_si ) + + call this%set_history_var(vname='AC_UNDERSTORY', units='gC/m^2/s', & + long='Rubisco-limited gross primary production of understory plants', use_default='active', & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + ivar=ivar, initialize=initialize_variables, index = ih_ac_understory_si ) + + call this%set_history_var(vname='AP_UNDERSTORY', units='gC/m^2/s', & + long='Product-limited gross primary production of understory plants', use_default='active', & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + ivar=ivar, initialize=initialize_variables, index = ih_ap_understory_si ) + call this%set_history_var(vname='AR_UNDERSTORY', units='gC/m^2/s', & long='autotrophic respiration of understory plants', use_default='active', & avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & From 94853939a7f746cd2ad6e2e09d1ff788c1dd8395 Mon Sep 17 00:00:00 2001 From: ckoven Date: Thu, 2 Feb 2023 22:42:26 -0700 Subject: [PATCH 02/12] added patch-level exponential moving average methods to Kumarathunge 2019 parameterization --- biogeochem/EDPatchDynamicsMod.F90 | 7 ++- biogeophys/FatesPlantRespPhotosynthMod.F90 | 50 +++++++++++----------- main/EDTypesMod.F90 | 2 + main/FatesConstantsMod.F90 | 4 ++ main/FatesInterfaceMod.F90 | 5 +++ main/FatesRestartInterfaceMod.F90 | 7 +++ main/FatesRunningMeanMod.F90 | 1 + 7 files changed, 50 insertions(+), 26 deletions(-) diff --git a/biogeochem/EDPatchDynamicsMod.F90 b/biogeochem/EDPatchDynamicsMod.F90 index 07be08a6b0..3be366b322 100644 --- a/biogeochem/EDPatchDynamicsMod.F90 +++ b/biogeochem/EDPatchDynamicsMod.F90 @@ -95,7 +95,7 @@ module EDPatchDynamicsMod use EDParamsMod, only : maxpatch_primary use EDParamsMod, only : maxpatch_secondary use EDParamsMod, only : maxpatch_total - use FatesRunningMeanMod, only : ema_24hr, fixed_24hr, ema_lpa + use FatesRunningMeanMod, only : ema_24hr, fixed_24hr, ema_lpa, ema_longterm ! CIME globals use shr_infnan_mod , only : nan => shr_infnan_nan, assignment(=) @@ -655,6 +655,7 @@ subroutine spawn_patches( currentSite, bc_in) ! -------------------------------------------------------------------------- call new_patch%tveg24%CopyFromDonor(currentPatch%tveg24) call new_patch%tveg_lpa%CopyFromDonor(currentPatch%tveg_lpa) + call new_patch%tveg_longterm%CopyFromDonor(currentPatch%tveg_longterm) ! -------------------------------------------------------------------------- @@ -2087,6 +2088,8 @@ subroutine create_patch(currentSite, new_patch, age, areap, label,nocomp_pft) call new_patch%tveg24%InitRMean(fixed_24hr,init_value=temp_init_veg,init_offset=real(hlm_current_tod,r8) ) allocate(new_patch%tveg_lpa) call new_patch%tveg_lpa%InitRmean(ema_lpa,init_value=temp_init_veg) + allocate(new_patch%tveg_longterm) + call new_patch%tveg_longterm%InitRmean(ema_longterm,init_value=temp_init_veg) ! Litter ! Allocate, Zero Fluxes, and Initialize to "unset" values @@ -2661,6 +2664,7 @@ subroutine fuse_2_patches(csite, dp, rp) ! Weighted mean of the running means call rp%tveg24%FuseRMean(dp%tveg24,rp%area*inv_sum_area) call rp%tveg_lpa%FuseRMean(dp%tveg_lpa,rp%area*inv_sum_area) + call rp%tveg_longterm%FuseRMean(dp%tveg_longterm,rp%area*inv_sum_area) rp%fuel_eff_moist = (dp%fuel_eff_moist*dp%area + rp%fuel_eff_moist*rp%area) * inv_sum_area rp%livegrass = (dp%livegrass*dp%area + rp%livegrass*rp%area) * inv_sum_area @@ -3032,6 +3036,7 @@ subroutine dealloc_patch(cpatch) ! Deallocate any running means deallocate(cpatch%tveg24) deallocate(cpatch%tveg_lpa) + deallocate(cpatch%tveg_longterm) return end subroutine dealloc_patch diff --git a/biogeophys/FatesPlantRespPhotosynthMod.F90 b/biogeophys/FatesPlantRespPhotosynthMod.F90 index 511ea36c96..b9c3aa4629 100644 --- a/biogeophys/FatesPlantRespPhotosynthMod.F90 +++ b/biogeophys/FatesPlantRespPhotosynthMod.F90 @@ -32,6 +32,8 @@ module FATESPlantRespPhotosynthMod use FatesConstantsMod, only : fates_unset_r8 use FatesConstantsMod, only : tfrz => t_water_freeze_k_1atm use FatesConstantsMod, only : nocomp_bareground + use FatesConstantsMod, only : photosynth_acclim_model_none + use FatesConstantsMod, only : photosynth_acclim_model_kumarathunge_etal_2019 use FatesInterfaceTypesMod, only : hlm_use_planthydro use FatesInterfaceTypesMod, only : hlm_parteh_mode use FatesInterfaceTypesMod, only : numpft @@ -562,6 +564,8 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime, temp currentCohort%kp25top, & ! in nscaler, & ! in bc_in(s)%t_veg_pa(ifp), & ! in + currentPatch%tveg_lpa%GetMean(), & ! in + currentPatch%tveg_longterm%GetMean(),& ! in btran_eff, & ! in vcmax_z, & ! out jmax_z, & ! out @@ -2201,6 +2205,8 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & real(r8), intent(in) :: co2_rcurve_islope25top_ft ! initial slope of CO2 response curve ! (C4 plants) at 25C, canopy top, this pft real(r8), intent(in) :: veg_tempk ! vegetation temperature + real(r8), intent(in) :: t_growth ! T_growth (short-term running mean temperature) (K) + real(r8), intent(in) :: t_home ! T_home (long-term running mean temperature) (K) real(r8), intent(in) :: btran ! transpiration wetness factor (0 to 1) real(r8), intent(out) :: vcmax ! maximum rate of carboxylation (umol co2/m**2/s) @@ -2226,43 +2232,37 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & real(r8) :: jmaxhd ! deactivation energy for jmax (J/mol) real(r8) :: vcmaxse ! entropy term for vcmax (J/mol/K) real(r8) :: jmaxse ! entropy term for jmax (J/mol/K) - real(r8) :: tgrowth ! average growing temperature - real(r8) :: thome ! average home temperature - real(r8) :: jvr ! ratio of Jmax25 / Vcmax25 + real(r8) :: tgrowth ! average growing temperature + real(r8) :: thome ! average home temperature + real(r8) :: jvr ! ratio of Jmax25 / Vcmax25 real(r8) :: vcmaxc ! scaling factor for high temperature inhibition (25 C = 1.0) real(r8) :: jmaxc ! scaling factor for high temperature inhibition (25 C = 1.0) associate( t10 => temperature_inst%t_a10_patch, & ! Input: [real(r8) (:) ] 10-day running mean of the 2 m temperature (K) t30 => temperature_inst%t_a30_patch) ! Input: [real(r8) (:) ] 30-day running mean of the 2 m temperature (K) - if (temp_acclim == 0) then !No temperature acclimation + select case(temp_acclim) + case (photosynth_acclim_model_none) !No temperature acclimation vcmaxha = EDPftvarcon_inst%vcmaxha(FT) jmaxha = EDPftvarcon_inst%jmaxha(FT) vcmaxhd = EDPftvarcon_inst%vcmaxhd(FT) jmaxhd = EDPftvarcon_inst%jmaxhd(FT) vcmaxse = EDPftvarcon_inst%vcmaxse(FT) jmaxse = EDPftvarcon_inst%jmaxse(FT) - else if (temp_acclim == 1) then !Kumarathunge et al. temperature acclimation, Thome=Tgrowth - tgrowth = t30(1)-tfrz - thome = t30(1)-tfrz - vcmaxha = (42.6 + (1.14*tgrowth))*1000 !J/mol - jmaxha = 40.71*1000 !J/mol - vcmaxhd = 200*1000 !J/mol - jmaxhd = 200*1000 !J/mol - vcmaxse = (645.13 - (0.38*tgrowth)) - jmaxse = 658.77 - (0.84*thome) - 0.52*(tgrowth-thome) - jvr = 2.56 - (0.0375*thome)-(0.0202*(tgrowth-thome)) - else if (temp_acclim == 2) then !Kumarathunge et al. temperature acclimation, Thome=25C - tgrowth = t30(1)-tfrz - thome = 25 !degrees C - vcmaxha = (42.6 + (1.14*tgrowth))*1000 !J/mol - jmaxha = 40.71*1000 !J/mol - vcmaxhd = 200*1000 !J/mol - jmaxhd = 200*1000 !J/mol - vcmaxse = (645.13 - (0.38*tgrowth)) - jmaxse = 658.77 - (0.84*thome) - 0.52*(tgrowth-thome) - jvr = 2.56 - (0.0375*thome)-(0.0202*(tgrowth-thome)) - end if + case (photosynth_acclim_model_kumarathunge_etal_2019) !Kumarathunge et al. temperature acclimation, Thome=30-year running mean + t_growth_celsius = t_growth-tfrz + t_home_celsius = t_home-tfrz + vcmaxha = (42.6_r8 + (1.14_r8*t_growth_celsius))*1e3_r8 !J/mol + jmaxha = 40.71_r8*1e3._r8 !J/mol + vcmaxhd = 200._r8*1e3._r8 !J/mol + jmaxhd = 200._r8*1e3._r8 !J/mol + vcmaxse = (645.13_r8 - (0.38_r8*t_growth_celsius)) + jmaxse = 658.77_r8 - (0.84_r8*t_home_celsius) - 0.52_r8*(t_growth_celsius-t_home_celsius) + jvr = 2.56_r8 - (0.0375_r8*t_home_celsius)-(0.0202_r8*(t_growth_celsius-t_home_celsius)) + case default + write (fates_log(),*)'error, incorrect leaf photosynthesis temperature acclimation model specified' + call endrun(msg=errMsg(sourcefile, __LINE__)) + end select vcmaxc = fth25_f(vcmaxhd, vcmaxse) jmaxc = fth25_f(jmaxhd, jmaxse) diff --git a/main/EDTypesMod.F90 b/main/EDTypesMod.F90 index 5fa8006101..242fa65b0d 100644 --- a/main/EDTypesMod.F90 +++ b/main/EDTypesMod.F90 @@ -443,6 +443,8 @@ module EDTypesMod class(rmean_type), pointer :: tveg24 ! 24-hour mean vegetation temperature (K) class(rmean_type), pointer :: tveg_lpa ! Running mean of vegetation temperature at the ! leaf photosynthesis acclimation timescale [K] + class(rmean_type), pointer :: tveg_longterm ! Long-Term Running mean of vegetation temperature at the + ! leaf photosynthesis acclimation timescale [K] (i.e T_home) integer :: nocomp_pft_label ! Where nocomp is active, use this label for patch ID. ! Each patch ID corresponds to a pft number since each diff --git a/main/FatesConstantsMod.F90 b/main/FatesConstantsMod.F90 index 66a9c56d8d..ef05154bd3 100644 --- a/main/FatesConstantsMod.F90 +++ b/main/FatesConstantsMod.F90 @@ -65,6 +65,10 @@ module FatesConstantsMod ! based on average age of global ! secondary 1900s land in hurtt-2011 + ! integer labels for specifying harvest units + integer, parameter, public :: photosynth_acclim_model_none = 0 + integer, parameter, public :: photosynth_acclim_model_kumarathunge_etal_2019 = 1 + ! integer labels for specifying harvest units integer, parameter, public :: hlm_harvest_area_fraction = 1 ! Code for harvesting by area integer, parameter, public :: hlm_harvest_carbon = 2 ! Code for harvesting based on carbon extracted. diff --git a/main/FatesInterfaceMod.F90 b/main/FatesInterfaceMod.F90 index b314073e60..5e89fed4d6 100644 --- a/main/FatesInterfaceMod.F90 +++ b/main/FatesInterfaceMod.F90 @@ -84,6 +84,7 @@ module FatesInterfaceMod use FatesRunningMeanMod , only : ema_24hr use FatesRunningMeanMod , only : fixed_24hr use FatesRunningMeanMod , only : ema_lpa + use FatesRunningMeanMod , only : ema_longterm use FatesRunningMeanMod , only : ema_60day use FatesRunningMeanMod , only : moving_ema_window use FatesRunningMeanMod , only : fixed_window @@ -989,6 +990,9 @@ subroutine InitTimeAveragingGlobals() allocate(ema_lpa) call ema_lpa%define(photo_temp_acclim_timescale*sec_per_day, & hlm_stepsize,moving_ema_window) + allocate(ema_longterm) ! for now just fix this as a 30-year exponential moving average + call ema_lpa%define(30._r8*365._r8*sec_per_day, & + hlm_stepsize,moving_ema_window) !allocate(ema_60day) !call ema_60day%define(prt_params%fnrt_adapt_tscl*sec_per_day,sec_per_day,moving_ema_window) @@ -1949,6 +1953,7 @@ subroutine UpdateFatesRMeansTStep(sites,bc_in) ifp=ifp+1 call cpatch%tveg24%UpdateRMean(bc_in(s)%t_veg_pa(ifp)) call cpatch%tveg_lpa%UpdateRMean(bc_in(s)%t_veg_pa(ifp)) + call cpatch%tveg_longterm%UpdateRMean(bc_in(s)%t_veg_pa(ifp)) !ccohort => cpatch%tallest diff --git a/main/FatesRestartInterfaceMod.F90 b/main/FatesRestartInterfaceMod.F90 index 040af0400b..80ced2d42c 100644 --- a/main/FatesRestartInterfaceMod.F90 +++ b/main/FatesRestartInterfaceMod.F90 @@ -158,6 +158,7 @@ module FatesRestartInterfaceMod ! Running Means integer :: ir_tveg24_pa integer :: ir_tveglpa_pa + integer :: ir_tveglongterm_pa ! (Keeping as an example) !!integer :: ir_tveglpa_co @@ -1389,6 +1390,10 @@ subroutine define_restart_vars(this, initialize_variables) long_name='running average (EMA) of patch veg temp for photo acclim', & units='K', initialize=initialize_variables,ivar=ivar, index = ir_tveglpa_pa) + call this%DefineRMeanRestartVar(vname='fates_tveglongtermpatch',vtype=cohort_r8, & + long_name='long-term (T_home) running average (EMA) of patch veg temp for photo acclim', & + units='K', initialize=initialize_variables,ivar=ivar, index = ir_tveglongterm_pa) + ! (Keeping as an example) !call this%DefineRMeanRestartVar(vname='fates_tveglpacohort',vtype=cohort_r8, & ! long_name='running average (EMA) of cohort veg temp for photo acclim', & @@ -2205,6 +2210,7 @@ subroutine set_restart_vectors(this,nc,nsites,sites) ! Patch level running means call this%SetRMeanRestartVar(cpatch%tveg24, ir_tveg24_pa, io_idx_co_1st) call this%SetRMeanRestartVar(cpatch%tveg_lpa, ir_tveglpa_pa, io_idx_co_1st) + call this%SetRMeanRestartVar(cpatch%tveg_longterm, ir_tveglongterm_pa, io_idx_co_1st) ! set cohorts per patch for IO rio_ncohort_pa( io_idx_co_1st ) = cohortsperpatch @@ -3091,6 +3097,7 @@ subroutine get_restart_vectors(this, nc, nsites, sites) call this%GetRMeanRestartVar(cpatch%tveg24, ir_tveg24_pa, io_idx_co_1st) call this%GetRMeanRestartVar(cpatch%tveg_lpa, ir_tveglpa_pa, io_idx_co_1st) + call this%GetRMeanRestartVar(cpatch%tveg_longterm, ir_tveglongterm_pa, io_idx_co_1st) ! set cohorts per patch for IO diff --git a/main/FatesRunningMeanMod.F90 b/main/FatesRunningMeanMod.F90 index a1c51f6abf..bf3d0b0bfb 100644 --- a/main/FatesRunningMeanMod.F90 +++ b/main/FatesRunningMeanMod.F90 @@ -91,6 +91,7 @@ module FatesRunningMeanMod class(rmean_def_type), public, pointer :: ema_24hr ! Exponential moving average - 24hr window class(rmean_def_type), public, pointer :: fixed_24hr ! Fixed, 24-hour window class(rmean_def_type), public, pointer :: ema_lpa ! Exponential moving average - leaf photo acclimation + class(rmean_def_type), public, pointer :: ema_longterm ! Exponential moving average - long-term leaf photo acclimation class(rmean_def_type), public, pointer :: ema_60day ! Exponential moving average, 60 day ! Updated daily class(rmean_def_type), public, pointer :: ema_storemem ! EMA used for smoothing N/C and P/C storage From 157720bc3267ce57ac3f19649e7554556253f087 Mon Sep 17 00:00:00 2001 From: ckoven Date: Thu, 2 Feb 2023 22:46:48 -0700 Subject: [PATCH 03/12] removed temperature_inst method of getting average temperatures --- biogeophys/FatesPlantRespPhotosynthMod.F90 | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/biogeophys/FatesPlantRespPhotosynthMod.F90 b/biogeophys/FatesPlantRespPhotosynthMod.F90 index b9c3aa4629..6f1c8a93fc 100644 --- a/biogeophys/FatesPlantRespPhotosynthMod.F90 +++ b/biogeophys/FatesPlantRespPhotosynthMod.F90 @@ -108,7 +108,7 @@ module FATESPlantRespPhotosynthMod !-------------------------------------------------------------------------------------- - subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime, temperature_inst) + subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) ! ----------------------------------------------------------------------------------- ! !DESCRIPTION: @@ -152,7 +152,6 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime, temp type(bc_in_type),intent(in) :: bc_in(nsites) type(bc_out_type),intent(inout) :: bc_out(nsites) real(r8),intent(in) :: dtime - type(temperature_type) , intent(in) :: temperature_inst ! LOCAL VARIABLES: @@ -557,7 +556,6 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime, temp call LeafLayerBiophysicalRates(currentPatch%ed_parsun_z(cl,ft,iv), & ! in - temperature_inst, & !in ft, & ! in currentCohort%vcmax25top, & ! in currentCohort%jmax25top, & ! in @@ -2164,7 +2162,6 @@ end subroutine LeafLayerMaintenanceRespiration ! ==================================================================================== subroutine LeafLayerBiophysicalRates( parsun_lsl, & - temperature_inst, & ft, & vcmax25top_ft, & jmax25top_ft, & @@ -2195,7 +2192,6 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & ! ------------------------------------------------------------------------------ real(r8), intent(in) :: parsun_lsl ! PAR absorbed in sunlit leaves for this layer - type(temperature_type) , intent(in) :: temperature_inst integer, intent(in) :: ft ! (plant) Functional Type Index real(r8), intent(in) :: nscaler ! Scale for leaf nitrogen profile real(r8), intent(in) :: vcmax25top_ft ! canopy top maximum rate of carboxylation at 25C @@ -2238,10 +2234,7 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & real(r8) :: vcmaxc ! scaling factor for high temperature inhibition (25 C = 1.0) real(r8) :: jmaxc ! scaling factor for high temperature inhibition (25 C = 1.0) - associate( t10 => temperature_inst%t_a10_patch, & ! Input: [real(r8) (:) ] 10-day running mean of the 2 m temperature (K) - t30 => temperature_inst%t_a30_patch) ! Input: [real(r8) (:) ] 30-day running mean of the 2 m temperature (K) - - select case(temp_acclim) + select case(temp_acclim) case (photosynth_acclim_model_none) !No temperature acclimation vcmaxha = EDPftvarcon_inst%vcmaxha(FT) jmaxha = EDPftvarcon_inst%jmaxha(FT) From bb170fe6cd1c3944788bdd82356cfd7cebb00c04 Mon Sep 17 00:00:00 2001 From: ckoven Date: Thu, 2 Feb 2023 22:50:06 -0700 Subject: [PATCH 04/12] more cleanup of FatesHistoryInterfaceMod.F90 merge --- main/FatesHistoryInterfaceMod.F90 | 41 ++++++++++++++----------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/main/FatesHistoryInterfaceMod.F90 b/main/FatesHistoryInterfaceMod.F90 index c6b876236c..075eea9509 100644 --- a/main/FatesHistoryInterfaceMod.F90 +++ b/main/FatesHistoryInterfaceMod.F90 @@ -6373,34 +6373,31 @@ subroutine define_history_vars(this, initialize_variables) index = ih_excess_resp_si) ! Canopy resistance - -<<<<<<< HEAD call this%set_history_var(vname='FATES_STOMATAL_COND_AP', & units='mol m-2 s-1', long='mean stomatal conductance - by patch age', & use_default='inactive', avgflag='A', vtype=site_age_r8, & hlms='CLM:ALM', upfreq=2, ivar=ivar, initialize=initialize_variables, & index = ih_c_stomata_si_age) -======= - call this%set_history_var(vname='AJ_CANOPY', units='gC/m^2/s', & + + call this%set_history_var(vname='FATES_AJ_CANOPY', units='gC/m^2/s', & long='RuBP-limited gross primary production of canopy plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & ivar=ivar, initialize=initialize_variables, index = ih_aj_canopy_si ) - call this%set_history_var(vname='AC_CANOPY', units='gC/m^2/s', & + call this%set_history_var(vname='FATES_AC_CANOPY', units='gC/m^2/s', & long='Rubisco-limited gross primary production of canopy plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & ivar=ivar, initialize=initialize_variables, index = ih_ac_canopy_si ) - call this%set_history_var(vname='AP_CANOPY', units='gC/m^2/s', & + call this%set_history_var(vname='FATES_AP_CANOPY', units='gC/m^2/s', & long='Product-limited gross primary production of canopy plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & ivar=ivar, initialize=initialize_variables, index = ih_ap_canopy_si ) - call this%set_history_var(vname='AR_CANOPY', units='gC/m^2/s', & + call this%set_history_var(vname='FATES_AR_CANOPY', units='gC/m^2/s', & long='autotrophic respiration of canopy plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & ivar=ivar, initialize=initialize_variables, index = ih_ar_canopy_si ) ->>>>>>> temp_acclim_photosynth call this%set_history_var(vname='FATES_LBLAYER_COND_AP', & units='mol m-2 s-1', & @@ -6409,7 +6406,6 @@ subroutine define_history_vars(this, initialize_variables) hlms='CLM:ALM', upfreq=2, ivar=ivar, & initialize=initialize_variables, index = ih_c_lblayer_si_age) -<<<<<<< HEAD ! fast fluxes by age bin call this%set_history_var(vname='FATES_NPP_AP', units='kg m-2 s-1', & long='net primary productivity by age bin in kg carbon per m2 per second', & @@ -6422,27 +6418,26 @@ subroutine define_history_vars(this, initialize_variables) use_default='inactive', avgflag='A', vtype=site_age_r8, & hlms='CLM:ALM', upfreq=2, ivar=ivar, initialize=initialize_variables, & index = ih_gpp_si_age) -======= - call this%set_history_var(vname='AJ_UNDERSTORY', units='gC/m^2/s', & + + call this%set_history_var(vname='FATES_AJ_UNDERSTORY', units='gC/m^2/s', & long='RuBP-limited gross primary production of understory plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & ivar=ivar, initialize=initialize_variables, index = ih_aj_understory_si ) - call this%set_history_var(vname='AC_UNDERSTORY', units='gC/m^2/s', & + call this%set_history_var(vname='FATES_AC_UNDERSTORY', units='gC/m^2/s', & long='Rubisco-limited gross primary production of understory plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & ivar=ivar, initialize=initialize_variables, index = ih_ac_understory_si ) - call this%set_history_var(vname='AP_UNDERSTORY', units='gC/m^2/s', & + call this%set_history_var(vname='FATES_AP_UNDERSTORY', units='gC/m^2/s', & long='Product-limited gross primary production of understory plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & ivar=ivar, initialize=initialize_variables, index = ih_ap_understory_si ) - call this%set_history_var(vname='AR_UNDERSTORY', units='gC/m^2/s', & + call this%set_history_var(vname='FATES_AR_UNDERSTORY', units='gC/m^2/s', & long='autotrophic respiration of understory plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', flushval=0.0_r8, upfreq=2, & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & ivar=ivar, initialize=initialize_variables, index = ih_ar_understory_si ) ->>>>>>> temp_acclim_photosynth ! fast fluxes separated canopy/understory call this%set_history_var(vname='FATES_GPP_CANOPY', units='kg m-2 s-1', & From 62ca51684b2a10f5b3b08e13af0f7be378d4ea43 Mon Sep 17 00:00:00 2001 From: ckoven Date: Fri, 3 Feb 2023 11:31:16 -0700 Subject: [PATCH 05/12] various compile-time and runtime bugfixes --- biogeophys/FatesPlantRespPhotosynthMod.F90 | 29 ++++++++++++---------- main/EDParamsMod.F90 | 15 ++--------- main/FatesConstantsMod.F90 | 4 +-- main/FatesInterfaceMod.F90 | 2 +- 4 files changed, 21 insertions(+), 29 deletions(-) diff --git a/biogeophys/FatesPlantRespPhotosynthMod.F90 b/biogeophys/FatesPlantRespPhotosynthMod.F90 index 6f1c8a93fc..403370c2ae 100644 --- a/biogeophys/FatesPlantRespPhotosynthMod.F90 +++ b/biogeophys/FatesPlantRespPhotosynthMod.F90 @@ -54,7 +54,7 @@ module FATESPlantRespPhotosynthMod use PRTGenericMod, only : store_organ use PRTGenericMod, only : repro_organ use PRTGenericMod, only : struct_organ - use EDParamsMod, only : ED_val_base_mr_20, stomatal_model, stomatal_assim_model, temp_acclim + use EDParamsMod, only : ED_val_base_mr_20, stomatal_model, stomatal_assim_model, photo_tempsens_model use PRTParametersMod, only : prt_params use EDPftvarcon , only : EDPftvarcon_inst @@ -2168,6 +2168,8 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & co2_rcurve_islope25top_ft, & nscaler, & veg_tempk, & + t_growth, & + t_home, & btran, & vcmax, & jmax, & @@ -2228,13 +2230,13 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & real(r8) :: jmaxhd ! deactivation energy for jmax (J/mol) real(r8) :: vcmaxse ! entropy term for vcmax (J/mol/K) real(r8) :: jmaxse ! entropy term for jmax (J/mol/K) - real(r8) :: tgrowth ! average growing temperature - real(r8) :: thome ! average home temperature + real(r8) :: t_growth_celsius ! average growing temperature + real(r8) :: t_home_celsius ! average home temperature real(r8) :: jvr ! ratio of Jmax25 / Vcmax25 real(r8) :: vcmaxc ! scaling factor for high temperature inhibition (25 C = 1.0) real(r8) :: jmaxc ! scaling factor for high temperature inhibition (25 C = 1.0) - select case(temp_acclim) + select case(photo_tempsens_model) case (photosynth_acclim_model_none) !No temperature acclimation vcmaxha = EDPftvarcon_inst%vcmaxha(FT) jmaxha = EDPftvarcon_inst%jmaxha(FT) @@ -2246,9 +2248,9 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & t_growth_celsius = t_growth-tfrz t_home_celsius = t_home-tfrz vcmaxha = (42.6_r8 + (1.14_r8*t_growth_celsius))*1e3_r8 !J/mol - jmaxha = 40.71_r8*1e3._r8 !J/mol - vcmaxhd = 200._r8*1e3._r8 !J/mol - jmaxhd = 200._r8*1e3._r8 !J/mol + jmaxha = 40.71_r8*1e3_r8 !J/mol + vcmaxhd = 200._r8*1e3_r8 !J/mol + jmaxhd = 200._r8*1e3_r8 !J/mol vcmaxse = (645.13_r8 - (0.38_r8*t_growth_celsius)) jmaxse = 658.77_r8 - (0.84_r8*t_home_celsius) - 0.52_r8*(t_growth_celsius-t_home_celsius) jvr = 2.56_r8 - (0.0375_r8*t_home_celsius)-(0.0202_r8*(t_growth_celsius-t_home_celsius)) @@ -2268,13 +2270,15 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & ! Vcmax25top was already calculated to derive the nscaler function vcmax25 = vcmax25top_ft * nscaler - if (temp_acclim == 0) then + select case(photo_tempsens_model) + case (photosynth_acclim_model_none) jmax25 = jmax25top_ft * nscaler - else if (temp_acclim == 1) then + case (photosynth_acclim_model_kumarathunge_etal_2019) jmax25 = vcmax25*jvr - else if (temp_acclim == 2) then - jmax25 = vcmax25*jvr - end if + case default + write (fates_log(),*)'error, incorrect leaf photosynthesis temperature acclimation model specified' + call endrun(msg=errMsg(sourcefile, __LINE__)) + end select co2_rcurve_islope25 = co2_rcurve_islope25top_ft * nscaler @@ -2295,7 +2299,6 @@ subroutine LeafLayerBiophysicalRates( parsun_lsl, & vcmax = vcmax * btran return - end associate end subroutine LeafLayerBiophysicalRates diff --git a/main/EDParamsMod.F90 b/main/EDParamsMod.F90 index 30390cf341..b29b6463b3 100644 --- a/main/EDParamsMod.F90 +++ b/main/EDParamsMod.F90 @@ -35,7 +35,7 @@ module EDParamsMod ! respiration model. 1=Ryan (1991) (NOT YET IMPLEMENTED) integer,protected, public :: photo_tempsens_model ! switch for choosing the model that defines the temperature ! sensitivity of photosynthetic parameters (vcmax, jmax). - ! 1=non-acclimating (NOT YET IMPLEMENTED) + ! 1=non-acclimating, 2=Kumarathunge et al., 2019 real(r8),protected, public :: fates_mortality_disturbance_fraction ! the fraction of canopy mortality that results in disturbance real(r8),protected, public :: ED_val_comp_excln @@ -60,7 +60,6 @@ module EDParamsMod real(r8),protected, public :: ED_val_patch_fusion_tol real(r8),protected, public :: ED_val_canopy_closure_thresh ! site-level canopy closure point where trees take on forest (narrow) versus savannah (wide) crown allometry integer,protected, public :: stomatal_model !switch for choosing between stomatal conductance models, 1 for Ball-Berry, 2 for Medlyn - integer,protected, public :: temp_acclim !switch for turning on and off temperature acclimation, 0 for off, 1 for Kumarathunge et al. temperature acclimation logical,protected, public :: active_crown_fire ! flag, 1=active crown fire 0=no active crown fire character(len=param_string_length),parameter :: fates_name_active_crown_fire = "fates_fire_active_crown_fire" @@ -121,7 +120,6 @@ module EDParamsMod character(len=param_string_length),parameter,public :: ED_name_patch_fusion_tol= "fates_patch_fusion_tol" character(len=param_string_length),parameter,public :: ED_name_canopy_closure_thresh= "fates_canopy_closure_thresh" character(len=param_string_length),parameter,public :: ED_name_stomatal_model= "fates_leaf_stomatal_model" - character(len=param_string_length),parameter,public :: ED_name_temp_acclim= "fates_leaf_temp_acclim" character(len=param_string_length),parameter,public :: name_theta_cj_c3 = "fates_leaf_theta_cj_c3" character(len=param_string_length),parameter,public :: name_theta_cj_c4 = "fates_leaf_theta_cj_c4" @@ -295,7 +293,6 @@ subroutine FatesParamsInit() maxpatch_primary = -9 maxpatch_secondary = -9 max_cohort_per_patch = -9 - temp_acclim = 0 hydr_kmax_rsurf1 = nan hydr_kmax_rsurf2 = nan hydr_psi0 = nan @@ -447,9 +444,6 @@ subroutine FatesRegisterParams(fates_params) call fates_params%RegisterParameter(name=hydr_name_solver, dimension_shape=dimension_shape_scalar, & dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_temp_acclim, dimension_shape=dimension_shape_scalar, & - dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=hydr_name_kmax_rsurf1, dimension_shape=dimension_shape_scalar, & dimension_names=dim_names_scalar) @@ -653,11 +647,7 @@ subroutine FatesReceiveParams(fates_params) data=tmpreal) max_cohort_per_patch = nint(tmpreal) - call fates_params%RetreiveParameter(name=ED_name_temp_acclim, & - data=tmpreal) - temp_acclim = nint(tmpreal) - - call fates_params%RetreiveParameter(name=hydr_name_kmax_rsurf1, & + call fates_params%RetrieveParameter(name=hydr_name_kmax_rsurf1, & data=hydr_kmax_rsurf1) call fates_params%RetrieveParameter(name=hydr_name_kmax_rsurf2, & @@ -809,7 +799,6 @@ subroutine FatesReportParams(is_master) write(fates_log(),fmt0) 'hydro_psi0 = ',hydr_psi0 write(fates_log(),fmt0) 'hydro_psicap = ',hydr_psicap write(fates_log(),fmt0) 'hydro_solver = ',hydr_solver - write(fates_log(),fmt0) 'temp_acclim = ',temp_acclim write(fates_log(),fmt0) 'bgc_soil_salinity = ', bgc_soil_salinity write(fates_log(),fmt0) 'logging_dbhmin = ',logging_dbhmin write(fates_log(),fmt0) 'logging_dbhmax = ',logging_dbhmax diff --git a/main/FatesConstantsMod.F90 b/main/FatesConstantsMod.F90 index ef05154bd3..6b795a2f0a 100644 --- a/main/FatesConstantsMod.F90 +++ b/main/FatesConstantsMod.F90 @@ -66,8 +66,8 @@ module FatesConstantsMod ! secondary 1900s land in hurtt-2011 ! integer labels for specifying harvest units - integer, parameter, public :: photosynth_acclim_model_none = 0 - integer, parameter, public :: photosynth_acclim_model_kumarathunge_etal_2019 = 1 + integer, parameter, public :: photosynth_acclim_model_none = 1 + integer, parameter, public :: photosynth_acclim_model_kumarathunge_etal_2019 = 2 ! integer labels for specifying harvest units integer, parameter, public :: hlm_harvest_area_fraction = 1 ! Code for harvesting by area diff --git a/main/FatesInterfaceMod.F90 b/main/FatesInterfaceMod.F90 index 5e89fed4d6..170cff8fff 100644 --- a/main/FatesInterfaceMod.F90 +++ b/main/FatesInterfaceMod.F90 @@ -991,7 +991,7 @@ subroutine InitTimeAveragingGlobals() call ema_lpa%define(photo_temp_acclim_timescale*sec_per_day, & hlm_stepsize,moving_ema_window) allocate(ema_longterm) ! for now just fix this as a 30-year exponential moving average - call ema_lpa%define(30._r8*365._r8*sec_per_day, & + call ema_longterm%define(30._r8*365._r8*sec_per_day, & hlm_stepsize,moving_ema_window) !allocate(ema_60day) From 6e9941abd7024fc0de97bd2df2817dedb30fd67a Mon Sep 17 00:00:00 2001 From: ckoven Date: Fri, 3 Feb 2023 11:31:48 -0700 Subject: [PATCH 06/12] updating metadata to reflect inclusion of Kumarathunge model --- parameter_files/fates_params_default.cdl | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/parameter_files/fates_params_default.cdl b/parameter_files/fates_params_default.cdl index c5ddba36c6..dc5b609d90 100644 --- a/parameter_files/fates_params_default.cdl +++ b/parameter_files/fates_params_default.cdl @@ -343,13 +343,13 @@ variables: fates_leaf_c3psn:long_name = "Photosynthetic pathway (1=c3, 0=c4)" ; double fates_leaf_jmaxha(fates_pft) ; fates_leaf_jmaxha:units = "J/mol" ; - fates_leaf_jmaxha:long_name = "activation energy for jmax" ; + fates_leaf_jmaxha:long_name = "activation energy for jmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED" ; double fates_leaf_jmaxhd(fates_pft) ; fates_leaf_jmaxhd:units = "J/mol" ; - fates_leaf_jmaxhd:long_name = "deactivation energy for jmax" ; + fates_leaf_jmaxhd:long_name = "deactivation energy for jmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED" ; double fates_leaf_jmaxse(fates_pft) ; fates_leaf_jmaxse:units = "J/mol/K" ; - fates_leaf_jmaxse:long_name = "entropy term for jmax" ; + fates_leaf_jmaxse:long_name = "entropy term for jmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED" ; double fates_leaf_slamax(fates_pft) ; fates_leaf_slamax:units = "m^2/gC" ; fates_leaf_slamax:long_name = "Maximum Specific Leaf Area (SLA), even if under a dense canopy" ; @@ -370,13 +370,13 @@ variables: fates_leaf_vcmax25top:long_name = "maximum carboxylation rate of Rub. at 25C, canopy top" ; double fates_leaf_vcmaxha(fates_pft) ; fates_leaf_vcmaxha:units = "J/mol" ; - fates_leaf_vcmaxha:long_name = "activation energy for vcmax" ; + fates_leaf_vcmaxha:long_name = "activation energy for vcmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED" ; double fates_leaf_vcmaxhd(fates_pft) ; fates_leaf_vcmaxhd:units = "J/mol" ; - fates_leaf_vcmaxhd:long_name = "deactivation energy for vcmax" ; + fates_leaf_vcmaxhd:long_name = "deactivation energy for vcmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED" ; double fates_leaf_vcmaxse(fates_pft) ; fates_leaf_vcmaxse:units = "J/mol/K" ; - fates_leaf_vcmaxse:long_name = "entropy term for vcmax" ; + fates_leaf_vcmaxse:long_name = "entropy term for vcmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED" ; double fates_maintresp_reduction_curvature(fates_pft) ; fates_maintresp_reduction_curvature:units = "unitless (0-1)" ; fates_maintresp_reduction_curvature:long_name = "curvature of MR reduction as f(carbon storage), 1=linear, 0=very curved" ; @@ -706,7 +706,7 @@ variables: fates_leaf_photo_temp_acclim_timescale:long_name = "Length of the window for the exponential moving average (ema) of vegetation temperature used in photosynthesis temperature acclimation (NOT USED)" ; double fates_leaf_photo_tempsens_model ; fates_leaf_photo_tempsens_model:units = "unitless" ; - fates_leaf_photo_tempsens_model:long_name = "switch for choosing the model that defines the temperature sensitivity of photosynthetic parameters (vcmax, jmax). 1=non-acclimating (NOT USED)" ; + fates_leaf_photo_tempsens_model:long_name = "switch for choosing the model that defines the temperature sensitivity of photosynthetic parameters (vcmax, jmax). 1=non-acclimating; 2=Kumarathunge et al 2019" ; double fates_leaf_stomatal_assim_model ; fates_leaf_stomatal_assim_model:units = "unitless" ; fates_leaf_stomatal_assim_model:long_name = "a switch designating whether to use net (1) or gross (2) assimilation in the stomatal model" ; From b3d48fe49f87b96da31e7951d01a48f4e3de1338 Mon Sep 17 00:00:00 2001 From: ckoven Date: Fri, 3 Feb 2023 13:49:45 -0700 Subject: [PATCH 07/12] removed Aj, Ac, Ap -limited pohotosynthesis diagnostics --- biogeochem/EDPatchDynamicsMod.F90 | 3 - biogeophys/FatesPlantRespPhotosynthMod.F90 | 62 ---------------- main/EDTypesMod.F90 | 7 -- main/FatesHistoryInterfaceMod.F90 | 84 ---------------------- 4 files changed, 156 deletions(-) diff --git a/biogeochem/EDPatchDynamicsMod.F90 b/biogeochem/EDPatchDynamicsMod.F90 index 3be366b322..5702d17f8d 100644 --- a/biogeochem/EDPatchDynamicsMod.F90 +++ b/biogeochem/EDPatchDynamicsMod.F90 @@ -2218,9 +2218,6 @@ subroutine zero_patch(cp_p) currentPatch%ed_parsun_z(:,:,:) = nan currentPatch%ed_parsha_z(:,:,:) = nan currentPatch%psn_z(:,:,:) = 0._r8 - currentPatch%aj_z(:,:,:) = 0._r8 - currentPatch%ac_z(:,:,:) = 0._r8 - currentPatch%ap_z(:,:,:) = 0._r8 currentPatch%f_sun(:,:,:) = nan currentPatch%tr_soil_dir(:) = nan ! fraction of incoming direct radiation that is transmitted to the soil as direct diff --git a/biogeophys/FatesPlantRespPhotosynthMod.F90 b/biogeophys/FatesPlantRespPhotosynthMod.F90 index 403370c2ae..827e92e804 100644 --- a/biogeophys/FatesPlantRespPhotosynthMod.F90 +++ b/biogeophys/FatesPlantRespPhotosynthMod.F90 @@ -599,9 +599,6 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) leaf_psi, & ! in bc_in(s)%rb_pa(ifp), & ! in currentPatch%psn_z(cl,ft,iv), & ! out - currentPatch%aj_z(cl,ft,iv), & ! out - currentPatch%ac_z(cl,ft,iv), & ! out - currentPatch%ap_z(cl,ft,iv), & ! out rs_z(iv,ft,cl), & ! out anet_av_z(iv,ft,cl), & ! out c13disc_z(cl,ft,iv)) ! out @@ -615,9 +612,6 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) currentCohort%npp_tstep = 0.0_r8 currentCohort%resp_tstep = 0.0_r8 currentCohort%gpp_tstep = 0.0_r8 - currentCohort%aj_sum_tstep = 0.0_r8 - currentCohort%ac_sum_tstep = 0.0_r8 - currentCohort%ap_sum_tstep = 0.0_r8 currentCohort%rdark = 0.0_r8 currentCohort%resp_m = 0.0_r8 currentCohort%ts_net_uptake = 0.0_r8 @@ -633,9 +627,6 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) nv = currentCohort%nv call ScaleLeafLayerFluxToCohort(nv, & !in currentPatch%psn_z(cl,ft,1:nv), & !in - currentPatch%aj_z(cl,ft,1:nv), & !in - currentPatch%ac_z(cl,ft,1:nv), & !in - currentPatch%ap_z(cl,ft,1:nv), & !in lmr_z(1:nv,ft,cl), & !in rs_z(1:nv,ft,cl), & !in currentPatch%elai_profile(cl,ft,1:nv), & !in @@ -646,9 +637,6 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) maintresp_reduction_factor, & !in currentCohort%g_sb_laweight, & !out currentCohort%gpp_tstep, & !out - currentCohort%aj_sum_tstep, & !out - currentCohort%ac_sum_tstep, & !out - currentCohort%ap_sum_tstep, & !out currentCohort%rdark, & !out currentCohort%c13disc_clm, & !out cohort_eleaf_area) !out @@ -663,9 +651,6 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) ! or dark respiration cohort_eleaf_area = 0.0_r8 currentCohort%gpp_tstep = 0.0_r8 - currentCohort%aj_sum_tstep = 0.0_r8 - currentCohort%ac_sum_tstep = 0.0_r8 - currentCohort%ap_sum_tstep = 0.0_r8 currentCohort%rdark = 0.0_r8 currentCohort%g_sb_laweight = 0.0_r8 currentCohort%ts_net_uptake(:) = 0.0_r8 @@ -851,9 +836,6 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) ! convert from kgC/indiv/s to kgC/indiv/timestep currentCohort%resp_m = currentCohort%resp_m * dtime currentCohort%gpp_tstep = currentCohort%gpp_tstep * dtime - currentCohort%aj_sum_tstep = currentCohort%aj_sum_tstep * dtime - currentCohort%ac_sum_tstep = currentCohort%ac_sum_tstep * dtime - currentCohort%ap_sum_tstep = currentCohort%ap_sum_tstep * dtime currentCohort%ts_net_uptake = currentCohort%ts_net_uptake * dtime if ( debug ) write(fates_log(),*) 'EDPhoto 911 ', currentCohort%gpp_tstep @@ -1048,9 +1030,6 @@ subroutine LeafLayerPhotosynthesis(f_sun_lsl, & ! in leaf_psi, & ! in rb, & ! in psn_out, & ! out - aj_out, & ! out - ac_out, & ! out - ap_out, & ! out rstoma_out, & ! out anet_av_out, & ! out c13disc_z) ! out @@ -1109,9 +1088,6 @@ subroutine LeafLayerPhotosynthesis(f_sun_lsl, & ! in real(r8), intent(in) :: rb ! Boundary Layer resistance of leaf [s/m] real(r8), intent(out) :: psn_out ! carbon assimilated in this leaf layer umolC/m2/s - real(r8), intent(out) :: aj_out ! RuBP-limited gross photosynthesis (umol CO2/m2/s) - real(r8), intent(out) :: ac_out ! Rubisco-limited gross photosynthesis (umol CO2/m2/s) - real(r8), intent(out) :: ap_out ! Product-limited gross photosynthesis (umol CO2/m2/s) real(r8), intent(out) :: rstoma_out ! stomatal resistance (1/gs_lsl) (s/m) real(r8), intent(out) :: anet_av_out ! net leaf photosynthesis (umol CO2/m**2/s) ! averaged over sun and shade leaves. @@ -1196,9 +1172,6 @@ subroutine LeafLayerPhotosynthesis(f_sun_lsl, & ! in anet_av_out = -lmr psn_out = 0._r8 - aj_out = 0._r8 - ac_out = 0._r8 - ap_out = 0._r8 ! The cuticular conductance already factored in maximum resistance as a bound ! no need to re-bound it @@ -1215,9 +1188,6 @@ subroutine LeafLayerPhotosynthesis(f_sun_lsl, & ! in !Loop aroun shaded and unshaded leaves psn_out = 0._r8 ! psn is accumulated across sun and shaded leaves. - aj_out = 0._r8 - ac_out = 0._r8 - ap_out = 0._r8 rstoma_out = 0._r8 ! 1/rs is accumulated across sun and shaded leaves. anet_av_out = 0._r8 gstoma = 0._r8 @@ -1414,16 +1384,10 @@ subroutine LeafLayerPhotosynthesis(f_sun_lsl, & ! in ! weight per unit sun and sha leaves. if(sunsha == 1)then !sunlit psn_out = psn_out + agross * f_sun_lsl - aj_out = aj_out + aj * f_sun_lsl - ac_out = ac_out + ac * f_sun_lsl - ap_out = ap_out + ap * f_sun_lsl anet_av_out = anet_av_out + anet * f_sun_lsl gstoma = gstoma + 1._r8/(min(1._r8/gs, rsmax0)) * f_sun_lsl else psn_out = psn_out + agross * (1.0_r8-f_sun_lsl) - aj_out = aj_out + aj * (1.0_r8-f_sun_lsl) - ac_out = ac_out + ac * (1.0_r8-f_sun_lsl) - ap_out = ap_out + ap * (1.0_r8-f_sun_lsl) anet_av_out = anet_av_out + anet * (1.0_r8-f_sun_lsl) gstoma = gstoma + & 1._r8/(min(1._r8/gs, rsmax0)) * (1.0_r8-f_sun_lsl) @@ -1469,9 +1433,6 @@ subroutine LeafLayerPhotosynthesis(f_sun_lsl, & ! in ! (leaves are off, or have reduced to 0) psn_out = 0._r8 - aj_out = 0._r8 - ac_out = 0._r8 - ap_out = 0._r8 anet_av_out = 0._r8 rstoma_out = min(rsmax0,cf/(stem_cuticle_loss_frac*stomatal_intercept(ft))) @@ -1586,9 +1547,6 @@ end function LeafHumidityStomaResis subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv psn_llz, & ! in %psn_z(1:currentCohort%nv,ft,cl) - aj_llz, & ! in %aj_z(1:currentCohort%nv,ft,cl) - ac_llz, & ! in %ac_z(1:currentCohort%nv,ft,cl) - ap_llz, & ! in %ap_z(1:currentCohort%nv,ft,cl) lmr_llz, & ! in lmr_z(1:currentCohort%nv,ft,cl) rs_llz, & ! in rs_z(1:currentCohort%nv,ft,cl) elai_llz, & ! in %elai_profile(cl,ft,1:currentCohort%nv) @@ -1599,9 +1557,6 @@ subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv maintresp_reduction_factor, & ! in g_sb_laweight, & ! out currentCohort%g_sb_laweight [m/s] [m2-leaf] gpp, & ! out currentCohort%gpp_tstep - aj_sum, & ! out currentCohort%aj_sum_tstep - ac_sum, & ! out currentCohort%ac_sum_tstep - ap_sum, & ! out currentCohort%ap_sum_tstep rdark, & ! out currentCohort%rdark c13disc_clm, & ! out currentCohort%c13disc_clm cohort_eleaf_area ) ! out [m2] @@ -1619,9 +1574,6 @@ subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv ! Arguments integer, intent(in) :: nv ! number of active leaf layers real(r8), intent(in) :: psn_llz(nv) ! layer photosynthesis rate (GPP) [umolC/m2leaf/s] - real(r8), intent(in) :: aj_llz(nv) ! layer RuBP-limited photosynthesis rate [umolC/m2leaf/s] - real(r8), intent(in) :: ac_llz(nv) ! layer Rubisco-limited photosynthesis rate [umolC/m2leaf/s] - real(r8), intent(in) :: ap_llz(nv) ! layer Product-limited photosynthesis rate [umolC/m2leaf/s] real(r8), intent(in) :: lmr_llz(nv) ! layer dark respiration rate [umolC/m2leaf/s] real(r8), intent(in) :: rs_llz(nv) ! leaf layer stomatal resistance [s/m] real(r8), intent(in) :: elai_llz(nv) ! exposed LAI per layer [m2 leaf/ m2 pft footprint] @@ -1633,9 +1585,6 @@ subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv real(r8), intent(out) :: g_sb_laweight ! Combined conductance (stomatal + boundary layer) for the cohort ! weighted by leaf area [m/s]*[m2] real(r8), intent(out) :: gpp ! GPP (kgC/indiv/s) - real(r8), intent(out) :: aj_sum ! RuBP-limited GPP (kgC/indiv/s) - real(r8), intent(out) :: ac_sum ! Rubisco-limited GPP (kgC/indiv/s) - real(r8), intent(out) :: ap_sum ! Product-limited GPP (kgC/indiv/s) real(r8), intent(out) :: rdark ! Dark Leaf Respiration (kgC/indiv/s) real(r8), intent(out) :: cohort_eleaf_area ! Effective leaf area of the cohort [m2] real(r8), intent(out) :: c13disc_clm ! unpacked Cohort level c13 discrimination @@ -1652,9 +1601,6 @@ subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv cohort_eleaf_area = 0.0_r8 g_sb_laweight = 0.0_r8 gpp = 0.0_r8 - aj_sum = 0.0_r8 - ac_sum = 0.0_r8 - ap_sum = 0.0_r8 rdark = 0.0_r8 do il = 1, nv ! Loop over the leaf layers this cohort participates in @@ -1680,11 +1626,6 @@ subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv ! GPP [umolC/m2leaf/s] * [m2 leaf ] -> [umolC/s] (This is cohort group sum) gpp = gpp + psn_llz(il) * cohort_layer_eleaf_area - ! RuBP-, rubisco-, and product-limited GPP - aj_sum = aj_sum + aj_llz(il) * cohort_layer_eleaf_area - ac_sum = ac_sum + ac_llz(il) * cohort_layer_eleaf_area - ap_sum = ap_sum + ap_llz(il) * cohort_layer_eleaf_area - ! Dark respiration ! [umolC/m2leaf/s] * [m2 leaf] (This is the cohort group sum) rdark = rdark + lmr_llz(il) * cohort_layer_eleaf_area @@ -1719,9 +1660,6 @@ subroutine ScaleLeafLayerFluxToCohort(nv, & ! in currentCohort%nv rdark = rdark * umolC_to_kgC * maintresp_reduction_factor / nplant gpp = gpp * umolC_to_kgC / nplant - aj_sum = aj_sum * umolC_to_kgC / nplant - ac_sum = ac_sum * umolC_to_kgC / nplant - ap_sum = ap_sum * umolC_to_kgC / nplant if ( debug ) then write(fates_log(),*) 'EDPhoto 816 ', gpp diff --git a/main/EDTypesMod.F90 b/main/EDTypesMod.F90 index 242fa65b0d..2bf3d670e3 100644 --- a/main/EDTypesMod.F90 +++ b/main/EDTypesMod.F90 @@ -273,10 +273,6 @@ module EDTypesMod real(r8) :: gpp_acc real(r8) :: gpp_acc_hold - real(r8) :: aj_sum_tstep ! RuBP-limited gross Primary Production (see above *) - real(r8) :: ac_sum_tstep ! Rubisco-limited gross Primary Production (see above *) - real(r8) :: ap_sum_tstep ! Product-limited gross Primary Production (see above *) - real(r8) :: npp_tstep ! Net Primary Production (see above *) real(r8) :: npp_acc real(r8) :: npp_acc_hold @@ -551,9 +547,6 @@ module EDTypesMod ! PHOTOSYNTHESIS real(r8) :: psn_z(nclmax,maxpft,nlevleaf) ! carbon assimilation in each canopy layer, pft, and leaf layer. umolC/m2/s - real(r8) :: aj_z(nclmax,maxpft,nlevleaf) ! RuBP-limited carbon assimilation in each canopy layer, pft, and leaf layer. umolC/m2/s - real(r8) :: ac_z(nclmax,maxpft,nlevleaf) ! Rubisco-limited carbon assimilation in each canopy layer, pft, and leaf layer. umolC/m2/s - real(r8) :: ap_z(nclmax,maxpft,nlevleaf) ! Product-limited carbon assimilation in each canopy layer, pft, and leaf layer. umolC/m2/s ! ROOTS real(r8) :: btran_ft(maxpft) ! btran calculated seperately for each PFT:- diff --git a/main/FatesHistoryInterfaceMod.F90 b/main/FatesHistoryInterfaceMod.F90 index 075eea9509..189cab5be1 100644 --- a/main/FatesHistoryInterfaceMod.F90 +++ b/main/FatesHistoryInterfaceMod.F90 @@ -283,23 +283,14 @@ module FatesHistoryInterfaceMod integer :: ih_agb_si integer :: ih_npp_si integer :: ih_gpp_si - integer :: ih_aj_si - integer :: ih_ac_si - integer :: ih_ap_si integer :: ih_aresp_si integer :: ih_maint_resp_si integer :: ih_growth_resp_si integer :: ih_excess_resp_si integer :: ih_ar_canopy_si integer :: ih_gpp_canopy_si - integer :: ih_aj_canopy_si - integer :: ih_ac_canopy_si - integer :: ih_ap_canopy_si integer :: ih_ar_understory_si integer :: ih_gpp_understory_si - integer :: ih_aj_understory_si - integer :: ih_ac_understory_si - integer :: ih_ap_understory_si integer :: ih_canopy_biomass_si integer :: ih_understory_biomass_si @@ -4307,10 +4298,6 @@ subroutine update_history_hifrq(this,nc,nsites,sites,bc_in,dt_tstep) associate( hio_gpp_si => this%hvars(ih_gpp_si)%r81d, & hio_gpp_secondary_si => this%hvars(ih_gpp_secondary_si)%r81d, & - hio_aj_si => this%hvars(ih_aj_si)%r81d, & - hio_ac_si => this%hvars(ih_ac_si)%r81d, & - hio_ap_si => this%hvars(ih_ap_si)%r81d, & - hio_npp_si => this%hvars(ih_npp_si)%r81d, & hio_npp_secondary_si => this%hvars(ih_npp_secondary_si)%r81d, & hio_aresp_si => this%hvars(ih_aresp_si)%r81d, & @@ -4332,14 +4319,8 @@ subroutine update_history_hifrq(this,nc,nsites,sites,bc_in,dt_tstep) hio_ar_crootm_si_scpf => this%hvars(ih_ar_crootm_si_scpf)%r82d, & hio_ar_frootm_si_scpf => this%hvars(ih_ar_frootm_si_scpf)%r82d, & hio_gpp_canopy_si => this%hvars(ih_gpp_canopy_si)%r81d, & - hio_aj_canopy_si => this%hvars(ih_aj_canopy_si)%r81d, & - hio_ac_canopy_si => this%hvars(ih_ac_canopy_si)%r81d, & - hio_ap_canopy_si => this%hvars(ih_ap_canopy_si)%r81d, & hio_ar_canopy_si => this%hvars(ih_ar_canopy_si)%r81d, & hio_gpp_understory_si => this%hvars(ih_gpp_understory_si)%r81d, & - hio_aj_understory_si => this%hvars(ih_aj_understory_si)%r81d, & - hio_ac_understory_si => this%hvars(ih_ac_understory_si)%r81d, & - hio_ap_understory_si => this%hvars(ih_ap_understory_si)%r81d, & hio_ar_understory_si => this%hvars(ih_ar_understory_si)%r81d, & hio_rdark_canopy_si_scls => this%hvars(ih_rdark_canopy_si_scls)%r82d, & hio_livestem_mr_canopy_si_scls => this%hvars(ih_livestem_mr_canopy_si_scls)%r82d, & @@ -4473,13 +4454,6 @@ subroutine update_history_hifrq(this,nc,nsites,sites,bc_in,dt_tstep) hio_gpp_si(io_si) = hio_gpp_si(io_si) + & ccohort%gpp_tstep * n_perm2 * per_dt_tstep - hio_aj_si(io_si) = hio_aj_si(io_si) + & - ccohort%aj_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep - hio_ac_si(io_si) = hio_ac_si(io_si) + & - ccohort%ac_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep - hio_ap_si(io_si) = hio_ap_si(io_si) + & - ccohort%ap_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep - hio_aresp_si(io_si) = hio_aresp_si(io_si) + & aresp * n_perm2 * per_dt_tstep hio_growth_resp_si(io_si) = hio_growth_resp_si(io_si) + & @@ -4559,13 +4533,6 @@ subroutine update_history_hifrq(this,nc,nsites,sites,bc_in,dt_tstep) hio_gpp_canopy_si(io_si) = hio_gpp_canopy_si(io_si) + & ccohort%gpp_tstep * n_perm2 * per_dt_tstep - hio_aj_canopy_si(io_si) = hio_aj_canopy_si(io_si) + & - ccohort%aj_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep - hio_ac_canopy_si(io_si) = hio_ac_canopy_si(io_si) + & - ccohort%ac_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep - hio_ap_canopy_si(io_si) = hio_ap_canopy_si(io_si) + & - ccohort%ap_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep - hio_ar_canopy_si(io_si) = hio_ar_canopy_si(io_si) + & aresp * n_perm2 * per_dt_tstep @@ -4590,12 +4557,6 @@ subroutine update_history_hifrq(this,nc,nsites,sites,bc_in,dt_tstep) hio_gpp_understory_si(io_si) = hio_gpp_understory_si(io_si) + & ccohort%gpp_tstep * n_perm2 * per_dt_tstep - hio_aj_understory_si(io_si) = hio_aj_understory_si(io_si) + & - ccohort%aj_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep - hio_ac_understory_si(io_si) = hio_ac_understory_si(io_si) + & - ccohort%ac_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep - hio_ap_understory_si(io_si) = hio_ap_understory_si(io_si) + & - ccohort%ap_sum_tstep * g_per_kg * n_perm2 * per_dt_tstep hio_ar_understory_si(io_si) = hio_ar_understory_si(io_si) + & aresp * n_perm2 * per_dt_tstep @@ -6278,21 +6239,6 @@ subroutine define_history_vars(this, initialize_variables) avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & ivar=ivar, initialize=initialize_variables, index = ih_rad_error_si) - call this%set_history_var(vname='FATES_AJ', units='gC/m^2/s', & - long='RuBP-limited gross primary production', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & - ivar=ivar, initialize=initialize_variables, index = ih_aj_si ) - - call this%set_history_var(vname='FATES_AC', units='gC/m^2/s', & - long='Rubisco-limited gross primary production', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & - ivar=ivar, initialize=initialize_variables, index = ih_ac_si ) - - call this%set_history_var(vname='FATES_AP', units='gC/m^2/s', & - long='Product-limited gross primary production', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & - ivar=ivar, initialize=initialize_variables, index = ih_ap_si ) - call this%set_history_var(vname='FATES_AR', units='gC/m^2/s', & long='autotrophic respiration', use_default='active', & avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & @@ -6379,21 +6325,6 @@ subroutine define_history_vars(this, initialize_variables) hlms='CLM:ALM', upfreq=2, ivar=ivar, initialize=initialize_variables, & index = ih_c_stomata_si_age) - call this%set_history_var(vname='FATES_AJ_CANOPY', units='gC/m^2/s', & - long='RuBP-limited gross primary production of canopy plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & - ivar=ivar, initialize=initialize_variables, index = ih_aj_canopy_si ) - - call this%set_history_var(vname='FATES_AC_CANOPY', units='gC/m^2/s', & - long='Rubisco-limited gross primary production of canopy plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & - ivar=ivar, initialize=initialize_variables, index = ih_ac_canopy_si ) - - call this%set_history_var(vname='FATES_AP_CANOPY', units='gC/m^2/s', & - long='Product-limited gross primary production of canopy plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & - ivar=ivar, initialize=initialize_variables, index = ih_ap_canopy_si ) - call this%set_history_var(vname='FATES_AR_CANOPY', units='gC/m^2/s', & long='autotrophic respiration of canopy plants', use_default='active', & avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & @@ -6419,21 +6350,6 @@ subroutine define_history_vars(this, initialize_variables) hlms='CLM:ALM', upfreq=2, ivar=ivar, initialize=initialize_variables, & index = ih_gpp_si_age) - call this%set_history_var(vname='FATES_AJ_UNDERSTORY', units='gC/m^2/s', & - long='RuBP-limited gross primary production of understory plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & - ivar=ivar, initialize=initialize_variables, index = ih_aj_understory_si ) - - call this%set_history_var(vname='FATES_AC_UNDERSTORY', units='gC/m^2/s', & - long='Rubisco-limited gross primary production of understory plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & - ivar=ivar, initialize=initialize_variables, index = ih_ac_understory_si ) - - call this%set_history_var(vname='FATES_AP_UNDERSTORY', units='gC/m^2/s', & - long='Product-limited gross primary production of understory plants', use_default='active', & - avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & - ivar=ivar, initialize=initialize_variables, index = ih_ap_understory_si ) - call this%set_history_var(vname='FATES_AR_UNDERSTORY', units='gC/m^2/s', & long='autotrophic respiration of understory plants', use_default='active', & avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=2, & From 924f59a6723cbb9183383dd18057575c88a14878 Mon Sep 17 00:00:00 2001 From: ckoven Date: Thu, 9 Feb 2023 12:21:20 -0700 Subject: [PATCH 08/12] added long-term tveg as a history variable --- main/FatesHistoryInterfaceMod.F90 | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/main/FatesHistoryInterfaceMod.F90 b/main/FatesHistoryInterfaceMod.F90 index dd8621b5fc..7d5cf8a0dc 100644 --- a/main/FatesHistoryInterfaceMod.F90 +++ b/main/FatesHistoryInterfaceMod.F90 @@ -331,6 +331,7 @@ module FatesHistoryInterfaceMod ! Indices to (site) variables integer :: ih_tveg24_si + integer :: ih_tlongterm_si integer :: ih_tveg_si integer :: ih_nep_si integer :: ih_hr_si @@ -2479,6 +2480,7 @@ subroutine update_history_dyn(this,nc,nsites,sites,bc_in) hio_dleafoff_si => this%hvars(ih_dleafoff_si)%r81d, & hio_dleafon_si => this%hvars(ih_dleafon_si)%r81d, & hio_tveg24 => this%hvars(ih_tveg24_si)%r81d, & + hio_tlongterm => this%hvars(ih_tlongterm_si)%r81d, & hio_meanliqvol_si => this%hvars(ih_meanliqvol_si)%r81d, & hio_cbal_err_fates_si => this%hvars(ih_cbal_err_fates_si)%r81d, & hio_err_fates_si => this%hvars(ih_err_fates_si)%r82d, & @@ -2650,6 +2652,10 @@ subroutine update_history_dyn(this,nc,nsites,sites,bc_in) hio_tveg24(io_si) = hio_tveg24(io_si) + & (cpatch%tveg24%GetMean()- t_water_freeze_k_1atm)*cpatch%area*AREA_INV + ! long-term veg temperature + hio_tlongterm(io_si) = hio_tlongterm(io_si) + & + (cpatch%tveg_longterm%GetMean()- t_water_freeze_k_1atm)*cpatch%area*AREA_INV + ! Increment some patch-age-resolved diagnostics hio_lai_si_age(io_si,cpatch%age_class) = hio_lai_si_age(io_si,cpatch%age_class) & + sum(cpatch%tlai_profile(:,:,:)) * cpatch%area @@ -6290,6 +6296,12 @@ subroutine define_history_vars(this, initialize_variables) avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=1, & ivar=ivar, initialize=initialize_variables, index = ih_tveg24_si ) + call this%set_history_var(vname='FATES_TLONGTERM', units='degree_Celsius', & + long='fates 30-year running mean vegetation temperature by site', & + use_default='inactive', & + avgflag='A', vtype=site_r8, hlms='CLM:ALM', upfreq=1, & + ivar=ivar, initialize=initialize_variables, index = ih_tlongterm_si ) + call this%set_history_var(vname='FATES_TVEG', units='degree_Celsius', & long='fates instantaneous mean vegetation temperature by site', & use_default='active', & From 0fc9de51431a0729dfbbcdf2b6d22f130cbbcc42 Mon Sep 17 00:00:00 2001 From: ckoven Date: Tue, 7 Mar 2023 19:35:25 -0700 Subject: [PATCH 09/12] moved T_home time constant to parameter file --- main/EDParamsMod.F90 | 21 +++++++++++++++------ main/FatesInterfaceMod.F90 | 8 +++++--- parameter_files/fates_params_default.cdl | 9 +++++++-- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/main/EDParamsMod.F90 b/main/EDParamsMod.F90 index 497b441405..40edc6a0b8 100644 --- a/main/EDParamsMod.F90 +++ b/main/EDParamsMod.F90 @@ -23,14 +23,14 @@ module EDParamsMod real(r8),protected, public :: vai_top_bin_width ! width in VAI units of uppermost leaf+stem ! layer scattering element in each canopy layer [m2/m2] - ! (NOT YET IMPLEMENTED) real(r8),protected, public :: vai_width_increase_factor ! factor by which each leaf+stem scattering element ! increases in VAI width (1 = uniform spacing) - ! (NOT YET IMPLEMENTED) real(r8),protected, public :: photo_temp_acclim_timescale ! Length of the window for the exponential moving average (ema) - ! of vegetation temperature used in photosynthesis - ! temperature acclimation (NOT YET IMPLEMENTED) - + ! of vegetation temperature used in photosynthesis and respiration + ! temperature acclimation [days] + real(r8),protected, public :: photo_temp_acclim_thome_time ! Length of the window for the long-term exponential moving average (ema) + ! of vegetation temperature used in photosynthesis + ! T_home term in Kumarathunge parameterization [years] integer,protected, public :: maintresp_leaf_model ! switch for choosing between leaf maintenance ! respiration model. 1=Ryan (1991), 2=Atkin et al (2017) integer,protected, public :: photo_tempsens_model ! switch for choosing the model that defines the temperature @@ -94,6 +94,7 @@ module EDParamsMod integer, protected,allocatable,public :: hydr_htftype_node(:) character(len=param_string_length),parameter,public :: ED_name_photo_temp_acclim_timescale = "fates_leaf_photo_temp_acclim_timescale" + character(len=param_string_length),parameter,public :: ED_name_photo_temp_acclim_thome_time = "fates_leaf_photo_temp_acclim_thome_time" character(len=param_string_length),parameter,public :: name_photo_tempsens_model = "fates_leaf_photo_tempsens_model" character(len=param_string_length),parameter,public :: name_maintresp_model = "fates_maintresp_leaf_model" character(len=param_string_length),parameter,public :: ED_name_hydr_htftype_node = "fates_hydro_htftype_node" @@ -264,6 +265,7 @@ subroutine FatesParamsInit() vai_top_bin_width = nan vai_width_increase_factor = nan photo_temp_acclim_timescale = nan + photo_temp_acclim_thome_time = nan photo_tempsens_model = -9 maintresp_leaf_model = -9 fates_mortality_disturbance_fraction = nan @@ -348,6 +350,9 @@ subroutine FatesRegisterParams(fates_params) call fates_params%RegisterParameter(name=ED_name_photo_temp_acclim_timescale, dimension_shape=dimension_shape_scalar, & dimension_names=dim_names_scalar) + call fates_params%RegisterParameter(name=ED_name_photo_temp_acclim_thome_time, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) + call fates_params%RegisterParameter(name=name_photo_tempsens_model,dimension_shape=dimension_shape_scalar, & dimension_names=dim_names_scalar) @@ -551,6 +556,9 @@ subroutine FatesReceiveParams(fates_params) call fates_params%RetrieveParameter(name=ED_name_photo_temp_acclim_timescale, & data=photo_temp_acclim_timescale) + call fates_params%RetrieveParameter(name=ED_name_photo_temp_acclim_thome_time, & + data=photo_temp_acclim_thome_time) + call fates_params%RetrieveParameter(name=name_photo_tempsens_model, & data=tmpreal) photo_tempsens_model = nint(tmpreal) @@ -768,7 +776,8 @@ subroutine FatesReportParams(is_master) write(fates_log(),*) '----------- FATES Scalar Parameters -----------------' write(fates_log(),fmt0) 'vai_top_bin_width = ',vai_top_bin_width write(fates_log(),fmt0) 'vai_width_increase_factor = ',vai_width_increase_factor - write(fates_log(),fmt0) 'photo_temp_acclim_timescale = ',photo_temp_acclim_timescale + write(fates_log(),fmt0) 'photo_temp_acclim_timescale (days) = ',photo_temp_acclim_timescale + write(fates_log(),fmt0) 'photo_temp_acclim_thome_time (years) = ',photo_temp_acclim_thome_time write(fates_log(),fmti) 'hydr_htftype_node = ',hydr_htftype_node write(fates_log(),fmt0) 'fates_mortality_disturbance_fraction = ',fates_mortality_disturbance_fraction write(fates_log(),fmt0) 'ED_val_comp_excln = ',ED_val_comp_excln diff --git a/main/FatesInterfaceMod.F90 b/main/FatesInterfaceMod.F90 index 170cff8fff..4fc365ce62 100644 --- a/main/FatesInterfaceMod.F90 +++ b/main/FatesInterfaceMod.F90 @@ -36,6 +36,7 @@ module FatesInterfaceMod use FatesConstantsMod , only : itrue,ifalse use FatesConstantsMod , only : nearzero use FatesConstantsMod , only : sec_per_day + use FatesConstantsMod , only : days_per_year use FatesGlobals , only : fates_global_verbose use FatesGlobals , only : fates_log use FatesGlobals , only : endrun => fates_endrun @@ -50,6 +51,7 @@ module FatesInterfaceMod use EDParamsMod , only : bgc_soil_salinity use FatesPlantHydraulicsMod , only : InitHydroGlobals use EDParamsMod , only : photo_temp_acclim_timescale + use EDParamsMod , only : photo_temp_acclim_thome_time use EDParamsMod , only : ED_val_history_sizeclass_bin_edges use EDParamsMod , only : ED_val_history_ageclass_bin_edges use EDParamsMod , only : ED_val_history_height_bin_edges @@ -987,11 +989,11 @@ subroutine InitTimeAveragingGlobals() call ema_24hr%define(sec_per_day, hlm_stepsize, moving_ema_window) allocate(fixed_24hr) call fixed_24hr%define(sec_per_day, hlm_stepsize, fixed_window) - allocate(ema_lpa) + allocate(ema_lpa) ! note that this parameter has units of days call ema_lpa%define(photo_temp_acclim_timescale*sec_per_day, & hlm_stepsize,moving_ema_window) - allocate(ema_longterm) ! for now just fix this as a 30-year exponential moving average - call ema_longterm%define(30._r8*365._r8*sec_per_day, & + allocate(ema_longterm) ! note that this parameter has units of years + call ema_longterm%define(photo_temp_acclim_thome_time*days_per_year*sec_per_day, & hlm_stepsize,moving_ema_window) !allocate(ema_60day) diff --git a/parameter_files/fates_params_default.cdl b/parameter_files/fates_params_default.cdl index 2e68a596c1..769b742c2c 100644 --- a/parameter_files/fates_params_default.cdl +++ b/parameter_files/fates_params_default.cdl @@ -705,9 +705,12 @@ variables: double fates_landuse_pprodharv10_forest_mean ; fates_landuse_pprodharv10_forest_mean:units = "fraction" ; fates_landuse_pprodharv10_forest_mean:long_name = "mean harvest mortality proportion of deadstem to 10-yr product (pprodharv10) of all woody PFT types" ; + double fates_leaf_photo_temp_acclim_thome_time ; + fates_leaf_photo_temp_acclim_thome_time:units = "years" ; + fates_leaf_photo_temp_acclim_thome_time:long_name = "Length of the window for the long-term (i.e. T_home in Kumarathunge et al 2019) exponential moving average (ema) of vegetation temperature used in photosynthesis temperature acclimation (used if fates_leaf_photo_tempsens_model = 2)" ; double fates_leaf_photo_temp_acclim_timescale ; fates_leaf_photo_temp_acclim_timescale:units = "days" ; - fates_leaf_photo_temp_acclim_timescale:long_name = "Length of the window for the exponential moving average (ema) of vegetation temperature used in photosynthesis temperature acclimation (NOT USED)" ; + fates_leaf_photo_temp_acclim_timescale:long_name = "Length of the window for the exponential moving average (ema) of vegetation temperature used in photosynthesis temperature acclimation (used if fates_maintresp_leaf_model=2 or fates_leaf_photo_tempsens_model = 2)" ; double fates_leaf_photo_tempsens_model ; fates_leaf_photo_tempsens_model:units = "unitless" ; fates_leaf_photo_tempsens_model:long_name = "switch for choosing the model that defines the temperature sensitivity of photosynthetic parameters (vcmax, jmax). 1=non-acclimating; 2=Kumarathunge et al 2019" ; @@ -725,7 +728,7 @@ variables: fates_leaf_theta_cj_c4:long_name = "Empirical curvature parameter for ac, aj photosynthesis co-limitation in c4 plants" ; double fates_maintresp_leaf_model ; fates_maintresp_leaf_model:units = "unitless" ; - fates_maintresp_leaf_model:long_name = "switch for choosing between maintenance respiration models. 1=Ryan (1991) (NOT USED)" ; + fates_maintresp_leaf_model:long_name = "switch for choosing between maintenance respiration models. 1=Ryan (1991), 2=Atkin et al., (2017)" ; double fates_maintresp_nonleaf_baserate ; fates_maintresp_nonleaf_baserate:units = "gC/gN/s" ; fates_maintresp_nonleaf_baserate:long_name = "Base maintenance respiration rate for plant tissues, using Ryan 1991" ; @@ -1493,6 +1496,8 @@ data: fates_landuse_pprodharv10_forest_mean = 0.8125 ; + fates_leaf_photo_temp_acclim_thome_time = 30 ; + fates_leaf_photo_temp_acclim_timescale = 30 ; fates_leaf_photo_tempsens_model = 1 ; From 1f58adb5f5eb0ee67cbd09199a023206c2806146 Mon Sep 17 00:00:00 2001 From: Gregory Lemieux Date: Fri, 17 Mar 2023 11:04:26 -0700 Subject: [PATCH 10/12] Add xml patch file for parameter file update This commit also removes a redundant long name --- .../api25.2.0_031723_fates_params_default.cdl | 1554 +++++++++++++++++ .../archive/api25.2.0_031723_pr984.xml | 69 + parameter_files/fates_params_default.cdl | 1 - 3 files changed, 1623 insertions(+), 1 deletion(-) create mode 100644 parameter_files/archive/api25.2.0_031723_fates_params_default.cdl create mode 100644 parameter_files/archive/api25.2.0_031723_pr984.xml diff --git a/parameter_files/archive/api25.2.0_031723_fates_params_default.cdl b/parameter_files/archive/api25.2.0_031723_fates_params_default.cdl new file mode 100644 index 0000000000..7cf0fe3135 --- /dev/null +++ b/parameter_files/archive/api25.2.0_031723_fates_params_default.cdl @@ -0,0 +1,1554 @@ +netcdf fates_params_default { +dimensions: + fates_NCWD = 4 ; + fates_history_age_bins = 7 ; + fates_history_coage_bins = 2 ; + fates_history_damage_bins = 2 ; + fates_history_height_bins = 6 ; + fates_history_size_bins = 13 ; + fates_hlm_pftno = 14 ; + fates_hydr_organs = 4 ; + fates_leafage_class = 1 ; + fates_litterclass = 6 ; + fates_pft = 12 ; + fates_plant_organs = 4 ; + fates_string_length = 60 ; +variables: + double fates_history_ageclass_bin_edges(fates_history_age_bins) ; + fates_history_ageclass_bin_edges:units = "yr" ; + fates_history_ageclass_bin_edges:long_name = "Lower edges for age class bins used in age-resolved patch history output" ; + double fates_history_coageclass_bin_edges(fates_history_coage_bins) ; + fates_history_coageclass_bin_edges:units = "years" ; + fates_history_coageclass_bin_edges:long_name = "Lower edges for cohort age class bins used in cohort age resolved history output" ; + double fates_history_height_bin_edges(fates_history_height_bins) ; + fates_history_height_bin_edges:units = "m" ; + fates_history_height_bin_edges:long_name = "Lower edges for height bins used in height-resolved history output" ; + double fates_history_damage_bin_edges(fates_history_damage_bins) ; + fates_history_damage_bin_edges:units = "% crown loss" ; + fates_history_damage_bin_edges:long_name = "Lower edges for damage class bins used in cohort history output" ; + double fates_history_sizeclass_bin_edges(fates_history_size_bins) ; + fates_history_sizeclass_bin_edges:units = "cm" ; + fates_history_sizeclass_bin_edges:long_name = "Lower edges for DBH size class bins used in size-resolved cohort history output" ; + double fates_alloc_organ_id(fates_plant_organs) ; + fates_alloc_organ_id:units = "unitless" ; + fates_alloc_organ_id:long_name = "This is the global index that the organ in this file is associated with, values match those in parteh/PRTGenericMod.F90" ; + double fates_hydro_htftype_node(fates_hydr_organs) ; + fates_hydro_htftype_node:units = "unitless" ; + fates_hydro_htftype_node:long_name = "Switch that defines the hydraulic transfer functions for each organ." ; + char fates_pftname(fates_pft, fates_string_length) ; + fates_pftname:units = "unitless - string" ; + fates_pftname:long_name = "Description of plant type" ; + char fates_hydro_organ_name(fates_hydr_organs, fates_string_length) ; + fates_hydro_organ_name:units = "unitless - string" ; + fates_hydro_organ_name:long_name = "Name of plant hydraulics organs (DONT CHANGE, order matches media list in FatesHydraulicsMemMod.F90)" ; + char fates_alloc_organ_name(fates_plant_organs, fates_string_length) ; + fates_alloc_organ_name:units = "unitless - string" ; + fates_alloc_organ_name:long_name = "Name of plant organs (with alloc_organ_id, must match PRTGenericMod.F90)" ; + char fates_litterclass_name(fates_litterclass, fates_string_length) ; + fates_litterclass_name:units = "unitless - string" ; + fates_litterclass_name:long_name = "Name of the litter classes, for variables associated with dimension fates_litterclass" ; + double fates_alloc_organ_priority(fates_plant_organs, fates_pft) ; + fates_alloc_organ_priority:units = "index" ; + fates_alloc_organ_priority:long_name = "Priority level for allocation, 1: replaces turnover from storage, 2: same priority as storage use/replacement, 3: ascending in order of least importance" ; + double fates_alloc_storage_cushion(fates_pft) ; + fates_alloc_storage_cushion:units = "fraction" ; + fates_alloc_storage_cushion:long_name = "maximum size of storage C pool, relative to maximum size of leaf C pool" ; + double fates_alloc_store_priority_frac(fates_pft) ; + fates_alloc_store_priority_frac:units = "unitless" ; + fates_alloc_store_priority_frac:long_name = "for high-priority organs, the fraction of their turnover demand that is gauranteed to be replaced, and if need-be by storage" ; + double fates_allom_agb1(fates_pft) ; + fates_allom_agb1:units = "variable" ; + fates_allom_agb1:long_name = "Parameter 1 for agb allometry" ; + double fates_allom_agb2(fates_pft) ; + fates_allom_agb2:units = "variable" ; + fates_allom_agb2:long_name = "Parameter 2 for agb allometry" ; + double fates_allom_agb3(fates_pft) ; + fates_allom_agb3:units = "variable" ; + fates_allom_agb3:long_name = "Parameter 3 for agb allometry" ; + double fates_allom_agb4(fates_pft) ; + fates_allom_agb4:units = "variable" ; + fates_allom_agb4:long_name = "Parameter 4 for agb allometry" ; + double fates_allom_agb_frac(fates_pft) ; + fates_allom_agb_frac:units = "fraction" ; + fates_allom_agb_frac:long_name = "Fraction of woody biomass that is above ground" ; + double fates_allom_amode(fates_pft) ; + fates_allom_amode:units = "index" ; + fates_allom_amode:long_name = "AGB allometry function index." ; + double fates_allom_blca_expnt_diff(fates_pft) ; + fates_allom_blca_expnt_diff:units = "unitless" ; + fates_allom_blca_expnt_diff:long_name = "difference between allometric DBH:bleaf and DBH:crown area exponents" ; + double fates_allom_cmode(fates_pft) ; + fates_allom_cmode:units = "index" ; + fates_allom_cmode:long_name = "coarse root biomass allometry function index." ; + double fates_allom_crown_depth_frac(fates_pft) ; + fates_allom_crown_depth_frac:units = "fraction" ; + fates_allom_crown_depth_frac:long_name = "the depth of a cohort crown as a fraction of its height" ; + double fates_allom_d2bl1(fates_pft) ; + fates_allom_d2bl1:units = "variable" ; + fates_allom_d2bl1:long_name = "Parameter 1 for d2bl allometry" ; + double fates_allom_d2bl2(fates_pft) ; + fates_allom_d2bl2:units = "variable" ; + fates_allom_d2bl2:long_name = "Parameter 2 for d2bl allometry" ; + double fates_allom_d2bl3(fates_pft) ; + fates_allom_d2bl3:units = "unitless" ; + fates_allom_d2bl3:long_name = "Parameter 3 for d2bl allometry" ; + double fates_allom_d2ca_coefficient_max(fates_pft) ; + fates_allom_d2ca_coefficient_max:units = "m2 cm^(-1/beta)" ; + fates_allom_d2ca_coefficient_max:long_name = "max (savanna) dbh to area multiplier factor where: area = n*d2ca_coeff*dbh^beta" ; + double fates_allom_d2ca_coefficient_min(fates_pft) ; + fates_allom_d2ca_coefficient_min:units = "m2 cm^(-1/beta)" ; + fates_allom_d2ca_coefficient_min:long_name = "min (forest) dbh to area multiplier factor where: area = n*d2ca_coeff*dbh^beta" ; + double fates_allom_d2h1(fates_pft) ; + fates_allom_d2h1:units = "variable" ; + fates_allom_d2h1:long_name = "Parameter 1 for d2h allometry (intercept, or c)" ; + double fates_allom_d2h2(fates_pft) ; + fates_allom_d2h2:units = "variable" ; + fates_allom_d2h2:long_name = "Parameter 2 for d2h allometry (slope, or m)" ; + double fates_allom_d2h3(fates_pft) ; + fates_allom_d2h3:units = "variable" ; + fates_allom_d2h3:long_name = "Parameter 3 for d2h allometry (optional)" ; + double fates_allom_dbh_maxheight(fates_pft) ; + fates_allom_dbh_maxheight:units = "cm" ; + fates_allom_dbh_maxheight:long_name = "the diameter (if any) corresponding to maximum height, diameters may increase beyond this" ; + double fates_allom_fmode(fates_pft) ; + fates_allom_fmode:units = "index" ; + fates_allom_fmode:long_name = "fine root biomass allometry function index." ; + double fates_allom_fnrt_prof_a(fates_pft) ; + fates_allom_fnrt_prof_a:units = "unitless" ; + fates_allom_fnrt_prof_a:long_name = "Fine root profile function, parameter a" ; + double fates_allom_fnrt_prof_b(fates_pft) ; + fates_allom_fnrt_prof_b:units = "unitless" ; + fates_allom_fnrt_prof_b:long_name = "Fine root profile function, parameter b" ; + double fates_allom_fnrt_prof_mode(fates_pft) ; + fates_allom_fnrt_prof_mode:units = "index" ; + fates_allom_fnrt_prof_mode:long_name = "Index to select fine root profile function: 1) Jackson Beta, 2) 1-param exponential 3) 2-param exponential" ; + double fates_allom_frbstor_repro(fates_pft) ; + fates_allom_frbstor_repro:units = "fraction" ; + fates_allom_frbstor_repro:long_name = "fraction of bstore goes to reproduction after plant dies" ; + double fates_allom_hmode(fates_pft) ; + fates_allom_hmode:units = "index" ; + fates_allom_hmode:long_name = "height allometry function index." ; + double fates_allom_l2fr(fates_pft) ; + fates_allom_l2fr:units = "gC/gC" ; + fates_allom_l2fr:long_name = "Allocation parameter: fine root C per leaf C" ; + double fates_allom_la_per_sa_int(fates_pft) ; + fates_allom_la_per_sa_int:units = "m2/cm2" ; + fates_allom_la_per_sa_int:long_name = "Leaf area per sapwood area, intercept" ; + double fates_allom_la_per_sa_slp(fates_pft) ; + fates_allom_la_per_sa_slp:units = "m2/cm2/m" ; + fates_allom_la_per_sa_slp:long_name = "Leaf area per sapwood area rate of change with height, slope (optional)" ; + double fates_allom_lmode(fates_pft) ; + fates_allom_lmode:units = "index" ; + fates_allom_lmode:long_name = "leaf biomass allometry function index." ; + double fates_allom_sai_scaler(fates_pft) ; + fates_allom_sai_scaler:units = "m2/m2" ; + fates_allom_sai_scaler:long_name = "allometric ratio of SAI per LAI" ; + double fates_allom_smode(fates_pft) ; + fates_allom_smode:units = "index" ; + fates_allom_smode:long_name = "sapwood allometry function index." ; + double fates_allom_stmode(fates_pft) ; + fates_allom_stmode:units = "index" ; + fates_allom_stmode:long_name = "storage allometry function index: 1) Storage proportional to leaf biomass (with trimming), 2) Storage proportional to maximum leaf biomass (not trimmed)" ; + double fates_allom_zroot_k(fates_pft) ; + fates_allom_zroot_k:units = "unitless" ; + fates_allom_zroot_k:long_name = "scale coefficient of logistic rooting depth model" ; + double fates_allom_zroot_max_dbh(fates_pft) ; + fates_allom_zroot_max_dbh:units = "cm" ; + fates_allom_zroot_max_dbh:long_name = "dbh at which a plant reaches the maximum value for its maximum rooting depth" ; + double fates_allom_zroot_max_z(fates_pft) ; + fates_allom_zroot_max_z:units = "m" ; + fates_allom_zroot_max_z:long_name = "the maximum rooting depth defined at dbh = fates_allom_zroot_max_dbh. note: max_z=min_z=large, sets rooting depth to soil depth" ; + double fates_allom_zroot_min_dbh(fates_pft) ; + fates_allom_zroot_min_dbh:units = "cm" ; + fates_allom_zroot_min_dbh:long_name = "dbh at which the maximum rooting depth for a recruit is defined" ; + double fates_allom_zroot_min_z(fates_pft) ; + fates_allom_zroot_min_z:units = "m" ; + fates_allom_zroot_min_z:long_name = "the maximum rooting depth defined at dbh = fates_allom_zroot_min_dbh. note: max_z=min_z=large, sets rooting depth to soil depth" ; + double fates_c2b(fates_pft) ; + fates_c2b:units = "ratio" ; + fates_c2b:long_name = "Carbon to biomass multiplier of bulk structural tissues" ; + double fates_cnp_eca_alpha_ptase(fates_pft) ; + fates_cnp_eca_alpha_ptase:units = "g/m3" ; + fates_cnp_eca_alpha_ptase:long_name = "fraction of P from ptase activity sent directly to plant (ECA)" ; + double fates_cnp_eca_decompmicc(fates_pft) ; + fates_cnp_eca_decompmicc:units = "gC/m3" ; + fates_cnp_eca_decompmicc:long_name = "maximum soil microbial decomposer biomass found over depth (will be applied at a reference depth w/ exponential attenuation) (ECA)" ; + double fates_cnp_eca_km_nh4(fates_pft) ; + fates_cnp_eca_km_nh4:units = "gN/m3" ; + fates_cnp_eca_km_nh4:long_name = "half-saturation constant for plant nh4 uptake (ECA)" ; + double fates_cnp_eca_km_no3(fates_pft) ; + fates_cnp_eca_km_no3:units = "gN/m3" ; + fates_cnp_eca_km_no3:long_name = "half-saturation constant for plant no3 uptake (ECA)" ; + double fates_cnp_eca_km_p(fates_pft) ; + fates_cnp_eca_km_p:units = "gP/m3" ; + fates_cnp_eca_km_p:long_name = "half-saturation constant for plant p uptake (ECA)" ; + double fates_cnp_eca_km_ptase(fates_pft) ; + fates_cnp_eca_km_ptase:units = "gP/m3" ; + fates_cnp_eca_km_ptase:long_name = "half-saturation constant for biochemical P (ECA)" ; + double fates_cnp_eca_lambda_ptase(fates_pft) ; + fates_cnp_eca_lambda_ptase:units = "g/m3" ; + fates_cnp_eca_lambda_ptase:long_name = "critical value for biochemical production (ECA)" ; + double fates_cnp_eca_vmax_ptase(fates_pft) ; + fates_cnp_eca_vmax_ptase:units = "gP/m2/s" ; + fates_cnp_eca_vmax_ptase:long_name = "maximum production rate for biochemical P (per m2) (ECA)" ; + double fates_cnp_nfix1(fates_pft) ; + fates_cnp_nfix1:units = "fraction" ; + fates_cnp_nfix1:long_name = "fractional surcharge added to maintenance respiration that drives symbiotic fixation" ; + double fates_cnp_nitr_store_ratio(fates_pft) ; + fates_cnp_nitr_store_ratio:units = "(gN/gN)" ; + fates_cnp_nitr_store_ratio:long_name = "storeable (labile) N, as a ratio compared to the N bound in cell structures of other organs (see code)" ; + double fates_cnp_phos_store_ratio(fates_pft) ; + fates_cnp_phos_store_ratio:units = "(gP/gP)" ; + fates_cnp_phos_store_ratio:long_name = "storeable (labile) P, as a ratio compared to the P bound in cell structures of other organs (see code)" ; + double fates_cnp_pid_kd(fates_pft) ; + fates_cnp_pid_kd:units = "unknown" ; + fates_cnp_pid_kd:long_name = "derivative constant of the PID controller on adaptive fine-root biomass" ; + double fates_cnp_pid_ki(fates_pft) ; + fates_cnp_pid_ki:units = "unknown" ; + fates_cnp_pid_ki:long_name = "integral constant of the PID controller on adaptive fine-root biomass" ; + double fates_cnp_pid_kp(fates_pft) ; + fates_cnp_pid_kp:units = "unknown" ; + fates_cnp_pid_kp:long_name = "proportional constant of the PID controller on adaptive fine-root biomass" ; + double fates_cnp_prescribed_nuptake(fates_pft) ; + fates_cnp_prescribed_nuptake:units = "fraction" ; + fates_cnp_prescribed_nuptake:long_name = "Prescribed N uptake flux. 0=fully coupled simulation >0=prescribed (experimental)" ; + double fates_cnp_prescribed_puptake(fates_pft) ; + fates_cnp_prescribed_puptake:units = "fraction" ; + fates_cnp_prescribed_puptake:long_name = "Prescribed P uptake flux. 0=fully coupled simulation, >0=prescribed (experimental)" ; + double fates_cnp_store_ovrflw_frac(fates_pft) ; + fates_cnp_store_ovrflw_frac:units = "fraction" ; + fates_cnp_store_ovrflw_frac:long_name = "size of overflow storage (for excess C,N or P) as a fraction of storage target" ; + double fates_cnp_turnover_nitr_retrans(fates_plant_organs, fates_pft) ; + fates_cnp_turnover_nitr_retrans:units = "fraction" ; + fates_cnp_turnover_nitr_retrans:long_name = "retranslocation (reabsorbtion) fraction of nitrogen in turnover of scenescing tissues" ; + double fates_cnp_turnover_phos_retrans(fates_plant_organs, fates_pft) ; + fates_cnp_turnover_phos_retrans:units = "fraction" ; + fates_cnp_turnover_phos_retrans:long_name = "retranslocation (reabsorbtion) fraction of phosphorus in turnover of scenescing tissues" ; + double fates_cnp_vmax_nh4(fates_pft) ; + fates_cnp_vmax_nh4:units = "gN/gC/s" ; + fates_cnp_vmax_nh4:long_name = "maximum (potential) uptake rate of NH4 per gC of fineroot biomass (see main/EDPftvarcon.F90 vmax_nh4 for usage)" ; + double fates_cnp_vmax_no3(fates_pft) ; + fates_cnp_vmax_no3:units = "gN/gC/s" ; + fates_cnp_vmax_no3:long_name = "maximum (potential) uptake rate of NO3 per gC of fineroot biomass (see main/EDPftvarcon.F90 vmax_no3 for usage)" ; + double fates_cnp_vmax_p(fates_pft) ; + fates_cnp_vmax_p:units = "gP/gC/s" ; + fates_cnp_vmax_p:long_name = "maximum production rate for phosphorus (ECA and RD)" ; + double fates_damage_frac(fates_pft) ; + fates_damage_frac:units = "fraction" ; + fates_damage_frac:long_name = "fraction of cohort damaged in each damage event (event frequency specified in the is_it_damage_time subroutine)" ; + double fates_damage_mort_p1(fates_pft) ; + fates_damage_mort_p1:units = "fraction" ; + fates_damage_mort_p1:long_name = "inflection point of damage mortality function, a value of 0.8 means 50% mortality with 80% loss of crown, turn off with a large number" ; + double fates_damage_mort_p2(fates_pft) ; + fates_damage_mort_p2:units = "unitless" ; + fates_damage_mort_p2:long_name = "rate of mortality increase with damage" ; + double fates_damage_recovery_scalar(fates_pft) ; + fates_damage_recovery_scalar:units = "unitless" ; + fates_damage_recovery_scalar:long_name = "fraction of the cohort that recovers from damage" ; + double fates_dev_arbitrary_pft(fates_pft) ; + fates_dev_arbitrary_pft:units = "unknown" ; + fates_dev_arbitrary_pft:long_name = "Unassociated pft dimensioned free parameter that developers can use for testing arbitrary new hypotheses" ; + double fates_fire_alpha_SH(fates_pft) ; + fates_fire_alpha_SH:units = "m / (kw/m)**(2/3)" ; + fates_fire_alpha_SH:long_name = "spitfire parameter, alpha scorch height, Equation 16 Thonicke et al 2010" ; + double fates_fire_bark_scaler(fates_pft) ; + fates_fire_bark_scaler:units = "fraction" ; + fates_fire_bark_scaler:long_name = "the thickness of a cohorts bark as a fraction of its dbh" ; + double fates_fire_crown_kill(fates_pft) ; + fates_fire_crown_kill:units = "NA" ; + fates_fire_crown_kill:long_name = "fire parameter, see equation 22 in Thonicke et al 2010" ; + double fates_frag_fnrt_fcel(fates_pft) ; + fates_frag_fnrt_fcel:units = "fraction" ; + fates_frag_fnrt_fcel:long_name = "Fine root litter cellulose fraction" ; + double fates_frag_fnrt_flab(fates_pft) ; + fates_frag_fnrt_flab:units = "fraction" ; + fates_frag_fnrt_flab:long_name = "Fine root litter labile fraction" ; + double fates_frag_fnrt_flig(fates_pft) ; + fates_frag_fnrt_flig:units = "fraction" ; + fates_frag_fnrt_flig:long_name = "Fine root litter lignin fraction" ; + double fates_frag_leaf_fcel(fates_pft) ; + fates_frag_leaf_fcel:units = "fraction" ; + fates_frag_leaf_fcel:long_name = "Leaf litter cellulose fraction" ; + double fates_frag_leaf_flab(fates_pft) ; + fates_frag_leaf_flab:units = "fraction" ; + fates_frag_leaf_flab:long_name = "Leaf litter labile fraction" ; + double fates_frag_leaf_flig(fates_pft) ; + fates_frag_leaf_flig:units = "fraction" ; + fates_frag_leaf_flig:long_name = "Leaf litter lignin fraction" ; + double fates_frag_seed_decay_rate(fates_pft) ; + fates_frag_seed_decay_rate:units = "yr-1" ; + fates_frag_seed_decay_rate:long_name = "fraction of seeds that decay per year" ; + double fates_grperc(fates_pft) ; + fates_grperc:units = "unitless" ; + fates_grperc:long_name = "Growth respiration factor" ; + double fates_hydro_avuln_gs(fates_pft) ; + fates_hydro_avuln_gs:units = "unitless" ; + fates_hydro_avuln_gs:long_name = "shape parameter for stomatal control of water vapor exiting leaf" ; + double fates_hydro_avuln_node(fates_hydr_organs, fates_pft) ; + fates_hydro_avuln_node:units = "unitless" ; + fates_hydro_avuln_node:long_name = "xylem vulnerability curve shape parameter" ; + double fates_hydro_epsil_node(fates_hydr_organs, fates_pft) ; + fates_hydro_epsil_node:units = "MPa" ; + fates_hydro_epsil_node:long_name = "bulk elastic modulus" ; + double fates_hydro_fcap_node(fates_hydr_organs, fates_pft) ; + fates_hydro_fcap_node:units = "unitless" ; + fates_hydro_fcap_node:long_name = "fraction of non-residual water that is capillary in source" ; + double fates_hydro_k_lwp(fates_pft) ; + fates_hydro_k_lwp:units = "unitless" ; + fates_hydro_k_lwp:long_name = "inner leaf humidity scaling coefficient" ; + double fates_hydro_kmax_node(fates_hydr_organs, fates_pft) ; + fates_hydro_kmax_node:units = "kg/MPa/m/s" ; + fates_hydro_kmax_node:long_name = "maximum xylem conductivity per unit conducting xylem area" ; + double fates_hydro_p50_gs(fates_pft) ; + fates_hydro_p50_gs:units = "MPa" ; + fates_hydro_p50_gs:long_name = "water potential at 50% loss of stomatal conductance" ; + double fates_hydro_p50_node(fates_hydr_organs, fates_pft) ; + fates_hydro_p50_node:units = "MPa" ; + fates_hydro_p50_node:long_name = "xylem water potential at 50% loss of conductivity" ; + double fates_hydro_p_taper(fates_pft) ; + fates_hydro_p_taper:units = "unitless" ; + fates_hydro_p_taper:long_name = "xylem taper exponent" ; + double fates_hydro_pinot_node(fates_hydr_organs, fates_pft) ; + fates_hydro_pinot_node:units = "MPa" ; + fates_hydro_pinot_node:long_name = "osmotic potential at full turgor" ; + double fates_hydro_pitlp_node(fates_hydr_organs, fates_pft) ; + fates_hydro_pitlp_node:units = "MPa" ; + fates_hydro_pitlp_node:long_name = "turgor loss point" ; + double fates_hydro_resid_node(fates_hydr_organs, fates_pft) ; + fates_hydro_resid_node:units = "cm3/cm3" ; + fates_hydro_resid_node:long_name = "residual water conent" ; + double fates_hydro_rfrac_stem(fates_pft) ; + fates_hydro_rfrac_stem:units = "fraction" ; + fates_hydro_rfrac_stem:long_name = "fraction of total tree resistance from troot to canopy" ; + double fates_hydro_rs2(fates_pft) ; + fates_hydro_rs2:units = "m" ; + fates_hydro_rs2:long_name = "absorbing root radius" ; + double fates_hydro_srl(fates_pft) ; + fates_hydro_srl:units = "m g-1" ; + fates_hydro_srl:long_name = "specific root length" ; + double fates_hydro_thetas_node(fates_hydr_organs, fates_pft) ; + fates_hydro_thetas_node:units = "cm3/cm3" ; + fates_hydro_thetas_node:long_name = "saturated water content" ; + double fates_hydro_vg_alpha_node(fates_hydr_organs, fates_pft) ; + fates_hydro_vg_alpha_node:units = "MPa-1" ; + fates_hydro_vg_alpha_node:long_name = "(used if hydr_htftype_node = 2), capillary length parameter in van Genuchten model" ; + double fates_hydro_vg_m_node(fates_hydr_organs, fates_pft) ; + fates_hydro_vg_m_node:units = "unitless" ; + fates_hydro_vg_m_node:long_name = "(used if hydr_htftype_node = 2),m in van Genuchten 1980 model, 2nd pore size distribution parameter" ; + double fates_hydro_vg_n_node(fates_hydr_organs, fates_pft) ; + fates_hydro_vg_n_node:units = "unitless" ; + fates_hydro_vg_n_node:long_name = "(used if hydr_htftype_node = 2),n in van Genuchten 1980 model, pore size distribution parameter" ; + double fates_leaf_c3psn(fates_pft) ; + fates_leaf_c3psn:units = "flag" ; + fates_leaf_c3psn:long_name = "Photosynthetic pathway (1=c3, 0=c4)" ; + double fates_leaf_jmaxha(fates_pft) ; + fates_leaf_jmaxha:units = "J/mol" ; + fates_leaf_jmaxha:long_name = "activation energy for jmax" ; + double fates_leaf_jmaxhd(fates_pft) ; + fates_leaf_jmaxhd:units = "J/mol" ; + fates_leaf_jmaxhd:long_name = "deactivation energy for jmax" ; + double fates_leaf_jmaxse(fates_pft) ; + fates_leaf_jmaxse:units = "J/mol/K" ; + fates_leaf_jmaxse:long_name = "entropy term for jmax" ; + double fates_leaf_slamax(fates_pft) ; + fates_leaf_slamax:units = "m^2/gC" ; + fates_leaf_slamax:long_name = "Maximum Specific Leaf Area (SLA), even if under a dense canopy" ; + double fates_leaf_slatop(fates_pft) ; + fates_leaf_slatop:units = "m^2/gC" ; + fates_leaf_slatop:long_name = "Specific Leaf Area (SLA) at top of canopy, projected area basis" ; + double fates_leaf_stomatal_intercept(fates_pft) ; + fates_leaf_stomatal_intercept:units = "umol H2O/m**2/s" ; + fates_leaf_stomatal_intercept:long_name = "Minimum unstressed stomatal conductance for Ball-Berry model and Medlyn model" ; + double fates_leaf_stomatal_slope_ballberry(fates_pft) ; + fates_leaf_stomatal_slope_ballberry:units = "unitless" ; + fates_leaf_stomatal_slope_ballberry:long_name = "stomatal slope parameter, as per Ball-Berry" ; + double fates_leaf_stomatal_slope_medlyn(fates_pft) ; + fates_leaf_stomatal_slope_medlyn:units = "KPa**0.5" ; + fates_leaf_stomatal_slope_medlyn:long_name = "stomatal slope parameter, as per Medlyn" ; + double fates_leaf_vcmax25top(fates_leafage_class, fates_pft) ; + fates_leaf_vcmax25top:units = "umol CO2/m^2/s" ; + fates_leaf_vcmax25top:long_name = "maximum carboxylation rate of Rub. at 25C, canopy top" ; + double fates_leaf_vcmaxha(fates_pft) ; + fates_leaf_vcmaxha:units = "J/mol" ; + fates_leaf_vcmaxha:long_name = "activation energy for vcmax" ; + double fates_leaf_vcmaxhd(fates_pft) ; + fates_leaf_vcmaxhd:units = "J/mol" ; + fates_leaf_vcmaxhd:long_name = "deactivation energy for vcmax" ; + double fates_leaf_vcmaxse(fates_pft) ; + fates_leaf_vcmaxse:units = "J/mol/K" ; + fates_leaf_vcmaxse:long_name = "entropy term for vcmax" ; + double fates_maintresp_leaf_atkin2017_baserate(fates_pft) ; + fates_maintresp_leaf_atkin2017_baserate:units = "umol CO2/m^2/s" ; + fates_maintresp_leaf_atkin2017_baserate:long_name = "Leaf maintenance respiration base rate parameter (r0) per Atkin et al 2017" ; + double fates_maintresp_leaf_ryan1991_baserate(fates_pft) ; + fates_maintresp_leaf_ryan1991_baserate:units = "gC/gN/s" ; + fates_maintresp_leaf_ryan1991_baserate:long_name = "Leaf maintenance respiration base rate per Ryan et al 1991" ; + double fates_maintresp_reduction_curvature(fates_pft) ; + fates_maintresp_reduction_curvature:units = "unitless (0-1)" ; + fates_maintresp_reduction_curvature:long_name = "curvature of MR reduction as f(carbon storage), 1=linear, 0=very curved" ; + double fates_maintresp_reduction_intercept(fates_pft) ; + fates_maintresp_reduction_intercept:units = "unitless (0-1)" ; + fates_maintresp_reduction_intercept:long_name = "intercept of MR reduction as f(carbon storage), 0=no throttling, 1=max throttling" ; + double fates_mort_bmort(fates_pft) ; + fates_mort_bmort:units = "1/yr" ; + fates_mort_bmort:long_name = "background mortality rate" ; + double fates_mort_freezetol(fates_pft) ; + fates_mort_freezetol:units = "degrees C" ; + fates_mort_freezetol:long_name = "minimum temperature tolerance" ; + double fates_mort_hf_flc_threshold(fates_pft) ; + fates_mort_hf_flc_threshold:units = "fraction" ; + fates_mort_hf_flc_threshold:long_name = "plant fractional loss of conductivity at which drought mortality begins for hydraulic model" ; + double fates_mort_hf_sm_threshold(fates_pft) ; + fates_mort_hf_sm_threshold:units = "unitless" ; + fates_mort_hf_sm_threshold:long_name = "soil moisture (btran units) at which drought mortality begins for non-hydraulic model" ; + double fates_mort_ip_age_senescence(fates_pft) ; + fates_mort_ip_age_senescence:units = "years" ; + fates_mort_ip_age_senescence:long_name = "Mortality cohort age senescence inflection point. If _ this mortality term is off. Setting this value turns on age dependent mortality. " ; + double fates_mort_ip_size_senescence(fates_pft) ; + fates_mort_ip_size_senescence:units = "dbh cm" ; + fates_mort_ip_size_senescence:long_name = "Mortality dbh senescence inflection point. If _ this mortality term is off. Setting this value turns on size dependent mortality" ; + double fates_mort_prescribed_canopy(fates_pft) ; + fates_mort_prescribed_canopy:units = "1/yr" ; + fates_mort_prescribed_canopy:long_name = "mortality rate of canopy trees for prescribed physiology mode" ; + double fates_mort_prescribed_understory(fates_pft) ; + fates_mort_prescribed_understory:units = "1/yr" ; + fates_mort_prescribed_understory:long_name = "mortality rate of understory trees for prescribed physiology mode" ; + double fates_mort_r_age_senescence(fates_pft) ; + fates_mort_r_age_senescence:units = "mortality rate year^-1" ; + fates_mort_r_age_senescence:long_name = "Mortality age senescence rate of change. Sensible range is around 0.03-0.06. Larger values givesteeper mortality curves." ; + double fates_mort_r_size_senescence(fates_pft) ; + fates_mort_r_size_senescence:units = "mortality rate dbh^-1" ; + fates_mort_r_size_senescence:long_name = "Mortality dbh senescence rate of change. Sensible range is around 0.03-0.06. Larger values give steeper mortality curves." ; + double fates_mort_scalar_coldstress(fates_pft) ; + fates_mort_scalar_coldstress:units = "1/yr" ; + fates_mort_scalar_coldstress:long_name = "maximum mortality rate from cold stress" ; + double fates_mort_scalar_cstarvation(fates_pft) ; + fates_mort_scalar_cstarvation:units = "1/yr" ; + fates_mort_scalar_cstarvation:long_name = "maximum mortality rate from carbon starvation" ; + double fates_mort_scalar_hydrfailure(fates_pft) ; + fates_mort_scalar_hydrfailure:units = "1/yr" ; + fates_mort_scalar_hydrfailure:long_name = "maximum mortality rate from hydraulic failure" ; + double fates_nonhydro_smpsc(fates_pft) ; + fates_nonhydro_smpsc:units = "mm" ; + fates_nonhydro_smpsc:long_name = "Soil water potential at full stomatal closure" ; + double fates_nonhydro_smpso(fates_pft) ; + fates_nonhydro_smpso:units = "mm" ; + fates_nonhydro_smpso:long_name = "Soil water potential at full stomatal opening" ; + double fates_phen_cold_size_threshold(fates_pft) ; + fates_phen_cold_size_threshold:units = "cm" ; + fates_phen_cold_size_threshold:long_name = "the dbh size above which will lead to phenology-related stem and leaf drop" ; + double fates_phen_evergreen(fates_pft) ; + fates_phen_evergreen:units = "logical flag" ; + fates_phen_evergreen:long_name = "Binary flag for evergreen leaf habit" ; + double fates_phen_flush_fraction(fates_pft) ; + fates_phen_flush_fraction:units = "fraction" ; + fates_phen_flush_fraction:long_name = "Upon bud-burst, the maximum fraction of storage carbon used for flushing leaves" ; + double fates_phen_fnrt_drop_frac(fates_pft) ; + fates_phen_fnrt_drop_frac:units = "fraction" ; + fates_phen_fnrt_drop_frac:long_name = "fraction of fine roots to drop during drought or cold" ; + double fates_phen_season_decid(fates_pft) ; + fates_phen_season_decid:units = "logical flag" ; + fates_phen_season_decid:long_name = "Binary flag for seasonal-deciduous leaf habit" ; + double fates_phen_stem_drop_fraction(fates_pft) ; + fates_phen_stem_drop_fraction:units = "fraction" ; + fates_phen_stem_drop_fraction:long_name = "fraction of stems to drop for non-woody species during drought/cold" ; + double fates_phen_stress_decid(fates_pft) ; + fates_phen_stress_decid:units = "logical flag" ; + fates_phen_stress_decid:long_name = "Binary flag for stress-deciduous leaf habit" ; + double fates_prescribed_npp_canopy(fates_pft) ; + fates_prescribed_npp_canopy:units = "kgC / m^2 / yr" ; + fates_prescribed_npp_canopy:long_name = "NPP per unit crown area of canopy trees for prescribed physiology mode" ; + double fates_prescribed_npp_understory(fates_pft) ; + fates_prescribed_npp_understory:units = "kgC / m^2 / yr" ; + fates_prescribed_npp_understory:long_name = "NPP per unit crown area of understory trees for prescribed physiology mode" ; + double fates_rad_leaf_clumping_index(fates_pft) ; + fates_rad_leaf_clumping_index:units = "fraction (0-1)" ; + fates_rad_leaf_clumping_index:long_name = "factor describing how much self-occlusion of leaf scattering elements decreases light interception" ; + double fates_rad_leaf_rhonir(fates_pft) ; + fates_rad_leaf_rhonir:units = "fraction" ; + fates_rad_leaf_rhonir:long_name = "Leaf reflectance: near-IR" ; + double fates_rad_leaf_rhovis(fates_pft) ; + fates_rad_leaf_rhovis:units = "fraction" ; + fates_rad_leaf_rhovis:long_name = "Leaf reflectance: visible" ; + double fates_rad_leaf_taunir(fates_pft) ; + fates_rad_leaf_taunir:units = "fraction" ; + fates_rad_leaf_taunir:long_name = "Leaf transmittance: near-IR" ; + double fates_rad_leaf_tauvis(fates_pft) ; + fates_rad_leaf_tauvis:units = "fraction" ; + fates_rad_leaf_tauvis:long_name = "Leaf transmittance: visible" ; + double fates_rad_leaf_xl(fates_pft) ; + fates_rad_leaf_xl:units = "unitless" ; + fates_rad_leaf_xl:long_name = "Leaf/stem orientation index" ; + double fates_rad_stem_rhonir(fates_pft) ; + fates_rad_stem_rhonir:units = "fraction" ; + fates_rad_stem_rhonir:long_name = "Stem reflectance: near-IR" ; + double fates_rad_stem_rhovis(fates_pft) ; + fates_rad_stem_rhovis:units = "fraction" ; + fates_rad_stem_rhovis:long_name = "Stem reflectance: visible" ; + double fates_rad_stem_taunir(fates_pft) ; + fates_rad_stem_taunir:units = "fraction" ; + fates_rad_stem_taunir:long_name = "Stem transmittance: near-IR" ; + double fates_rad_stem_tauvis(fates_pft) ; + fates_rad_stem_tauvis:units = "fraction" ; + fates_rad_stem_tauvis:long_name = "Stem transmittance: visible" ; + double fates_recruit_height_min(fates_pft) ; + fates_recruit_height_min:units = "m" ; + fates_recruit_height_min:long_name = "the minimum height (ie starting height) of a newly recruited plant" ; + double fates_recruit_init_density(fates_pft) ; + fates_recruit_init_density:units = "stems/m2" ; + fates_recruit_init_density:long_name = "initial seedling density for a cold-start near-bare-ground simulation" ; + double fates_recruit_prescribed_rate(fates_pft) ; + fates_recruit_prescribed_rate:units = "n/yr" ; + fates_recruit_prescribed_rate:long_name = "recruitment rate for prescribed physiology mode" ; + double fates_recruit_seed_alloc(fates_pft) ; + fates_recruit_seed_alloc:units = "fraction" ; + fates_recruit_seed_alloc:long_name = "fraction of available carbon balance allocated to seeds" ; + double fates_recruit_seed_alloc_mature(fates_pft) ; + fates_recruit_seed_alloc_mature:units = "fraction" ; + fates_recruit_seed_alloc_mature:long_name = "fraction of available carbon balance allocated to seeds in mature plants (adds to fates_seed_alloc)" ; + double fates_recruit_seed_dbh_repro_threshold(fates_pft) ; + fates_recruit_seed_dbh_repro_threshold:units = "cm" ; + fates_recruit_seed_dbh_repro_threshold:long_name = "the diameter where the plant will increase allocation to the seed pool by fraction: fates_recruit_seed_alloc_mature" ; + double fates_recruit_seed_germination_rate(fates_pft) ; + fates_recruit_seed_germination_rate:units = "yr-1" ; + fates_recruit_seed_germination_rate:long_name = "fraction of seeds that germinate per year" ; + double fates_recruit_seed_supplement(fates_pft) ; + fates_recruit_seed_supplement:units = "KgC/m2/yr" ; + fates_recruit_seed_supplement:long_name = "Supplemental external seed rain source term (non-mass conserving)" ; + double fates_stoich_nitr(fates_plant_organs, fates_pft) ; + fates_stoich_nitr:units = "gN/gC" ; + fates_stoich_nitr:long_name = "target nitrogen concentration (ratio with carbon) of organs" ; + double fates_stoich_phos(fates_plant_organs, fates_pft) ; + fates_stoich_phos:units = "gP/gC" ; + fates_stoich_phos:long_name = "target phosphorus concentration (ratio with carbon) of organs" ; + double fates_trim_inc(fates_pft) ; + fates_trim_inc:units = "m2/m2" ; + fates_trim_inc:long_name = "Arbitrary incremental change in trimming function." ; + double fates_trim_limit(fates_pft) ; + fates_trim_limit:units = "m2/m2" ; + fates_trim_limit:long_name = "Arbitrary limit to reductions in leaf area with stress" ; + double fates_turb_displar(fates_pft) ; + fates_turb_displar:units = "unitless" ; + fates_turb_displar:long_name = "Ratio of displacement height to canopy top height" ; + double fates_turb_leaf_diameter(fates_pft) ; + fates_turb_leaf_diameter:units = "m" ; + fates_turb_leaf_diameter:long_name = "Characteristic leaf dimension" ; + double fates_turb_z0mr(fates_pft) ; + fates_turb_z0mr:units = "unitless" ; + fates_turb_z0mr:long_name = "Ratio of momentum roughness length to canopy top height" ; + double fates_turnover_branch(fates_pft) ; + fates_turnover_branch:units = "yr" ; + fates_turnover_branch:long_name = "turnover time of branches" ; + double fates_turnover_fnrt(fates_pft) ; + fates_turnover_fnrt:units = "yr" ; + fates_turnover_fnrt:long_name = "root longevity (alternatively, turnover time)" ; + double fates_turnover_leaf(fates_leafage_class, fates_pft) ; + fates_turnover_leaf:units = "yr" ; + fates_turnover_leaf:long_name = "Leaf longevity (ie turnover timescale)" ; + double fates_turnover_senleaf_fdrought(fates_pft) ; + fates_turnover_senleaf_fdrought:units = "unitless[0-1]" ; + fates_turnover_senleaf_fdrought:long_name = "multiplication factor for leaf longevity of senescent leaves during drought" ; + double fates_wood_density(fates_pft) ; + fates_wood_density:units = "g/cm3" ; + fates_wood_density:long_name = "mean density of woody tissue in plant" ; + double fates_woody(fates_pft) ; + fates_woody:units = "logical flag" ; + fates_woody:long_name = "Binary woody lifeform flag" ; + double fates_hlm_pft_map(fates_hlm_pftno, fates_pft) ; + fates_hlm_pft_map:units = "area fraction" ; + fates_hlm_pft_map:long_name = "In fixed biogeog mode, fraction of HLM area associated with each FATES PFT" ; + double fates_fire_FBD(fates_litterclass) ; + fates_fire_FBD:units = "kg Biomass/m3" ; + fates_fire_FBD:long_name = "fuel bulk density" ; + double fates_fire_low_moisture_Coeff(fates_litterclass) ; + fates_fire_low_moisture_Coeff:units = "NA" ; + fates_fire_low_moisture_Coeff:long_name = "spitfire parameter, equation B1 Thonicke et al 2010" ; + double fates_fire_low_moisture_Slope(fates_litterclass) ; + fates_fire_low_moisture_Slope:units = "NA" ; + fates_fire_low_moisture_Slope:long_name = "spitfire parameter, equation B1 Thonicke et al 2010" ; + double fates_fire_mid_moisture(fates_litterclass) ; + fates_fire_mid_moisture:units = "NA" ; + fates_fire_mid_moisture:long_name = "spitfire litter moisture threshold to be considered medium dry" ; + double fates_fire_mid_moisture_Coeff(fates_litterclass) ; + fates_fire_mid_moisture_Coeff:units = "NA" ; + fates_fire_mid_moisture_Coeff:long_name = "spitfire parameter, equation B1 Thonicke et al 2010" ; + double fates_fire_mid_moisture_Slope(fates_litterclass) ; + fates_fire_mid_moisture_Slope:units = "NA" ; + fates_fire_mid_moisture_Slope:long_name = "spitfire parameter, equation B1 Thonicke et al 2010" ; + double fates_fire_min_moisture(fates_litterclass) ; + fates_fire_min_moisture:units = "NA" ; + fates_fire_min_moisture:long_name = "spitfire litter moisture threshold to be considered very dry" ; + double fates_fire_SAV(fates_litterclass) ; + fates_fire_SAV:units = "cm-1" ; + fates_fire_SAV:long_name = "fuel surface area to volume ratio" ; + double fates_frag_maxdecomp(fates_litterclass) ; + fates_frag_maxdecomp:units = "yr-1" ; + fates_frag_maxdecomp:long_name = "maximum rate of litter & CWD transfer from non-decomposing class into decomposing class" ; + double fates_frag_cwd_frac(fates_NCWD) ; + fates_frag_cwd_frac:units = "fraction" ; + fates_frag_cwd_frac:long_name = "fraction of woody (bdead+bsw) biomass destined for CWD pool" ; + double fates_canopy_closure_thresh ; + fates_canopy_closure_thresh:units = "unitless" ; + fates_canopy_closure_thresh:long_name = "tree canopy coverage at which crown area allometry changes from savanna to forest value" ; + double fates_cnp_eca_plant_escalar ; + fates_cnp_eca_plant_escalar:units = "" ; + fates_cnp_eca_plant_escalar:long_name = "scaling factor for plant fine root biomass to calculate nutrient carrier enzyme abundance (ECA)" ; + double fates_cohort_age_fusion_tol ; + fates_cohort_age_fusion_tol:units = "unitless" ; + fates_cohort_age_fusion_tol:long_name = "minimum fraction in differece in cohort age between cohorts." ; + double fates_cohort_size_fusion_tol ; + fates_cohort_size_fusion_tol:units = "unitless" ; + fates_cohort_size_fusion_tol:long_name = "minimum fraction in difference in dbh between cohorts" ; + double fates_comp_excln ; + fates_comp_excln:units = "none" ; + fates_comp_excln:long_name = "IF POSITIVE: weighting factor (exponent on dbh) for canopy layer exclusion and promotion, IF NEGATIVE: switch to use deterministic height sorting" ; + double fates_damage_canopy_layer_code ; + fates_damage_canopy_layer_code:units = "unitless" ; + fates_damage_canopy_layer_code:long_name = "Integer code that decides whether damage affects canopy trees (1), understory trees (2)" ; + double fates_damage_event_code ; + fates_damage_event_code:units = "unitless" ; + fates_damage_event_code:long_name = "Integer code that options how damage events are structured" ; + double fates_dev_arbitrary ; + fates_dev_arbitrary:units = "unknown" ; + fates_dev_arbitrary:long_name = "Unassociated free parameter that developers can use for testing arbitrary new hypotheses" ; + double fates_fire_active_crown_fire ; + fates_fire_active_crown_fire:units = "0 or 1" ; + fates_fire_active_crown_fire:long_name = "flag, 1=active crown fire 0=no active crown fire" ; + double fates_fire_cg_strikes ; + fates_fire_cg_strikes:units = "fraction (0-1)" ; + fates_fire_cg_strikes:long_name = "fraction of cloud to ground lightning strikes" ; + double fates_fire_drying_ratio ; + fates_fire_drying_ratio:units = "NA" ; + fates_fire_drying_ratio:long_name = "spitfire parameter, fire drying ratio for fuel moisture, alpha_FMC EQ 6 Thonicke et al 2010" ; + double fates_fire_durat_slope ; + fates_fire_durat_slope:units = "NA" ; + fates_fire_durat_slope:long_name = "spitfire parameter, fire max duration slope, Equation 14 Thonicke et al 2010" ; + double fates_fire_fdi_a ; + fates_fire_fdi_a:units = "NA" ; + fates_fire_fdi_a:long_name = "spitfire parameter, fire danger index, EQ 5 Thonicke et al 2010" ; + double fates_fire_fdi_alpha ; + fates_fire_fdi_alpha:units = "NA" ; + fates_fire_fdi_alpha:long_name = "spitfire parameter, EQ 7 Venevsky et al. GCB 2002,(modified EQ 8 Thonicke et al. 2010) " ; + double fates_fire_fdi_b ; + fates_fire_fdi_b:units = "NA" ; + fates_fire_fdi_b:long_name = "spitfire parameter, fire danger index, EQ 5 Thonicke et al 2010 " ; + double fates_fire_fuel_energy ; + fates_fire_fuel_energy:units = "kJ/kg" ; + fates_fire_fuel_energy:long_name = "spitfire parameter, heat content of fuel" ; + double fates_fire_max_durat ; + fates_fire_max_durat:units = "minutes" ; + fates_fire_max_durat:long_name = "spitfire parameter, fire maximum duration, Equation 14 Thonicke et al 2010" ; + double fates_fire_miner_damp ; + fates_fire_miner_damp:units = "NA" ; + fates_fire_miner_damp:long_name = "spitfire parameter, mineral-dampening coefficient EQ A1 Thonicke et al 2010 " ; + double fates_fire_miner_total ; + fates_fire_miner_total:units = "fraction" ; + fates_fire_miner_total:long_name = "spitfire parameter, total mineral content, Table A1 Thonicke et al 2010" ; + double fates_fire_nignitions ; + fates_fire_nignitions:units = "ignitions per year per km2" ; + fates_fire_nignitions:long_name = "number of annual ignitions per square km" ; + double fates_fire_part_dens ; + fates_fire_part_dens:units = "kg/m2" ; + fates_fire_part_dens:long_name = "spitfire parameter, oven dry particle density, Table A1 Thonicke et al 2010" ; + double fates_fire_threshold ; + fates_fire_threshold:units = "kW/m" ; + fates_fire_threshold:long_name = "spitfire parameter, fire intensity threshold for tracking fires that spread" ; + double fates_frag_cwd_fcel ; + fates_frag_cwd_fcel:units = "unitless" ; + fates_frag_cwd_fcel:long_name = "Cellulose fraction for CWD" ; + double fates_frag_cwd_flig ; + fates_frag_cwd_flig:units = "unitless" ; + fates_frag_cwd_flig:long_name = "Lignin fraction of coarse woody debris" ; + double fates_hydro_kmax_rsurf1 ; + fates_hydro_kmax_rsurf1:units = "kg water/m2 root area/Mpa/s" ; + fates_hydro_kmax_rsurf1:long_name = "maximum conducitivity for unit root surface (into root)" ; + double fates_hydro_kmax_rsurf2 ; + fates_hydro_kmax_rsurf2:units = "kg water/m2 root area/Mpa/s" ; + fates_hydro_kmax_rsurf2:long_name = "maximum conducitivity for unit root surface (out of root)" ; + double fates_hydro_psi0 ; + fates_hydro_psi0:units = "MPa" ; + fates_hydro_psi0:long_name = "sapwood water potential at saturation" ; + double fates_hydro_psicap ; + fates_hydro_psicap:units = "MPa" ; + fates_hydro_psicap:long_name = "sapwood water potential at which capillary reserves exhausted" ; + double fates_hydro_solver ; + fates_hydro_solver:units = "unitless" ; + fates_hydro_solver:long_name = "switch designating which numerical solver for plant hydraulics, 1 = 1D taylor, 2 = 2D Picard, 3 = 2D Newton (deprecated)" ; + double fates_landuse_logging_coll_under_frac ; + fates_landuse_logging_coll_under_frac:units = "fraction" ; + fates_landuse_logging_coll_under_frac:long_name = "Fraction of stems killed in the understory when logging generates disturbance" ; + double fates_landuse_logging_collateral_frac ; + fates_landuse_logging_collateral_frac:units = "fraction" ; + fates_landuse_logging_collateral_frac:long_name = "Fraction of large stems in upperstory that die from logging collateral damage" ; + double fates_landuse_logging_dbhmax ; + fates_landuse_logging_dbhmax:units = "cm" ; + fates_landuse_logging_dbhmax:long_name = "Maximum dbh below which logging is applied (unset values flag this to be unused)" ; + double fates_landuse_logging_dbhmax_infra ; + fates_landuse_logging_dbhmax_infra:units = "cm" ; + fates_landuse_logging_dbhmax_infra:long_name = "Tree diameter, above which infrastructure from logging does not impact damage or mortality." ; + double fates_landuse_logging_dbhmin ; + fates_landuse_logging_dbhmin:units = "cm" ; + fates_landuse_logging_dbhmin:long_name = "Minimum dbh at which logging is applied" ; + double fates_landuse_logging_direct_frac ; + fates_landuse_logging_direct_frac:units = "fraction" ; + fates_landuse_logging_direct_frac:long_name = "Fraction of stems logged directly per event" ; + double fates_landuse_logging_event_code ; + fates_landuse_logging_event_code:units = "unitless" ; + fates_landuse_logging_event_code:long_name = "Integer code that options how logging events are structured" ; + double fates_landuse_logging_export_frac ; + fates_landuse_logging_export_frac:units = "fraction" ; + fates_landuse_logging_export_frac:long_name = "fraction of trunk product being shipped offsite, the leftovers will be left onsite as large CWD" ; + double fates_landuse_logging_mechanical_frac ; + fates_landuse_logging_mechanical_frac:units = "fraction" ; + fates_landuse_logging_mechanical_frac:long_name = "Fraction of stems killed due infrastructure an other mechanical means" ; + double fates_landuse_pprodharv10_forest_mean ; + fates_landuse_pprodharv10_forest_mean:units = "fraction" ; + fates_landuse_pprodharv10_forest_mean:long_name = "mean harvest mortality proportion of deadstem to 10-yr product (pprodharv10) of all woody PFT types" ; + double fates_leaf_photo_temp_acclim_timescale ; + fates_leaf_photo_temp_acclim_timescale:units = "days" ; + fates_leaf_photo_temp_acclim_timescale:long_name = "Length of the window for the exponential moving average (ema) of vegetation temperature used in photosynthesis temperature acclimation (NOT USED)" ; + double fates_leaf_photo_tempsens_model ; + fates_leaf_photo_tempsens_model:units = "unitless" ; + fates_leaf_photo_tempsens_model:long_name = "switch for choosing the model that defines the temperature sensitivity of photosynthetic parameters (vcmax, jmax). 1=non-acclimating (NOT USED)" ; + double fates_leaf_stomatal_assim_model ; + fates_leaf_stomatal_assim_model:units = "unitless" ; + fates_leaf_stomatal_assim_model:long_name = "a switch designating whether to use net (1) or gross (2) assimilation in the stomatal model" ; + double fates_leaf_stomatal_model ; + fates_leaf_stomatal_model:units = "unitless" ; + fates_leaf_stomatal_model:long_name = "switch for choosing between Ball-Berry (1) stomatal conductance model and Medlyn (2) model" ; + double fates_leaf_theta_cj_c3 ; + fates_leaf_theta_cj_c3:units = "unitless" ; + fates_leaf_theta_cj_c3:long_name = "Empirical curvature parameter for ac, aj photosynthesis co-limitation in c3 plants" ; + double fates_leaf_theta_cj_c4 ; + fates_leaf_theta_cj_c4:units = "unitless" ; + fates_leaf_theta_cj_c4:long_name = "Empirical curvature parameter for ac, aj photosynthesis co-limitation in c4 plants" ; + double fates_maintresp_leaf_model ; + fates_maintresp_leaf_model:units = "unitless" ; + fates_maintresp_leaf_model:long_name = "switch for choosing between maintenance respiration models. 1=Ryan (1991) (NOT USED)" ; + double fates_maintresp_nonleaf_baserate ; + fates_maintresp_nonleaf_baserate:units = "gC/gN/s" ; + fates_maintresp_nonleaf_baserate:long_name = "Base maintenance respiration rate for plant tissues, using Ryan 1991" ; + double fates_maxcohort ; + fates_maxcohort:units = "count" ; + fates_maxcohort:long_name = "maximum number of cohorts per patch. Actual number of cohorts also depend on cohort fusion tolerances" ; + double fates_maxpatch_primary ; + fates_maxpatch_primary:units = "count" ; + fates_maxpatch_primary:long_name = "maximum number of primary vegetation patches per site" ; + double fates_maxpatch_secondary ; + fates_maxpatch_secondary:units = "count" ; + fates_maxpatch_secondary:long_name = "maximum number of secondary vegetation patches per site" ; + double fates_mort_disturb_frac ; + fates_mort_disturb_frac:units = "fraction" ; + fates_mort_disturb_frac:long_name = "fraction of canopy mortality that results in disturbance (i.e. transfer of area from new to old patch)" ; + double fates_mort_understorey_death ; + fates_mort_understorey_death:units = "fraction" ; + fates_mort_understorey_death:long_name = "fraction of plants in understorey cohort impacted by overstorey tree-fall" ; + double fates_patch_fusion_tol ; + fates_patch_fusion_tol:units = "unitless" ; + fates_patch_fusion_tol:long_name = "minimum fraction in difference in profiles between patches" ; + double fates_phen_chilltemp ; + fates_phen_chilltemp:units = "degrees C" ; + fates_phen_chilltemp:long_name = "chilling day counting threshold for vegetation" ; + double fates_phen_coldtemp ; + fates_phen_coldtemp:units = "degrees C" ; + fates_phen_coldtemp:long_name = "vegetation temperature exceedance that flags a cold-day for leaf-drop" ; + double fates_phen_drought_model ; + fates_phen_drought_model:units = "unitless" ; + fates_phen_drought_model:long_name = "which method to use for drought phenology: 0 - FATES default; 1 - Semi-deciduous (ED2-like)" ; + double fates_phen_drought_threshold ; + fates_phen_drought_threshold:units = "m3/m3 or mm" ; + fates_phen_drought_threshold:long_name = "threshold for drought phenology (or lower threshold when fates_phen_drought_model = 1); the quantity depends on the sign: if positive, the threshold is volumetric soil moisture (m3/m3). If negative, the threshold is soil matric potentical (mm)" ; + double fates_phen_gddthresh_a ; + fates_phen_gddthresh_a:units = "none" ; + fates_phen_gddthresh_a:long_name = "GDD accumulation function, intercept parameter: gdd_thesh = a + b exp(c*ncd)" ; + double fates_phen_gddthresh_b ; + fates_phen_gddthresh_b:units = "none" ; + fates_phen_gddthresh_b:long_name = "GDD accumulation function, multiplier parameter: gdd_thesh = a + b exp(c*ncd)" ; + double fates_phen_gddthresh_c ; + fates_phen_gddthresh_c:units = "none" ; + fates_phen_gddthresh_c:long_name = "GDD accumulation function, exponent parameter: gdd_thesh = a + b exp(c*ncd)" ; + double fates_phen_mindaysoff ; + fates_phen_mindaysoff:units = "days" ; + fates_phen_mindaysoff:long_name = "day threshold compared against days since leaves became off-allometry" ; + double fates_phen_mindayson ; + fates_phen_mindayson:units = "days" ; + fates_phen_mindayson:long_name = "day threshold compared against days since leaves became on-allometry" ; + double fates_phen_moist_threshold ; + fates_phen_moist_threshold:units = "m3/m3 or mm" ; + fates_phen_moist_threshold:long_name = "upper threshold for drought phenology (only for fates_phen_drought_model=1); the quantity depends on the sign: if positive, the threshold is volumetric soil moisture (m3/m3). If negative, the threshold is soil matric potentical (mm)" ; + double fates_phen_ncolddayslim ; + fates_phen_ncolddayslim:units = "days" ; + fates_phen_ncolddayslim:long_name = "day threshold exceedance for temperature leaf-drop" ; + double fates_q10_froz ; + fates_q10_froz:units = "unitless" ; + fates_q10_froz:long_name = "Q10 for frozen-soil respiration rates" ; + double fates_q10_mr ; + fates_q10_mr:units = "unitless" ; + fates_q10_mr:long_name = "Q10 for maintenance respiration" ; + double fates_soil_salinity ; + fates_soil_salinity:units = "ppt" ; + fates_soil_salinity:long_name = "soil salinity used for model when not coupled to dynamic soil salinity" ; + double fates_vai_top_bin_width ; + fates_vai_top_bin_width:units = "m2/m2" ; + fates_vai_top_bin_width:long_name = "width in VAI units of uppermost leaf+stem layer scattering element in each canopy layer" ; + double fates_vai_width_increase_factor ; + fates_vai_width_increase_factor:units = "unitless" ; + fates_vai_width_increase_factor:long_name = "factor by which each leaf+stem scattering element increases in VAI width (1 = uniform spacing)" ; + +// global attributes: + :history = "This file was generated by BatchPatchParams.py:\nCDL Base File = archive/api24.1.0_101722_fates_params_default.cdl\nXML patch file = archive/api24.1.0_101722_patch_params.xml" ; +data: + + fates_history_ageclass_bin_edges = 0, 1, 2, 5, 10, 20, 50 ; + + fates_history_coageclass_bin_edges = 0, 5 ; + + fates_history_height_bin_edges = 0, 0.1, 0.3, 1, 3, 10 ; + + fates_history_damage_bin_edges = 0, 80 ; + + fates_history_sizeclass_bin_edges = 0, 5, 10, 15, 20, 30, 40, 50, 60, 70, + 80, 90, 100 ; + + fates_alloc_organ_id = 1, 2, 3, 6 ; + + fates_hydro_htftype_node = 1, 1, 1, 1 ; + + fates_pftname = + "broadleaf_evergreen_tropical_tree ", + "needleleaf_evergreen_extratrop_tree ", + "needleleaf_colddecid_extratrop_tree ", + "broadleaf_evergreen_extratrop_tree ", + "broadleaf_hydrodecid_tropical_tree ", + "broadleaf_colddecid_extratrop_tree ", + "broadleaf_evergreen_extratrop_shrub ", + "broadleaf_hydrodecid_extratrop_shrub ", + "broadleaf_colddecid_extratrop_shrub ", + "arctic_c3_grass ", + "cool_c3_grass ", + "c4_grass " ; + + fates_hydro_organ_name = + "leaf ", + "stem ", + "transporting root ", + "absorbing root " ; + + fates_alloc_organ_name = + "leaf", + "fine root", + "sapwood", + "structure" ; + + fates_litterclass_name = + "twig ", + "small branch ", + "large branch ", + "trunk ", + "dead leaves ", + "live grass " ; + + fates_alloc_organ_priority = + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; + + fates_alloc_storage_cushion = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + 1.2, 1.2, 1.2 ; + + fates_alloc_store_priority_frac = 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, + 0.8, 0.8, 0.8, 0.8 ; + + fates_allom_agb1 = 0.06896, 0.06896, 0.06896, 0.06896, 0.06896, 0.06896, + 0.06896, 0.06896, 0.06896, 0.01, 0.01, 0.01 ; + + fates_allom_agb2 = 0.572, 0.572, 0.572, 0.572, 0.572, 0.572, 0.572, 0.572, + 0.572, 0.572, 0.572, 0.572 ; + + fates_allom_agb3 = 1.94, 1.94, 1.94, 1.94, 1.94, 1.94, 1.94, 1.94, 1.94, + 1.94, 1.94, 1.94 ; + + fates_allom_agb4 = 0.931, 0.931, 0.931, 0.931, 0.931, 0.931, 0.931, 0.931, + 0.931, 0.931, 0.931, 0.931 ; + + fates_allom_agb_frac = 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, + 0.6, 0.6 ; + + fates_allom_amode = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_allom_blca_expnt_diff = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_allom_cmode = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_allom_crown_depth_frac = 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.95, 0.95, + 0.95, 1, 1, 1 ; + + fates_allom_d2bl1 = 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, + 0.07, 0.07, 0.07 ; + + fates_allom_d2bl2 = 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, + 1.3 ; + + fates_allom_d2bl3 = 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, + 0.55, 0.55, 0.55 ; + + fates_allom_d2ca_coefficient_max = 0.6568464, 0.6568464, 0.6568464, + 0.6568464, 0.6568464, 0.6568464, 0.6568464, 0.6568464, 0.6568464, + 0.6568464, 0.6568464, 0.6568464 ; + + fates_allom_d2ca_coefficient_min = 0.3381119, 0.3381119, 0.3381119, + 0.3381119, 0.3381119, 0.3381119, 0.3381119, 0.3381119, 0.3381119, + 0.3381119, 0.3381119, 0.3381119 ; + + fates_allom_d2h1 = 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, + 0.64, 0.64, 0.64 ; + + fates_allom_d2h2 = 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, + 0.37, 0.37, 0.37 ; + + fates_allom_d2h3 = -999.9, -999.9, -999.9, -999.9, -999.9, -999.9, -999.9, + -999.9, -999.9, -999.9, -999.9, -999.9 ; + + fates_allom_dbh_maxheight = 90, 80, 80, 80, 90, 80, 3, 3, 2, 0.35, 0.35, 0.35 ; + + fates_allom_fmode = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_allom_fnrt_prof_a = 7, 7, 7, 7, 6, 6, 7, 7, 7, 11, 11, 11 ; + + fates_allom_fnrt_prof_b = 1, 2, 2, 1, 2, 2, 1.5, 1.5, 1.5, 2, 2, 2 ; + + fates_allom_fnrt_prof_mode = 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ; + + fates_allom_frbstor_repro = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_allom_hmode = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_allom_l2fr = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_allom_la_per_sa_int = 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, + 0.8, 0.8, 0.8 ; + + fates_allom_la_per_sa_slp = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_allom_lmode = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_allom_sai_scaler = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1 ; + + fates_allom_smode = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_allom_stmode = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_allom_zroot_k = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 ; + + fates_allom_zroot_max_dbh = 100, 100, 100, 100, 100, 100, 2, 2, 2, 2, 2, 2 ; + + fates_allom_zroot_max_z = 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100 ; + + fates_allom_zroot_min_dbh = 1, 1, 1, 2.5, 2.5, 2.5, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1 ; + + fates_allom_zroot_min_z = 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100 ; + + fates_c2b = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ; + + fates_cnp_eca_alpha_ptase = 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + 0.5, 0.5, 0.5 ; + + fates_cnp_eca_decompmicc = 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280 ; + + fates_cnp_eca_km_nh4 = 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, + 0.14, 0.14, 0.14 ; + + fates_cnp_eca_km_no3 = 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, + 0.27, 0.27, 0.27 ; + + fates_cnp_eca_km_p = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1 ; + + fates_cnp_eca_km_ptase = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_cnp_eca_lambda_ptase = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_cnp_eca_vmax_ptase = 5e-09, 5e-09, 5e-09, 5e-09, 5e-09, 5e-09, 5e-09, + 5e-09, 5e-09, 5e-09, 5e-09, 5e-09 ; + + fates_cnp_nfix1 = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_cnp_nitr_store_ratio = 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, + 1.5, 1.5, 1.5 ; + + fates_cnp_phos_store_ratio = 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, + 1.5, 1.5, 1.5 ; + + fates_cnp_pid_kd = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ; + + fates_cnp_pid_ki = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_cnp_pid_kp = 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, + 0.0005, 0.0005, 0.0005, 0.0005, 0.0005 ; + + fates_cnp_prescribed_nuptake = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_cnp_prescribed_puptake = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_cnp_store_ovrflw_frac = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_cnp_turnover_nitr_retrans = + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_cnp_turnover_phos_retrans = + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_cnp_vmax_nh4 = 2.5e-09, 2.5e-09, 2.5e-09, 2.5e-09, 2.5e-09, 2.5e-09, + 2.5e-09, 2.5e-09, 2.5e-09, 2.5e-09, 2.5e-09, 2.5e-09 ; + + fates_cnp_vmax_no3 = 2.5e-09, 2.5e-09, 2.5e-09, 2.5e-09, 2.5e-09, 2.5e-09, + 2.5e-09, 2.5e-09, 2.5e-09, 2.5e-09, 2.5e-09, 2.5e-09 ; + + fates_cnp_vmax_p = 5e-10, 5e-10, 5e-10, 5e-10, 5e-10, 5e-10, 5e-10, 5e-10, + 5e-10, 5e-10, 5e-10, 5e-10 ; + + fates_damage_frac = 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, + 0.01, 0.01, 0.01 ; + + fates_damage_mort_p1 = 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ; + + fates_damage_mort_p2 = 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, + 5.5, 5.5 ; + + fates_damage_recovery_scalar = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_dev_arbitrary_pft = _, _, _, _, _, _, _, _, _, _, _, _ ; + + fates_fire_alpha_SH = 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, + 0.2 ; + + fates_fire_bark_scaler = 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, + 0.07, 0.07, 0.07, 0.07 ; + + fates_fire_crown_kill = 0.775, 0.775, 0.775, 0.775, 0.775, 0.775, 0.775, + 0.775, 0.775, 0.775, 0.775, 0.775 ; + + fates_frag_fnrt_fcel = 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + 0.5, 0.5 ; + + fates_frag_fnrt_flab = 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, + 0.25, 0.25, 0.25 ; + + fates_frag_fnrt_flig = 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, + 0.25, 0.25, 0.25 ; + + fates_frag_leaf_fcel = 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + 0.5, 0.5 ; + + fates_frag_leaf_flab = 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, + 0.25, 0.25, 0.25 ; + + fates_frag_leaf_flig = 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, + 0.25, 0.25, 0.25 ; + + fates_frag_seed_decay_rate = 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, + 0.51, 0.51, 0.51, 0.51 ; + + fates_grperc = 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, + 0.11, 0.11 ; + + fates_hydro_avuln_gs = 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, + 2.5, 2.5 ; + + fates_hydro_avuln_node = + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ; + + fates_hydro_epsil_node = + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 ; + + fates_hydro_fcap_node = + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, + 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_hydro_k_lwp = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_hydro_kmax_node = + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, -999 ; + + fates_hydro_p50_gs = -1.5, -1.5, -1.5, -1.5, -1.5, -1.5, -1.5, -1.5, -1.5, + -1.5, -1.5, -1.5 ; + + fates_hydro_p50_node = + -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, + -2.25, -2.25, + -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, + -2.25, -2.25, + -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, + -2.25, -2.25, + -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, -2.25, + -2.25, -2.25 ; + + fates_hydro_p_taper = 0.333, 0.333, 0.333, 0.333, 0.333, 0.333, 0.333, + 0.333, 0.333, 0.333, 0.333, 0.333 ; + + fates_hydro_pinot_node = + -1.465984, -1.465984, -1.465984, -1.465984, -1.465984, -1.465984, + -1.465984, -1.465984, -1.465984, -1.465984, -1.465984, -1.465984, + -1.22807, -1.22807, -1.22807, -1.22807, -1.22807, -1.22807, -1.22807, + -1.22807, -1.22807, -1.22807, -1.22807, -1.22807, + -1.22807, -1.22807, -1.22807, -1.22807, -1.22807, -1.22807, -1.22807, + -1.22807, -1.22807, -1.22807, -1.22807, -1.22807, + -1.043478, -1.043478, -1.043478, -1.043478, -1.043478, -1.043478, + -1.043478, -1.043478, -1.043478, -1.043478, -1.043478, -1.043478 ; + + fates_hydro_pitlp_node = + -1.67, -1.67, -1.67, -1.67, -1.67, -1.67, -1.67, -1.67, -1.67, -1.67, + -1.67, -1.67, + -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, + -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, + -1.2, -1.2, -1.2, -1.2, -1.2, -1.2, -1.2, -1.2, -1.2, -1.2, -1.2, -1.2 ; + + fates_hydro_resid_node = + 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, + 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, + 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, + 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11 ; + + fates_hydro_rfrac_stem = 0.625, 0.625, 0.625, 0.625, 0.625, 0.625, 0.625, + 0.625, 0.625, 0.625, 0.625, 0.625 ; + + fates_hydro_rs2 = 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, + 0.0001, 0.0001, 0.0001, 0.0001, 0.0001 ; + + fates_hydro_srl = 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 ; + + fates_hydro_thetas_node = + 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, + 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, + 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, + 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75 ; + + fates_hydro_vg_alpha_node = + 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.005, 0.005, 0.005, 0.005, 0.005, + 0.005, 0.005, + 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.005, 0.005, 0.005, 0.005, 0.005, + 0.005, 0.005, + 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.005, 0.005, 0.005, 0.005, 0.005, + 0.005, 0.005, + 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.005, 0.005, 0.005, 0.005, 0.005, + 0.005, 0.005 ; + + fates_hydro_vg_m_node = + 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ; + + fates_hydro_vg_n_node = + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ; + + fates_leaf_c3psn = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 ; + + fates_leaf_jmaxha = 43540, 43540, 43540, 43540, 43540, 43540, 43540, 43540, + 43540, 43540, 43540, 43540 ; + + fates_leaf_jmaxhd = 152040, 152040, 152040, 152040, 152040, 152040, 152040, + 152040, 152040, 152040, 152040, 152040 ; + + fates_leaf_jmaxse = 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495 ; + + fates_leaf_slamax = 0.0954, 0.0954, 0.0954, 0.0954, 0.0954, 0.0954, 0.012, + 0.03, 0.03, 0.03, 0.03, 0.03 ; + + fates_leaf_slatop = 0.012, 0.005, 0.024, 0.009, 0.03, 0.03, 0.012, 0.03, + 0.03, 0.03, 0.03, 0.03 ; + + fates_leaf_stomatal_intercept = 10000, 10000, 10000, 10000, 10000, 10000, + 10000, 10000, 10000, 10000, 10000, 40000 ; + + fates_leaf_stomatal_slope_ballberry = 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 ; + + fates_leaf_stomatal_slope_medlyn = 4.1, 2.3, 2.3, 4.1, 4.4, 4.4, 4.7, 4.7, + 4.7, 2.2, 5.3, 1.6 ; + + fates_leaf_vcmax25top = + 50, 62, 39, 61, 41, 58, 62, 54, 54, 78, 78, 78 ; + + fates_leaf_vcmaxha = 65330, 65330, 65330, 65330, 65330, 65330, 65330, 65330, + 65330, 65330, 65330, 65330 ; + + fates_leaf_vcmaxhd = 149250, 149250, 149250, 149250, 149250, 149250, 149250, + 149250, 149250, 149250, 149250, 149250 ; + + fates_leaf_vcmaxse = 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, + 485 ; + + fates_maintresp_leaf_atkin2017_baserate = 1.756, 1.4995, 1.4995, 1.756, + 1.756, 1.756, 2.0749, 2.0749, 2.0749, 2.1956, 2.1956, 2.1956 ; + + fates_maintresp_leaf_ryan1991_baserate = 2.525e-06, 2.525e-06, 2.525e-06, + 2.525e-06, 2.525e-06, 2.525e-06, 2.525e-06, 2.525e-06, 2.525e-06, + 2.525e-06, 2.525e-06, 2.525e-06 ; + + fates_maintresp_reduction_curvature = 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, + 0.01, 0.01, 0.01, 0.01, 0.01, 0.01 ; + + fates_maintresp_reduction_intercept = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_mort_bmort = 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, + 0.014, 0.014, 0.014, 0.014 ; + + fates_mort_freezetol = 2.5, -55, -80, -30, 2.5, -80, -60, -10, -80, -80, + -20, 2.5 ; + + fates_mort_hf_flc_threshold = 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + 0.5, 0.5, 0.5 ; + + fates_mort_hf_sm_threshold = 1e-06, 1e-06, 1e-06, 1e-06, 1e-06, 1e-06, + 1e-06, 1e-06, 1e-06, 1e-06, 1e-06, 1e-06 ; + + fates_mort_ip_age_senescence = _, _, _, _, _, _, _, _, _, _, _, _ ; + + fates_mort_ip_size_senescence = _, _, _, _, _, _, _, _, _, _, _, _ ; + + fates_mort_prescribed_canopy = 0.0194, 0.0194, 0.0194, 0.0194, 0.0194, + 0.0194, 0.0194, 0.0194, 0.0194, 0.0194, 0.0194, 0.0194 ; + + fates_mort_prescribed_understory = 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, + 0.025, 0.025, 0.025, 0.025, 0.025, 0.025 ; + + fates_mort_r_age_senescence = _, _, _, _, _, _, _, _, _, _, _, _ ; + + fates_mort_r_size_senescence = _, _, _, _, _, _, _, _, _, _, _, _ ; + + fates_mort_scalar_coldstress = 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ; + + fates_mort_scalar_cstarvation = 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, + 0.6, 0.6, 0.6 ; + + fates_mort_scalar_hydrfailure = 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, + 0.6, 0.6, 0.6 ; + + fates_nonhydro_smpsc = -255000, -255000, -255000, -255000, -255000, -255000, + -255000, -255000, -255000, -255000, -255000, -255000 ; + + fates_nonhydro_smpso = -66000, -66000, -66000, -66000, -66000, -66000, + -66000, -66000, -66000, -66000, -66000, -66000 ; + + fates_phen_cold_size_threshold = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_phen_evergreen = 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0 ; + + fates_phen_flush_fraction = _, _, 0.5, _, 0.5, 0.5, _, 0.5, 0.5, 0.5, 0.5, + 0.5 ; + + fates_phen_fnrt_drop_frac = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_phen_season_decid = 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0 ; + + fates_phen_stem_drop_fraction = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_phen_stress_decid = 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1 ; + + fates_prescribed_npp_canopy = 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, + 0.4, 0.4, 0.4 ; + + fates_prescribed_npp_understory = 0.03125, 0.03125, 0.03125, 0.03125, + 0.03125, 0.03125, 0.03125, 0.03125, 0.03125, 0.03125, 0.03125, 0.03125 ; + + fates_rad_leaf_clumping_index = 0.85, 0.85, 0.8, 0.85, 0.85, 0.9, 0.85, 0.9, + 0.9, 0.75, 0.75, 0.75 ; + + fates_rad_leaf_rhonir = 0.46, 0.41, 0.39, 0.46, 0.41, 0.41, 0.46, 0.41, + 0.41, 0.28, 0.28, 0.28 ; + + fates_rad_leaf_rhovis = 0.11, 0.09, 0.08, 0.11, 0.08, 0.08, 0.11, 0.08, + 0.08, 0.05, 0.05, 0.05 ; + + fates_rad_leaf_taunir = 0.33, 0.32, 0.42, 0.33, 0.43, 0.43, 0.33, 0.43, + 0.43, 0.4, 0.4, 0.4 ; + + fates_rad_leaf_tauvis = 0.06, 0.04, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, + 0.06, 0.05, 0.05, 0.05 ; + + fates_rad_leaf_xl = 0.32, 0.01, 0.01, 0.32, 0.2, 0.59, 0.32, 0.59, 0.59, + -0.23, -0.23, -0.23 ; + + fates_rad_stem_rhonir = 0.49, 0.36, 0.36, 0.49, 0.49, 0.49, 0.49, 0.49, + 0.49, 0.53, 0.53, 0.53 ; + + fates_rad_stem_rhovis = 0.21, 0.12, 0.12, 0.21, 0.21, 0.21, 0.21, 0.21, + 0.21, 0.31, 0.31, 0.31 ; + + fates_rad_stem_taunir = 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, + 0.001, 0.001, 0.25, 0.25, 0.25 ; + + fates_rad_stem_tauvis = 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, + 0.001, 0.001, 0.12, 0.12, 0.12 ; + + fates_recruit_height_min = 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 0.2, 0.2, 0.2, + 0.125, 0.125, 0.125 ; + + fates_recruit_init_density = 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, + 0.2, 0.2, 0.2 ; + + fates_recruit_prescribed_rate = 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, + 0.02, 0.02, 0.02, 0.02, 0.02 ; + + fates_recruit_seed_alloc = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1 ; + + fates_recruit_seed_alloc_mature = 0, 0, 0, 0, 0, 0, 0.9, 0.9, 0.9, 0.9, 0.9, + 0.9 ; + + fates_recruit_seed_dbh_repro_threshold = 90, 80, 80, 80, 90, 80, 3, 3, 2, + 0.35, 0.35, 0.35 ; + + fates_recruit_seed_germination_rate = 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + 0.5, 0.5, 0.5, 0.5, 0.5 ; + + fates_recruit_seed_supplement = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; + + fates_stoich_nitr = + 0.033, 0.029, 0.04, 0.033, 0.04, 0.04, 0.033, 0.04, 0.04, 0.04, 0.04, 0.04, + 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, + 0.024, 0.024, + 1e-08, 1e-08, 1e-08, 1e-08, 1e-08, 1e-08, 1e-08, 1e-08, 1e-08, 1e-08, + 1e-08, 1e-08, + 0.0047, 0.0047, 0.0047, 0.0047, 0.0047, 0.0047, 0.0047, 0.0047, 0.0047, + 0.0047, 0.0047, 0.0047 ; + + fates_stoich_phos = + 0.0033, 0.0029, 0.004, 0.0033, 0.004, 0.004, 0.0033, 0.004, 0.004, 0.004, + 0.004, 0.004, + 0.0024, 0.0024, 0.0024, 0.0024, 0.0024, 0.0024, 0.0024, 0.0024, 0.0024, + 0.0024, 0.0024, 0.0024, + 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, + 1e-09, 1e-09, + 0.00047, 0.00047, 0.00047, 0.00047, 0.00047, 0.00047, 0.00047, 0.00047, + 0.00047, 0.00047, 0.00047, 0.00047 ; + + fates_trim_inc = 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, + 0.03, 0.03 ; + + fates_trim_limit = 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3 ; + + fates_turb_displar = 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, + 0.67, 0.67, 0.67 ; + + fates_turb_leaf_diameter = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + 0.04, 0.04, 0.04, 0.04 ; + + fates_turb_z0mr = 0.055, 0.055, 0.055, 0.055, 0.055, 0.055, 0.055, 0.055, + 0.055, 0.055, 0.055, 0.055 ; + + fates_turnover_branch = 150, 150, 150, 150, 150, 150, 150, 150, 150, 0, 0, 0 ; + + fates_turnover_fnrt = 1, 2, 1, 1.5, 1, 1, 1.5, 1, 1, 1, 1, 1 ; + + fates_turnover_leaf = + 1.5, 4, 1, 1.5, 1, 1, 1.5, 1, 1, 1, 1, 1 ; + + fates_turnover_senleaf_fdrought = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; + + fates_wood_density = 0.7, 0.4, 0.7, 0.53, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, + 0.7 ; + + fates_woody = 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 ; + + fates_hlm_pft_map = + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ; + + fates_fire_FBD = 15.4, 16.8, 19.6, 999, 4, 4 ; + + fates_fire_low_moisture_Coeff = 1.12, 1.09, 0.98, 0.8, 1.15, 1.15 ; + + fates_fire_low_moisture_Slope = 0.62, 0.72, 0.85, 0.8, 0.62, 0.62 ; + + fates_fire_mid_moisture = 0.72, 0.51, 0.38, 1, 0.8, 0.8 ; + + fates_fire_mid_moisture_Coeff = 2.35, 1.47, 1.06, 0.8, 3.2, 3.2 ; + + fates_fire_mid_moisture_Slope = 2.35, 1.47, 1.06, 0.8, 3.2, 3.2 ; + + fates_fire_min_moisture = 0.18, 0.12, 0, 0, 0.24, 0.24 ; + + fates_fire_SAV = 13, 3.58, 0.98, 0.2, 66, 66 ; + + fates_frag_maxdecomp = 0.52, 0.383, 0.383, 0.19, 1, 999 ; + + fates_frag_cwd_frac = 0.045, 0.075, 0.21, 0.67 ; + + fates_canopy_closure_thresh = 0.8 ; + + fates_cnp_eca_plant_escalar = 1.25e-05 ; + + fates_cohort_age_fusion_tol = 0.08 ; + + fates_cohort_size_fusion_tol = 0.08 ; + + fates_comp_excln = 3 ; + + fates_damage_canopy_layer_code = 1 ; + + fates_damage_event_code = 1 ; + + fates_dev_arbitrary = _ ; + + fates_fire_active_crown_fire = 0 ; + + fates_fire_cg_strikes = 0.2 ; + + fates_fire_drying_ratio = 66000 ; + + fates_fire_durat_slope = -11.06 ; + + fates_fire_fdi_a = 17.62 ; + + fates_fire_fdi_alpha = 0.00037 ; + + fates_fire_fdi_b = 243.12 ; + + fates_fire_fuel_energy = 18000 ; + + fates_fire_max_durat = 240 ; + + fates_fire_miner_damp = 0.41739 ; + + fates_fire_miner_total = 0.055 ; + + fates_fire_nignitions = 15 ; + + fates_fire_part_dens = 513 ; + + fates_fire_threshold = 50 ; + + fates_frag_cwd_fcel = 0.76 ; + + fates_frag_cwd_flig = 0.24 ; + + fates_hydro_kmax_rsurf1 = 20 ; + + fates_hydro_kmax_rsurf2 = 0.0001 ; + + fates_hydro_psi0 = 0 ; + + fates_hydro_psicap = -0.6 ; + + fates_hydro_solver = 1 ; + + fates_landuse_logging_coll_under_frac = 0.55983 ; + + fates_landuse_logging_collateral_frac = 0.05 ; + + fates_landuse_logging_dbhmax = _ ; + + fates_landuse_logging_dbhmax_infra = 35 ; + + fates_landuse_logging_dbhmin = 50 ; + + fates_landuse_logging_direct_frac = 0.15 ; + + fates_landuse_logging_event_code = -30 ; + + fates_landuse_logging_export_frac = 0.8 ; + + fates_landuse_logging_mechanical_frac = 0.05 ; + + fates_landuse_pprodharv10_forest_mean = 0.8125 ; + + fates_leaf_photo_temp_acclim_timescale = 30 ; + + fates_leaf_photo_tempsens_model = 1 ; + + fates_leaf_stomatal_assim_model = 1 ; + + fates_leaf_stomatal_model = 1 ; + + fates_leaf_theta_cj_c3 = 0.999 ; + + fates_leaf_theta_cj_c4 = 0.999 ; + + fates_maintresp_leaf_model = 1 ; + + fates_maintresp_nonleaf_baserate = 2.525e-06 ; + + fates_maxcohort = 100 ; + + fates_maxpatch_primary = 10 ; + + fates_maxpatch_secondary = 4 ; + + fates_mort_disturb_frac = 1 ; + + fates_mort_understorey_death = 0.55983 ; + + fates_patch_fusion_tol = 0.05 ; + + fates_phen_chilltemp = 5 ; + + fates_phen_coldtemp = 7.5 ; + + fates_phen_drought_model = 0 ; + + fates_phen_drought_threshold = 0.15 ; + + fates_phen_gddthresh_a = -68 ; + + fates_phen_gddthresh_b = 638 ; + + fates_phen_gddthresh_c = -0.01 ; + + fates_phen_mindaysoff = 100 ; + + fates_phen_mindayson = 90 ; + + fates_phen_moist_threshold = 0.18 ; + + fates_phen_ncolddayslim = 5 ; + + fates_q10_froz = 1.5 ; + + fates_q10_mr = 1.5 ; + + fates_soil_salinity = 0.4 ; + + fates_vai_top_bin_width = 1 ; + + fates_vai_width_increase_factor = 1 ; +} diff --git a/parameter_files/archive/api25.2.0_031723_pr984.xml b/parameter_files/archive/api25.2.0_031723_pr984.xml new file mode 100644 index 0000000000..3d9c617446 --- /dev/null +++ b/parameter_files/archive/api25.2.0_031723_pr984.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + archive/api25.2.0_031723_fates_params_default.cdl + fates_params_default.cdl + 1,2,3,4,5,6,7,8,9,10,11,12 + + + fates_leaf_photo_temp_acclim_thome_time + scalar + years + Length of the window for the long-term (i.e. T_home in Kumarathunge et al 2019) exponential moving average (ema) of vegetation temperature used in photosynthesis temperature acclimation (used if fates_leaf_photo_tempsens_model = 2) + 30 + + + activation energy for jmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED + + + deactivation energy for jmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED + + + entropy term for jmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED + + + activation energy for vcmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED + + + deactivation energy for vcmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED + + + entropy term for vcmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED + + + Length of the window for the exponential moving average (ema) of vegetation temperature used in photosynthesis temperature acclimation (used if fates_maintresp_leaf_model=2 or fates_leaf_photo_tempsens_model = 2) + + + switch for choosing the model that defines the temperature sensitivity of photosynthetic parameters (vcmax, jmax). 1=non-acclimating; 2=Kumarathunge et al 2019 + + + switch for choosing between maintenance respiration models. 1=Ryan (1991), 2=Atkin et al., (2017) + + + diff --git a/parameter_files/fates_params_default.cdl b/parameter_files/fates_params_default.cdl index 769b742c2c..91cc81f62c 100644 --- a/parameter_files/fates_params_default.cdl +++ b/parameter_files/fates_params_default.cdl @@ -377,7 +377,6 @@ variables: double fates_leaf_vcmaxse(fates_pft) ; fates_leaf_vcmaxse:units = "J/mol/K" ; fates_leaf_vcmaxse:long_name = "entropy term for vcmax. NOTE: if fates_leaf_photo_tempsens_model=2 then these values are NOT USED" ; - fates_leaf_vcmaxse:long_name = "entropy term for vcmax" ; double fates_maintresp_leaf_atkin2017_baserate(fates_pft) ; fates_maintresp_leaf_atkin2017_baserate:units = "umol CO2/m^2/s" ; fates_maintresp_leaf_atkin2017_baserate:long_name = "Leaf maintenance respiration base rate parameter (r0) per Atkin et al 2017" ; From f625694d5647207671fdada1e53534af7779621d Mon Sep 17 00:00:00 2001 From: Gregory Lemieux Date: Tue, 21 Mar 2023 09:04:23 -0700 Subject: [PATCH 11/12] Updating patch xml file comments --- .../archive/api25.2.0_031723_pr984.xml | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/parameter_files/archive/api25.2.0_031723_pr984.xml b/parameter_files/archive/api25.2.0_031723_pr984.xml index 3d9c617446..e9ae2bee39 100644 --- a/parameter_files/archive/api25.2.0_031723_pr984.xml +++ b/parameter_files/archive/api25.2.0_031723_pr984.xml @@ -1,20 +1,22 @@ - + - - - - - + + + + + + + - - - - - + + + + + - +