From befe7ddbd5593365feeaf851262dba67015a502c Mon Sep 17 00:00:00 2001 From: Ryan Knox Date: Mon, 5 Jun 2023 21:20:32 -0400 Subject: [PATCH] Adding the fates_rad_model to the parameter file --- main/EDParamsMod.F90 | 11 +++++++++++ main/EDPftvarcon.F90 | 12 +++++++++++- parameter_files/archive/api25.4.0_041023_pr958.xml | 9 ++++++++- parameter_files/fates_params_default.cdl | 14 +++++++++----- tools/UpdateParamAPI.py | 2 +- 5 files changed, 40 insertions(+), 8 deletions(-) diff --git a/main/EDParamsMod.F90 b/main/EDParamsMod.F90 index 3db869715c..3ee56df5f2 100644 --- a/main/EDParamsMod.F90 +++ b/main/EDParamsMod.F90 @@ -36,6 +36,8 @@ module EDParamsMod integer,protected, public :: photo_tempsens_model ! switch for choosing the model that defines the temperature ! sensitivity of photosynthetic parameters (vcmax, jmax). ! 1=non-acclimating, 2=Kumarathunge et al., 2019 + + integer,protected, public :: radiation_model ! Switch betrween Norman (1) and Two-stream (2) radiation models real(r8),protected, public :: fates_mortality_disturbance_fraction ! the fraction of canopy mortality that results in disturbance real(r8),protected, public :: ED_val_comp_excln ! weighting factor for canopy layer exclusion and promotion @@ -94,6 +96,7 @@ module EDParamsMod character(len=param_string_length),parameter,public :: ED_name_photo_temp_acclim_thome_time = "fates_leaf_photo_temp_acclim_thome_time" character(len=param_string_length),parameter,public :: name_photo_tempsens_model = "fates_leaf_photo_tempsens_model" character(len=param_string_length),parameter,public :: name_maintresp_model = "fates_maintresp_leaf_model" + character(len=param_string_length),parameter,public :: name_radiation_model = "fates_rad_model" character(len=param_string_length),parameter,public :: ED_name_hydr_htftype_node = "fates_hydro_htftype_node" character(len=param_string_length),parameter,public :: ED_name_mort_disturb_frac = "fates_mort_disturb_frac" character(len=param_string_length),parameter,public :: ED_name_comp_excln = "fates_comp_excln" @@ -263,6 +266,7 @@ subroutine FatesParamsInit() photo_temp_acclim_thome_time = nan photo_tempsens_model = -9 maintresp_leaf_model = -9 + radiation_model = -9 fates_mortality_disturbance_fraction = nan ED_val_comp_excln = nan ED_val_vai_top_bin_width = nan @@ -349,6 +353,9 @@ subroutine FatesRegisterParams(fates_params) call fates_params%RegisterParameter(name=name_photo_tempsens_model,dimension_shape=dimension_shape_scalar, & dimension_names=dim_names_scalar) + call fates_params%RegisterParameter(name=name_radiation_model,dimension_shape=dimension_shape_scalar, & + dimension_names=dim_names_scalar) + call fates_params%RegisterParameter(name=name_maintresp_model,dimension_shape=dimension_shape_scalar, & dimension_names=dim_names_scalar) @@ -550,6 +557,10 @@ subroutine FatesReceiveParams(fates_params) data=tmpreal) photo_tempsens_model = nint(tmpreal) + call fates_params%RetrieveParameter(name=name_radiation_model, & + data=tmpreal) + radiation_model = nint(tmpreal) + call fates_params%RetrieveParameter(name=name_maintresp_model, & data=tmpreal) maintresp_leaf_model = nint(tmpreal) diff --git a/main/EDPftvarcon.F90 b/main/EDPftvarcon.F90 index caf061d9c8..aff0303b9b 100644 --- a/main/EDPftvarcon.F90 +++ b/main/EDPftvarcon.F90 @@ -25,7 +25,7 @@ module EDPftvarcon use FatesConstantsMod , only : prescribed_n_uptake use FatesConstantsMod , only : coupled_p_uptake use FatesConstantsMod , only : coupled_n_uptake - + ! CIME Globals use shr_log_mod , only : errMsg => shr_log_errMsg @@ -1533,6 +1533,7 @@ subroutine FatesCheckParams(is_master) use FatesConstantsMod , only : itrue, ifalse use EDParamsMod , only : logging_mechanical_frac, logging_collateral_frac use EDParamsMod , only : logging_direct_frac,logging_export_frac + use EDParamsMod , only : radiation_model use FatesInterfaceTypesMod, only : hlm_use_fixed_biogeog,hlm_use_sp, hlm_name use FatesInterfaceTypesMod, only : hlm_use_inventory_init @@ -1555,6 +1556,15 @@ subroutine FatesCheckParams(is_master) if(.not.is_master) return + if(radiation_model.ne.1) then + write(fates_log(),*) 'The only available canopoy radiation model' + write(fates_log(),*) 'is the Norman scheme: fates_rad_model = 1' + write(fates_log(),*) 'The two-stream scheme is not available yet' + write(fates_log(),*) 'You specified fates_rad_model = ',radiation_model + write(fates_log(),*) 'Aborting' + call endrun(msg=errMsg(sourcefile, __LINE__)) + end if + select case (hlm_parteh_mode) case (prt_cnp_flex_allom_hyp) diff --git a/parameter_files/archive/api25.4.0_041023_pr958.xml b/parameter_files/archive/api25.4.0_041023_pr958.xml index 311a6a00b8..2aa90e35ff 100644 --- a/parameter_files/archive/api25.4.0_041023_pr958.xml +++ b/parameter_files/archive/api25.4.0_041023_pr958.xml @@ -6,7 +6,7 @@ - + @@ -59,5 +59,12 @@ fates_phen_drought_model + + fates_rad_model + scalar + unitless + switch designating the model for canopy radiation, 1 = Norman, 2 = Two-stream (experimental) + 1 + diff --git a/parameter_files/fates_params_default.cdl b/parameter_files/fates_params_default.cdl index 25b36a57f1..bed78d180c 100644 --- a/parameter_files/fates_params_default.cdl +++ b/parameter_files/fates_params_default.cdl @@ -1,4 +1,4 @@ -netcdf fates_params_default { +netcdf tmp { dimensions: fates_NCWD = 4 ; fates_history_age_bins = 7 ; @@ -365,7 +365,7 @@ variables: double fates_leaf_stomatal_slope_medlyn(fates_pft) ; fates_leaf_stomatal_slope_medlyn:units = "KPa**0.5" ; fates_leaf_stomatal_slope_medlyn:long_name = "stomatal slope parameter, as per Medlyn" ; - double fates_leaf_vcmax25top(fates_leafage_class, fates_pft) ; + double fates_leaf_vcmax25top(fates_pft) ; fates_leaf_vcmax25top:units = "umol CO2/m^2/s" ; fates_leaf_vcmax25top:long_name = "maximum carboxylation rate of Rub. at 25C, canopy top" ; double fates_leaf_vcmaxha(fates_pft) ; @@ -785,6 +785,9 @@ variables: double fates_q10_mr ; fates_q10_mr:units = "unitless" ; fates_q10_mr:long_name = "Q10 for maintenance respiration" ; + double fates_rad_model ; + fates_rad_model:units = "unitless" ; + fates_rad_model:long_name = "switch designating the model for canopy radiation, 1 = Norman, 2 = Two-stream (experimental)" ; 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" ; @@ -854,7 +857,7 @@ data: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; - fates_alloc_storage_cushion = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + fates_alloc_storage_cushion = 1.2, 1.2, 1.2, 1.2, 2.4, 1.2, 1.2, 2.4, 1.2, 1.2, 1.2, 1.2 ; fates_alloc_store_priority_frac = 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, @@ -1193,8 +1196,7 @@ data: fates_leaf_stomatal_slope_medlyn = 4.1, 2.3, 2.3, 4.1, 4.4, 4.4, 4.7, 4.7, 4.7, 2.2, 5.3, 1.6 ; - fates_leaf_vcmax25top = - 50, 62, 39, 61, 41, 58, 62, 54, 54, 78, 78, 78 ; + fates_leaf_vcmax25top = 50, 62, 39, 61, 58, 58, 62, 54, 54, 78, 78, 78 ; fates_leaf_vcmaxha = 65330, 65330, 65330, 65330, 65330, 65330, 65330, 65330, 65330, 65330, 65330, 65330 ; @@ -1551,6 +1553,8 @@ data: fates_q10_mr = 1.5 ; + fates_rad_model = 1 ; + fates_soil_salinity = 0.4 ; fates_vai_top_bin_width = 1 ; diff --git a/tools/UpdateParamAPI.py b/tools/UpdateParamAPI.py index 129bfeed45..f23ef5d24c 100755 --- a/tools/UpdateParamAPI.py +++ b/tools/UpdateParamAPI.py @@ -346,7 +346,7 @@ def main(): sel_values = selectvalues(ncfile,list(dimnames),ipft_list,values,dcode) - [ncfile,ncvar] = reatevar(ncfile,paramname,dimnames,units,longname,dcode,sel_values) + [ncfile,ncvar] = createvar(ncfile,paramname,dimnames,units,longname,dcode,sel_values) ncfile.flush() ncfile.close()