diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm index bb7d767391..b4eefd984c 100755 --- a/bld/CLMBuildNamelist.pm +++ b/bld/CLMBuildNamelist.pm @@ -2038,7 +2038,7 @@ sub setup_logic_snicar_methods { add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'do_sno_oc' ); # Error checking in loop - my %supportedSettings = ( 'snicar_solarspec' => "'mid_latitude_winter'", 'snicar_dust_optics' => "'sahara'", 'snicar_numrad_snw' => '5', 'snicar_snobc_intmix' => '.false.', 'snicar_snodst_intmix' => '.false.', 'snicar_use_aerosol' => '.true.', 'do_sno_oc' => '.false.' ); + my %supportedSettings = ( 'snicar_solarspec' => "'mid_latitude_winter'", 'snicar_dust_optics' => "'sahara'", 'snicar_numrad_snw' => '5', 'snicar_snodst_intmix' => '.false.', 'snicar_use_aerosol' => '.true.', 'do_sno_oc' => '.false.' ); keys %supportedSettings; while ( my ($key, $val) = each %supportedSettings ) { my $var = $nl->get_value($key); @@ -2056,13 +2056,13 @@ sub setup_logic_snicar_methods { $log->warning("$key1=$val1a and $val1b are supported; $var1 is EXPERIMENTAL, UNSUPPORTED, and UNTESTED!"); } - # snicar_snobc_intmix and snicar_snodst_intmix cannot both be true + # snicar_snobc_intmix and snicar_snodst_intmix cannot both be true, however, they can both be false my $key1 = 'snicar_snobc_intmix'; my $key2 = 'snicar_snodst_intmix'; my $var1 = $nl->get_value($key1); my $var2 = $nl->get_value($key2); - my $val1 = $supportedSettings{$key1}; # supported value for this option - if (($var1 eq $var2) && ($var1 ne $val1)) { + my $val2 = $supportedSettings{$key2}; # supported value for this option + if (($var1 eq $var2) && ($var2 ne $val2)) { $log->warning("$key1 = $var1 and $key2 = $var2 do not work together!"); } } diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index 8c8af76223..5c86d230fd 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -441,7 +441,9 @@ attributes from the config_cache.xml file (with keys converted to upper-case). 1.e9 SwensonLawrence2012 + Jordan1991 +Sturm1997 -lnd/clm2/paramdata/ctsm51_params.c240207b.nc -lnd/clm2/paramdata/clm50_params.c240207b.nc -lnd/clm2/paramdata/clm45_params.c240207b.nc +lnd/clm2/paramdata/ctsm51_params.c240208.nc +lnd/clm2/paramdata/clm50_params.c240208.nc +lnd/clm2/paramdata/clm45_params.c240208.nc @@ -1637,7 +1639,8 @@ use_crop=".true.">lnd/clm2/surfdata_map/ctsm5.1.dev052/landuse.timeseries_mpasa1 mid_latitude_winter sahara .false. -.false. +.false. +.true. .true. .false. diff --git a/cime_config/testdefs/testmods_dirs/clm/ciso_cwd_hr/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/ciso_cwd_hr/user_nl_clm index c235d72df1..3c686f08b9 100644 --- a/cime_config/testdefs/testmods_dirs/clm/ciso_cwd_hr/user_nl_clm +++ b/cime_config/testdefs/testmods_dirs/clm/ciso_cwd_hr/user_nl_clm @@ -1,2 +1,2 @@ -paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/ctsm51_ciso_cwd_hr_params.c240207b.nc' +paramfile = '$DIN_LOC_ROOT/lnd/clm2/paramdata/ctsm51_ciso_cwd_hr_params.c240208.nc' hist_fincl1 = 'CWDC_HR','C13_CWDC_HR','C14_CWDC_HR','CWD_HR_L2','CWD_HR_L2_vr','CWD_HR_L3','CWD_HR_L3_vr' diff --git a/doc/ChangeLog b/doc/ChangeLog index 2615593353..fbaa87f2dd 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,4 +1,100 @@ =============================================================== +Tag name: ctsm5.1.dev174 +Originator(s): olyson (Keith Oleson,UCAR/TSS) +Date: Thu 14 Mar 2024 04:56:37 PM MDT +One-line Summary: Improve vegetation health at high latitudes + +Purpose and description of changes +---------------------------------- + +The corresponding changes: + +Remove snicar_snobc_intmix from EXPERIMENTAL endrun (allow it to be true) +Remove flg_snoage_scl in SNICAR such that xdrdt can have an effect (fixes #2298 ) +New parameter file and namelist values for clm5_1: + +- snow_thermal_cond_method = Sturm1997 (default for clm5_1) +- snicar_snobc_intmix = .true. (default for clm5_1) +- ctsm51_params.c240208.nc is the new CTSM parameter file (changes: froot_leaf(11:12)=1.2, FUN_fracfixers(11:12)=1, xdrdt=5, scvng_fct_mlt_sf=0.5, snw_rds_refrz=1500, fresh_snw_rds_max=400) +- New history fields for coupler history verification (default off) +- Add snow5d_thresh_for_onset to parameter file, set to 0.2 for clm51 and 0.1 (unchanged) for clm50 and clm45. + + +Significant changes to scientifically-supported configurations +-------------------------------------------------------------- + +Does this tag change answers significantly for any of the following physics configurations? +(Details of any changes will be given in the "Answer changes" section below.) + + [Put an [X] in the box for any configuration with significant answer changes.] + +[X] clm5_1 + +[ ] clm5_0 + +[ ] ctsm5_0-nwp + +[ ] clm4_5 + + +Bugs fixed +---------- +CTSM issues fixed (include CTSM Issue #): +Fixes #2298 +Fixes LMWG_dev discussion #3 + +New bug discovered or introduced: +Relevant post appears in #2348 on 2024/3/14 + +Notes of particular relevance for users +--------------------------------------- +Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables): + New namelist defaults including new parameter files: + ctsm51_params.c240208.nc + clm50_params.c240208.nc + clm45_params.c240208.nc + ctsm51_ciso_cwd_hr_params.c240208.nc + + +Testing summary: +---------------- + + [PASS means all tests PASS; OK means tests PASS other than expected fails.] + + regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing): + + derecho ----- OK + izumi ------- OK + + any other testing (give details below): + Keith Oleson replicated simulation in LMWG_dev issue #51 as bfb when + snow5d_thresh_for_onset on ctsm51_ciso_cwd_hr_params.c240208.nc was set + to original value of 0.1. + +Answer changes +-------------- + +Changes answers relative to baseline: YES + + Summarize any changes to answers, i.e., + - what code configurations: clm51 + - what platforms/compilers: all + - nature of change: new climate at high latitudes + + See LMWG_dev discussion #3 and simulations discussed therein, + including (though possibly not limited to) LMWG_dev issues #51, 52, 54, 57. + + slevis will add this tag with the label "SIGNIFICANT" to the + Answer-changing-tags wiki: + https://github.com/ESCOMP/CTSM/wiki/Answer-changing-tags + +Other details +------------- +Pull Requests that document the changes (include PR ids): + https://github.com/ESCOMP/ctsm/pull/2348 + +=============================================================== +=============================================================== Tag name: ctsm5.1.dev173 Originator(s): rgknox (Ryan Knox,LAWRENCE BERKELEY NATIONAL LABORATORY) Date: Wed 13 Mar 2024 04:46:37 PM MDT diff --git a/doc/ChangeSum b/doc/ChangeSum index 61cf0530ca..49afdeb03f 100644 --- a/doc/ChangeSum +++ b/doc/ChangeSum @@ -1,8 +1,9 @@ Tag Who Date Summary ============================================================================================================================ + ctsm5.1.dev174 olyson 03/14/2024 Improve vegetation health at high latitudes ctsm5.1.dev173 rgknox 03/13/2024 New FATES namelist variable: fates_history_dimlevel ctsm5.1.dev172 erik 03/12/2024 Merge b4b-dev - ctsm5.1.dev171 slevis 03/01/2024 Set initial t_soisno=272 for soils and 274K for urban road + ctsm5.1.dev171 olyson 03/01/2024 Set initial t_soisno=272 for soils and 274K for urban road ctsm5.1.dev170 samrabin 02/28/2024 Add hillslope hydrology ctsm5.1.dev169 samrabin 02/22/2024 Merge b4b-dev ctsm5.1.dev168 slevis 02/16/2024 Remove a source of negative snocan in CanopyFluxesMod diff --git a/src/biogeochem/CNPhenologyMod.F90 b/src/biogeochem/CNPhenologyMod.F90 index 05041527a7..fffb19bc46 100644 --- a/src/biogeochem/CNPhenologyMod.F90 +++ b/src/biogeochem/CNPhenologyMod.F90 @@ -97,6 +97,7 @@ module CNPhenologyMod real(r8) :: soilpsi_off ! critical soil water potential for leaf offset real(r8) :: lwtop ! live wood turnover proportion (annual fraction) real(r8) :: phenology_soil_depth ! soil depth used for measuring states for phenology triggers + real(r8) :: snow5d_thresh_for_onset ! 5-day snow depth threshold for leaf onset end type params_type type(params_type) :: params_inst @@ -280,6 +281,7 @@ subroutine CNPhenologySetParams( ) params_inst%soilpsi_off = -0.8 ! MPa params_inst%lwtop = 0.7_r8 ! Fraction params_inst%phenology_soil_depth = 0.08_r8 ! m + params_inst%snow5d_thresh_for_onset = 0.2_r8 ! m end subroutine CNPhenologySetParams !----------------------------------------------------------------------- @@ -313,6 +315,7 @@ subroutine readParams ( ncid ) call readNcdioScalar(ncid, 'soilpsi_off', subname, params_inst%soilpsi_off) call readNcdioScalar(ncid, 'lwtop_ann', subname, params_inst%lwtop) call readNcdioScalar(ncid, 'phenology_soil_depth', subname, params_inst%phenology_soil_depth) + call readNcdioScalar(ncid, 'snow5d_thresh_for_onset', subname, params_inst%snow5d_thresh_for_onset) end subroutine readParams @@ -1136,7 +1139,6 @@ function SeasonalDecidOnset( onset_gdd, onset_gddflag, soilt, soila10, t_a5min, logical :: do_onset ! Flag if onset should happen (return value) ! ! !LOCAL VARIABLES: - real(r8), parameter :: snow5d_thresh_for_onset = 0.1_r8 ! 5-day snow depth threshold for leaf onset real(r8), parameter :: min_critical_daylength_onset = 39300._r8/2._r8 ! Minimum daylength for onset to happen ! NOTE above: The 39300/2(19650) value is what we've ! tested with, we are concerned that changing @@ -1192,7 +1194,8 @@ function SeasonalDecidOnset( onset_gdd, onset_gddflag, soilt, soila10, t_a5min, else if (season_decid_temperate == 0 .and. onset_gddflag == 1.0_r8 .and. & soila10 > SHR_CONST_TKFRZ .and. & t_a5min > SHR_CONST_TKFRZ .and. ws_flag==1.0_r8 .and. & - dayl>min_critical_daylength_onset .and. snow_5daymin_critical_daylength_onset .and. & + snow_5day this%forc_aer_grc(begg:endg,1) + call hist_addfld1d (fname='BCPHIDRY', units='kg/m^2/s', & + avgflag='A', long_name='black carbon deposition (phidry) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,2) + call hist_addfld1d (fname='BCPHODRY', units='kg/m^2/s', & + avgflag='A', long_name='black carbon deposition (phodry) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,3) + call hist_addfld1d (fname='BCPHIWET', units='kg/m^2/s', & + avgflag='A', long_name='black carbon deposition (phiwet) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,4) + call hist_addfld1d (fname='OCPHIDRY', units='kg/m^2/s', & + avgflag='A', long_name='organic carbon deposition (phidry) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,5) + call hist_addfld1d (fname='OCPHODRY', units='kg/m^2/s', & + avgflag='A', long_name='black carbon deposition (phodry) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,6) + call hist_addfld1d (fname='OCPHIWET', units='kg/m^2/s', & + avgflag='A', long_name='organic carbon deposition (phiwet) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,7) + call hist_addfld1d (fname='DSTWET1', units='kg/m^2/s', & + avgflag='A', long_name='dust deposition (wet1) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,8) + call hist_addfld1d (fname='DSTDRY1', units='kg/m^2/s', & + avgflag='A', long_name='dust deposition (dry1) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,9) + call hist_addfld1d (fname='DSTWET2', units='kg/m^2/s', & + avgflag='A', long_name='dust deposition (wet2) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,10) + call hist_addfld1d (fname='DSTDRY2', units='kg/m^2/s', & + avgflag='A', long_name='dust deposition (dry2) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,11) + call hist_addfld1d (fname='DSTWET3', units='kg/m^2/s', & + avgflag='A', long_name='dust deposition (wet3) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,12) + call hist_addfld1d (fname='DSTDRY3', units='kg/m^2/s', & + avgflag='A', long_name='dust deposition (dry3) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,13) + call hist_addfld1d (fname='DSTWET4', units='kg/m^2/s', & + avgflag='A', long_name='dust deposition (wet4) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + + data1dptr => this%forc_aer_grc(begg:endg,14) + call hist_addfld1d (fname='DSTDRY4', units='kg/m^2/s', & + avgflag='A', long_name='dust deposition (dry4) from atmosphere', & + ptr_gcell=data1dptr, default = 'inactive') + ! Time averaged quantities this%fsi24_patch(begp:endp) = spval call hist_addfld1d (fname='FSI24', units='K', & diff --git a/src/main/controlMod.F90 b/src/main/controlMod.F90 index 723153b5f2..a5da9c3082 100644 --- a/src/main/controlMod.F90 +++ b/src/main/controlMod.F90 @@ -637,7 +637,7 @@ subroutine control_init(dtime) snicar_solarspec /= 'mid_latitude_winter' .or. & snicar_dust_optics /= 'sahara' .or. & snicar_numrad_snw /= 5 .or. & - snicar_snobc_intmix .or. snicar_snodst_intmix .or. & + snicar_snodst_intmix .or. & .not. snicar_use_aerosol .or. & do_sno_oc) then call endrun(msg=' ERROR: You have selected an option that is EXPERIMENTAL, UNSUPPORTED, and UNTESTED. For guidance see namelist_defaults_ctsm.xml'//&