Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
bd41102
update fates commit
glemieux Apr 8, 2026
bd52486
register nlevgrnd to pass to fates for initialization
glemieux Apr 15, 2026
a4b45cf
remove assignment of unused boundary conditions
glemieux Apr 15, 2026
d3f14d4
add subgrid type argument to max thaw fates interface registration
glemieux Apr 23, 2026
8599cc2
move effective porosity to coldstart interface proc
glemieux Apr 29, 2026
b6044e5
add watsat_col to the coldstart interface proc
glemieux Apr 29, 2026
e2c83ff
add heterotrophic respiration to the fates interface registration and…
glemieux Apr 23, 2026
12e397d
remove max rooting depth assignment in elmfates interface
glemieux Apr 23, 2026
f8aab62
add snow_depth to the fates interface registry
glemieux May 7, 2026
8163bbc
add fraction of ground covered by snow to the fates interface registry
glemieux May 12, 2026
0d60a55
add h2o_liqvol into the fates interface registry
glemieux May 13, 2026
6a3b0ca
add soil temperature to the fates interface registry
glemieux May 13, 2026
0c42320
remove redundant passing of t_soisno to fates
glemieux May 13, 2026
fcc784d
add min of soil potential to fates interface registry
glemieux May 13, 2026
0705310
add h2osoi_liq to the fates interface registry
glemieux May 14, 2026
bfb039d
add saturated soil conductivity to fates interface registry
glemieux May 22, 2026
1137814
add clapp and hornberger to fates interface registry
glemieux May 22, 2026
53835e2
add minimum soil suction to fates interface registry
glemieux May 22, 2026
ea8c7ab
add minimum volumetric soil water to fates interface registry
glemieux May 22, 2026
db326ce
remove redundant fates boundary condition using watsat_col
glemieux May 22, 2026
f4bfafe
add new gpp variable to hold incoming fates values
glemieux Jun 2, 2026
004d98b
add new aresp fates variable and add to fates interface registry
glemieux Jun 3, 2026
4a7800e
add grazing loss diagnostic from fates via interface registry
glemieux Jun 3, 2026
3f1b3fa
add fire carbon loss diagnostic variable and update via fates interfa…
glemieux Jun 3, 2026
7d5eb59
add totvegc to fates interface registry
glemieux Jun 5, 2026
0b57a9f
add litter plus coarse woody debris fates variable
glemieux Jun 9, 2026
08c12e9
add fates seed carbon variable
glemieux Jun 9, 2026
9d3e3e8
add fates decomposer biomass carbon state variable
glemieux Jun 10, 2026
1e3ea5a
add soil suction potential variable for fates interface registry
glemieux Jun 10, 2026
acfcc93
call single fates interface variable procedure to update soil suction…
glemieux Jun 15, 2026
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
3 changes: 2 additions & 1 deletion components/elm/src/biogeochem/AllocationMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ module AllocationMod
use LandunitType , only : lun_pp
use ColumnType , only : col_pp
use ColumnDataType , only : col_ws
use ColumnDataType , only : col_cs
use ColumnDataType , only : col_cf, c13_col_cf, c14_col_cf
use ColumnDataType , only : col_ns, col_nf, col_ps, col_pf
use VegetationType , only : veg_pp
Expand Down Expand Up @@ -1318,7 +1319,7 @@ subroutine Allocation2_ResolveNPLimit (bounds, num_soilc, filter_soilc , &


else !(ECA)
decompmicc(fc,:) = elm_fates%fates(ci)%bc_out(s)%decompmicc(:) ! Should be (nlevdecomp)
decompmicc(fc,:) = col_cs%decompmicc_fates(fc,:)
end if
end do

Expand Down
2 changes: 2 additions & 0 deletions components/elm/src/biogeophys/SoilStateType.F90
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ module SoilStateType
real(r8), pointer :: watmin_col (:,:) ! col minimum volumetric soil water (nlevsoi)
real(r8), pointer :: sucsat_col (:,:) ! col minimum soil suction (mm) (nlevgrnd)
real(r8), pointer :: sucmin_col (:,:) ! col minimum allowable soil liquid suction pressure (mm) [Note: sucmin_col is a negative value, while sucsat_col is a positive quantity]
real(r8), pointer :: sucpot_col_fates (:,:) ! col soil suction potential (mm) [Note: sucpot_col is a negative value, while sucsat_col is a positive quantity]
real(r8), pointer :: soilbeta_col (:) ! col factor that reduces ground evaporation L&P1992(-)
real(r8), pointer :: soilalpha_col (:) ! col factor that reduces ground saturated specific humidity (-)
real(r8), pointer :: soilalpha_u_col (:) ! col urban factor that reduces ground saturated specific humidity (-)
Expand Down Expand Up @@ -165,6 +166,7 @@ subroutine InitAllocate(this, bounds)
allocate(this%watmin_col (begc:endc,nlevgrnd)) ; this%watmin_col (:,:) = spval
allocate(this%sucsat_col (begc:endc,nlevgrnd)) ; this%sucsat_col (:,:) = spval
allocate(this%sucmin_col (begc:endc,nlevgrnd)) ; this%sucmin_col (:,:) = spval
allocate(this%sucpot_col_fates (begc:endc,nlevgrnd)) ; this%sucpot_col_fates (:,:) = spval
allocate(this%soilbeta_col (begc:endc)) ; this%soilbeta_col (:) = spval
allocate(this%soilalpha_col (begc:endc)) ; this%soilalpha_col (:) = spval
allocate(this%soilalpha_u_col (begc:endc)) ; this%soilalpha_u_col (:) = spval
Expand Down
28 changes: 28 additions & 0 deletions components/elm/src/data_types/ColumnDataType.F90
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ module ColumnDataType
real(r8), pointer :: ctrunc_vr (:,:) => null() ! (gC/m3) vertically-resolved column-level sink for C truncation
real(r8), pointer :: frootc (:) => null() ! (gC/m2) column-level C pool for fine root
real(r8), pointer :: seedc (:) => null() ! (gC/m2) column-level pool for seeding new Patches
real(r8), pointer :: seedc_fates (:) => null() ! (gC/m2) column-level seed carbon from FATES
real(r8), pointer :: prod1c (:) => null() ! (gC/m2) crop product C pool, 1-year lifespan
real(r8), pointer :: prod10c (:) => null() ! (gC/m2) wood product C pool, 10-year lifespan
real(r8), pointer :: prod100c (:) => null() ! (gC/m2) wood product C pool, 100-year lifespan
Expand All @@ -208,9 +209,11 @@ module ColumnDataType
real(r8), pointer :: totpftc (:) => null() ! (gC/m2) total patch-level carbon, including cpool averaged to column (p2c)
real(r8), pointer :: decomp_cpools_1m (:,:) => null() ! (gC/m2) Diagnostic: decomposing (litter, cwd, soil) c pools to 1 meter
real(r8), pointer :: decomp_cpools (:,:) => null() ! (gC/m2) decomposing (litter, cwd, soil) c pools
real(r8), pointer :: decompmicc_fates (:,:) => null() ! (gC/m3) microbial decomposer biomass per decomp level, FATES
real(r8), pointer :: cwdc (:) => null() ! (gC/m2) Diagnostic: coarse woody debris C
real(r8), pointer :: ctrunc (:) => null() ! (gC/m2) column-level sink for C truncation
real(r8), pointer :: totlitc (:) => null() ! (gC/m2) total litter carbon
real(r8), pointer :: totlitc_cwd_fates (:) => null() ! (gC/m2) total litter carbon + coarse woody debris, FATES
real(r8), pointer :: totsomc (:) => null() ! (gC/m2) total soil organic matter carbon
real(r8), pointer :: som1c (:) => null()
real(r8), pointer :: som2c (:) => null()
Expand Down Expand Up @@ -644,6 +647,8 @@ module ColumnDataType
real(r8), pointer :: nep (:) => null() ! (gC/m2/s) net ecosystem production, excludes fire, landuse, and harvest flux, positive for sink
real(r8), pointer :: nbp (:) => null() ! (gC/m2/s) net biome production, includes fire, landuse, and harvest flux, positive for sink
real(r8), pointer :: nee (:) => null() ! (gC/m2/s) net ecosystem exchange of carbon, includes fire, landuse, harvest, and hrv_xsmrpool flux, positive for source
real(r8), pointer :: grazing_loss_atm_fates (:) => null() ! (gC/m2/s) loss of carbon to atmosphere from grazing in FATES
real(r8), pointer :: fire_loss_atm_fates (:) => null() ! (gC/m2/s) loss of carbon to atmosphere from fire in FATES
real(r8), pointer :: cinputs (:) => null() ! column-level C inputs (gC/m2/s)
real(r8), pointer :: coutputs (:) => null() ! column-level C outputs (gC/m2/s)
! CLAMP summary (diagnostic) flux variables, not involved in mass balance
Expand All @@ -656,7 +661,9 @@ module ColumnDataType
real(r8), pointer :: rr (:) => null() ! column (gC/m2/s) root respiration (fine root MR + total root GR) (p2c)
real(r8), pointer :: rr_vr (:,:) => null() ! column (gC/m2/s) root respiration (fine root MR + total root GR) (p2c)
real(r8), pointer :: ar (:) => null() ! column (gC/m2/s) autotrophic respiration (MR + GR) (p2c)
real(r8), pointer :: ar_fates (:) => null() ! column (gC/m2/s) autotrophic respiration from FATES
real(r8), pointer :: gpp (:) => null() ! column (gC/m2/s) GPP flux before downregulation (p2c)
real(r8), pointer :: gpp_fates (:) => null() ! column (gC/m2/s) GPP flux from FATES
real(r8), pointer :: npp (:) => null() ! column (gC/m2/s) net primary production (p2c)
real(r8), pointer :: fire_closs_p2c (:) => null() ! column (gC/m2/s) patch2col averaged column-level fire C loss (p2c)
real(r8), pointer :: fire_closs (:) => null() ! column (gC/m2/s) total patch-level fire C loss
Expand Down Expand Up @@ -2153,6 +2160,7 @@ subroutine col_cs_init(this, begc, endc, carbon_type, ratio, c12_carbonstate_var
allocate(this%fuelc_crop (begc:endc)) ; this%fuelc_crop (:) = spval
allocate(this%frootc (begc:endc)) ; this%frootc (:) = spval
allocate(this%seedc (begc:endc)) ; this%seedc (:) = spval
allocate(this%seedc_fates (begc:endc)) ; this%seedc_fates (:) = spval
allocate(this%prod1c (begc:endc)) ; this%prod1c (:) = spval
allocate(this%prod10c (begc:endc)) ; this%prod10c (:) = spval
allocate(this%prod100c (begc:endc)) ; this%prod100c (:) = spval
Expand Down Expand Up @@ -2184,11 +2192,13 @@ subroutine col_cs_init(this, begc, endc, carbon_type, ratio, c12_carbonstate_var
allocate(this%decomp_cpools_vr (begc:endc,1:nlevdecomp_full,1:ndecomp_pools)) ; this%decomp_cpools_vr (:,:,:) = spval
allocate(this%ctrunc_vr (begc:endc,1:nlevdecomp_full)) ; this%ctrunc_vr (:,:) = spval
allocate(this%decomp_som2c_vr (begc:endc,1:nlevdecomp_full)) ; this%decomp_som2c_vr (:,:) = spval
allocate(this%decompmicc_fates (begc:endc,1:nlevdecomp_full)) ; this%decompmicc_fates (:,:) = spval
allocate(this%decomp_cpools_1m (begc:endc,1:ndecomp_pools)) ; this%decomp_cpools_1m (:,:) = spval
allocate(this%decomp_cpools (begc:endc,1:ndecomp_pools)) ; this%decomp_cpools (:,:) = spval
allocate(this%totlitc_1m (begc:endc)) ; this%totlitc_1m (:) = spval
allocate(this%totsomc_1m (begc:endc)) ; this%totsomc_1m (:) = spval
allocate(this%totlitc (begc:endc)) ; this%totlitc (:) = spval
allocate(this%totlitc_cwd_fates (begc:endc)) ; this%totlitc_cwd_fates (:) = spval
allocate(this%totsomc (begc:endc)) ; this%totsomc (:) = spval

!-----------------------------------------------------------------------
Expand Down Expand Up @@ -3305,6 +3315,9 @@ subroutine col_cs_zero_forfates_veg(this, bounds, num_soilc, filter_soilc)
this%totvegc(c) = 0._r8
this%totvegc_abg(c) = 0._r8
this%cropseedc_deficit(c) = 0._r8
this%totlitc_cwd_fates(c) = 0._r8
this%seedc_fates(c) = 0._r8
this%decompmicc_fates(c,:) = 0.0_r8
end do

return
Expand Down Expand Up @@ -6251,6 +6264,8 @@ subroutine col_cf_init(this, begc, endc, carbon_type)
allocate(this%nep (begc:endc)) ; this%nep (:) = spval
allocate(this%nbp (begc:endc)) ; this%nbp (:) = spval
allocate(this%nee (begc:endc)) ; this%nee (:) = spval
allocate(this%grazing_loss_atm_fates (begc:endc)) ; this%grazing_loss_atm_fates (:) = spval
allocate(this%fire_loss_atm_fates (begc:endc)) ; this%fire_loss_atm_fates (:) = spval
allocate(this%cinputs (begc:endc)) ; this%cinputs (:) = spval
allocate(this%coutputs (begc:endc)) ; this%coutputs (:) = spval
allocate(this%bgc_cpool_ext_inputs_vr (begc:endc, 1:nlevdecomp_full,ndecomp_pools)) ; this%bgc_cpool_ext_inputs_vr(:,:,:) = spval
Expand All @@ -6261,7 +6276,9 @@ subroutine col_cf_init(this, begc, endc, carbon_type)
allocate(this%rr (begc:endc)) ; this%rr (:) = spval
allocate(this%rr_vr(begc:endc,1:nlevdecomp_full)); this%rr_vr(:,:) = spval
allocate(this%ar (begc:endc)) ; this%ar (:) = spval
allocate(this%ar_fates (begc:endc)) ; this%ar_fates (:) = spval
allocate(this%gpp (begc:endc)) ; this%gpp (:) = spval
allocate(this%gpp_fates (begc:endc)) ; this%gpp_fates (:) = spval
allocate(this%npp (begc:endc)) ; this%npp (:) = spval
allocate(this%fire_closs_p2c (begc:endc)) ; this%fire_closs_p2c (:) = spval
allocate(this%fire_closs (begc:endc)) ; this%fire_closs (:) = spval
Expand Down Expand Up @@ -7981,6 +7998,13 @@ subroutine col_cf_setvalues ( this, num_column, filter_column, value_column)
this%vegfire(i) = value_column
this%wood_harvestc(i) = value_column
this%hrv_xsmrpool_to_atm(i) = value_column

! Zero fates column fluxes
this%gpp_fates(i) = value_column
this%ar_fates(i) = value_column
this%grazing_loss_atm_fates(i)= value_column
this%fire_loss_atm_fates(i) = value_column

end do

if(use_crop) then
Expand Down Expand Up @@ -8034,13 +8058,17 @@ subroutine col_cf_zero_forfates_veg(this, bounds, num_soilc, filter_soilc)
do fc = 1,num_soilc
c = filter_soilc(fc)
this%gpp(c) = 0._r8
this%gpp_fates(c) = 0._r8
this%ar(c) = 0._r8
this%ar_fates(c) = 0._r8
this%npp(c) = 0._r8
this%vegfire(c) = 0._r8
this%wood_harvestc(c) = 0._r8
this%fire_closs_p2c(c) = 0._r8
!this%litfall(c) = 0._r8 (overwritten)
this%hrv_xsmrpool_to_atm(c) = 0._r8
this%grazing_loss_atm_fates(c) = 0._r8
this%fire_loss_atm_fates(c) = 0._r8

end do

Expand Down
2 changes: 1 addition & 1 deletion components/elm/src/external_models/fates
Submodule fates updated from 5869e0 to ca12ac
Loading