diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml
index 4f902befed..17e6b8844e 100644
--- a/bld/namelist_files/namelist_definition.xml
+++ b/bld/namelist_files/namelist_definition.xml
@@ -2339,7 +2339,7 @@ COSP will not run unless this is set to .true. in the namelist!
Turn on the desired simulators using lXXX_sim namelist vars
If no specific simulators are specified, all of the simulators
are run on all columns and all output is saved. (useful for testing).
-COSP is available with CAM4, CAM5 and CAM6 physics.
+COSP is available with CAM4, CAM5, CAM6 and CAM7 physics.
This default logical is set in cospsimulator_intr.F90.
Default: FALSE
@@ -2576,7 +2576,7 @@ Default: .true., except for carma=cirrus and carma=carma_dust
group="micro_mg_nl" valid_values="" >
Version number for MG microphysics. This value is set automatically based
on settings in configure and passed to build-namelist
-Default: 1 for CAM5 and 2 for CAM6
+Default: 1 for CAM5, 2 for CAM6 and 3 for CAM7
Switch to turn on treatment of pre-existing ice in the ice nucleation code.
-Default: .false., except .true. for CAM6
+Default: .false., except .true. for CAM6 and CAM7
Switch for ice cloud fraction calculation.
-Default: .true. for CAM5 and CAM6, otherwise .false.
+Default: .true. for CAM5, CAM6 and CAM7, otherwise .false.
Adjustment to rhminl for land without snow cover.
-Default: 0.0 for CAM6;
+Default: 0.0 for CAM6 and CAM7;
all others => 0.10
@@ -3091,7 +3091,7 @@ Default: set by build-namelist
Bottom height (Pa) for mid-level liquid stratus fraction.
-Default: 700.e2 for CAM5 and CAM6; all others=> 750.e2
+Default: 700.e2 for CAM5, CAM6 and CAM7; all others=> 750.e2
Use cloud fraction to determine whether to do growth of ice clouds below
RHice of 1 down to RHice = rhmini.
-Default: .true. for CAM6; all others => .false.
+Default: .true. for CAM6 and CAM7; all others => .false.
The number of negative buoyancy regions that are allowed before the convection top and CAPE calculations are completed.
-Default: => 1 for CAM6;
+Default: => 1 for CAM6 and CAM7;
=> 5 for all other
@@ -5132,7 +5132,7 @@ Default: TRUE
+ group="phys_ctl_nl" valid_values="cam4,cam5,cam6,cam7,adiabatic,held_suarez,kessler,frierson" >
Name of the CAM physics package. N.B. this variable may not be set by
the user. It is set by build-namelist via information in the configure
cache file to be consistent with how CAM was built.
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 1bf7de6589..9277fc5441 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,6 +1,64 @@
===============================================================
+Tag name: cam6_4_139
+Originator(s): cacraigucar, kuanchihwang, gold2718, jedwards4b
+Date: Dec 24, 2025
+One-line Summary: Misc tag leading into CESM3
+Github PR URL: https://github.com/ESCOMP/CAM/pull/1464
+
+Purpose of changes (include the issue number and title text for each relevant GitHub issue):
+ - Move pressure variables to dry diagnostics: https://github.com/ESCOMP/CAM/pull/1427
+ - Long lines in cam_diagnostics.F90: https://github.com/ESCOMP/CAM/issues/1448
+ - Large domains require a change in data type for se dynamics restarts: https://github.com/ESCOMP/CAM/issues/1459
+ - Update little obsolete/incorrect items: https://github.com/ESCOMP/CAM/issues/1177
+
+Describe any changes made to build system: N/A
+
+Describe any changes made to the namelist: N/A
+
+List any changes to the defaults for the boundary datasets: N/A
+
+Describe any substantial timing or memory changes: N/A
+
+Code reviewed by: jimmielin
+
+List all files eliminated: N/A
+
+List all files added and what they do: N/A
+
+List all existing files that have been modified, and describe the changes:
+M bld/namelist_files/namelist_definition.xml
+ - Update comments to include CAM7
+
+M src/dynamics/se/restart_dynamics.F90
+ - Change a variable to i8 which needed a larger type for large domains
+
+M src/physics/cam/cam_diagnostics.F90
+ - move pressure variables to dry diagnostics
+ - break up long lines
+
+If there were any failures reported from running test_driver.sh on any test
+platform, and checkin with these failures has been OK'd by the gatekeeper,
+then copy the lines from the td.*.status files for the failed tests to the
+appropriate machine below. All failed tests must be justified.
+
+derecho/intel/aux_cam: all BFB
+
+derecho/nvhpc/aux_cam: (not run as nothing has changed with the file system)
+
+izumi/nag/aux_cam: all BFB except:
+ ERC_D_Ln9.mpasa480_mpasa480_mt232.FHS94.izumi_nag.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERC_D_Ln9.mpasa480_mpasa480_mt232.FHS94.izumi_nag.cam-outfrq9s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_4_138_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ ERC_D_Ln9_P1x1.ne3pg3_ne3pg3_mt232.FADIAB.izumi_nag.cam-outfrq9s (Overall: DIFF) details:
+ FAIL ERC_D_Ln9_P1x1.ne3pg3_ne3pg3_mt232.FADIAB.izumi_nag.cam-outfrq9s BASELINE /fs/cgd/csm/models/atm/cam/pretag_bl/cam6_4_138_nag: FIELDLIST field lists differ (otherwise bit-for-bit)
+ - added pressure variables to output file
+
+izumi/gnu/aux_cam: all BFB
+
+===============================================================
+===============================================================
+
Tag name: cam6_4_138
Originator(s): dmleung, fvitt, cacraigucar
Date: Dec 22, 2025
diff --git a/src/dynamics/se/restart_dynamics.F90 b/src/dynamics/se/restart_dynamics.F90
index 0c630c9336..64f26c8d76 100644
--- a/src/dynamics/se/restart_dynamics.F90
+++ b/src/dynamics/se/restart_dynamics.F90
@@ -12,6 +12,7 @@ module restart_dynamics
! grid format may also be used for an initial run.
use shr_kind_mod, only: r8 => shr_kind_r8
+use shr_kind_mod, only: i8 => shr_kind_i8
use spmd_utils, only: iam, masterproc
use constituents, only: cnst_name
@@ -284,9 +285,9 @@ subroutine write_restart_dynamics(File, dyn_out)
subroutine write_elem()
! local variables
- integer :: i, ie, j, k
- integer :: ierr
- integer, pointer :: ldof(:)
+ integer :: i, ie, j, k
+ integer :: ierr
+ integer(i8), pointer :: ldof(:)
type(io_desc_t) :: iodesc2d, iodesc3d
@@ -707,7 +708,7 @@ subroutine read_elem()
integer :: ncol
integer :: i, ie, ii, j, k, m
- integer, pointer :: ldof(:)
+ integer(i8), pointer :: ldof(:)
type(io_desc_t) :: iodesc2d, iodesc3d
real(r8), allocatable :: var3d(:), var2d(:)
@@ -999,13 +1000,14 @@ end subroutine read_restart_dynamics
function get_restart_decomp(elem, lev) result(ldof)
+
! Get the integer mapping of a variable in the dynamics decomp in memory.
! The canonical ordering is as on the file. A 0 value indicates that the
! variable is not on the file (eg halo or boundary values)
type(element_t), intent(in) :: elem(:)
integer, intent(in) :: lev
- integer, pointer :: ldof(:)
+ integer(i8), pointer :: ldof(:)
integer :: i, j, k, ie
!----------------------------------------------------------------------------
@@ -1030,7 +1032,7 @@ function get_restart_decomp_fvm(elem, lev) result(ldof)
type(element_t), intent(in) :: elem(:)
integer, intent(in) :: lev
- integer, pointer :: ldof(:)
+ integer(i8), pointer :: ldof(:)
integer :: i, j, k, ie
!----------------------------------------------------------------------------
diff --git a/src/physics/cam/cam_diagnostics.F90 b/src/physics/cam/cam_diagnostics.F90
index 5f7e7d9a60..80bf837865 100644
--- a/src/physics/cam/cam_diagnostics.F90
+++ b/src/physics/cam/cam_diagnostics.F90
@@ -230,9 +230,12 @@ subroutine diag_init_dry(pbuf2d)
call register_vector_field('UTEND_TOT','VTEND_TOT')
! Debugging negative water output fields
- call addfld ('INEGCLPTEND ', (/ 'lev' /), 'A', 'kg/kg/s', 'Cloud ice tendency due to clipping neg values after microp', sampled_on_subcycle=.true.)
- call addfld ('LNEGCLPTEND ', (/ 'lev' /), 'A', 'kg/kg/s', 'Cloud liq tendency due to clipping neg values after microp', sampled_on_subcycle=.true.)
- call addfld ('VNEGCLPTEND ', (/ 'lev' /), 'A', 'kg/kg/s', 'Vapor tendency due to clipping neg values after microp', sampled_on_subcycle=.true.)
+ call addfld ('INEGCLPTEND ', (/ 'lev' /), 'A', 'kg/kg/s', &
+ 'Cloud ice tendency due to clipping neg values after microp', sampled_on_subcycle=.true.)
+ call addfld ('LNEGCLPTEND ', (/ 'lev' /), 'A', 'kg/kg/s', &
+ 'Cloud liq tendency due to clipping neg values after microp', sampled_on_subcycle=.true.)
+ call addfld ('VNEGCLPTEND ', (/ 'lev' /), 'A', 'kg/kg/s', &
+ 'Vapor tendency due to clipping neg values after microp', sampled_on_subcycle=.true.)
call addfld ('Z3', (/ 'lev' /), 'A', 'm', 'Geopotential Height (above sea level)')
call addfld ('Z1000', horiz_only, 'A', 'm', 'Geopotential Z at 1000 mbar pressure surface')
@@ -263,7 +266,10 @@ subroutine diag_init_dry(pbuf2d)
call addfld ('OMEGA850', horiz_only, 'A', 'Pa/s', 'Vertical velocity at 850 mbar pressure surface')
call addfld ('OMEGA500', horiz_only, 'A', 'Pa/s', 'Vertical velocity at 500 mbar pressure surface')
- call addfld ('PSL', horiz_only, 'A', 'Pa','Sea level pressure')
+ call addfld ('PSL', horiz_only, 'A', 'Pa', 'Sea level pressure')
+ call addfld ('PMID', (/ 'lev' /), 'A', 'Pa', 'Pressure at layer midpoints')
+ call addfld ('PINT', (/ 'ilev' /), 'A', 'Pa', 'Pressure at layer interfaces')
+ call addfld ('PDEL', (/ 'lev' /), 'A', 'Pa', 'Pressure difference between levels')
call addfld ('T1000', horiz_only, 'A', 'K','Temperature at 1000 mbar pressure surface')
call addfld ('T925', horiz_only, 'A', 'K','Temperature at 925 mbar pressure surface')
@@ -325,6 +331,16 @@ subroutine diag_init_dry(pbuf2d)
call add_default ('PSL ', 1, ' ')
end if
+ if (dycore_is('SE')) then
+ call add_default ('PMID', 1, ' ')
+ end if
+
+ if (dycore_is('MPAS')) then
+ call add_default ('PMID', 1, ' ')
+ call add_default ('PINT', 1, ' ')
+ call add_default ('PDEL', 1, ' ')
+ end if
+
if (history_vdiag) then
call add_default ('U200', 2, ' ')
call add_default ('V200', 2, ' ')
@@ -402,16 +418,26 @@ subroutine diag_init_dry(pbuf2d)
! Create budgets that are a sum/dif of 2 stages
- call cam_budget_em_register('dEdt_param_efix_physE','phAP','phBF','phy','dif',longname='dE/dt CAM physics + energy fixer using physics E formula (phAP-phBF)')
- call cam_budget_em_register('dEdt_param_efix_dynE' ,'dyAP','dyBF','phy','dif',longname='dE/dt CAM physics + energy fixer using dycore E formula (dyAP-dyBF)')
- call cam_budget_em_register('dEdt_param_physE' ,'phAP','phBP','phy','dif',longname='dE/dt CAM physics using physics E formula (phAP-phBP)')
- call cam_budget_em_register('dEdt_param_dynE' ,'dyAP','dyBP','phy','dif',longname='dE/dt CAM physics using dycore E (dyAP-dyBP)')
- call cam_budget_em_register('dEdt_dme_adjust_physE','phAM','phAP','phy','dif',longname='dE/dt dry mass adjustment using physics E formula (phAM-phAP)')
- call cam_budget_em_register('dEdt_dme_adjust_dynE' ,'dyAM','dyAP','phy','dif',longname='dE/dt dry mass adjustment using dycore E (dyAM-dyAP)')
- call cam_budget_em_register('dEdt_efix_physE' ,'phBP','phBF','phy','dif',longname='dE/dt energy fixer using physics E formula (phBP-phBF)')
- call cam_budget_em_register('dEdt_efix_dynE' ,'dyBP','dyBF','phy','dif',longname='dE/dt energy fixer using dycore E formula (dyBP-dyBF)')
- call cam_budget_em_register('dEdt_phys_tot_physE' ,'phAM','phBF','phy','dif',longname='dE/dt physics total using physics E formula (phAM-phBF)')
- call cam_budget_em_register('dEdt_phys_tot_dynE' ,'dyAM','dyBF','phy','dif',longname='dE/dt physics total using dycore E (dyAM-dyBF)')
+ call cam_budget_em_register('dEdt_param_efix_physE','phAP','phBF','phy','dif',&
+ longname='dE/dt CAM physics + energy fixer using physics E formula (phAP-phBF)')
+ call cam_budget_em_register('dEdt_param_efix_dynE' ,'dyAP','dyBF','phy','dif',&
+ longname='dE/dt CAM physics + energy fixer using dycore E formula (dyAP-dyBF)')
+ call cam_budget_em_register('dEdt_param_physE' ,'phAP','phBP','phy','dif',&
+ longname='dE/dt CAM physics using physics E formula (phAP-phBP)')
+ call cam_budget_em_register('dEdt_param_dynE' ,'dyAP','dyBP','phy','dif',&
+ longname='dE/dt CAM physics using dycore E (dyAP-dyBP)')
+ call cam_budget_em_register('dEdt_dme_adjust_physE','phAM','phAP','phy','dif',&
+ longname='dE/dt dry mass adjustment using physics E formula (phAM-phAP)')
+ call cam_budget_em_register('dEdt_dme_adjust_dynE' ,'dyAM','dyAP','phy','dif',&
+ longname='dE/dt dry mass adjustment using dycore E (dyAM-dyAP)')
+ call cam_budget_em_register('dEdt_efix_physE' ,'phBP','phBF','phy','dif',&
+ longname='dE/dt energy fixer using physics E formula (phBP-phBF)')
+ call cam_budget_em_register('dEdt_efix_dynE' ,'dyBP','dyBF','phy','dif',&
+ longname='dE/dt energy fixer using dycore E formula (dyBP-dyBF)')
+ call cam_budget_em_register('dEdt_phys_tot_physE' ,'phAM','phBF','phy','dif',&
+ longname='dE/dt physics total using physics E formula (phAM-phBF)')
+ call cam_budget_em_register('dEdt_phys_tot_dynE' ,'dyAM','dyBF','phy','dif',&
+ longname='dE/dt physics total using dycore E (dyAM-dyBF)')
endif
end subroutine diag_init_dry
@@ -461,10 +487,7 @@ subroutine diag_init_moist(pbuf2d)
call addfld ('QBOT', horiz_only, 'A', 'kg/kg','Lowest model level water vapor mixing ratio')
call addfld ('PSDRY', horiz_only, 'A', 'Pa', 'Dry surface pressure')
- call addfld ('PMID', (/ 'lev' /), 'A', 'Pa', 'Pressure at layer midpoints')
- call addfld ('PINT', (/ 'ilev' /), 'A', 'Pa', 'Pressure at layer interfaces')
call addfld ('PDELDRY', (/ 'lev' /), 'A', 'Pa', 'Dry pressure difference between levels')
- call addfld ('PDEL', (/ 'lev' /), 'A', 'Pa', 'Pressure difference between levels')
! outfld calls in diag_conv
@@ -603,13 +626,6 @@ subroutine diag_init_moist(pbuf2d)
if (dycore_is('SE')) then
call add_default ('PSDRY', 1, ' ')
- call add_default ('PMID', 1, ' ')
- end if
-
- if (dycore_is('MPAS')) then
- call add_default ('PINT', 1, ' ')
- call add_default ('PMID', 1, ' ')
- call add_default ('PDEL', 1, ' ')
end if
if (history_eddy) then
@@ -1067,6 +1083,10 @@ subroutine diag_phys_writeout_dry(state, pbuf, p_surf_t)
call cpslec(ncol, state%pmid, state%phis, state%ps, state%t, psl, gravit, rair)
call outfld('PSL', psl, pcols, lchnk)
+ call outfld('PMID', state%pmid, pcols, lchnk)
+ call outfld('PINT', state%pint, pcols, lchnk)
+ call outfld('PDEL', state%pdel, pcols, lchnk)
+
! Output T,u,v fields on pressure surfaces
!
if (hist_fld_active('T850')) then
@@ -1282,11 +1302,7 @@ subroutine diag_phys_writeout_moist(state, pbuf, p_surf_t)
call constituent_burden_comp(state)
call outfld('PSDRY', state%psdry, pcols, lchnk)
- call outfld('PMID', state%pmid, pcols, lchnk)
- call outfld('PINT', state%pint, pcols, lchnk)
call outfld('PDELDRY', state%pdeldry, pcols, lchnk)
- call outfld('PDEL', state%pdel, pcols, lchnk)
-
ftem(:ncol,:) = state%u(:ncol,:)*state%q(:ncol,:,ixq)
call outfld ('UQ ',ftem ,pcols ,lchnk )