Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
bb6098e
First conversion of cdl to xml, initial xml file and python script
rgknox Feb 27, 2025
8383f78
fates xml: playing with xml header
rgknox Mar 3, 2025
9319858
json parsing, first commit
rgknox Oct 17, 2025
bb2037f
added starter json file
rgknox Oct 17, 2025
828141e
Added more json parsing
rgknox Oct 18, 2025
546a385
added json write capability to cdltoxml
rgknox Oct 18, 2025
27d2019
Merge branch 'fates-xml-params' into json-params
rgknox Oct 18, 2025
69b07ca
Added xml and json versions of the api 41 parameter file
rgknox Oct 18, 2025
c294dd9
incremental progress on json parameter reader
rgknox Oct 19, 2025
ecbf23c
Updates to json parsing
rgknox Oct 19, 2025
b9b16e1
more json parsing stuff
rgknox Oct 20, 2025
aa7aadb
first working parsing json prototype
rgknox Oct 20, 2025
cc25ef1
tweaks to the json parser
rgknox Oct 21, 2025
bd90243
reverting formatting
rgknox Oct 21, 2025
bb1faab
tweaks to text based parameter management
rgknox Oct 21, 2025
651a430
adding python json manipulation tools
rgknox Oct 22, 2025
c735b5e
Added updated modify and index swap utility code for text (json) para…
rgknox Oct 22, 2025
f10a544
updates to parameter modification scripts
rgknox Oct 22, 2025
63492b3
mocking up ability to modify parameters python based on pft name
rgknox Oct 22, 2025
243e023
Adding a check for rogue curly brackets in the json parser.
rgknox Oct 23, 2025
324bbf1
Added a datatypes file, this will be used to generate a datatype in t…
rgknox Oct 23, 2025
6f6e1f3
json updates: added data type, fixed some long strings when convertin…
rgknox Oct 24, 2025
8544467
adding cross reference on datatypes defined and interpreted in the fo…
rgknox Oct 24, 2025
2999b88
json parsing, changed organization so that dimension names and data t…
rgknox Oct 25, 2025
6e57f79
Updated JSON script and tester to use output units and share aborts
rgknox Oct 27, 2025
8c8a8dd
first pass through refactoring text parameter reads
rgknox Oct 27, 2025
3b196d5
Added code to transfer from json structure to primitives
rgknox Oct 28, 2025
05b4fd1
updates to transfering json parameters
rgknox Oct 28, 2025
81e26a5
cleanup of edparams new format
rgknox Oct 28, 2025
4b254c8
converting transfers of parameters to json
rgknox Oct 29, 2025
717e3d7
partial conversion of pftvarcon to json
rgknox Oct 29, 2025
d988a60
Added an accessed attribute to help track completeness of transferrin…
rgknox Oct 29, 2025
d90a830
More transfering of json data to primitives, edpftvarcon
rgknox Oct 29, 2025
6ba3a85
converting more to json format
rgknox Oct 29, 2025
677088f
more json conversion work
rgknox Oct 29, 2025
83550c4
didnt have the test wrapper
rgknox Oct 30, 2025
f79f5c0
fixes to zero indices in json parser
rgknox Oct 30, 2025
afc2884
updated json reads
rgknox Oct 30, 2025
587bb58
Merge branch 'json-params' of github.com:rgknox/fates into json-params
rgknox Oct 30, 2025
0c8b6c0
more elaborate error message
rgknox Oct 30, 2025
99a1c2e
testing name search
rgknox Oct 30, 2025
1962c33
Merge branch 'json-params' of github.com:rgknox/fates into json-params
rgknox Oct 30, 2025
39f738a
subtle updates to json parsing and left adjusting and cleaning strings
rgknox Oct 30, 2025
03efa26
Merge branch 'json-params' of github.com:rgknox/fates into json-params
rgknox Oct 30, 2025
6f2b800
updating some parameter types
rgknox Oct 30, 2025
c3070db
Merge branch 'json-params' of github.com:rgknox/fates into json-params
rgknox Oct 30, 2025
8ea57c4
fixed param type
rgknox Oct 30, 2025
2925224
Merge branch 'json-params' of github.com:rgknox/fates into json-params
rgknox Oct 30, 2025
f5f0dc2
fixed fates_woody
rgknox Oct 30, 2025
642dac5
adding transpose function for json transfer
rgknox Oct 31, 2025
af9b21a
various json debugging
rgknox Oct 31, 2025
f054df8
hlmpft map to float
rgknox Oct 31, 2025
2ea97e1
fixed some datatypes on the json param file
rgknox Oct 31, 2025
caf0263
removed the xml file
rgknox Oct 31, 2025
e76563f
added pft name for modify script
rgknox Nov 4, 2025
294ada7
removed old modify script
rgknox Nov 4, 2025
bbffec4
changed modify params file name
rgknox Nov 4, 2025
a3abe5e
Updates to json parameter update script
rgknox Nov 4, 2025
8f88036
updated json python writing utility
rgknox Nov 4, 2025
fa93ed1
modified f90 parser to use unquoted tags
rgknox Nov 5, 2025
3d27b71
removed quotes from json tags, changed group holding the parameters f…
rgknox Nov 5, 2025
ef81c96
Reverted json convention to use the standard, where all strings are s…
rgknox Nov 5, 2025
d94154c
changed parser code to work with quotes again
rgknox Nov 6, 2025
cd79902
Changed pft index swapping utility file name to be the same as the ol…
rgknox Nov 11, 2025
4bb4a92
Converted and renamed parameter file sorter, now sort_parameters.py
rgknox Nov 11, 2025
5feca04
Changed parameter file tool names to be more consistent using lower-c…
rgknox Nov 11, 2025
9326e2f
batch patch updates to json parameters
rgknox Nov 17, 2025
53e56dc
removed numpy from json tooling
rgknox Nov 20, 2025
ba20640
updated modify json script to accommodate an all indices argument
rgknox Nov 25, 2025
c3f5e25
Merge branch 'json-params' of github.com:rgknox/fates into json-params
rgknox Nov 25, 2025
83544d4
Merge tag 'sci.1.88.3_api.42.0.0' into json-params
rgknox Nov 25, 2025
ac2533a
added pathing to write_json
rgknox Nov 25, 2025
aa11b9e
fixed typo on gdd phen parameter transfer
rgknox Nov 25, 2025
26cd20d
updated json parser to better handle end-of-lines to accommodate nvhp…
rgknox Nov 26, 2025
28c2bdf
cleanup of the json parser
rgknox Nov 29, 2025
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
4 changes: 2 additions & 2 deletions biogeochem/EDMortalityFunctionsMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ module EDMortalityFunctionsMod
use FatesInterfaceTypesMod , only : hlm_use_planthydro
use FatesInterfaceTypesMod , only : hlm_use_tree_damage
use EDLoggingMortalityMod , only : LoggingMortality_frac
use EDParamsMod , only : fates_mortality_disturbance_fraction
use EDParamsMod , only : mortality_disturbance_fraction
use FatesConstantsMod , only : n_landuse_cats
use PRTGenericMod, only : carbon12_element
use PRTGenericMod, only : store_organ
Expand Down Expand Up @@ -360,7 +360,7 @@ subroutine Mortality_Derivative( currentSite, currentCohort, bc_in, btran_ft, &

currentCohort%dndt= -(cmort+hmort+bmort+frmort+smort+asmort+dgmort) * currentCohort%n
if ( .not. ExemptTreefallDist(currentCohort)) then
currentCohort%dndt = (1.0_r8-fates_mortality_disturbance_fraction) * currentCohort%dndt
currentCohort%dndt = (1.0_r8-mortality_disturbance_fraction) * currentCohort%dndt
endif

endif
Expand Down
8 changes: 4 additions & 4 deletions biogeochem/EDPatchDynamicsMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ module EDPatchDynamicsMod
use EDLoggingMortalityMod, only : get_harvestable_carbon
use EDLoggingMortalityMod, only : get_harvest_debt
use FatesLandUseChangeMod, only : GetInitLanduseHarvestRate
use EDParamsMod , only : fates_mortality_disturbance_fraction
use EDParamsMod , only : mortality_disturbance_fraction
use FatesAllometryMod , only : carea_allom
use FatesAllometryMod , only : set_root_fraction
use FatesConstantsMod , only : g_per_kg
Expand Down Expand Up @@ -360,7 +360,7 @@ subroutine disturbance_rates( site_in, bc_in)
! Treefall Disturbance Rate. Only count this for trees, not grasses
if ( .not. ExemptTreefallDist(currentCohort) ) then
currentPatch%disturbance_rates(dtype_ifall) = currentPatch%disturbance_rates(dtype_ifall) + &
fates_mortality_disturbance_fraction * &
mortality_disturbance_fraction * &
min(1.0_r8,currentCohort%dmort)*hlm_freq_day*currentCohort%c_area/currentPatch%area
end if

Expand Down Expand Up @@ -842,7 +842,7 @@ subroutine spawn_patches( currentSite, bc_in )
! because this is the part of the original patch where no trees have actually fallen
! The diagnostic cmort,bmort,hmort, and frmort rates have already been saved

currentCohort%n = currentCohort%n * (1.0_r8 - fates_mortality_disturbance_fraction * &
currentCohort%n = currentCohort%n * (1.0_r8 - mortality_disturbance_fraction * &
min(1.0_r8,currentCohort%dmort * hlm_freq_day))

nc%n = 0.0_r8 ! kill all of the trees who caused the disturbance.
Expand Down Expand Up @@ -2490,7 +2490,7 @@ subroutine mortality_litter_fluxes(currentSite, currentPatch, &
! generating mortality rate.

num_dead = currentCohort%n * min(1.0_r8,currentCohort%dmort * &
hlm_freq_day * fates_mortality_disturbance_fraction)
hlm_freq_day * mortality_disturbance_fraction)

elseif(prt_params%woody(pft) == itrue) then

Expand Down
1 change: 0 additions & 1 deletion biogeochem/EDPhysiologyMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ module EDPhysiologyMod
use shr_log_mod , only : errMsg => shr_log_errMsg
use FatesGlobals , only : fates_log
use FatesGlobals , only : endrun => fates_endrun
use EDParamsMod , only : fates_mortality_disturbance_fraction
use EDParamsMod , only : q10_mr
use EDParamsMod , only : q10_froz
use EDParamsMod , only : logging_export_frac
Expand Down
263 changes: 77 additions & 186 deletions biogeophys/FatesLeafBiophysParamsMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -2,218 +2,109 @@ module FatesLeafBiophysParamsMod

use FatesConstantsMod , only: r8 => fates_r8
use FatesConstantsMod , only: fates_check_param_set
use FatesParametersInterface, only : param_string_length
use FatesGlobals, only : fates_log
use FatesGlobals, only : endrun => fates_endrun
use shr_log_mod , only : errMsg => shr_log_errMsg
use LeafBiophysicsMod, only : lb_params,btran_on_gs_gs1,btran_on_ag_none
use FatesParametersInterface, only : fates_parameters_type
! Register the parameters we want the host to provide, and
! indicate whether they are fates parameters or host parameters
! that need to be synced with host values.
use FatesParametersInterface, only : fates_parameters_type, param_string_length
use FatesParametersInterface, only : dimension_name_pft, dimension_shape_1d
use FatesParametersInterface, only : dimension_shape_scalar, dimension_name_scalar
use FatesUtilsMod, only : ArrayNint
use JSONParameterUtilsMod,only : params_type,param_type

implicit none
private ! Modules are private by default
save

public :: LeafBiophysRegisterParams
public :: LeafBiophysReceiveParams

public :: TransferParamsLeafBiophys
public :: LeafBiophysReportParams

character(len=*), parameter :: sourcefile = &
__FILE__

integer, parameter :: lower_bound_pft = 1

contains

! =====================================================================================

subroutine LeafBiophysRegisterParams(fates_params)


class(fates_parameters_type), intent(inout) :: fates_params
subroutine TransferParamsLeafBiophys(pstruct)

character(len=param_string_length), parameter :: dim_names(1) = (/dimension_name_pft/)
integer, parameter :: dim_lower_bound(1) = (/ lower_bound_pft /)
character(len=param_string_length) :: name
character(len=param_string_length), parameter :: dim_names_scalar(1) = (/dimension_name_scalar/)


! Register PFT dimensioned
type(params_type) :: pstruct ! Data structure containing all parameters and dimensions
type(param_type),pointer :: param_p ! Pointer to one specific parameter
integer :: numpft

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

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

name = 'fates_leaf_agross_btran_model'
call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, &
dimension_names=dim_names, lower_bounds=dim_lower_bound)
numpft = pstruct%GetDimSizeFromName('fates_pft')

name = 'fates_leaf_stomatal_slope_ballberry'
call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, &
dimension_names=dim_names, lower_bounds=dim_lower_bound)
param_p => pstruct%GetParamFromName('fates_leaf_c3psn')
allocate(lb_params%c3psn(numpft))
lb_params%c3psn(:) = param_p%i_data_1d(:)

name = 'fates_leaf_stomatal_slope_medlyn'
call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, &
dimension_names=dim_names, lower_bounds=dim_lower_bound)
param_p => pstruct%GetParamFromName('fates_leaf_stomatal_btran_model')
allocate(lb_params%stomatal_btran_model(numpft))
lb_params%stomatal_btran_model(:) = param_p%i_data_1d(:)

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

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

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

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

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

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

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

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

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

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

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

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

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

param_p => pstruct%GetParamFromName('fates_leaf_agross_btran_model')
allocate(lb_params%agross_btran_model(numpft))
lb_params%agross_btran_model(:) = param_p%i_data_1d(:)

return
end subroutine LeafBiophysRegisterParams

! =====================================================================================

subroutine LeafBiophysReceiveParams(fates_params)

class(fates_parameters_type), intent(inout) :: fates_params
real(r8), allocatable :: tmpreal(:) ! Temporary variable to hold floats
real(r8) :: tmpscalar
character(len=param_string_length) :: name

name = 'fates_leaf_c3psn'
call fates_params%RetrieveParameterAllocate(name=name, &
data=tmpreal)
allocate(lb_params%c3psn(size(tmpreal,dim=1)))
call ArrayNint(tmpreal,lb_params%c3psn)
deallocate(tmpreal)

name = 'fates_leaf_stomatal_btran_model'
call fates_params%RetrieveParameterAllocate(name=name, &
data=tmpreal)
allocate(lb_params%stomatal_btran_model(size(tmpreal,dim=1)))
call ArrayNint(tmpreal,lb_params%stomatal_btran_model)
deallocate(tmpreal)

name = 'fates_leaf_agross_btran_model'
call fates_params%RetrieveParameterAllocate(name=name, &
data=tmpreal)
allocate(lb_params%agross_btran_model(size(tmpreal,dim=1)))
call ArrayNint(tmpreal,lb_params%agross_btran_model)
deallocate(tmpreal)
param_p => pstruct%GetParamFromName('fates_leaf_stomatal_slope_medlyn')
allocate(lb_params%medlyn_slope(numpft))
lb_params%medlyn_slope(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_leaf_stomatal_slope_ballberry')
allocate(lb_params%bb_slope(numpft))
lb_params%bb_slope(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_leaf_stomatal_intercept')
allocate(lb_params%stomatal_intercept(numpft))
lb_params%stomatal_intercept(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_maintresp_leaf_ryan1991_baserate')
allocate(lb_params%maintresp_leaf_ryan1991_baserate(numpft))
lb_params%maintresp_leaf_ryan1991_baserate(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_maintresp_leaf_atkin2017_baserate')
allocate(lb_params%maintresp_leaf_atkin2017_baserate(numpft))
lb_params%maintresp_leaf_atkin2017_baserate(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_maintresp_reduction_curvature')
allocate(lb_params%maintresp_reduction_curvature(numpft))
lb_params%maintresp_reduction_curvature(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_maintresp_reduction_intercept')
allocate(lb_params%maintresp_reduction_intercept(numpft))
lb_params%maintresp_reduction_intercept(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_maintresp_reduction_upthresh')
allocate(lb_params%maintresp_reduction_upthresh(numpft))
lb_params%maintresp_reduction_upthresh(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_leaf_vcmaxha')
allocate(lb_params%vcmaxha(numpft))
lb_params%vcmaxha(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_leaf_jmaxha')
allocate(lb_params%jmaxha(numpft))
lb_params%jmaxha(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_leaf_vcmaxhd')
allocate(lb_params%vcmaxhd(numpft))
lb_params%vcmaxhd(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_leaf_jmaxhd')
allocate(lb_params%jmaxhd(numpft))
lb_params%jmaxhd(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_leaf_vcmaxse')
allocate(lb_params%vcmaxse(numpft))
lb_params%vcmaxse(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_leaf_jmaxse')
allocate(lb_params%jmaxse(numpft))
lb_params%jmaxse(:) = param_p%r_data_1d(:)

param_p => pstruct%GetParamFromName('fates_leaf_fnps')
allocate(lb_params%fnps(numpft))
lb_params%fnps(:) = param_p%r_data_1d(:)

name = 'fates_leaf_stomatal_slope_medlyn'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%medlyn_slope)

name = 'fates_leaf_stomatal_slope_ballberry'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%bb_slope)

name = 'fates_leaf_stomatal_intercept'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%stomatal_intercept)

name = 'fates_maintresp_leaf_ryan1991_baserate'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%maintresp_leaf_ryan1991_baserate)

name = 'fates_maintresp_leaf_atkin2017_baserate'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%maintresp_leaf_atkin2017_baserate)

name = 'fates_maintresp_reduction_curvature'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%maintresp_reduction_curvature)

name = 'fates_maintresp_reduction_intercept'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%maintresp_reduction_intercept)

name = 'fates_maintresp_reduction_upthresh'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%maintresp_reduction_upthresh)

name = 'fates_leaf_vcmaxha'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%vcmaxha)

name = 'fates_leaf_jmaxha'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%jmaxha)

name = 'fates_leaf_vcmaxhd'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%vcmaxhd)

name = 'fates_leaf_jmaxhd'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%jmaxhd)

name = 'fates_leaf_vcmaxse'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%vcmaxse)

name = 'fates_leaf_jmaxse'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%jmaxse)

name = 'fates_leaf_fnps'
call fates_params%RetrieveParameterAllocate(name=name, &
data=lb_params%fnps)

return
end subroutine LeafBiophysReceiveParams
end subroutine TransferParamsLeafBiophys

! ====================================================================================

Expand Down
Loading