Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion biogeochem/FatesSoilBGCFluxMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1182,7 +1182,7 @@ function ECACScalar(ccohort, element_id) result(c_scalar)
integer, parameter :: downreg_logi = 2
integer, parameter :: downreg_CN_logi = 3

integer, parameter :: downreg_type = downreg_linear
integer, parameter :: downreg_type = downreg_CN_logi


real(r8), parameter :: logi_k = 25.0_r8 ! logistic function k
Expand Down
160 changes: 132 additions & 28 deletions biogeophys/FatesPlantRespPhotosynthMod.F90

Large diffs are not rendered by default.

51 changes: 50 additions & 1 deletion main/EDPftvarcon.F90
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ module EDPftvarcon
! decreases light interception
real(r8), allocatable :: c3psn(:) ! index defining the photosynthetic
! pathway C4 = 0, C3 = 1

real(r8), allocatable :: flnr(:) ! fraction of leaf N in Rubisco
real(r8), allocatable :: smpso(:) ! Soil water potential at full stomatal opening
! (non-HYDRO mode only) [mm]
real(r8), allocatable :: smpsc(:) ! Soil water potential at full stomatal closure
Expand All @@ -99,6 +99,10 @@ module EDPftvarcon
real(r8), allocatable :: jmaxhd(:)
real(r8), allocatable :: vcmaxse(:)
real(r8), allocatable :: jmaxse(:)
real(r8), allocatable :: vcmax_np1(:)
real(r8), allocatable :: vcmax_np2(:)
real(r8), allocatable :: vcmax_np3(:)
real(r8), allocatable :: vcmax_np4(:)
real(r8), allocatable :: germination_rate(:) ! Fraction of seed mass germinating per year (yr-1)
real(r8), allocatable :: seed_decay_rate(:) ! Fraction of seed mass (both germinated and
! ungerminated), decaying per year (yr-1)
Expand Down Expand Up @@ -377,6 +381,10 @@ 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_leaf_flnr'
call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, &
dimension_names=dim_names, lower_bounds=dim_lower_bound)

name = 'fates_smpso'
call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, &
dimension_names=dim_names, lower_bounds=dim_lower_bound)
Expand Down Expand Up @@ -509,6 +517,22 @@ 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_eca_vcmax_np1'
call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, &
dimension_names=dim_names, lower_bounds=dim_lower_bound)

name = 'fates_eca_vcmax_np2'
call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, &
dimension_names=dim_names, lower_bounds=dim_lower_bound)

name = 'fates_eca_vcmax_np3'
call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, &
dimension_names=dim_names, lower_bounds=dim_lower_bound)

name = 'fates_eca_vcmax_np4'
call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, &
dimension_names=dim_names, lower_bounds=dim_lower_bound)

name = 'fates_seed_germination_rate'
call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, &
dimension_names=dim_names, lower_bounds=dim_lower_bound)
Expand Down Expand Up @@ -694,6 +718,10 @@ subroutine Receive_PFT(this, fates_params)
call fates_params%RetreiveParameterAllocate(name=name, &
data=this%clumping_index)

name = 'fates_leaf_flnr'
call fates_params%RetreiveParameterAllocate(name=name, &
data=this%flnr)

name = 'fates_leaf_c3psn'
call fates_params%RetreiveParameterAllocate(name=name, &
data=this%c3psn)
Expand Down Expand Up @@ -840,6 +868,22 @@ subroutine Receive_PFT(this, fates_params)
call fates_params%RetreiveParameterAllocate(name=name, &
data=this%jmaxse)

name = 'fates_eca_vcmax_np1'
call fates_params%RetreiveParameterAllocate(name=name, &
data=this%vcmax_np1)

name = 'fates_eca_vcmax_np2'
call fates_params%RetreiveParameterAllocate(name=name, &
data=this%vcmax_np2)

name = 'fates_eca_vcmax_np3'
call fates_params%RetreiveParameterAllocate(name=name, &
data=this%vcmax_np3)

name = 'fates_eca_vcmax_np4'
call fates_params%RetreiveParameterAllocate(name=name, &
data=this%vcmax_np4)

name = 'fates_seed_germination_rate'
call fates_params%RetreiveParameterAllocate(name=name, &
data=this%germination_rate)
Expand Down Expand Up @@ -1309,6 +1353,7 @@ subroutine FatesReportPFTParams(is_master)
write(fates_log(),fmt0) 'xl = ',EDPftvarcon_inst%xl
write(fates_log(),fmt0) 'clumping_index = ',EDPftvarcon_inst%clumping_index
write(fates_log(),fmt0) 'c3psn = ',EDPftvarcon_inst%c3psn
write(fates_log(),fmt0) 'flnr = ',EDPftvarcon_inst%flnr
write(fates_log(),fmt0) 'vcmax25top = ',EDPftvarcon_inst%vcmax25top
write(fates_log(),fmt0) 'smpso = ',EDPftvarcon_inst%smpso
write(fates_log(),fmt0) 'smpsc = ',EDPftvarcon_inst%smpsc
Expand All @@ -1328,6 +1373,10 @@ subroutine FatesReportPFTParams(is_master)
write(fates_log(),fmt0) 'jmaxhd = ',EDPftvarcon_inst%jmaxhd
write(fates_log(),fmt0) 'vcmaxse = ',EDPftvarcon_inst%vcmaxse
write(fates_log(),fmt0) 'jmaxse = ',EDPftvarcon_inst%jmaxse
write(fates_log(),fmt0) 'vcmax_np1 = ',EDPftvarcon_inst%vcmax_np1
write(fates_log(),fmt0) 'vcmax_np1 = ',EDPftvarcon_inst%vcmax_np2
write(fates_log(),fmt0) 'vcmax_np1 = ',EDPftvarcon_inst%vcmax_np3
write(fates_log(),fmt0) 'vcmax_np1 = ',EDPftvarcon_inst%vcmax_np4
write(fates_log(),fmt0) 'germination_timescale = ',EDPftvarcon_inst%germination_rate
write(fates_log(),fmt0) 'seed_decay_turnover = ',EDPftvarcon_inst%seed_decay_rate
write(fates_log(),fmt0) 'trim_limit = ',EDPftvarcon_inst%trim_limit
Expand Down
3 changes: 2 additions & 1 deletion main/FatesInterfaceMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ subroutine zero_bcs(fates,s)
fates%bc_in(s)%precip24_pa(:) = 0.0_r8
fates%bc_in(s)%relhumid24_pa(:) = 0.0_r8
fates%bc_in(s)%wind24_pa(:) = 0.0_r8

fates%bc_in(s)%t_a10_pa(:) = 0.0_r8
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this intentional or an overlap with another PR? I can't see where the info is being used here...

fates%bc_in(s)%lightning24(:) = 0.0_r8
fates%bc_in(s)%pop_density(:) = 0.0_r8
fates%bc_in(s)%solad_parb(:,:) = 0.0_r8
Expand Down Expand Up @@ -473,6 +473,7 @@ subroutine allocate_bcin(bc_in, nlevsoil_in, nlevdecomp_in, num_lu_harvest_cats)

! Photosynthesis
allocate(bc_in%filter_photo_pa(maxPatchesPerSite))
allocate(bc_in%t_a10_pa(maxPatchesPerSite))
allocate(bc_in%dayl_factor_pa(maxPatchesPerSite))
allocate(bc_in%esat_tv_pa(maxPatchesPerSite))
allocate(bc_in%eair_pa(maxPatchesPerSite))
Expand Down
5 changes: 4 additions & 1 deletion main/FatesInterfaceTypesMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,10 @@ module FatesInterfaceTypesMod

! daylength scaling factor (0-1)
real(r8), allocatable :: dayl_factor_pa(:)


! 10-day running mean of 2m temperature (K)
real(r8), allocatable :: t_a10_pa(:)

! saturation vapor pressure at t_veg (Pa)
real(r8), allocatable :: esat_tv_pa(:)

Expand Down
34 changes: 32 additions & 2 deletions parameter_files/fates_params_default.cdl
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,18 @@ variables:
double fates_eca_vmax_ptase(fates_pft) ;
fates_eca_vmax_ptase:units = "gP/m2/s" ;
fates_eca_vmax_ptase:long_name = "maximum production rate for biochemical P (per m2) (ECA)" ;
double fates_eca_vcmax_np1(fates_pft) ;
fates_eca_vcmax_np1:long_name = "vcmax~np relationship coefficient" ;
fates_eca_vcmax_np1:unit = "" ;
double fates_eca_vcmax_np2(fates_pft) ;
fates_eca_vcmax_np2:long_name = "vcmax~np relationship coefficient" ;
fates_eca_vcmax_np2:unit = "" ;
double fates_eca_vcmax_np3(fates_pft) ;
fates_eca_vcmax_np3:long_name = "vcmax~np relationship coefficient" ;
fates_eca_vcmax_np3:unit = "" ;
double fates_eca_vcmax_np4(fates_pft) ;
fates_eca_vcmax_np4:long_name = "vcmax~np relationship coefficient" ;
fates_eca_vcmax_np4:unit = "" ;
double fates_fire_alpha_SH(fates_pft) ;
fates_fire_alpha_SH:units = "m / (kw/m)**(2/3)" ;
fates_fire_alpha_SH:long_name = "spitfire parameter, alpha scorch height, Equation 16 Thonicke et al 2010" ;
Expand Down Expand Up @@ -247,6 +259,9 @@ variables:
double fates_leaf_c3psn(fates_pft) ;
fates_leaf_c3psn:units = "flag" ;
fates_leaf_c3psn:long_name = "Photosynthetic pathway (1=c3, 0=c4)" ;
double fates_leaf_flnr(fates_pft) ;
fates_leaf_flnr:units = "gN Rubisco / gN leaf" ;
fates_leaf_flnr:long_name = "fraction of leaf N in the Rubisco enzyme" ;
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" ;
Expand Down Expand Up @@ -383,10 +398,10 @@ variables:
fates_prescribed_npp_understory:units = "kgC / m^2 / yr" ;
fates_prescribed_npp_understory:long_name = "NPP per unit crown area of understory trees for prescribed physiology mode" ;
double fates_prescribed_nuptake(fates_pft) ;
fates_prescribed_nuptake:units = "fraction" ;
fates_prescribed_nuptake:units = "fraction" ;
fates_prescribed_nuptake:long_name = "Prescribed N uptake flux. 0=fully coupled simulation >0=prescribed (experimental)" ;
double fates_prescribed_puptake(fates_pft) ;
fates_prescribed_puptake:units = "fraction" ;
fates_prescribed_puptake:units = "fraction" ;
fates_prescribed_puptake:long_name = "Prescribed P uptake flux. 0=fully coupled simulation, >0=prescribed (experimental)" ;
double fates_prescribed_recruitment(fates_pft) ;
fates_prescribed_recruitment:units = "n/yr" ;
Expand Down Expand Up @@ -834,6 +849,18 @@ data:
fates_eca_vmax_ptase = 5e-09, 5e-09, 5e-09, 5e-09, 5e-09, 5e-09, 5e-09,
5e-09, 5e-09, 5e-09, 5e-09, 5e-09 ;

fates_eca_vcmax_np1 = 4.02421875, 3.2345, 4.800, 3.878125, 4.800, 4.7175,
3.9421875, 3.700, 3.7859375, 3.86757, 3.7859375, 4.43859375 ;

fates_eca_vcmax_np2 = 0.7640625, 0.7828125, 0.7453125, 0.9140625, 0.8015625,
0.91875, 1.096875, 0.6, 1.134375, 0.742968, 1.134375, 0.6703125 ;

fates_eca_vcmax_np3 = 0.07125, 0.08375, 0.08625, 0.19125, 0.12125, 0.185,
0.1225, 0.04, 0.1725, 0.126875, 0.1725, 0.14625 ;

fates_eca_vcmax_np4 = 0.282, 0.282, 0.282, 0.282, 0.282, 0.282, 0.282, 0.282,
0.282, 0.282, 0.282, 0.282 ;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How was variability in these parameters calculated? Also worth noting based on analysis by Luo et al 2021 that the values of Vcmax that we get are v likely to be low-biased based on the parameter values from my 2014 paper.

This will also low-bias Jmax, though if we can get better estimates of Vcmax then I don't think we'll need to edit the Jmax~Vcmax relationship. Am working on getting better estimates of the Vcmax parameters.

fates_fire_alpha_SH = 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.2 ;

Expand Down Expand Up @@ -944,6 +971,9 @@ data:
0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75 ;

fates_leaf_c3psn = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 ;

fates_leaf_flnr = 0.0461, 0.04875, 0.0546, 0.0515, 0.0716, 0.1007, 0.0517,
0.0943, 0.0943, 0.1365, 0.1365, 0.09 ;

fates_leaf_clumping_index = 0.85, 0.85, 0.8, 0.85, 0.85, 0.9, 0.85, 0.9,
0.9, 0.75, 0.75, 0.75 ;
Expand Down
16 changes: 8 additions & 8 deletions parteh/PRTAllometricCNPMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1601,11 +1601,11 @@ subroutine CNPAllocateRemainder(this,c_gain, n_gain, p_gain, &

! If any N or P is still hanging around, put it in storage

state_n(store_id)%ptr = state_n(store_id)%ptr + n_gain
state_p(store_id)%ptr = state_p(store_id)%ptr + p_gain
!state_n(store_id)%ptr = state_n(store_id)%ptr + n_gain
!state_p(store_id)%ptr = state_p(store_id)%ptr + p_gain

n_gain = 0._r8
p_gain = 0._r8
!n_gain = 0._r8
!p_gain = 0._r8


! -----------------------------------------------------------------------------------
Expand Down Expand Up @@ -1638,13 +1638,13 @@ subroutine CNPAllocateRemainder(this,c_gain, n_gain, p_gain, &
! -----------------------------------------------------------------------------------

c_efflux = max(0.0_r8,c_gain)
! n_efflux = max(0.0_r8,n_gain)
! p_efflux = max(0.0_r8,p_gain)
n_efflux = max(0.0_r8,n_gain)
p_efflux = max(0.0_r8,p_gain)


c_gain = 0.0_r8
! n_gain = 0.0_r8
! p_gain = 0.0_r8
n_gain = 0.0_r8
p_gain = 0.0_r8

return
end subroutine CNPAllocateRemainder
Expand Down