diff --git a/biogeochem/EDPhysiologyMod.F90 b/biogeochem/EDPhysiologyMod.F90 index be78f4776f..a79991b7aa 100644 --- a/biogeochem/EDPhysiologyMod.F90 +++ b/biogeochem/EDPhysiologyMod.F90 @@ -49,8 +49,9 @@ module EDPhysiologyMod use FatesGlobals , only : fates_log use FatesGlobals , only : endrun => fates_endrun use EDParamsMod , only : fates_mortality_disturbance_fraction - use EDLoggingMortalityMod , only : logging_export_frac - !use EDParamsMod , only : logging_export_frac + use EDParamsMod , only : q10_mr + use EDParamsMod , only : q10_froz + use EDParamsMod , only : logging_export_frac use FatesPlantHydraulicsMod , only : AccumulateMortalityWaterStorage @@ -986,12 +987,12 @@ subroutine seeds_in( currentSite, cp_pnt ) do p = 1,numpft currentPatch%seeds_in(p) = currentPatch%seeds_in(p) + & - EDPftvarcon_inst%seed_rain(p) !KgC/m2/year + EDPftvarcon_inst%seed_suppl(p) !KgC/m2/year currentSite%seed_rain_flux(p) = currentSite%seed_rain_flux(p) + & - EDPftvarcon_inst%seed_rain(p) * currentPatch%area/AREA !KgC/m2/year + EDPftvarcon_inst%seed_suppl(p) * currentPatch%area/AREA !KgC/m2/year currentSite%flux_in = currentSite%flux_in + & - EDPftvarcon_inst%seed_rain(p) * currentPatch%area * hlm_freq_day + EDPftvarcon_inst%seed_suppl(p) * currentPatch%area * hlm_freq_day enddo @@ -1430,28 +1431,21 @@ subroutine fragmentation_scaler( currentPatch, bc_in) real(r8) :: catanf ! hyperbolic temperature function from CENTURY real(r8) :: catanf_30 ! hyperbolic temperature function from CENTURY real(r8) :: t1 ! temperature argument - real(r8) :: Q10 ! temperature dependence - real(r8) :: froz_q10 ! separate q10 for frozen soil respiration rates. - ! default to same as above zero rates !---------------------------------------------------------------------- catanf(t1) = 11.75_r8 +(29.7_r8 / pi) * atan( pi * 0.031_r8 * ( t1 - 15.4_r8 )) catanf_30 = catanf(30._r8) ifp = currentPatch%patchno - - ! set "froz_q10" parameter - froz_q10 = FatesSynchronizedParamsInst%froz_q10 - Q10 = FatesSynchronizedParamsInst%Q10 if ( .not. use_century_tfunc ) then !calculate rate constant scalar for soil temperature,assuming that the base rate constants !are assigned for non-moisture limiting conditions at 25C. if (bc_in%t_veg24_pa(ifp) >= tfrz) then - t_scalar = Q10**((bc_in%t_veg24_pa(ifp)-(tfrz+25._r8))/10._r8) + t_scalar = q10_mr**((bc_in%t_veg24_pa(ifp)-(tfrz+25._r8))/10._r8) ! Q10**((t_soisno(c,j)-(tfrz+25._r8))/10._r8) else - t_scalar = (Q10**(-25._r8/10._r8))*(froz_q10**((bc_in%t_veg24_pa(ifp)-tfrz)/10._r8)) + t_scalar = (q10_mr**(-25._r8/10._r8))*(q10_froz**((bc_in%t_veg24_pa(ifp)-tfrz)/10._r8)) !Q10**(-25._r8/10._r8))*(froz_q10**((t_soisno(c,j)-tfrz)/10._r8) endif else diff --git a/biogeophys/FatesPlantHydraulicsMod.F90 b/biogeophys/FatesPlantHydraulicsMod.F90 index af20e8670b..de7c25526c 100644 --- a/biogeophys/FatesPlantHydraulicsMod.F90 +++ b/biogeophys/FatesPlantHydraulicsMod.F90 @@ -41,8 +41,8 @@ module FatesPlantHydraulicsMod use FatesConstantsMod, only : g_per_kg use EDParamsMod , only : hydr_kmax_rsurf1 - ! use EDParamsMod , only : hydr_kmax_rsurf2 - + use EDParamsMod , only : hydr_kmax_rsurf2 + use EDTypesMod , only : ed_site_type use EDTypesMod , only : ed_patch_type use EDTypesMod , only : ed_cohort_type @@ -886,10 +886,6 @@ subroutine UpdateWaterDepTreeHydrCond(currentSite,ccohort,nlevsoi_hyd,bc_in) ! which is equiv to [kg m-1 s-1 MPa-1] real(r8) :: kmax_root_surf ! maximum conducitivity for unit root surface (kg water/m2 root area/Mpa/s) - ! (RGK 4-2019) THE FOLLOWING SHOULD BE ADDED TO THE PARAMETER FILE IN NEXT GROUPING - real(r8), parameter :: hydr_kmax_rsurf2 = 0.0001_r8 ! kg water/m2 root area/Mpa/s - - ccohort_hydr => ccohort%co_hydr csite_hydr => currentSite%si_hydr k = 1 !only for the first soil shell @@ -1743,7 +1739,7 @@ subroutine UpdateSizeDepRhizVolLenCon(currentSite, bc_in) enddo !cohort cPatch => cPatch%older enddo !patch - + csite_hydr%l_aroot_1D = sum( csite_hydr%l_aroot_layer(:)) ! update outer radii of column-level rhizosphere shells (same across patches and cohorts) diff --git a/biogeophys/FatesPlantRespPhotosynthMod.F90 b/biogeophys/FatesPlantRespPhotosynthMod.F90 index 0baf150f4e..49cbdd5cef 100644 --- a/biogeophys/FatesPlantRespPhotosynthMod.F90 +++ b/biogeophys/FatesPlantRespPhotosynthMod.F90 @@ -35,6 +35,7 @@ module FATESPlantRespPhotosynthMod use EDTypesMod, only : nclmax use EDTypesMod, only : max_nleafage use EDTypesMod, only : do_fates_salinity + use EDParamsMod, only : q10_mr use PRTGenericMod, only : prt_carbon_allom_hyp use PRTGenericMod, only : prt_cnp_flex_allom_hyp use PRTGenericMod, only : all_carbon_elements @@ -246,8 +247,8 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) c3psn => EDPftvarcon_inst%c3psn , & slatop => EDPftvarcon_inst%slatop , & ! specific leaf area at top of canopy, ! projected area basis [m^2/gC] - woody => EDPftvarcon_inst%woody , & ! Is vegetation woody or not? - q10 => FatesSynchronizedParamsInst%Q10 ) + woody => EDPftvarcon_inst%woody) ! Is vegetation woody or not? + bbbopt(0) = ED_val_bbopt_c4 bbbopt(1) = ED_val_bbopt_c3 @@ -640,7 +641,7 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) ! Live stem MR (kgC/plant/s) (above ground sapwood) ! ------------------------------------------------------------------ if (woody(ft) == 1) then - tcwood = q10**((bc_in(s)%t_veg_pa(ifp)-tfrz - 20.0_r8)/10.0_r8) + tcwood = q10_mr**((bc_in(s)%t_veg_pa(ifp)-tfrz - 20.0_r8)/10.0_r8) ! kgC/s = kgN * kgC/kgN/s currentCohort%livestem_mr = live_stem_n * ED_val_base_mr_20 * tcwood * maintresp_reduction_factor else @@ -652,7 +653,7 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) ! ------------------------------------------------------------------ currentCohort%froot_mr = 0._r8 do j = 1,bc_in(s)%nlevsoil - tcsoi = q10**((bc_in(s)%t_soisno_sl(j)-tfrz - 20.0_r8)/10.0_r8) + tcsoi = q10_mr**((bc_in(s)%t_soisno_sl(j)-tfrz - 20.0_r8)/10.0_r8) currentCohort%froot_mr = currentCohort%froot_mr + & fnrt_n * ED_val_base_mr_20 * tcsoi * currentPatch%rootfr_ft(ft,j) * maintresp_reduction_factor enddo @@ -663,7 +664,7 @@ subroutine FatesPlantRespPhotosynthDrive (nsites, sites,bc_in,bc_out,dtime) currentCohort%livecroot_mr = 0._r8 do j = 1,bc_in(s)%nlevsoil ! Soil temperature used to adjust base rate of MR - tcsoi = q10**((bc_in(s)%t_soisno_sl(j)-tfrz - 20.0_r8)/10.0_r8) + tcsoi = q10_mr**((bc_in(s)%t_soisno_sl(j)-tfrz - 20.0_r8)/10.0_r8) currentCohort%livecroot_mr = currentCohort%livecroot_mr + & live_croot_n * ED_val_base_mr_20 * tcsoi * & currentPatch%rootfr_ft(ft,j) * maintresp_reduction_factor diff --git a/fire/SFParamsMod.F90 b/fire/SFParamsMod.F90 index ecf4751f81..77fad56498 100644 --- a/fire/SFParamsMod.F90 +++ b/fire/SFParamsMod.F90 @@ -35,26 +35,26 @@ module SFParamsMod real(r8),protected :: SF_val_mid_moisture_Coeff(NFSC) real(r8),protected :: SF_val_mid_moisture_Slope(NFSC) - character(len=param_string_length),parameter :: SF_name_fdi_a = "fates_fdi_a" - character(len=param_string_length),parameter :: SF_name_fdi_b = "fates_fdi_b" - character(len=param_string_length),parameter :: SF_name_fdi_alpha = "fates_fdi_alpha" - character(len=param_string_length),parameter :: SF_name_miner_total = "fates_miner_total" - character(len=param_string_length),parameter :: SF_name_fuel_energy = "fates_fuel_energy" - character(len=param_string_length),parameter :: SF_name_part_dens = "fates_part_dens" - character(len=param_string_length),parameter :: SF_name_miner_damp = "fates_miner_damp" - character(len=param_string_length),parameter :: SF_name_max_durat = "fates_max_durat" - character(len=param_string_length),parameter :: SF_name_durat_slope = "fates_durat_slope" - character(len=param_string_length),parameter :: SF_name_drying_ratio = "fates_drying_ratio" + character(len=param_string_length),parameter :: SF_name_fdi_a = "fates_fire_fdi_a" + character(len=param_string_length),parameter :: SF_name_fdi_b = "fates_fire_fdi_b" + character(len=param_string_length),parameter :: SF_name_fdi_alpha = "fates_fire_fdi_alpha" + character(len=param_string_length),parameter :: SF_name_miner_total = "fates_fire_miner_total" + character(len=param_string_length),parameter :: SF_name_fuel_energy = "fates_fire_fuel_energy" + character(len=param_string_length),parameter :: SF_name_part_dens = "fates_fire_part_dens" + character(len=param_string_length),parameter :: SF_name_miner_damp = "fates_fire_miner_damp" + character(len=param_string_length),parameter :: SF_name_max_durat = "fates_fire_max_durat" + character(len=param_string_length),parameter :: SF_name_durat_slope = "fates_fire_durat_slope" + character(len=param_string_length),parameter :: SF_name_drying_ratio = "fates_fire_drying_ratio" character(len=param_string_length),parameter :: SF_name_CWD_frac = "fates_CWD_frac" character(len=param_string_length),parameter :: SF_name_max_decomp = "fates_max_decomp" - character(len=param_string_length),parameter :: SF_name_SAV = "fates_SAV" - character(len=param_string_length),parameter :: SF_name_FBD = "fates_FBD" - character(len=param_string_length),parameter :: SF_name_min_moisture = "fates_min_moisture" - character(len=param_string_length),parameter :: SF_name_mid_moisture = "fates_mid_moisture" - character(len=param_string_length),parameter :: SF_name_low_moisture_Coeff = "fates_low_moisture_Coeff" - character(len=param_string_length),parameter :: SF_name_low_moisture_Slope = "fates_low_moisture_Slope" - character(len=param_string_length),parameter :: SF_name_mid_moisture_Coeff = "fates_mid_moisture_Coeff" - character(len=param_string_length),parameter :: SF_name_mid_moisture_Slope = "fates_mid_moisture_Slope" + character(len=param_string_length),parameter :: SF_name_SAV = "fates_fire_SAV" + character(len=param_string_length),parameter :: SF_name_FBD = "fates_fire_FBD" + character(len=param_string_length),parameter :: SF_name_min_moisture = "fates_fire_min_moisture" + character(len=param_string_length),parameter :: SF_name_mid_moisture = "fates_fire_mid_moisture" + character(len=param_string_length),parameter :: SF_name_low_moisture_Coeff = "fates_fire_low_moisture_Coeff" + character(len=param_string_length),parameter :: SF_name_low_moisture_Slope = "fates_fire_low_moisture_Slope" + character(len=param_string_length),parameter :: SF_name_mid_moisture_Coeff = "fates_fire_mid_moisture_Coeff" + character(len=param_string_length),parameter :: SF_name_mid_moisture_Slope = "fates_fire_mid_moisture_Slope" public :: SpitFireRegisterParams public :: SpitFireReceiveParams diff --git a/main/EDParamsMod.F90 b/main/EDParamsMod.F90 index badc5d457c..8d2c403341 100644 --- a/main/EDParamsMod.F90 +++ b/main/EDParamsMod.F90 @@ -43,6 +43,8 @@ module EDParamsMod real(r8),protected :: ED_val_patch_fusion_tol real(r8),protected :: ED_val_canopy_closure_thresh ! site-level canopy closure point where trees take on forest (narrow) versus savannah (wide) crown allometry + real(r8),protected :: q10_mr ! Q10 for respiration rate (for soil fragmenation and plant respiration) (unitless) + real(r8),protected :: q10_froz ! Q10 for frozen-soil respiration rates (for soil fragmentation) (unitless) ! two special parameters whose size is defined in the parameter file real(r8),protected,allocatable :: ED_val_history_sizeclass_bin_edges(:) @@ -72,19 +74,29 @@ module EDParamsMod character(len=param_string_length),parameter :: ED_name_patch_fusion_tol= "fates_patch_fusion_tol" character(len=param_string_length),parameter :: ED_name_canopy_closure_thresh= "fates_canopy_closure_thresh" + character(len=param_string_length),parameter :: fates_name_q10_mr="fates_q10_mr" + character(len=param_string_length),parameter :: fates_name_q10_froz="fates_q10_froz" + + ! non-scalar parameter names character(len=param_string_length),parameter :: ED_name_history_sizeclass_bin_edges= "fates_history_sizeclass_bin_edges" character(len=param_string_length),parameter :: ED_name_history_ageclass_bin_edges= "fates_history_ageclass_bin_edges" character(len=param_string_length),parameter :: ED_name_history_height_bin_edges= "fates_history_height_bin_edges" + + + + ! Hydraulics Control Parameters (ONLY RELEVANT WHEN USE_FATES_HYDR = TRUE) ! ---------------------------------------------------------------------------------------------- - real(r8),protected :: hydr_kmax_rsurf1 ! maximum conducitivity for unit root surface for water uptake(kg water/m2 root area/Mpa/s) -! real(r8),protected :: hydr_kmax_rsurf2 ! maximum conducitivity for unit root surface for water loss (kg water/m2 root area/Mpa/s) - - character(len=param_string_length),parameter :: hydr_name_kmax_rsurf1 = "fates_hydr_kmax_rsurf" -! character(len=param_string_length),parameter :: hydr_name_kmax_rsurf2 = "fates_hydr_kmax_rsurf2" + real(r8),protected :: hydr_kmax_rsurf1 ! maximum conducitivity for unit root surface + ! soil to root direction (kg water/m2 root area/Mpa/s) + character(len=param_string_length),parameter :: hydr_name_kmax_rsurf1 = "fates_hydr_kmax_rsurf1" + real(r8),protected :: hydr_kmax_rsurf2 ! maximum conducitivity for unit root surface + ! root to soil direciton (kg water/m2 root area/Mpa/s) + character(len=param_string_length),parameter :: hydr_name_kmax_rsurf2 = "fates_hydr_kmax_rsurf2" + real(r8),protected :: hydr_psi0 ! sapwood water potential at saturation (MPa) character(len=param_string_length),parameter :: hydr_name_psi0 = "fates_hydr_psi0" @@ -120,10 +132,12 @@ module EDParamsMod real(r8),protected :: logging_dbhmax_infra ! "Tree diameter, above which infrastructure from logging does not impact damage or mortality. character(len=param_string_length),parameter :: logging_name_dbhmax_infra = "fates_logging_dbhmax_infra" - -! real(r8),protected :: logging_export_frac ! "fraction of trunk product being shipped offsite, the leftovers will be left onsite as large CWD -! character(len=param_string_length),parameter :: logging_name_export_frac ="fates_logging_export_frac" + real(r8),protected :: logging_export_frac ! "fraction of trunk product being shipped offsite, the + ! leftovers will be left onsite as large CWD + character(len=param_string_length),parameter :: logging_name_export_frac ="fates_logging_export_frac" + + public :: FatesParamsInit public :: FatesRegisterParams public :: FatesReceiveParams @@ -164,7 +178,8 @@ subroutine FatesParamsInit() ED_val_canopy_closure_thresh = nan hydr_kmax_rsurf1 = nan -! hydr_kmax_rsurf2 = nan + hydr_kmax_rsurf2 = nan + hydr_psi0 = nan hydr_psicap = nan @@ -176,7 +191,9 @@ subroutine FatesParamsInit() logging_mechanical_frac = nan logging_event_code = nan logging_dbhmax_infra = nan -! logging_export_frac = nan + logging_export_frac = nan + q10_mr = nan + q10_froz = nan end subroutine FatesParamsInit @@ -186,122 +203,132 @@ subroutine FatesRegisterParams(fates_params) ! indicate whether they are fates parameters or host parameters ! that need to be synced with host values. - use FatesParametersInterface, only : fates_parameters_type, dimension_name_scalar1d, dimension_shape_1d + use FatesParametersInterface, only : fates_parameters_type, dimension_name_scalar, dimension_shape_1d use FatesParametersInterface, only : dimension_name_history_size_bins, dimension_name_history_age_bins - use FatesParametersInterface, only : dimension_name_history_height_bins + use FatesParametersInterface, only : dimension_name_history_height_bins, dimension_shape_scalar implicit none class(fates_parameters_type), intent(inout) :: fates_params - character(len=param_string_length), parameter :: dim_names(1) = (/dimension_name_scalar1d/) + character(len=param_string_length), parameter :: dim_names_scalar(1) = (/dimension_name_scalar/) character(len=param_string_length), parameter :: dim_names_sizeclass(1) = (/dimension_name_history_size_bins/) character(len=param_string_length), parameter :: dim_names_ageclass(1) = (/dimension_name_history_age_bins/) character(len=param_string_length), parameter :: dim_names_height(1) = (/dimension_name_history_height_bins/) call FatesParamsInit() - call fates_params%RegisterParameter(name=ED_name_mort_disturb_frac, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) - - call fates_params%RegisterParameter(name=ED_name_comp_excln, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_mort_disturb_frac, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_init_litter, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_comp_excln, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_nignitions, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_init_litter, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_understorey_death, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_nignitions, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_cwd_fcel, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_understorey_death, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_cwd_flig, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_cwd_fcel, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_bbopt_c3, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_cwd_flig, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_bbopt_c4, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_bbopt_c3, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_base_mr_20, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_bbopt_c4, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_phen_drought_threshold, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_base_mr_20, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_phen_doff_time, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_phen_drought_threshold, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_phen_a, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_phen_doff_time, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_phen_b, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_phen_a, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_phen_c, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_phen_b, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_phen_chiltemp, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_phen_c, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_phen_mindayson, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_phen_chiltemp, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_phen_ncolddayslim, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_phen_mindayson, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_phen_coldtemp, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_phen_ncolddayslim, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_cohort_fusion_tol, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_phen_coldtemp, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_patch_fusion_tol, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_cohort_fusion_tol, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=ED_name_canopy_closure_thresh, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_patch_fusion_tol, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=hydr_name_kmax_rsurf1, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=ED_name_canopy_closure_thresh, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) -! call fates_params%RegisterParameter(name=hydr_name_kmax_rsurf2, dimension_shape=dimension_shape_1d, & -! dimension_names=dim_names) + call fates_params%RegisterParameter(name=hydr_name_kmax_rsurf1, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) + + call fates_params%RegisterParameter(name=hydr_name_kmax_rsurf2, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) + + call fates_params%RegisterParameter(name=hydr_name_psi0, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=hydr_name_psi0, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=hydr_name_psicap, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=hydr_name_psicap, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=bgc_name_soil_salinity, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=bgc_name_soil_salinity, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=logging_name_dbhmin, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=logging_name_dbhmin, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=logging_name_collateral_frac, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=logging_name_collateral_frac, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=logging_name_coll_under_frac, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=logging_name_coll_under_frac, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=logging_name_direct_frac, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=logging_name_direct_frac, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=logging_name_mechanical_frac, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=logging_name_mechanical_frac, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=logging_name_event_code, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=logging_name_event_code, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) + call fates_params%RegisterParameter(name=logging_name_dbhmax_infra, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) + + call fates_params%RegisterParameter(name=logging_name_export_frac, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) + + call fates_params%RegisterParameter(name=fates_name_q10_mr, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) + + call fates_params%RegisterParameter(name=fates_name_q10_froz, dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) - call fates_params%RegisterParameter(name=logging_name_dbhmax_infra, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names) ! call fates_params%RegisterParameter(name=logging_export_frac, dimension_shape=dimension_shape_1d, & ! dimension_names=dim_names) @@ -395,10 +422,10 @@ subroutine FatesReceiveParams(fates_params) data=ED_val_canopy_closure_thresh) call fates_params%RetreiveParameter(name=hydr_name_kmax_rsurf1, & - data=hydr_kmax_rsurf1) + data=hydr_kmax_rsurf1) -! call fates_params%RetreiveParameter(name=hydr_name_kmax_rsurf2, & -! data=hydr_kmax_rsurf2) + call fates_params%RetreiveParameter(name=hydr_name_kmax_rsurf2, & + data=hydr_kmax_rsurf2) call fates_params%RetreiveParameter(name=hydr_name_psi0, & data=hydr_psi0) @@ -430,8 +457,14 @@ subroutine FatesReceiveParams(fates_params) call fates_params%RetreiveParameter(name=logging_name_dbhmax_infra, & data=logging_dbhmax_infra) -! call fates_params%RetreiveParameter(name=logging_name_export_frac, & -! data=logging_export_frac) + call fates_params%RetreiveParameter(name=logging_name_export_frac, & + data=logging_export_frac) + + call fates_params%RetreiveParameter(name=fates_name_q10_mr, & + data=q10_mr) + + call fates_params%RetreiveParameter(name=fates_name_q10_froz, & + data=q10_froz) ! parameters that are arrays of size defined within the params file and thus need allocating as well call fates_params%RetreiveParameterAllocate(name=ED_name_history_sizeclass_bin_edges, & @@ -480,8 +513,8 @@ subroutine FatesReportParams(is_master) write(fates_log(),fmt0) 'ED_val_cohort_fusion_tol = ',ED_val_cohort_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) 'hydr_kmax_rsurf1 = ',hydr_kmax_rsurf1 - ! write(fates_log(),fmt0) 'hydr_kmax_rsurf2 = ',hydr_kmax_rsurf2 + 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 write(fates_log(),fmt0) 'hydr_psicap = ',hydr_psicap write(fates_log(),fmt0) 'bgc_soil_salinity = ', bgc_soil_salinity @@ -492,7 +525,8 @@ subroutine FatesReportParams(is_master) write(fates_log(),fmt0) 'logging_mechanical_frac = ',logging_mechanical_frac write(fates_log(),fmt0) 'logging_event_code = ',logging_event_code write(fates_log(),fmt0) 'logging_dbhmax_infra = ',logging_dbhmax_infra -! write(fates_log(),fmt0) 'logging_export_frac = ',logging_export_frac + write(fates_log(),fmt0) 'q10_mr = ',q10_mr + write(fates_log(),fmt0) 'q10_froz = ',q10_froz write(fates_log(),*) '------------------------------------------------------' end if diff --git a/main/EDPftvarcon.F90 b/main/EDPftvarcon.F90 index 49a9d3c9c8..60924c739c 100644 --- a/main/EDPftvarcon.F90 +++ b/main/EDPftvarcon.F90 @@ -35,7 +35,6 @@ module EDPftvarcon !ED specific variables. type, public :: EDPftvarcon_type - real(r8), allocatable :: pft_used(:) ! Switch to turn on and off PFTs real(r8), allocatable :: freezetol(:) ! minimum temperature tolerance real(r8), allocatable :: wood_density(:) ! wood density g cm^-3 ... real(r8), allocatable :: hgt_min(:) ! sapling height m @@ -51,7 +50,7 @@ module EDPftvarcon real(r8), allocatable :: bark_scaler(:) ! scaler from dbh to bark thickness. For fire model. real(r8), allocatable :: crown_kill(:) ! scaler on fire death. For fire model. real(r8), allocatable :: initd(:) ! initial seedling density - real(r8), allocatable :: seed_rain(:) ! seeds that come from outside the gridbox. + real(r8), allocatable :: seed_suppl(:) ! seeds that come from outside the gridbox. real(r8), allocatable :: BB_slope(:) ! ball berry slope parameter real(r8), allocatable :: seed_alloc_mature(:) ! fraction of carbon balance allocated to @@ -345,10 +344,6 @@ subroutine Register_PFT(this, fates_params) !X! call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, & !X! dimension_names=dim_names, lower_bounds=dim_lower_bound) - name = 'fates_pft_used' - call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names, lower_bounds=dim_lower_bound) - name = 'fates_seed_dbh_repro_threshold' call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, & dimension_names=dim_names, lower_bounds=dim_lower_bound) @@ -389,7 +384,7 @@ subroutine Register_PFT(this, fates_params) call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, & dimension_names=dim_names, lower_bounds=dim_lower_bound) - name = 'fates_seed_rain' + name = 'fates_seed_suppl' call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, & dimension_names=dim_names, lower_bounds=dim_lower_bound) @@ -781,10 +776,6 @@ subroutine Receive_PFT(this, fates_params) !X! call fates_params%RetreiveParameter(name=name, & !X! data=this%) - name = 'fates_pft_used' - call fates_params%RetreiveParameterAllocate(name=name, & - data=this%pft_used) - name = 'fates_seed_dbh_repro_threshold' call fates_params%RetreiveParameterAllocate(name=name, & data=this%dbh_repro_threshold) @@ -825,9 +816,9 @@ subroutine Receive_PFT(this, fates_params) call fates_params%RetreiveParameterAllocate(name=name, & data=this%initd) - name = 'fates_seed_rain' + name = 'fates_seed_suppl' call fates_params%RetreiveParameterAllocate(name=name, & - data=this%seed_rain) + data=this%seed_suppl) name = 'fates_leaf_BB_slope' call fates_params%RetreiveParameterAllocate(name=name, & @@ -1705,7 +1696,7 @@ subroutine FatesReportPFTParams(is_master) integer :: npft,ipft - npft = size(EDPftvarcon_inst%pft_used,1) + npft = size(EDPftvarcon_inst%evergreen,1) if(debug_report .and. is_master) then @@ -1717,7 +1708,6 @@ subroutine FatesReportPFTParams(is_master) end if write(fates_log(),*) '----------- FATES PFT Parameters -----------------' - write(fates_log(),fmt0) 'pft_used = ',EDPftvarcon_inst%pft_used write(fates_log(),fmt0) 'dbh max height = ',EDPftvarcon_inst%allom_dbh_maxheight write(fates_log(),fmt0) 'dbh mature = ',EDPftvarcon_inst%dbh_repro_threshold write(fates_log(),fmt0) 'freezetol = ',EDPftvarcon_inst%freezetol @@ -1732,7 +1722,7 @@ subroutine FatesReportPFTParams(is_master) write(fates_log(),fmt0) 'bark_scaler = ',EDPftvarcon_inst%bark_scaler write(fates_log(),fmt0) 'crown_kill = ',EDPftvarcon_inst%crown_kill write(fates_log(),fmt0) 'initd = ',EDPftvarcon_inst%initd - write(fates_log(),fmt0) 'seed_rain = ',EDPftvarcon_inst%seed_rain + write(fates_log(),fmt0) 'seed_suppl = ',EDPftvarcon_inst%seed_suppl write(fates_log(),fmt0) 'BB_slope = ',EDPftvarcon_inst%BB_slope write(fates_log(),fmt0) 'root_long = ',EDPftvarcon_inst%root_long write(fates_log(),fmt0) 'senleaf_long_fdrought = ',EDPftvarcon_inst%senleaf_long_fdrought @@ -1875,7 +1865,7 @@ subroutine FatesCheckParams(is_master, parteh_mode) integer :: iage ! leaf age class index integer :: norgans ! size of the plant organ dimension - npft = size(EDPftvarcon_inst%pft_used,1) + npft = size(EDPftvarcon_inst%evergreen,1) ! Prior to performing checks copy grperc to the ! organ dimensioned version diff --git a/main/FatesParametersInterface.F90 b/main/FatesParametersInterface.F90 index c863542808..e4a7e3a099 100644 --- a/main/FatesParametersInterface.F90 +++ b/main/FatesParametersInterface.F90 @@ -20,7 +20,6 @@ module FatesParametersInterface ! Dimensions in the fates namespace: character(len=*), parameter, public :: dimension_name_scalar = '' - character(len=*), parameter, public :: dimension_name_scalar1d = 'fates_scalar' character(len=*), parameter, public :: dimension_name_pft = 'fates_pft' character(len=*), parameter, public :: dimension_name_segment = 'fates_segment' character(len=*), parameter, public :: dimension_name_cwd = 'fates_NCWD' diff --git a/main/FatesSynchronizedParamsMod.F90 b/main/FatesSynchronizedParamsMod.F90 index 57c6143934..eaf10614ef 100644 --- a/main/FatesSynchronizedParamsMod.F90 +++ b/main/FatesSynchronizedParamsMod.F90 @@ -1,5 +1,12 @@ module FatesSynchronizedParamsMod + ! NOTE: We currently do NOT use any "shared" or syncronized parameters + ! between FATES and its hosts. We previously shared q10 values. + ! I will leave these values commented out instead of deleted + ! to serve as a template for the possibility of future parameters. + ! RGK 05-2019 + + !----------------------------------------------------------------------- ! ! !USES: @@ -11,8 +18,8 @@ module FatesSynchronizedParamsMod ! overrides the protected functionality with PGI type, public :: FatesSynchronizedParamsType - real(r8) :: Q10 ! temperature dependence - real(r8) :: froz_q10 ! separate q10 for frozen soil respiration rates +! real(r8) :: Q10 ! temperature dependence +! real(r8) :: froz_q10 ! separate q10 for frozen soil respiration rates contains procedure, public :: RegisterParams procedure, public :: ReceiveParams @@ -40,8 +47,8 @@ subroutine Init(this) class(FatesSynchronizedParamsType), intent(inout) :: this - this%Q10 = nan - this%froz_q10 = nan +! this%Q10 = nan +! this%froz_q10 = nan end subroutine Init @@ -96,13 +103,6 @@ subroutine RegisterParamsScalar(this, fates_params) call this%Init() - name = 'q10_mr' - call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names, sync_with_host=.true.) - - name = 'froz_q10' - call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, & - dimension_names=dim_names, sync_with_host=.true.) end subroutine RegisterParamsScalar @@ -118,13 +118,13 @@ subroutine ReceiveParamsScalar(this, fates_params) character(len=param_string_length) :: name - name = 'q10_mr' - call fates_params%RetreiveParameter(name=name, & - data=this%Q10) +! name = 'q10_mr' +! call fates_params%RetreiveParameter(name=name, & +! data=this%Q10) - name = 'froz_q10' - call fates_params%RetreiveParameter(name=name, & - data=this%froz_q10) +! name = 'froz_q10' +! call fates_params%RetreiveParameter(name=name, & +! data=this%froz_q10) end subroutine ReceiveParamsScalar diff --git a/parameter_files/fates_params_default.cdl b/parameter_files/fates_params_default.cdl index 1ab5311814..49b7662508 100644 --- a/parameter_files/fates_params_default.cdl +++ b/parameter_files/fates_params_default.cdl @@ -9,662 +9,600 @@ dimensions: fates_litterclass = 6 ; fates_pft = 12 ; fates_prt_organs = 6 ; - fates_scalar = 1 ; fates_string_length = 60 ; fates_variants = 2 ; variables: - float fates_history_height_bin_edges(fates_history_height_bins) ; + 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_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" ; - float fates_history_sizeclass_bin_edges(fates_history_size_bins) ; + 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" ; - float 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" ; - float fates_base_mr_20(fates_scalar) ; - fates_base_mr_20:units = "gC/gN/s" ; - fates_base_mr_20:long_name = "Base maintenance respiration rate for plant tissues, using Ryan 1991" ; - float fates_bbopt_c3(fates_scalar) ; - fates_bbopt_c3:units = "umol H2O/m**2/s" ; - fates_bbopt_c3:long_name = "Ball-Berry minimum unstressed leaf conductance for C3" ; - float fates_bbopt_c4(fates_scalar) ; - fates_bbopt_c4:units = "umol H2O/m**2/s" ; - fates_bbopt_c4:long_name = "Ball-Berry minimum unstressed leaf conductance for C4" ; - float fates_canopy_closure_thresh(fates_scalar) ; - 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" ; - float fates_cohort_fusion_tol(fates_scalar) ; - fates_cohort_fusion_tol:units = "unitless" ; - fates_cohort_fusion_tol:long_name = "minimum fraction in difference in dbh between cohorts" ; - float fates_comp_excln(fates_scalar) ; - fates_comp_excln:units = "none" ; - fates_comp_excln:long_name = "weighting factor (exponent on dbh) for canopy layer exclusion and promotion" ; - float fates_cwd_fcel(fates_scalar) ; - fates_cwd_fcel:units = "unitless" ; - fates_cwd_fcel:long_name = "Cellulose fraction for CWD" ; - float fates_cwd_flig(fates_scalar) ; - fates_cwd_flig:units = "unitless" ; - fates_cwd_flig:long_name = "Lignin fraction of coarse woody debris" ; - float fates_fire_nignitions(fates_scalar) ; - fates_fire_nignitions:units = "/m2 (?)" ; - fates_fire_nignitions:long_name = "number of daily ignitions (nfires = nignitions*FDI*area_scaling)" ; - float fates_hydr_kmax_rsurf(fates_scalar) ; - fates_hydr_kmax_rsurf:units = "kg water/m2 root area/Mpa/s" ; - fates_hydr_kmax_rsurf:long_name = "maximum conducitivity for unit root surface for water uptake" ; - float fates_hydr_psi0(fates_scalar) ; - fates_hydr_psi0:units = "MPa" ; - fates_hydr_psi0:long_name = "sapwood water potential at saturation" ; - float fates_hydr_psicap(fates_scalar) ; - fates_hydr_psicap:units = "MPa" ; - fates_hydr_psicap:long_name = "sapwood water potential at which capillary reserves exhausted" ; - float fates_init_litter(fates_scalar) ; - fates_init_litter:units = "NA" ; - fates_init_litter:long_name = "Initialization value for litter pool in cold-start (NOT USED)" ; - float fates_logging_coll_under_frac(fates_scalar) ; - fates_logging_coll_under_frac:units = "fraction" ; - fates_logging_coll_under_frac:long_name = "Fraction of stems killed in the understory when logging generates disturbance" ; - float fates_logging_collateral_frac(fates_scalar) ; - fates_logging_collateral_frac:units = "fraction" ; - fates_logging_collateral_frac:long_name = "Fraction of large stems in upperstory that die from logging collateral damage" ; - float fates_logging_dbhmax_infra(fates_scalar) ; - fates_logging_dbhmax_infra:units = "cm" ; - fates_logging_dbhmax_infra:long_name = "Tree diameter, above which infrastructure from logging does not impact damage or mortality." ; - float fates_logging_dbhmin(fates_scalar) ; - fates_logging_dbhmin:units = "cm" ; - fates_logging_dbhmin:long_name = "Minimum dbh at which logging is applied" ; - float fates_logging_direct_frac(fates_scalar) ; - fates_logging_direct_frac:units = "fraction" ; - fates_logging_direct_frac:long_name = "Fraction of stems logged directly per event" ; - float fates_logging_event_code(fates_scalar) ; - fates_logging_event_code:units = "unitless" ; - fates_logging_event_code:long_name = "Integer code that options how logging events are structured" ; - float fates_logging_mechanical_frac(fates_scalar) ; - fates_logging_mechanical_frac:units = "fraction" ; - fates_logging_mechanical_frac:long_name = "Fraction of stems killed due infrastructure an other mechanical means" ; - float fates_mort_disturb_frac(fates_scalar) ; - 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)" ; - float fates_mort_understorey_death(fates_scalar) ; - fates_mort_understorey_death:units = "fraction" ; - fates_mort_understorey_death:long_name = "fraction of plants in understorey cohort impacted by overstorey tree-fall" ; - float fates_patch_fusion_tol(fates_scalar) ; - fates_patch_fusion_tol:units = "unitless" ; - fates_patch_fusion_tol:long_name = "minimum fraction in difference in profiles between patches" ; - float fates_phen_a(fates_scalar) ; - fates_phen_a:units = "none" ; - fates_phen_a:long_name = "GDD accumulation function, intercept parameter: gdd_thesh = a + b exp(c*ncd)" ; - float fates_phen_b(fates_scalar) ; - fates_phen_b:units = "none" ; - fates_phen_b:long_name = "GDD accumulation function, multiplier parameter: gdd_thesh = a + b exp(c*ncd)" ; - float fates_phen_c(fates_scalar) ; - fates_phen_c:units = "none" ; - fates_phen_c:long_name = "GDD accumulation function, exponent parameter: gdd_thesh = a + b exp(c*ncd)" ; - float fates_phen_chiltemp(fates_scalar) ; - fates_phen_chiltemp:units = "degrees C" ; - fates_phen_chiltemp:long_name = "chilling day counting threshold" ; - float fates_phen_coldtemp(fates_scalar) ; - fates_phen_coldtemp:units = "degrees C" ; - fates_phen_coldtemp:long_name = "temperature exceedance to flag a cold-day for temperature leaf drop" ; - float fates_phen_doff_time(fates_scalar) ; - fates_phen_doff_time:units = "days" ; - fates_phen_doff_time:long_name = "day threshold compared against days since leaves became off-allometry" ; - float fates_phen_drought_threshold(fates_scalar) ; - fates_phen_drought_threshold:units = "m3/m3" ; - fates_phen_drought_threshold:long_name = "liquid volume in soil layer, threashold for drought phenology" ; - float fates_phen_mindayson(fates_scalar) ; - fates_phen_mindayson:units = "days" ; - fates_phen_mindayson:long_name = "day threshold compared against days since leaves became on-allometry" ; - float fates_phen_ncolddayslim(fates_scalar) ; - fates_phen_ncolddayslim:units = "days" ; - fates_phen_ncolddayslim:long_name = "day threshold exceedance for temperature leaf-drop" ; - float fates_soil_salinity(fates_scalar) ; - fates_soil_salinity:units = "ppt" ; - fates_soil_salinity:long_name = "soil salinity used for model when not coupled to dynamic soil salinity" ; char fates_pftname(fates_pft, fates_string_length) ; fates_pftname:units = "unitless - string" ; fates_pftname:long_name = "Description of plant type" ; char fates_prt_organ_name(fates_prt_organs, fates_string_length) ; fates_prt_organ_name:units = "unitless - string" ; fates_prt_organ_name:long_name = "Plant organ name (order must match PRTGenericMod.F90)" ; - float fates_alloc_storage_cushion(fates_pft) ; + 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" ; - float fates_allom_agb1(fates_pft) ; + double fates_allom_agb1(fates_pft) ; fates_allom_agb1:units = "variable" ; fates_allom_agb1:long_name = "Parameter 1 for agb allometry" ; - float fates_allom_agb2(fates_pft) ; + double fates_allom_agb2(fates_pft) ; fates_allom_agb2:units = "variable" ; fates_allom_agb2:long_name = "Parameter 2 for agb allometry" ; - float fates_allom_agb3(fates_pft) ; + double fates_allom_agb3(fates_pft) ; fates_allom_agb3:units = "variable" ; fates_allom_agb3:long_name = "Parameter 3 for agb allometry" ; - float fates_allom_agb4(fates_pft) ; + double fates_allom_agb4(fates_pft) ; fates_allom_agb4:units = "variable" ; fates_allom_agb4:long_name = "Parameter 4 for agb allometry" ; - float fates_allom_agb_frac(fates_pft) ; + 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" ; - float fates_allom_amode(fates_pft) ; + double fates_allom_amode(fates_pft) ; fates_allom_amode:units = "index" ; fates_allom_amode:long_name = "AGB allometry function index" ; - float fates_allom_blca_expnt_diff(fates_pft) ; + 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" ; - float fates_allom_cmode(fates_pft) ; + double fates_allom_cmode(fates_pft) ; fates_allom_cmode:units = "index" ; fates_allom_cmode:long_name = "coarse root biomass allometry function index" ; - float fates_allom_d2bl1(fates_pft) ; + double fates_allom_d2bl1(fates_pft) ; fates_allom_d2bl1:units = "variable" ; fates_allom_d2bl1:long_name = "Parameter 1 for d2bl allometry" ; - float fates_allom_d2bl2(fates_pft) ; + double fates_allom_d2bl2(fates_pft) ; fates_allom_d2bl2:units = "variable" ; fates_allom_d2bl2:long_name = "Parameter 2 for d2bl allometry" ; - float fates_allom_d2bl3(fates_pft) ; + double fates_allom_d2bl3(fates_pft) ; fates_allom_d2bl3:units = "unitless" ; fates_allom_d2bl3:long_name = "Parameter 3 for d2bl allometry" ; - float fates_allom_d2ca_coefficient_max(fates_pft) ; + 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" ; - float fates_allom_d2ca_coefficient_min(fates_pft) ; + 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" ; - float fates_allom_d2h1(fates_pft) ; + double fates_allom_d2h1(fates_pft) ; fates_allom_d2h1:units = "variable" ; fates_allom_d2h1:long_name = "Parameter 1 for d2h allometry (intercept, or c)" ; - float fates_allom_d2h2(fates_pft) ; + double fates_allom_d2h2(fates_pft) ; fates_allom_d2h2:units = "variable" ; fates_allom_d2h2:long_name = "Parameter 2 for d2h allometry (slope, or m)" ; - float fates_allom_d2h3(fates_pft) ; + double fates_allom_d2h3(fates_pft) ; fates_allom_d2h3:units = "variable" ; fates_allom_d2h3:long_name = "Parameter 3 for d2h allometry (optional)" ; - float fates_allom_dbh_maxheight(fates_pft) ; + 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" ; - float fates_allom_fmode(fates_pft) ; + double fates_allom_fmode(fates_pft) ; fates_allom_fmode:units = "index" ; fates_allom_fmode:long_name = "fine root biomass allometry function index" ; - float fates_allom_frbstor_repro(fates_pft) ; + 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" ; - float fates_allom_hmode(fates_pft) ; + double fates_allom_hmode(fates_pft) ; fates_allom_hmode:units = "index" ; fates_allom_hmode:long_name = "height allometry function index" ; - float fates_allom_l2fr(fates_pft) ; + 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" ; - float fates_allom_la_per_sa_int(fates_pft) ; + 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" ; - float fates_allom_la_per_sa_slp(fates_pft) ; + 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)" ; - float fates_allom_lmode(fates_pft) ; + double fates_allom_lmode(fates_pft) ; fates_allom_lmode:units = "index" ; fates_allom_lmode:long_name = "leaf biomass allometry function index" ; - float fates_allom_sai_scaler(fates_pft) ; + 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" ; - float fates_allom_smode(fates_pft) ; + double fates_allom_smode(fates_pft) ; fates_allom_smode:units = "index" ; fates_allom_smode:long_name = "sapwood allometry function index" ; - float fates_allom_stmode(fates_pft) ; + double fates_allom_stmode(fates_pft) ; fates_allom_stmode:units = "index" ; fates_allom_stmode:long_name = "storage allometry function index" ; - float fates_branch_turnover(fates_pft) ; + double fates_branch_turnover(fates_pft) ; fates_branch_turnover:units = "yr-1" ; fates_branch_turnover:long_name = "turnover time of branches" ; - float fates_c2b(fates_pft) ; + double fates_c2b(fates_pft) ; fates_c2b:units = "ratio" ; fates_c2b:long_name = "Carbon to biomass multiplier of bulk structural tissues" ; - float fates_displar(fates_pft) ; + double fates_displar(fates_pft) ; fates_displar:units = "unitless" ; fates_displar:long_name = "Ratio of displacement height to canopy top height" ; - float fates_fire_alpha_SH(fates_pft) ; + double fates_fire_alpha_SH(fates_pft) ; fates_fire_alpha_SH:units = "NA" ; fates_fire_alpha_SH:long_name = "spitfire parameter, alpha scorch height, Equation 16 Thonicke et al 2010" ; - float fates_fire_bark_scaler(fates_pft) ; + 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" ; - float fates_fire_crown_depth_frac(fates_pft) ; + double fates_fire_crown_depth_frac(fates_pft) ; fates_fire_crown_depth_frac:units = "fraction" ; fates_fire_crown_depth_frac:long_name = "the depth of a cohorts crown as a fraction of its height" ; - float fates_fire_crown_kill(fates_pft) ; + 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" ; - float fates_fr_fcel(fates_pft) ; + double fates_fr_fcel(fates_pft) ; fates_fr_fcel:units = "fraction" ; fates_fr_fcel:long_name = "Fine root litter cellulose fraction" ; - float fates_fr_flab(fates_pft) ; + double fates_fr_flab(fates_pft) ; fates_fr_flab:units = "fraction" ; fates_fr_flab:long_name = "Fine root litter labile fraction" ; - float fates_fr_flig(fates_pft) ; + double fates_fr_flig(fates_pft) ; fates_fr_flig:units = "fraction" ; fates_fr_flig:long_name = "Fine root litter lignin fraction" ; - float fates_grperc(fates_pft) ; + double fates_grperc(fates_pft) ; fates_grperc:units = "unitless" ; fates_grperc:long_name = "Growth respiration factor" ; - float fates_hydr_avuln_gs(fates_pft) ; + double fates_hydr_avuln_gs(fates_pft) ; fates_hydr_avuln_gs:units = "unitless" ; fates_hydr_avuln_gs:long_name = "shape parameter for stomatal control of water vapor exiting leaf" ; - float fates_hydr_avuln_node(fates_hydr_organs, fates_pft) ; + double fates_hydr_avuln_node(fates_hydr_organs, fates_pft) ; fates_hydr_avuln_node:units = "unitless" ; fates_hydr_avuln_node:long_name = "xylem vulnerability curve shape parameter" ; - float fates_hydr_epsil_node(fates_hydr_organs, fates_pft) ; + double fates_hydr_epsil_node(fates_hydr_organs, fates_pft) ; fates_hydr_epsil_node:units = "MPa" ; fates_hydr_epsil_node:long_name = "bulk elastic modulus" ; - float fates_hydr_fcap_node(fates_hydr_organs, fates_pft) ; + double fates_hydr_fcap_node(fates_hydr_organs, fates_pft) ; fates_hydr_fcap_node:units = "unitless" ; fates_hydr_fcap_node:long_name = "fraction of (1-resid_node) that is capillary in source" ; - float fates_hydr_kmax_node(fates_hydr_organs, fates_pft) ; + double fates_hydr_kmax_node(fates_hydr_organs, fates_pft) ; fates_hydr_kmax_node:units = "kgMPa/m/s" ; fates_hydr_kmax_node:long_name = "maximum xylem conductivity per unit conducting xylem area" ; - float fates_hydr_p50_gs(fates_pft) ; + double fates_hydr_p50_gs(fates_pft) ; fates_hydr_p50_gs:units = "MPa" ; fates_hydr_p50_gs:long_name = "water potential at 50% loss of stomatal conductance" ; - float fates_hydr_p50_node(fates_hydr_organs, fates_pft) ; + double fates_hydr_p50_node(fates_hydr_organs, fates_pft) ; fates_hydr_p50_node:units = "MPa" ; fates_hydr_p50_node:long_name = "xylem water potential at 50% loss of conductivity" ; - float fates_hydr_p_taper(fates_pft) ; + double fates_hydr_p_taper(fates_pft) ; fates_hydr_p_taper:units = "unitless" ; fates_hydr_p_taper:long_name = "xylem taper exponent" ; - float fates_hydr_pinot_node(fates_hydr_organs, fates_pft) ; + double fates_hydr_pinot_node(fates_hydr_organs, fates_pft) ; fates_hydr_pinot_node:units = "MPa" ; fates_hydr_pinot_node:long_name = "osmotic potential at full turgor" ; - float fates_hydr_pitlp_node(fates_hydr_organs, fates_pft) ; + double fates_hydr_pitlp_node(fates_hydr_organs, fates_pft) ; fates_hydr_pitlp_node:units = "MPa" ; fates_hydr_pitlp_node:long_name = "turgor loss point" ; - float fates_hydr_resid_node(fates_hydr_organs, fates_pft) ; + double fates_hydr_resid_node(fates_hydr_organs, fates_pft) ; fates_hydr_resid_node:units = "fraction" ; fates_hydr_resid_node:long_name = "residual fraction" ; - float fates_hydr_rfrac_stem(fates_pft) ; + double fates_hydr_rfrac_stem(fates_pft) ; fates_hydr_rfrac_stem:units = "fraction" ; fates_hydr_rfrac_stem:long_name = "fraction of total tree resistance from troot to canopy" ; - float fates_hydr_rs2(fates_pft) ; + double fates_hydr_rs2(fates_pft) ; fates_hydr_rs2:units = "m" ; fates_hydr_rs2:long_name = "absorbing root radius" ; - float fates_hydr_srl(fates_pft) ; + double fates_hydr_srl(fates_pft) ; fates_hydr_srl:units = "m g-1" ; fates_hydr_srl:long_name = "specific root length" ; - float fates_hydr_thetas_node(fates_hydr_organs, fates_pft) ; + double fates_hydr_thetas_node(fates_hydr_organs, fates_pft) ; fates_hydr_thetas_node:units = "cm3/cm3" ; fates_hydr_thetas_node:long_name = "saturated water content" ; - float fates_leaf_BB_slope(fates_pft) ; + double fates_leaf_BB_slope(fates_pft) ; fates_leaf_BB_slope:units = "unitless" ; fates_leaf_BB_slope:long_name = "stomatal slope parameter, as per Ball-Berry" ; - float fates_leaf_c3psn(fates_pft) ; + double fates_leaf_c3psn(fates_pft) ; fates_leaf_c3psn:units = "flag" ; fates_leaf_c3psn:long_name = "Photosynthetic pathway (1=c3, 0=c4)" ; - float fates_leaf_clumping_index(fates_pft) ; + double fates_leaf_clumping_index(fates_pft) ; fates_leaf_clumping_index:units = "fraction (0-1)" ; fates_leaf_clumping_index:long_name = "factor describing how much self-occlusion of leaf scattering elements decreases light interception" ; - float fates_leaf_diameter(fates_pft) ; + double fates_leaf_diameter(fates_pft) ; fates_leaf_diameter:units = "m" ; fates_leaf_diameter:long_name = "Characteristic leaf dimension" ; - float fates_leaf_jmaxha(fates_pft) ; + double fates_leaf_jmaxha(fates_pft) ; fates_leaf_jmaxha:units = "J/mol" ; fates_leaf_jmaxha:long_name = "activation energy for jmax" ; - float fates_leaf_jmaxhd(fates_pft) ; + double fates_leaf_jmaxhd(fates_pft) ; fates_leaf_jmaxhd:units = "J/mol" ; fates_leaf_jmaxhd:long_name = "deactivation energy for jmax" ; - float fates_leaf_jmaxse(fates_pft) ; + double fates_leaf_jmaxse(fates_pft) ; fates_leaf_jmaxse:units = "J/mol/K" ; fates_leaf_jmaxse:long_name = "entropy term for jmax" ; - float fates_leaf_long(fates_leafage_class, fates_pft) ; + double fates_leaf_long(fates_leafage_class, fates_pft) ; fates_leaf_long:units = "yr" ; fates_leaf_long:long_name = "Leaf longevity (ie turnover timescale)" ; - float fates_leaf_slamax(fates_pft) ; + 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" ; - float fates_leaf_slatop(fates_pft) ; + 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" ; - float fates_leaf_stor_priority(fates_pft) ; + double fates_leaf_stor_priority(fates_pft) ; fates_leaf_stor_priority:units = "unitless" ; fates_leaf_stor_priority:long_name = "factor governing priority of replacing storage with NPP" ; - float fates_leaf_tpuha(fates_pft) ; + double fates_leaf_tpuha(fates_pft) ; fates_leaf_tpuha:units = "J/mol" ; fates_leaf_tpuha:long_name = "activation energy for tpu" ; - float fates_leaf_tpuhd(fates_pft) ; + double fates_leaf_tpuhd(fates_pft) ; fates_leaf_tpuhd:units = "J/mol" ; fates_leaf_tpuhd:long_name = "deactivation energy for tpu" ; - float fates_leaf_tpuse(fates_pft) ; + double fates_leaf_tpuse(fates_pft) ; fates_leaf_tpuse:units = "J/mol/K" ; fates_leaf_tpuse:long_name = "entropy term for tpu" ; - float fates_leaf_vcmax25top(fates_leafage_class, fates_pft) ; + 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" ; - float fates_leaf_vcmaxha(fates_pft) ; + double fates_leaf_vcmaxha(fates_pft) ; fates_leaf_vcmaxha:units = "J/mol" ; fates_leaf_vcmaxha:long_name = "activation energy for vcmax" ; - float fates_leaf_vcmaxhd(fates_pft) ; + double fates_leaf_vcmaxhd(fates_pft) ; fates_leaf_vcmaxhd:units = "J/mol" ; fates_leaf_vcmaxhd:long_name = "deactivation energy for vcmax" ; - float fates_leaf_vcmaxse(fates_pft) ; + double fates_leaf_vcmaxse(fates_pft) ; fates_leaf_vcmaxse:units = "J/mol/K" ; fates_leaf_vcmaxse:long_name = "entropy term for vcmax" ; - float fates_leaf_xl(fates_pft) ; + double fates_leaf_xl(fates_pft) ; fates_leaf_xl:units = "unitless" ; fates_leaf_xl:long_name = "Leaf/stem orientation index" ; - float fates_lf_fcel(fates_pft) ; + double fates_lf_fcel(fates_pft) ; fates_lf_fcel:units = "fraction" ; fates_lf_fcel:long_name = "Leaf litter cellulose fraction" ; - float fates_lf_flab(fates_pft) ; + double fates_lf_flab(fates_pft) ; fates_lf_flab:units = "fraction" ; fates_lf_flab:long_name = "Leaf litter labile fraction" ; - float fates_lf_flig(fates_pft) ; + double fates_lf_flig(fates_pft) ; fates_lf_flig:units = "fraction" ; fates_lf_flig:long_name = "Leaf litter lignin fraction" ; - float fates_maintresp_reduction_curvature(fates_pft) ; + 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" ; - float fates_maintresp_reduction_intercept(fates_pft) ; + 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" ; - float fates_mort_bmort(fates_pft) ; + double fates_mort_bmort(fates_pft) ; fates_mort_bmort:units = "1/yr" ; fates_mort_bmort:long_name = "background mortality rate" ; - float fates_mort_freezetol(fates_pft) ; + double fates_mort_freezetol(fates_pft) ; fates_mort_freezetol:units = "NA" ; fates_mort_freezetol:long_name = "minimum temperature tolerance (NOT USED)" ; - float fates_mort_hf_flc_threshold(fates_pft) ; + 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" ; - float fates_mort_hf_sm_threshold(fates_pft) ; + 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" ; - float fates_mort_scalar_coldstress(fates_pft) ; + 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" ; - float fates_mort_scalar_cstarvation(fates_pft) ; + 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" ; - float fates_mort_scalar_hydrfailure(fates_pft) ; + 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" ; - float fates_pft_used(fates_pft) ; - fates_pft_used:units = "0 = off (dont use), 1 = on (use)" ; - fates_pft_used:long_name = "Switch to turn on and off PFTs (also see fates_initd for cold-start)" ; - float fates_phen_evergreen(fates_pft) ; + double fates_phen_evergreen(fates_pft) ; fates_phen_evergreen:units = "logical flag" ; fates_phen_evergreen:long_name = "Binary flag for evergreen leaf habit" ; - float fates_phen_season_decid(fates_pft) ; + 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" ; - float fates_phen_stress_decid(fates_pft) ; + 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" ; - float fates_phenflush_fraction(fates_pft) ; + double fates_phenflush_fraction(fates_pft) ; fates_phenflush_fraction:units = "fraction" ; fates_phenflush_fraction:long_name = "Upon bud-burst, the maximum fraction of storage carbon used for flushing leaves" ; - float fates_prescribed_mortality_canopy(fates_pft) ; + double fates_prescribed_mortality_canopy(fates_pft) ; fates_prescribed_mortality_canopy:units = "1/yr" ; fates_prescribed_mortality_canopy:long_name = "mortality rate of canopy trees for prescribed physiology mode" ; - float fates_prescribed_mortality_understory(fates_pft) ; + double fates_prescribed_mortality_understory(fates_pft) ; fates_prescribed_mortality_understory:units = "1/yr" ; fates_prescribed_mortality_understory:long_name = "mortality rate of understory trees for prescribed physiology mode" ; - float fates_prescribed_npp_canopy(fates_pft) ; - fates_prescribed_npp_canopy:units = "gC / m^2 / yr" ; + 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" ; - float fates_prescribed_npp_understory(fates_pft) ; - fates_prescribed_npp_understory:units = "gC / m^2 / yr" ; + 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" ; - float fates_prescribed_recruitment(fates_pft) ; + double fates_prescribed_recruitment(fates_pft) ; fates_prescribed_recruitment:units = "n/yr" ; fates_prescribed_recruitment:long_name = "recruitment rate for prescribed physiology mode" ; - float fates_prt_alloc_priority(fates_prt_organs, fates_pft) ; + double fates_prt_alloc_priority(fates_prt_organs, fates_pft) ; fates_prt_alloc_priority:units = "index (0-fates_prt_organs)" ; fates_prt_alloc_priority:long_name = "Priority order for allocation" ; - float fates_prt_nitr_stoich_p1(fates_prt_organs, fates_pft) ; + double fates_prt_nitr_stoich_p1(fates_prt_organs, fates_pft) ; fates_prt_nitr_stoich_p1:units = "(gN/gC)" ; fates_prt_nitr_stoich_p1:long_name = "nitrogen stoichiometry, parameter 1" ; - float fates_prt_nitr_stoich_p2(fates_prt_organs, fates_pft) ; + double fates_prt_nitr_stoich_p2(fates_prt_organs, fates_pft) ; fates_prt_nitr_stoich_p2:units = "(gN/gC)" ; fates_prt_nitr_stoich_p2:long_name = "nitrogen stoichiometry, parameter 2" ; - float fates_prt_phos_stoich_p1(fates_prt_organs, fates_pft) ; + double fates_prt_phos_stoich_p1(fates_prt_organs, fates_pft) ; fates_prt_phos_stoich_p1:units = "(gP/gC)" ; fates_prt_phos_stoich_p1:long_name = "phosphorous stoichiometry, parameter 1" ; - float fates_prt_phos_stoich_p2(fates_prt_organs, fates_pft) ; + double fates_prt_phos_stoich_p2(fates_prt_organs, fates_pft) ; fates_prt_phos_stoich_p2:units = "(gP/gC)" ; fates_prt_phos_stoich_p2:long_name = "phosphorous stoichiometry, parameter 2" ; - float fates_recruit_hgt_min(fates_pft) ; + double fates_recruit_hgt_min(fates_pft) ; fates_recruit_hgt_min:units = "m" ; fates_recruit_hgt_min:long_name = "the minimum height (ie starting height) of a newly recruited plant" ; - float fates_recruit_initd(fates_pft) ; + double fates_recruit_initd(fates_pft) ; fates_recruit_initd:units = "stems/m2" ; fates_recruit_initd:long_name = "initial seedling density for a cold-start near-bare-ground simulation" ; - float fates_rholnir(fates_pft) ; + double fates_rholnir(fates_pft) ; fates_rholnir:units = "fraction" ; fates_rholnir:long_name = "Leaf reflectance: near-IR" ; - float fates_rholvis(fates_pft) ; + double fates_rholvis(fates_pft) ; fates_rholvis:units = "fraction" ; fates_rholvis:long_name = "Leaf reflectance: visible" ; - float fates_rhosnir(fates_pft) ; + double fates_rhosnir(fates_pft) ; fates_rhosnir:units = "fraction" ; fates_rhosnir:long_name = "Stem reflectance: near-IR" ; - float fates_rhosvis(fates_pft) ; + double fates_rhosvis(fates_pft) ; fates_rhosvis:units = "fraction" ; fates_rhosvis:long_name = "Stem reflectance: visible" ; - float fates_root_long(fates_pft) ; + double fates_root_long(fates_pft) ; fates_root_long:units = "yr" ; fates_root_long:long_name = "root longevity (alternatively, turnover time)" ; - float fates_roota_par(fates_pft) ; + double fates_roota_par(fates_pft) ; fates_roota_par:units = "1/m" ; fates_roota_par:long_name = "CLM rooting distribution parameter" ; - float fates_rootb_par(fates_pft) ; + double fates_rootb_par(fates_pft) ; fates_rootb_par:units = "1/m" ; fates_rootb_par:long_name = "CLM rooting distribution parameter" ; - float fates_rootprof_beta(fates_variants, fates_pft) ; + double fates_rootprof_beta(fates_variants, fates_pft) ; fates_rootprof_beta:units = "unitless" ; fates_rootprof_beta:long_name = "Rooting beta parameter, for C and N vertical discretization (NOT USED BY DEFAULT)" ; - float fates_seed_alloc(fates_pft) ; + double fates_seed_alloc(fates_pft) ; fates_seed_alloc:units = "fraction" ; fates_seed_alloc:long_name = "fraction of available carbon balance allocated to seeds" ; - float fates_seed_alloc_mature(fates_pft) ; + double fates_seed_alloc_mature(fates_pft) ; fates_seed_alloc_mature:units = "fraction" ; fates_seed_alloc_mature:long_name = "fraction of available carbon balance allocated to seeds in mature plants (adds to fates_seed_alloc)" ; - float fates_seed_dbh_repro_threshold(fates_pft) ; + double fates_seed_dbh_repro_threshold(fates_pft) ; fates_seed_dbh_repro_threshold:units = "cm" ; fates_seed_dbh_repro_threshold:long_name = "the diameter (if any) where the plant will start extra clonal allocation to the seed pool" ; - float fates_seed_decay_turnover(fates_pft) ; + double fates_seed_decay_turnover(fates_pft) ; fates_seed_decay_turnover:units = "1/yr" ; fates_seed_decay_turnover:long_name = "turnover time for seeds with respect to germination" ; - float fates_seed_germination_timescale(fates_pft) ; + double fates_seed_germination_timescale(fates_pft) ; fates_seed_germination_timescale:units = "1/yr" ; fates_seed_germination_timescale:long_name = "turnover time for seeds with respect to decay" ; - float fates_seed_rain(fates_pft) ; - fates_seed_rain:units = "KgC/m2/yr" ; - fates_seed_rain:long_name = "External seed rain from outside site (non-mass conserving)" ; - float fates_senleaf_long_fdrought(fates_pft) ; + double fates_seed_suppl(fates_pft) ; + fates_seed_suppl:units = "KgC/m2/yr" ; + fates_seed_suppl:long_name = "Supplemental external seed rain source term (non-mass conserving)" ; + double fates_senleaf_long_fdrought(fates_pft) ; fates_senleaf_long_fdrought:units = "unitless[0-1]" ; fates_senleaf_long_fdrought:long_name = "multiplication factor for leaf longevity of senescent leaves during drought" ; - float fates_smpsc(fates_pft) ; + double fates_smpsc(fates_pft) ; fates_smpsc:units = "mm" ; fates_smpsc:long_name = "Soil water potential at full stomatal closure" ; - float fates_smpso(fates_pft) ; + double fates_smpso(fates_pft) ; fates_smpso:units = "mm" ; fates_smpso:long_name = "Soil water potential at full stomatal opening" ; - float fates_taulnir(fates_pft) ; + double fates_taulnir(fates_pft) ; fates_taulnir:units = "fraction" ; fates_taulnir:long_name = "Leaf transmittance: near-IR" ; - float fates_taulvis(fates_pft) ; + double fates_taulvis(fates_pft) ; fates_taulvis:units = "fraction" ; fates_taulvis:long_name = "Leaf transmittance: visible" ; - float fates_tausnir(fates_pft) ; + double fates_tausnir(fates_pft) ; fates_tausnir:units = "fraction" ; fates_tausnir:long_name = "Stem transmittance: near-IR" ; - float fates_tausvis(fates_pft) ; + double fates_tausvis(fates_pft) ; fates_tausvis:units = "fraction" ; fates_tausvis:long_name = "Stem transmittance: visible" ; - float fates_trim_inc(fates_pft) ; + double fates_trim_inc(fates_pft) ; fates_trim_inc:units = "m2/m2" ; fates_trim_inc:long_name = "Arbitrary incremental change in trimming function." ; - float fates_trim_limit(fates_pft) ; + 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" ; - float fates_turnover_carb_retrans(fates_prt_organs, fates_pft) ; + double fates_turnover_carb_retrans(fates_prt_organs, fates_pft) ; fates_turnover_carb_retrans:units = "-" ; fates_turnover_carb_retrans:long_name = "retranslocation fraction of carbon in turnover" ; - float fates_turnover_nitr_retrans(fates_prt_organs, fates_pft) ; + double fates_turnover_nitr_retrans(fates_prt_organs, fates_pft) ; fates_turnover_nitr_retrans:units = "-" ; fates_turnover_nitr_retrans:long_name = "retranslocation fraction of nitrogen in turnover" ; - float fates_turnover_phos_retrans(fates_prt_organs, fates_pft) ; + double fates_turnover_phos_retrans(fates_prt_organs, fates_pft) ; fates_turnover_phos_retrans:units = "-" ; fates_turnover_phos_retrans:long_name = "retranslocation fraction of phosphorous in turnover, parameter 1" ; - float fates_turnover_retrans_mode(fates_pft) ; + double fates_turnover_retrans_mode(fates_pft) ; fates_turnover_retrans_mode:units = "index" ; fates_turnover_retrans_mode:long_name = "retranslocation method for leaf/fineroot turnover" ; - float fates_wood_density(fates_pft) ; + double fates_wood_density(fates_pft) ; fates_wood_density:units = "g/cm3" ; fates_wood_density:long_name = "mean density of woody tissue in plant" ; - float fates_woody(fates_pft) ; + double fates_woody(fates_pft) ; fates_woody:units = "logical flag" ; fates_woody:long_name = "Binary woody lifeform flag" ; - float fates_z0mr(fates_pft) ; + double fates_z0mr(fates_pft) ; fates_z0mr:units = "unitless" ; fates_z0mr:long_name = "Ratio of momentum roughness length to canopy top height" ; - float fates_FBD(fates_litterclass) ; - fates_FBD:units = "NA" ; - fates_FBD:long_name = "spitfire parameter related to fuel bulk density, see SFMain.F90" ; - float fates_low_moisture_Coeff(fates_litterclass) ; - fates_low_moisture_Coeff:units = "NA" ; - fates_low_moisture_Coeff:long_name = "spitfire parameter, equation B1 Thonicke et al 2010" ; - float fates_low_moisture_Slope(fates_litterclass) ; - fates_low_moisture_Slope:units = "NA" ; - fates_low_moisture_Slope:long_name = "spitfire parameter, equation B1 Thonicke et al 2010" ; - float fates_max_decomp(fates_litterclass) ; - fates_max_decomp:units = "kgC/m2/yr ?" ; + double fates_fire_FBD(fates_litterclass) ; + fates_fire_FBD:units = "NA" ; + fates_fire_FBD:long_name = "spitfire parameter related to fuel bulk density, see SFMain.F90" ; + 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 = "NA" ; + fates_fire_SAV:long_name = "spitfire parameter related to surface area to volume ratio, see SFMain.F90" ; + double fates_max_decomp(fates_litterclass) ; + fates_max_decomp:units = "yr-1" ; fates_max_decomp:long_name = "maximum rate of litter & CWD transfer from non-decomposing class into decomposing class" ; - float fates_mid_moisture(fates_litterclass) ; - fates_mid_moisture:units = "NA" ; - fates_mid_moisture:long_name = "spitfire litter moisture threshold to be considered medium dry" ; - float fates_mid_moisture_Coeff(fates_litterclass) ; - fates_mid_moisture_Coeff:units = "NA" ; - fates_mid_moisture_Coeff:long_name = "spitfire parameter, equation B1 Thonicke et al 2010" ; - float fates_mid_moisture_Slope(fates_litterclass) ; - fates_mid_moisture_Slope:units = "NA" ; - fates_mid_moisture_Slope:long_name = "spitfire parameter, equation B1 Thonicke et al 2010" ; - float fates_min_moisture(fates_litterclass) ; - fates_min_moisture:units = "NA" ; - fates_min_moisture:long_name = "spitfire litter moisture threshold to be considered very dry" ; - float fates_SAV(fates_litterclass) ; - fates_SAV:units = "NA" ; - fates_SAV:long_name = "spitfire parameter related to surface area to volume ratio, see SFMain.F90" ; - float fates_CWD_frac(fates_NCWD) ; + double fates_CWD_frac(fates_NCWD) ; fates_CWD_frac:units = "fraction" ; fates_CWD_frac:long_name = "fraction of woody (bdead+bsw) biomass destined for CWD pool" ; - float fates_drying_ratio ; - fates_drying_ratio:units = "NA" ; - fates_drying_ratio:long_name = "spitfire parameter, fire drying ratio for fuel moisture, alpha_FMC EQ 6 Thonicke et al 2010" ; - float fates_durat_slope ; - fates_durat_slope:units = "NA" ; - fates_durat_slope:long_name = "spitfire parameter, fire max duration slope, Equation 14 Thonicke et al 2010" ; - float fates_fdi_a ; - fates_fdi_a:units = "NA" ; - fates_fdi_a:long_name = "spitfire parameter (unknown) " ; - float fates_fdi_alpha ; - fates_fdi_alpha:units = "NA" ; - fates_fdi_alpha:long_name = "spitfire parameter, EQ 7 Venevsky et al. GCB 2002,(modified EQ 8 Thonicke et al. 2010) " ; - float fates_fdi_b ; - fates_fdi_b:units = "NA" ; - fates_fdi_b:long_name = "spitfire parameter (unknown) " ; - float fates_fuel_energy ; - fates_fuel_energy:units = "kJ/kg" ; - fates_fuel_energy:long_name = "pitfire parameter, heat content of fuel" ; - float fates_max_durat ; - fates_max_durat:units = "minutes" ; - fates_max_durat:long_name = "spitfire parameter, fire maximum duration, Equation 14 Thonicke et al 2010" ; - float fates_miner_damp ; - fates_miner_damp:units = "NA" ; - fates_miner_damp:long_name = "spitfire parameter, mineral-dampening coefficient EQ A1 Thonicke et al 2010 " ; - float fates_miner_total ; - fates_miner_total:units = "fraction" ; - fates_miner_total:long_name = "spitfire parameter, total mineral content, Table A1 Thonicke et al 2010" ; - float fates_part_dens ; - fates_part_dens:units = "kg/m2" ; - fates_part_dens:long_name = "spitfire parameter, oven dry particle density, Table A1 Thonicke et al 2010" ; + double fates_base_mr_20 ; + fates_base_mr_20:units = "gC/gN/s" ; + fates_base_mr_20:long_name = "Base maintenance respiration rate for plant tissues, using Ryan 1991" ; + double fates_bbopt_c3 ; + fates_bbopt_c3:units = "umol H2O/m**2/s" ; + fates_bbopt_c3:long_name = "Ball-Berry minimum unstressed leaf conductance for C3" ; + double fates_bbopt_c4 ; + fates_bbopt_c4:units = "umol H2O/m**2/s" ; + fates_bbopt_c4:long_name = "Ball-Berry minimum unstressed leaf conductance for C4" ; + 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_cohort_fusion_tol ; + fates_cohort_fusion_tol:units = "unitless" ; + fates_cohort_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 = "weighting factor (exponent on dbh) for canopy layer exclusion and promotion" ; + double fates_cwd_fcel ; + fates_cwd_fcel:units = "unitless" ; + fates_cwd_fcel:long_name = "Cellulose fraction for CWD" ; + double fates_cwd_flig ; + fates_cwd_flig:units = "unitless" ; + fates_cwd_flig:long_name = "Lignin fraction of coarse woody debris" ; + 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 day" ; + fates_fire_nignitions:long_name = "number of daily ignitions" ; + 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_hydr_kmax_rsurf1 ; + fates_hydr_kmax_rsurf1:units = "kg water/m2 root area/Mpa/s" ; + fates_hydr_kmax_rsurf1:long_name = "maximum conducitivity for unit root surface (into root)" ; + double fates_hydr_kmax_rsurf2 ; + fates_hydr_kmax_rsurf2:units = "kg water/m2 root area/Mpa/s" ; + fates_hydr_kmax_rsurf2:long_name = "maximum conducitivity for unit root surface (out of root)" ; + double fates_hydr_psi0 ; + fates_hydr_psi0:units = "MPa" ; + fates_hydr_psi0:long_name = "sapwood water potential at saturation" ; + double fates_hydr_psicap ; + fates_hydr_psicap:units = "MPa" ; + fates_hydr_psicap:long_name = "sapwood water potential at which capillary reserves exhausted" ; + double fates_init_litter ; + fates_init_litter:units = "NA" ; + fates_init_litter:long_name = "Initialization value for litter pool in cold-start (NOT USED)" ; + double fates_logging_coll_under_frac ; + fates_logging_coll_under_frac:units = "fraction" ; + fates_logging_coll_under_frac:long_name = "Fraction of stems killed in the understory when logging generates disturbance" ; + double fates_logging_collateral_frac ; + fates_logging_collateral_frac:units = "fraction" ; + fates_logging_collateral_frac:long_name = "Fraction of large stems in upperstory that die from logging collateral damage" ; + double fates_logging_dbhmax_infra ; + fates_logging_dbhmax_infra:units = "cm" ; + fates_logging_dbhmax_infra:long_name = "Tree diameter, above which infrastructure from logging does not impact damage or mortality." ; + double fates_logging_dbhmin ; + fates_logging_dbhmin:units = "cm" ; + fates_logging_dbhmin:long_name = "Minimum dbh at which logging is applied" ; + double fates_logging_direct_frac ; + fates_logging_direct_frac:units = "fraction" ; + fates_logging_direct_frac:long_name = "Fraction of stems logged directly per event" ; + double fates_logging_event_code ; + fates_logging_event_code:units = "unitless" ; + fates_logging_event_code:long_name = "Integer code that options how logging events are structured" ; + double fates_logging_export_frac ; + fates_logging_export_frac:units = "fraction" ; + fates_logging_export_frac:long_name = "fraction of trunk product being shipped offsite, the leftovers will be left onsite as large CWD" ; + double fates_logging_mechanical_frac ; + fates_logging_mechanical_frac:units = "fraction" ; + fates_logging_mechanical_frac:long_name = "Fraction of stems killed due infrastructure an other mechanical means" ; + 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_a ; + fates_phen_a:units = "none" ; + fates_phen_a:long_name = "GDD accumulation function, intercept parameter: gdd_thesh = a + b exp(c*ncd)" ; + double fates_phen_b ; + fates_phen_b:units = "none" ; + fates_phen_b:long_name = "GDD accumulation function, multiplier parameter: gdd_thesh = a + b exp(c*ncd)" ; + double fates_phen_c ; + fates_phen_c:units = "none" ; + fates_phen_c:long_name = "GDD accumulation function, exponent parameter: gdd_thesh = a + b exp(c*ncd)" ; + double fates_phen_chiltemp ; + fates_phen_chiltemp:units = "degrees C" ; + fates_phen_chiltemp:long_name = "chilling day counting threshold" ; + double fates_phen_coldtemp ; + fates_phen_coldtemp:units = "degrees C" ; + fates_phen_coldtemp:long_name = "temperature exceedance to flag a cold-day for temperature leaf drop" ; + double fates_phen_doff_time ; + fates_phen_doff_time:units = "days" ; + fates_phen_doff_time:long_name = "day threshold compared against days since leaves became off-allometry" ; + double fates_phen_drought_threshold ; + fates_phen_drought_threshold:units = "m3/m3" ; + fates_phen_drought_threshold:long_name = "liquid volume in soil layer, threashold for drought phenology" ; + 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_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" ; // global attributes: - :history = "This file was made from FatesPFTIndexSwapper.py \n", - " Input File = fates_params_14pft.nc \n", - " Indices = [1, 2, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14] \n", - " Migrating in parameters from hydro file, and discussion \n", - " See NGEET/fates issue 444" ; + :history = "This parameter file is maintained in version control\nSee https://github.com/NGEET/fates/blob/master/parameter_files/fates_params_default.cdl \nFor changes, use git blame \n" ; data: + fates_history_ageclass_bin_edges = 0, 1, 2, 5, 10, 20, 50 ; + fates_history_height_bin_edges = 0, 0.1, 0.3, 1, 3, 10 ; fates_history_sizeclass_bin_edges = 0, 5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100 ; - fates_history_ageclass_bin_edges = 0, 1, 2, 5, 10, 20, 50 ; - - fates_base_mr_20 = 2.52e-06 ; - - fates_bbopt_c3 = 10000 ; - - fates_bbopt_c4 = 40000 ; - - fates_canopy_closure_thresh = 0.8 ; - - fates_cohort_fusion_tol = 0.08 ; - - fates_comp_excln = 3 ; - - fates_cwd_fcel = 0.76 ; - - fates_cwd_flig = 0.24 ; - - fates_fire_nignitions = 15 ; - - fates_hydr_kmax_rsurf = 20.0 ; - - fates_hydr_psi0 = 0 ; - - fates_hydr_psicap = -0.6 ; - - fates_init_litter = 0.05 ; - - fates_logging_coll_under_frac = 0.55983 ; - - fates_logging_collateral_frac = 0.05 ; - - fates_logging_dbhmax_infra = 35 ; - - fates_logging_dbhmin = 50 ; - - fates_logging_direct_frac = 0.15 ; - - fates_logging_event_code = -30 ; - - fates_logging_mechanical_frac = 0.05 ; - - fates_mort_disturb_frac = 1 ; - - fates_mort_understorey_death = 0.55983 ; - - fates_patch_fusion_tol = 0.05 ; - - fates_phen_a = -68 ; - - fates_phen_b = 638 ; - - fates_phen_c = -0.01 ; - - fates_phen_chiltemp = 5 ; - - fates_phen_coldtemp = 7.5 ; - - fates_phen_doff_time = 100 ; - - fates_phen_drought_threshold = 0.15 ; - - fates_phen_mindayson = 30 ; - - fates_phen_ncolddayslim = 5 ; - - fates_soil_salinity = 0.4 ; - fates_pftname = "broadleaf_evergreen_tropical_tree ", "needleleaf_evergreen_extratrop_tree ", @@ -747,7 +685,8 @@ data: 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_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 ; @@ -834,10 +773,14 @@ data: 0.333, 0.333, 0.333, 0.333 ; fates_hydr_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 ; + -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_hydr_pitlp_node = -1.67, -1.67, -1.67, -1.67, -1.67, -1.67, -1.67, -1.67, -1.67, -1.67, @@ -887,7 +830,8 @@ data: fates_leaf_jmaxse = 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495 ; - fates_leaf_long = 1.5, 4, 1.0, 1.5, 1.0, 1.0, 1.5, 1.0, 1.0, 1.0, 1.0, 1.0 ; + fates_leaf_long = + 1.5, 4, 1, 1.5, 1, 1, 1.5, 1, 1, 1, 1, 1 ; 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 ; @@ -906,7 +850,8 @@ data: fates_leaf_tpuse = 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490 ; - fates_leaf_vcmax25top = 50, 65, 39, 62, 41, 58, 62, 54, 54, 78, 78, 78 ; + fates_leaf_vcmax25top = + 50, 65, 39, 62, 41, 58, 62, 54, 54, 78, 78, 78 ; fates_leaf_vcmaxha = 65330, 65330, 65330, 65330, 65330, 65330, 65330, 65330, 65330, 65330, 65330, 65330 ; @@ -953,8 +898,6 @@ data: 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_pft_used = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; - fates_phen_evergreen = 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0 ; fates_phen_season_decid = 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0 ; @@ -990,8 +933,10 @@ data: 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, - 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, - 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, + 1e-08, 1e-08, 1e-08, 1e-08, 1e-08, 1e-08, 1e-08, 1e-08, 1e-08, 1e-08, + 1e-08, 1e-08, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0047, 0.0047, 0.0047, 0.0047, 0.0047, 0.0047, 0.0047, 0.0047, 0.0047, 0.0047, 0.0047, 0.0047 ; @@ -1020,10 +965,11 @@ data: _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ ; - fates_recruit_hgt_min = 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 0.75, 0.75, - 0.75, 0.125, 0.125, 0.125 ; + fates_recruit_hgt_min = 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 0.75, 0.75, 0.75, + 0.125, 0.125, 0.125 ; - fates_recruit_initd = 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_initd = 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_rholnir = 0.45, 0.35, 0.35, 0.45, 0.45, 0.45, 0.35, 0.45, 0.45, 0.35, 0.35, 0.35 ; @@ -1060,7 +1006,7 @@ data: fates_seed_germination_timescale = 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_seed_rain = 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_seed_suppl = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; fates_senleaf_long_fdrought = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; @@ -1088,7 +1034,8 @@ data: 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_turnover_carb_retrans = - 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, + 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, + 0.025, 0.025, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1121,43 +1068,117 @@ data: fates_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_FBD = 15.4, 16.8, 19.6, 999, 4, 4 ; + fates_fire_FBD = 15.4, 16.8, 19.6, 999, 4, 4 ; - fates_low_moisture_Coeff = 1.12, 1.09, 0.98, 0.8, 1.15, 1.15; + fates_fire_low_moisture_Coeff = 1.12, 1.09, 0.98, 0.8, 1.15, 1.15 ; - fates_low_moisture_Slope = 0.62, 0.72, 0.85, 0.8, 0.62, 0.62; + fates_fire_low_moisture_Slope = 0.62, 0.72, 0.85, 0.8, 0.62, 0.62 ; - fates_max_decomp = 0.52, 0.383, 0.383, 0.19, 1, 999 ; + fates_fire_mid_moisture = 0.72, 0.51, 0.38, 1, 0.8, 0.8 ; - fates_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_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_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_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_SAV = 13, 3.58, 0.98, 0.2, 66, 66; + fates_max_decomp = 0.52, 0.383, 0.383, 0.19, 1, 999 ; fates_CWD_frac = 0.045, 0.075, 0.21, 0.67 ; - fates_drying_ratio = 13000 ; + fates_base_mr_20 = 2.52e-06 ; - fates_durat_slope = -11.06 ; + fates_bbopt_c3 = 10000 ; - fates_fdi_a = 17.62 ; + fates_bbopt_c4 = 40000 ; + + fates_canopy_closure_thresh = 0.8 ; + + fates_cohort_fusion_tol = 0.08 ; + + fates_comp_excln = 3 ; + + fates_cwd_fcel = 0.76 ; + + fates_cwd_flig = 0.24 ; + + fates_fire_drying_ratio = 13000 ; + + 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_fdi_alpha = 0.00037 ; + fates_fire_max_durat = 240 ; - fates_fdi_b = 243.12 ; + fates_fire_miner_damp = 0.41739 ; - fates_fuel_energy = 18000 ; + fates_fire_miner_total = 0.055 ; - fates_max_durat = 240 ; + fates_fire_nignitions = 15 ; + + fates_fire_part_dens = 513 ; - fates_miner_damp = 0.41739 ; + fates_hydr_kmax_rsurf1 = 20 ; - fates_miner_total = 0.055 ; + fates_hydr_kmax_rsurf2 = 0.0001 ; - fates_part_dens = 513 ; + fates_hydr_psi0 = 0 ; + + fates_hydr_psicap = -0.6 ; + + fates_init_litter = 0.05 ; + + fates_logging_coll_under_frac = 0.55983 ; + + fates_logging_collateral_frac = 0.05 ; + + fates_logging_dbhmax_infra = 35 ; + + fates_logging_dbhmin = 50 ; + + fates_logging_direct_frac = 0.15 ; + + fates_logging_event_code = -30 ; + + fates_logging_export_frac = 0.8 ; + + fates_logging_mechanical_frac = 0.05 ; + + fates_mort_disturb_frac = 1 ; + + fates_mort_understorey_death = 0.55983 ; + + fates_patch_fusion_tol = 0.05 ; + + fates_phen_a = -68 ; + + fates_phen_b = 638 ; + + fates_phen_c = -0.01 ; + + fates_phen_chiltemp = 5 ; + + fates_phen_coldtemp = 7.5 ; + + fates_phen_doff_time = 100 ; + + fates_phen_drought_threshold = 0.15 ; + + fates_phen_mindayson = 30 ; + + fates_phen_ncolddayslim = 5 ; + + fates_q10_froz = 1.5 ; + + fates_q10_mr = 1.5 ; + + fates_soil_salinity = 0.4 ; } diff --git a/tools/modify_fates_paramfile.py b/tools/modify_fates_paramfile.py index e79240035d..c3cfa649fb 100755 --- a/tools/modify_fates_paramfile.py +++ b/tools/modify_fates_paramfile.py @@ -86,10 +86,6 @@ def main(): npft_file = var.shape[i] pftdim = i otherdimpresent = False - elif var.dimensions[i] == 'fates_scalar': - npft_file = None - pftdim = None - otherdimpresent = False elif var.dimensions[i] in ['fates_history_age_bins','fates_history_size_bins','fates_history_height_bins','fates_NCWD','fates_litterclass','fates_leafage_class','fates_prt_organs','fates_hydr_organs','fates_variants']: otherdimpresent = True otherdimname = var.dimensions[i] diff --git a/tools/ncvarsort.py b/tools/ncvarsort.py index 6c56703d68..8bacdf0132 100755 --- a/tools/ncvarsort.py +++ b/tools/ncvarsort.py @@ -4,7 +4,7 @@ # --input or --fin: input filename. # --output or --fout: output filename. If missing, will assume its directly modifying the input file, and will prompt unless -O is specified -from scipy.io import netcdf as nc +import netCDF4 as nc import sys import os import argparse @@ -19,11 +19,12 @@ def main(): parser.add_argument('--fin', '--input', dest='fnamein', type=str, help="Input filename. Required.", required=True) parser.add_argument('--fout','--output', dest='fnameout', type=str, help="Output filename. Required.", required=True) parser.add_argument('--O','--overwrite', dest='overwrite', help="If present, automatically overwrite the output file.", action="store_true") + parser.add_argument('--debug', dest='debug', help="If present, output more diagnostics", action="store_true") # args = parser.parse_args() # # open the input dataset - dsin = nc.netcdf_file(args.fnamein, 'r') + dsin = nc.Dataset(args.fnamein, 'r') # # make empty lists to hold the variable names in. the first of these is a list of sub-lists, # one for each type of variable (based on dimensionality). @@ -32,20 +33,20 @@ def main(): varnames_list_sorted = [] # # sort the variables by dimensionality, but mix the PFT x other dimension in with the regular PFT-indexed variables - dimtype_sortorder_dict = {(u'fates_history_height_bins',):0, - (u'fates_history_size_bins',):1, - (u'fates_history_age_bins',):2, - (u'fates_scalar',):3, - (u'fates_pft', u'fates_string_length'):4, - (u'fates_prt_organs', u'fates_string_length'):5, - (u'fates_pft',):6, - (u'fates_variants', u'fates_pft'):6, - (u'fates_hydr_organs', u'fates_pft'):6, - (u'fates_leafage_class', u'fates_pft'):6, - (u'fates_prt_organs', u'fates_pft'):6, - (u'fates_litterclass',):7, - (u'fates_NCWD',):8, - ():9} + dimtype_sortorder_dict = { + (u'fates_history_age_bins',):0, + (u'fates_history_height_bins',):1, + (u'fates_history_size_bins',):2, + (u'fates_pft', u'fates_string_length'):3, + (u'fates_prt_organs', u'fates_string_length'):4, + (u'fates_pft',):5, + (u'fates_variants', u'fates_pft'):5, + (u'fates_hydr_organs', u'fates_pft'):5, + (u'fates_leafage_class', u'fates_pft'):5, + (u'fates_prt_organs', u'fates_pft'):5, + (u'fates_litterclass',):6, + (u'fates_NCWD',):7, + ():8} # # go through each of the variables and assign it to one of the sub-lists based on its dimensionality for v_name, varin in dsin.variables.iteritems(): @@ -59,6 +60,10 @@ def main(): varnames_list[i] = sorted(varnames_list[i], key=lambda L: (L.lower(), L)) varnames_list_sorted.extend(varnames_list[i]) # + # write list of variables in ourput order + if args.debug: + print(varnames_list_sorted) + # # open the output filename, deleting it if it exists already. if os.path.isfile(args.fnameout): if args.fnameout == args.fnamein: @@ -69,12 +74,12 @@ def main(): else: raise ValueError('Output file already exists and overwrite flag not specified for filename: '+args.fnameout) # - dsout = nc.netcdf_file(args.fnameout, "w") + dsout = nc.Dataset(args.fnameout, "w") # #Copy dimensions for dname, the_dim in dsin.dimensions.iteritems(): - print dname, the_dim - dsout.createDimension(dname, the_dim ) + print dname, the_dim.size + dsout.createDimension(dname, the_dim.size ) # print # @@ -89,26 +94,14 @@ def main(): for i in range(len(varnames_list_sorted)): v_name = varnames_list_sorted[i] varin = dsin.variables[v_name] - outVar = dsout.createVariable(v_name, varin.data.dtype, varin.dimensions) + outVar = dsout.createVariable(v_name, varin.datatype, varin.dimensions) print v_name # - try: - outVar.units = varin.units - except: - print('----------no units!-----------') - try: - outVar.long_name = varin.long_name - except: - print('----------no long name!---------') - # - # copy data from input file to output file + outVar.setncatts({k: varin.getncattr(k) for k in varin.ncattrs()}) + outVar[:] = varin[:] # - try: - outVar[:] = varin[:] - except: - # handle the case where there is a scalar - outVar.assignValue(varin.data) - # + # copy global attributes + dsout.setncatts({k: dsin.getncattr(k) for k in dsin.ncattrs()})# # # close the output file dsin.close()