diff --git a/cime_config/config_tests.xml b/cime_config/config_tests.xml index 33f8b4a692..fb04cfb692 100644 --- a/cime_config/config_tests.xml +++ b/cime_config/config_tests.xml @@ -63,6 +63,9 @@ SSP smoke CLM spinup test (only valid for CLM compsets with CLM45) startup 4 FALSE + FALSE + $STOP_OPTION + $STOP_N diff --git a/cime_config/usermods_dirs/_includes/cmip6_carbon_isotopes/user_nl_clm b/cime_config/usermods_dirs/_includes/cmip6_carbon_isotopes/user_nl_clm index e7c6fbf7e8..4afeb952ee 100644 --- a/cime_config/usermods_dirs/_includes/cmip6_carbon_isotopes/user_nl_clm +++ b/cime_config/usermods_dirs/_includes/cmip6_carbon_isotopes/user_nl_clm @@ -7,6 +7,8 @@ use_c14 = .true. use_c13_timeseries = .true. use_c14_bombspike = .true. +! h0 stream (monthly average, gridcell-level) +hist_fexcl1 += 'C14_SOILC_vr' ! h3 stream (yearly average, gridcell-level) -hist_fincl4 += 'C14_SOIL1C_vr', 'C14_SOIL2C_vr', 'C14_SOIL3C_vr' +hist_fincl4 += 'C14_SOILC_vr' diff --git a/cime_config/usermods_dirs/output_bgc/user_nl_clm b/cime_config/usermods_dirs/output_bgc/user_nl_clm index c97c282ff6..de136ad4b4 100644 --- a/cime_config/usermods_dirs/output_bgc/user_nl_clm +++ b/cime_config/usermods_dirs/output_bgc/user_nl_clm @@ -3,7 +3,7 @@ !---------------------------------------------------------------------------------- ! h0 stream (monthly average, gridcell-level) -hist_fexcl1 += 'SOIL1C_vr', 'SOIL1N_vr', 'SOIL2C_vr', 'SOIL2N_vr', 'SOIL3C_vr', 'SOIL3N_vr', 'CWDC_vr', 'LITR1C_vr', 'LITR2C_vr', 'LITR3C_vr', 'LITR1N_vr', 'LITR2N_vr', 'LITR3N_vr', 'CWDN_vr', 'SMIN_NO3_vr', 'CONC_O2_UNSAT', 'CONC_O2_SAT','SMIN_NH4_vr','SMINN_vr' +hist_fexcl1 += 'SOIL1C_vr', 'SOIL1N_vr', 'SOIL2C_vr', 'SOIL2N_vr', 'SOIL3C_vr', 'SOIL3N_vr', 'SOILC_vr','SOILN_vr', 'CWDC_vr', 'LITR1C_vr', 'LITR2C_vr', 'LITR3C_vr', 'LITR1N_vr', 'LITR2N_vr', 'LITR3N_vr', 'CWDN_vr', 'SMIN_NO3_vr', 'CONC_O2_UNSAT', 'CONC_O2_SAT','SMIN_NH4_vr','SMINN_vr' hist_fincl1 += 'LEAFC_TO_LITTER', 'FROOTC_TO_LITTER','LITR1C_TO_SOIL1C','LITR1N_TO_SOIL1N','LITR2C_TO_SOIL1C', 'LITR2N_TO_SOIL1N','LITR3C_TO_SOIL2C','LITR3N_TO_SOIL2N','DWT_WOOD_PRODUCTC_GAIN_PATCH' ! h1 stream (monthly average, finest sub-grid) @@ -14,7 +14,7 @@ hist_fincl2 += 'GPP', 'NPP', 'AGNPP', 'TOTVEGC', 'NPP_NUPTAKE', 'AR', 'HR', 'HTO hist_fincl3 += 'GPP', 'NPP', 'AR', 'HR', 'DWT_CONV_CFLUX_PATCH', 'WOOD_HARVESTC', 'DWT_WOOD_PRODUCTC_GAIN_PATCH', 'SLASH_HARVESTC', 'COL_FIRE_CLOSS', 'DWT_SLASH_CFLUX', 'FROOTC:I', 'HTOP' ! h3 stream (yearly average, gridcell-level) -hist_fincl4 += 'SOIL1C_vr', 'SOIL1N_vr', 'SOIL2C_vr', 'SOIL2N_vr', 'SOIL3C_vr', 'SOIL3N_vr', 'CWDC_vr', 'LITR1C_vr', 'LITR2C_vr', 'LITR3C_vr', 'LITR1N_vr', 'LITR2N_vr', 'LITR3N_vr','CWDN_vr', 'TOTLITC:I', 'TOT_WOODPRODC:I', 'TOTSOMC:I','TOTVEGC:I' +hist_fincl4 += 'SOILC_vr', 'SOILN_vr', 'CWDC_vr', 'LITR1C_vr', 'LITR2C_vr', 'LITR3C_vr', 'LITR1N_vr', 'LITR2N_vr', 'LITR3N_vr','CWDN_vr', 'TOTLITC:I', 'TOT_WOODPRODC:I', 'TOTSOMC:I','TOTVEGC:I' ! h4 stream (yearly average, landunit-level) hist_fincl5 += 'TOTSOMC:I', 'TOTSOMC_1m:I', 'TOTECOSYSC:I', 'TOTVEGC:I', 'WOODC:I', 'TOTLITC:I', 'LIVECROOTC:I', 'DEADCROOTC:I', 'FROOTC:I' diff --git a/doc/ChangeLog b/doc/ChangeLog index 8870afa69e..52fef26586 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,4 +1,110 @@ =============================================================== +Tag name: ctsm1.0.dev025 +Originator(s): Keith Oleson, Bill Sacks +Date: Wed Jan 23 10:48:01 MST 2019 +One-line Summary: History fields for vertically-resolved sums of soil C and N, and minor fixes + +Purpose of changes +------------------ + +Main change is from Keith Oleson: Add history fields for +vertically-resolved sums of SOIL1C, SOIL2C, and SOIL3C for C12, C13, +C14, and similarly for N. New fields are SOILC_vr, C13_SOILC_vr, and +C14_SOILC_vr, and SOILN_vr. For runs that use the output_bgc usermods, +including cmip6 runs, we no longer output 'SOIL1C_vr', 'SOIL1N_vr', +'SOIL2C_vr', 'SOIL2N_vr', 'SOIL3C_vr', 'SOIL3N_vr'; instead we output +'SOILC_vr', 'SOILN_vr', and similarly for C isotopes. + +Also minor fixes: +- Output cpl hist files in SSP test (resolves ESCOMP/ctsm#61) +- Remove FATES-related commented-out code in OzoneMod (this has been + moved to https://github.com/ESCOMP/ctsm/issues/618) +- Minor tweak to run_sys_tests + +Bugs fixed or introduced +------------------------ + +Issues fixed (include CTSM Issue #): +- Resolves ESCOMP/ctsm#61 + +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.] + +[ ] clm5_0 + +[ ] clm4_5 + +Notes of particular relevance for users +--------------------------------------- + +Caveats for users (e.g., need to interpolate initial conditions): none + +Changes to CTSM's user interface (e.g., new/renamed XML or namelist variables): none + +Changes made to namelist defaults (e.g., changed parameter values): +- For runs that use the output_bgc usermods, including cmip6 runs, we no + longer output 'SOIL1C_vr', 'SOIL1N_vr', 'SOIL2C_vr', 'SOIL2N_vr', + 'SOIL3C_vr', 'SOIL3N_vr'; instead we output 'SOILC_vr', 'SOILN_vr', + and similarly for C isotopes. + +Changes to the datasets (e.g., parameter, surface or initial files): none + +Substantial timing or memory changes: none + +Notes of particular relevance for developers: (including Code reviews and testing) +--------------------------------------------- +NOTE: Be sure to review the steps in ../CTSMMasterChecklist as well as the coding style in the Developers Guide + +Caveats for developers (e.g., code that is duplicated that requires double maintenance): none + +Changes to tests or testing: none + +Code reviewed by: Bill Sacks; Erik Kluzek reviewed the changes to the SSP test + + +CTSM testing: + + build-namelist tests: + + cheyenne - not run + + tools-tests (test/tools): + + cheyenne - not run + + PTCLM testing (tools/shared/PTCLM/test): + + cheyenne - not run + + regular tests (aux_clm): + + cheyenne ---- pass + hobart ------ pass + +CTSM tag used for the baseline comparisons: ctsm1.0.dev024 + + +Answer changes +-------------- + +Changes answers relative to baseline: NO + + +Detailed list of changes +------------------------ + +List any externals directories updated (cime, rtm, mosart, cism, fates, etc.): none + +Pull Requests that document the changes (include PR ids): +https://github.com/ESCOMP/ctsm/pull/551 + +=============================================================== +=============================================================== Tag name: ctsm1.0.dev015 Originator(s): sacks (Bill Sacks) Date: Sun Oct 28 14:29:30 MDT 2018 diff --git a/doc/ChangeSum b/doc/ChangeSum index 9bb694f080..9fc609ebbb 100644 --- a/doc/ChangeSum +++ b/doc/ChangeSum @@ -1,5 +1,7 @@ Tag Who Date Summary ============================================================================================================================ +release-clm5.0.17 sacks 01/23/2019 History fields for vertically-resolved sums of soil C and N, and minor fixes + ctsm1.0.dev025 sacks 01/23/2019 History fields for vertically-resolved sums of soil C and N, and minor fixes release-clm5.0.16 erik 01/15/2019 PtVg and ssp_rcp future scenario options and Antarctica wetlands fix to mksurfdata, and option to dribble crop harvest XSMRPOOL flux to atmosphere release-clm5.0.15 sacks 12/06/2018 Option for rain-to-snow to immediately run off in some regions release-clm5.0.14 erik 11/29/2018 Update cime and fix surface dataset for f05 1850 non-crop case diff --git a/doc/release-clm5.0.ChangeLog b/doc/release-clm5.0.ChangeLog index 783713ad60..d9004d3c81 100644 --- a/doc/release-clm5.0.ChangeLog +++ b/doc/release-clm5.0.ChangeLog @@ -1,4 +1,113 @@ =============================================================== +Tag name: release-clm5.0.17 +Originator(s): Keith Oleson, Bill Sacks +Date: Wed Jan 23 11:03:22 MST 2019 +One-line Summary: History fields for vertically-resolved sums of soil C and N, and minor fixes + +Purpose of this version: +------------------------ + +Main change is from Keith Oleson: Add history fields for +vertically-resolved sums of SOIL1C, SOIL2C, and SOIL3C for C12, C13, +C14, and similarly for N. New fields are SOILC_vr, C13_SOILC_vr, and +C14_SOILC_vr, and SOILN_vr. For runs that use the output_bgc usermods, +including cmip6 runs, we no longer output 'SOIL1C_vr', 'SOIL1N_vr', +'SOIL2C_vr', 'SOIL2N_vr', 'SOIL3C_vr', 'SOIL3N_vr'; instead we output +'SOILC_vr', 'SOILN_vr', and similarly for C isotopes. + +Also minor fixes: +- Output cpl hist files in SSP test (resolves ESCOMP/ctsm#61) +- Remove FATES-related commented-out code in OzoneMod (this has been + moved to https://github.com/ESCOMP/ctsm/issues/618) +- Minor tweak to run_sys_tests + + +CTSM Master Tag This Corresponds To: ctsm1.0.dev025 + +Summary of changes: +------------------- + +Issues fixed (include CTSM Issue #): +- Resolves ESCOMP/ctsm#61 + +Science changes since: release-clm5.0.16 + None + +Software changes since: release-clm5.0.16 + See above + +Changes to User Interface since: release-clm5.0.16 + None + +Testing: +-------- + + build-namelist tests: + + cheyenne - not run + + unit-tests (components/clm/src): + + cheyenne - pass + hobart --- not run + + tools-tests (components/clm/test/tools): + + cheyenne - not run + hobart --- not run + + PTCLM testing (components/clm/tools/shared/PTCLM/test): + + cheyenne - not run + hobart --- not run + + regular tests (aux_clm): + + cheyenne_intel ---- pass + cheyenne_gnu ------ pass + hobart_nag -------- pass + hobart_pgi -------- pass + hobart_intel ------ pass + + regular tests (prealpha): + + cheyenne_intel - not run + cheyenne_gnu --- not run + hobart_nag ----- not run + + regular tests (prebeta): + + cheyenne_intel - not run + cheyenne_gnu --- not run + hobart_nag ----- not run + +Summary of Answer changes: +------------------------- + +Baseline version for comparison: release-clm5.0.16 + +Changes answers relative to baseline: NO + + +Detailed list of changes: +------------------------ + +Externals being used: + + cism: release-cesm2.0.04 + rtm: release-cesm2.0.02 + mosart: release-cesm2.0.03 + cime: cime_cesm2_1_rel_06 + FATES: fates_s1.8.1_a3.0.0 + PTCLM: PTCLM2_180611 + +CTSM Tag versions pulled over from master development branch: ctsm1.0.dev025 + +Pull Requests that document the changes (include PR ids): +https://github.com/ESCOMP/ctsm/pull/551 + +=============================================================== +=============================================================== Tag name: release-clm5.0.16 Originator(s): erik (Erik Kluzek) Date: Tue Jan 15 15:13:43 MST 2019 diff --git a/src/biogeophys/OzoneMod.F90 b/src/biogeophys/OzoneMod.F90 index 29b94fa34f..78bf64a8fe 100644 --- a/src/biogeophys/OzoneMod.F90 +++ b/src/biogeophys/OzoneMod.F90 @@ -361,51 +361,21 @@ subroutine CalcOzoneStress(this, bounds, num_exposedvegp, filter_exposedvegp, & p = filter_exposedvegp(fp) c = patch%column(p) -! if (.not.patch%is_fates(p)) then ! When FATES coexists with other vegetation, - ! or when it has an ozone compatible module, this - ! logic will likely come into play - - ! Ozone stress for shaded leaves - call CalcOzoneStressOnePoint( & - forc_ozone=forc_ozone, forc_pbot=forc_pbot(c), forc_th=forc_th(c), & - rs=rssha(p), rb=rb(p), ram=ram(p), & - tlai=tlai(p), tlai_old=tlai_old(p), pft_type=patch%itype(p), & - o3uptake=o3uptakesha(p), o3coefv=o3coefvsha(p), o3coefg=o3coefgsha(p)) - - ! Ozone stress for sunlit leaves - call CalcOzoneStressOnePoint( & - forc_ozone=forc_ozone, forc_pbot=forc_pbot(c), forc_th=forc_th(c), & - rs=rssun(p), rb=rb(p), ram=ram(p), & - tlai=tlai(p), tlai_old=tlai_old(p), pft_type=patch%itype(p), & - o3uptake=o3uptakesun(p), o3coefv=o3coefvsun(p), o3coefg=o3coefgsun(p)) - - tlai_old(p) = tlai(p) - -! else -! ! FATES is fundamentlaly incompatible with this type of patch-level -! ! association with plant functional type, so for the time -! ! being, fates patches will just push these values to invalid -! o3uptakesha(p) = spval -! o3coefvsha(p) = spval -! o3coefgsha(p) = spval -! o3uptakesun(p) = spval -! o3coefvsun(p) = spval -! o3coefgsun(p) = spval -! -! end if - -! else -! ! FATES is fundamentlaly incompatible with this type of patch-level -! ! association with plant functional type, so for the time -! ! being, fates patches will just push these values to invalid -! o3uptakesha(p) = spval -! o3coefvsha(p) = spval -! o3coefgsha(p) = spval -! o3uptakesun(p) = spval -! o3coefvsun(p) = spval -! o3coefgsun(p) = spval -! -! end if + ! Ozone stress for shaded leaves + call CalcOzoneStressOnePoint( & + forc_ozone=forc_ozone, forc_pbot=forc_pbot(c), forc_th=forc_th(c), & + rs=rssha(p), rb=rb(p), ram=ram(p), & + tlai=tlai(p), tlai_old=tlai_old(p), pft_type=patch%itype(p), & + o3uptake=o3uptakesha(p), o3coefv=o3coefvsha(p), o3coefg=o3coefgsha(p)) + + ! Ozone stress for sunlit leaves + call CalcOzoneStressOnePoint( & + forc_ozone=forc_ozone, forc_pbot=forc_pbot(c), forc_th=forc_th(c), & + rs=rssun(p), rb=rb(p), ram=ram(p), & + tlai=tlai(p), tlai_old=tlai_old(p), pft_type=patch%itype(p), & + o3uptake=o3uptakesun(p), o3coefv=o3coefvsun(p), o3coefg=o3coefgsun(p)) + + tlai_old(p) = tlai(p) end do diff --git a/src/soilbiogeochem/SoilBiogeochemCarbonStateType.F90 b/src/soilbiogeochem/SoilBiogeochemCarbonStateType.F90 index 9b1f288f63..1c2fdd01bc 100644 --- a/src/soilbiogeochem/SoilBiogeochemCarbonStateType.F90 +++ b/src/soilbiogeochem/SoilBiogeochemCarbonStateType.F90 @@ -25,6 +25,7 @@ module SoilBiogeochemCarbonStateType ! all c pools involved in decomposition real(r8), pointer :: decomp_cpools_vr_col (:,:,:) ! (gC/m3) vertically-resolved decomposing (litter, cwd, soil) c pools + real(r8), pointer :: decomp_soilc_vr_col (:,:) ! (gC/m3) vertically-resolved decomposing total soil c pool real(r8), pointer :: ctrunc_vr_col (:,:) ! (gC/m3) vertically-resolved column-level sink for C truncation ! summary (diagnostic) state variables, not involved in mass balance @@ -102,6 +103,8 @@ subroutine InitAllocate(this, bounds) allocate(this%decomp_cpools_vr_col(begc:endc,1:nlevdecomp_full,1:ndecomp_pools)) this%decomp_cpools_vr_col(:,:,:)= nan + allocate(this%decomp_soilc_vr_col(begc:endc,1:nlevdecomp_full)) + this%decomp_soilc_vr_col(:,:)= nan allocate(this%ctrunc_col (begc :endc)) ; this%ctrunc_col (:) = nan if ( .not. use_fates ) then @@ -145,6 +148,13 @@ subroutine InitHistory(this, bounds, carbon_type) if (carbon_type == 'c12') then + if ( nlevdecomp_full > 1 ) then + this%decomp_soilc_vr_col(begc:endc,:) = spval + call hist_addfld2d (fname='SOILC_vr', units='gC/m^3', type2d='levsoi', & + avgflag='A', long_name='SOIL C (vertically resolved)', & + ptr_col=this%decomp_soilc_vr_col) + end if + this%decomp_cpools_col(begc:endc,:) = spval do l = 1, ndecomp_pools if ( nlevdecomp_full > 1 ) then @@ -217,6 +227,13 @@ subroutine InitHistory(this, bounds, carbon_type) if ( carbon_type == 'c13' ) then + if ( nlevdecomp_full > 1 ) then + this%decomp_soilc_vr_col(begc:endc,:) = spval + call hist_addfld2d (fname='C13_SOILC_vr', units='gC13/m^3', type2d='levsoi', & + avgflag='A', long_name='C13 SOIL C (vertically resolved)', & + ptr_col=this%decomp_soilc_vr_col, default='inactive') + end if + this%decomp_cpools_vr_col(begc:endc,:,:) = spval do l = 1, ndecomp_pools if ( nlevdecomp_full > 1 ) then @@ -279,6 +296,13 @@ subroutine InitHistory(this, bounds, carbon_type) if ( carbon_type == 'c14' ) then + if ( nlevdecomp_full > 1 ) then + this%decomp_soilc_vr_col(begc:endc,:) = spval + call hist_addfld2d (fname='C14_SOILC_vr', units='gC14/m^3', type2d='levsoi', & + avgflag='A', long_name='C14 SOIL C (vertically resolved)', & + ptr_col=this%decomp_soilc_vr_col) + end if + this%decomp_cpools_vr_col(begc:endc,:,:) = spval do l = 1, ndecomp_pools if ( nlevdecomp_full > 1 ) then @@ -832,6 +856,27 @@ subroutine Summary(this, bounds, num_allc, filter_allc) endif + ! Add soil carbon pools together to produce vertically-resolved decomposing total soil c pool + if ( nlevdecomp_full > 1 ) then + do j = 1, nlevdecomp + do fc = 1,num_allc + c = filter_allc(fc) + this%decomp_soilc_vr_col(c,j) = 0._r8 + end do + end do + do l = 1, ndecomp_pools + if ( decomp_cascade_con%is_soil(l) ) then + do j = 1, nlevdecomp + do fc = 1,num_allc + c = filter_allc(fc) + this%decomp_soilc_vr_col(c,j) = this%decomp_soilc_vr_col(c,j) + & + this%decomp_cpools_vr_col(c,j,l) + end do + end do + end if + end do + end if + ! truncation carbon do fc = 1,num_allc c = filter_allc(fc) diff --git a/src/soilbiogeochem/SoilBiogeochemNitrogenStateType.F90 b/src/soilbiogeochem/SoilBiogeochemNitrogenStateType.F90 index ca09e63624..7b045785e0 100644 --- a/src/soilbiogeochem/SoilBiogeochemNitrogenStateType.F90 +++ b/src/soilbiogeochem/SoilBiogeochemNitrogenStateType.F90 @@ -27,6 +27,8 @@ module SoilBiogeochemNitrogenStateType type, public :: soilbiogeochem_nitrogenstate_type real(r8), pointer :: decomp_npools_vr_col (:,:,:) ! col (gN/m3) vertically-resolved decomposing (litter, cwd, soil) N pools + real(r8), pointer :: decomp_soiln_vr_col (:,:) ! col (gN/m3) vertically-resolved decomposing total soil N pool + real(r8), pointer :: sminn_vr_col (:,:) ! col (gN/m3) vertically-resolved soil mineral N real(r8), pointer :: ntrunc_vr_col (:,:) ! col (gN/m3) vertically-resolved column-level sink for N truncation @@ -128,6 +130,8 @@ subroutine InitAllocate(this, bounds) allocate(this%decomp_npools_vr_col(begc:endc,1:nlevdecomp_full,1:ndecomp_pools)); this%decomp_npools_vr_col(:,:,:)= nan + allocate(this%decomp_soiln_vr_col(begc:endc,1:nlevdecomp_full)) + this%decomp_soiln_vr_col(:,:)= nan end subroutine InitAllocate @@ -160,6 +164,13 @@ subroutine InitHistory(this, bounds) begc = bounds%begc; endc = bounds%endc + if ( nlevdecomp_full > 1 ) then + this%decomp_soiln_vr_col(begc:endc,:) = spval + call hist_addfld2d (fname='SOILN_vr', units='gN/m^3', type2d='levdcmp', & + avgflag='A', long_name='SOIL N (vertically resolved)', & + ptr_col=this%decomp_soiln_vr_col) + end if + if ( nlevdecomp_full > 1 ) then this%decomp_npools_vr_col(begc:endc,:,:) = spval this%decomp_npools_1m_col(begc:endc,:) = spval @@ -801,6 +812,27 @@ subroutine Summary(this, bounds, num_allc, filter_allc) endif end do end do + + ! Add soil nitrogen pools together to produce vertically-resolved decomposing total soil N pool + if ( nlevdecomp_full > 1 ) then + do j = 1, nlevdecomp + do fc = 1,num_allc + c = filter_allc(fc) + this%decomp_soiln_vr_col(c,j) = 0._r8 + end do + end do + do l = 1, ndecomp_pools + if ( decomp_cascade_con%is_soil(l) ) then + do j = 1, nlevdecomp + do fc = 1,num_allc + c = filter_allc(fc) + this%decomp_soiln_vr_col(c,j) = this%decomp_soiln_vr_col(c,j) + & + this%decomp_npools_vr_col(c,j,l) + end do + end do + end if + end do + end if ! total litter nitrogen to 1 meter (TOTLITN_1m) do fc = 1,num_allc