Skip to content

Commit c8bf04e

Browse files
authored
Merge pull request #1296 from jimmielin/hplin/rair
cam6_4_088: Replace magic numbers 287.15 with rair in physconst
2 parents e3bfb9a + a6b4e35 commit c8bf04e

5 files changed

Lines changed: 154 additions & 12 deletions

File tree

doc/ChangeLog

Lines changed: 144 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,148 @@
11
===============================================================
22

3+
Tag name: cam6_4_088
4+
Originator(s): jimmielin
5+
Date: 22 April 2025
6+
One-line Summary: Replace magic numbers 287.15 with rair in physconst
7+
Github PR URL: https://github.com/ESCOMP/CAM/pull/1296
8+
9+
Purpose of changes (include the issue number and title text for each relevant GitHub issue):
10+
- Unify rair constant in CAM calculations (#1292)
11+
12+
Describe any changes made to build system: N/A
13+
14+
Describe any changes made to the namelist: N/A
15+
16+
List any changes to the defaults for the boundary datasets: N/A
17+
18+
Describe any substantial timing or memory changes: N/A
19+
20+
Code reviewed by: cacraig
21+
22+
List all files eliminated: N/A
23+
24+
List all files added and what they do: N/A
25+
26+
List all existing files that have been modified, and describe the changes:
27+
M src/physics/cam/cloud_diagnostics.F90
28+
M src/physics/cam/micro_pumas_cam.F90
29+
M src/physics/cam/rk_stratiform_cam.F90
30+
M src/physics/cam7/micro_pumas_cam.F90
31+
- Replace 287.15 magic number with rair (~287.05)
32+
33+
If there were any failures reported from running test_driver.sh on any test
34+
platform, and checkin with these failures has been OK'd by the gatekeeper,
35+
then copy the lines from the td.*.status files for the failed tests to the
36+
appropriate machine below. All failed tests must be justified.
37+
38+
derecho/intel/aux_cam:
39+
ERC_D_Ln9.f19_f19_mg17.QPC6.derecho_intel.cam-outfrq3s_cosp (Overall: DIFF) details:
40+
ERC_D_Ln9.ne16_ne16_mg17.QPC5HIST.derecho_intel.cam-outfrq3s_usecase (Overall: DIFF) details:
41+
ERC_D_Ln9.ne30pg2_ne30pg2_mt232.QPC7.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
42+
ERC_D_Ln9_P144x1.ne16pg3_ne16pg3_mg17.QPC6HIST.derecho_intel.cam-outfrq3s_ttrac_usecase (Overall: DIFF) details:
43+
ERP_D_Ln9.ne30pg3_ne30pg3_mt232.FHISTC_LTso.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
44+
ERP_D_Ln9.ne30pg3_ne30pg3_mt232.QPC7.derecho_intel.cam-outfrq3s_cosp (Overall: DIFF) details:
45+
ERP_D_Ln9_P64x2.f09_f09_mg17.QSC6.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
46+
ERP_Ld3.ne30pg3_ne30pg3_mt232.FHISTC_MTt4s.derecho_intel.cam-outfrq1d_aoa (Overall: DIFF) details:
47+
ERP_Ln9.C96_C96_mg17.F2000climo.derecho_intel.cam-outfrq9s_mg3 (Overall: DIFF) details:
48+
ERP_Ln9.f09_f09_mg17.F1850.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
49+
ERP_Ln9.f09_f09_mg17.F2000climo.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
50+
ERP_Ln9.f09_f09_mg17.F2010climo.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
51+
ERP_Ln9.f09_f09_mg17.FHIST_BDRD.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
52+
ERP_Ln9.f19_f19_mg17.FWsc1850.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
53+
ERP_Ln9.ne30pg3_ne30pg3_mg17.FCnudged.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
54+
ERP_Ln9.ne30pg3_ne30pg3_mg17.FHISTC_WAma.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
55+
ERS_D_Ln9.mpasa480_mpasa480.F2000climo.derecho_intel.cam-outfrq9s_mpasa480_pertlim (Overall: DIFF) details:
56+
ERS_Ln9.f09_f09_mg17.FX2000.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
57+
ERS_Ln9.f19_f19_mg17.FXSD.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
58+
ERS_Ln9.ne30pg3_ne30pg3_mg17.FHISTC_WXma.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
59+
ERS_Ln9_P288x1.mpasa120_mpasa120.F2000climo.derecho_intel.cam-outfrq9s_mpasa120 (Overall: DIFF) details:
60+
SMS_C2_D_Ln9.ne16pg3_ne16pg3_mg17.FHISTC_WXma.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
61+
SMS_D_Ld2.f19_f19_mg17.QPC5HIST.derecho_intel.cam-volc_usecase (Overall: DIFF) details:
62+
SMS_D_Ln9.f09_f09_mg17.FCts2nudged.derecho_intel.cam-outfrq9s_leapday (Overall: DIFF) details:
63+
SMS_D_Ln9.f09_f09_mg17.FCvbsxHIST.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
64+
SMS_D_Ln9.f09_f09_mg17.FSD.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
65+
SMS_D_Ln9.f19_f19_mg17.FWma2000climo.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
66+
SMS_D_Ln9.f19_f19_mg17.FWma2000climo.derecho_intel.cam-outfrq9s_waccm_ma_mam4 (Overall: DIFF) details:
67+
SMS_D_Ln9.f19_f19_mg17.QPC2000climo.derecho_intel.cam-outfrq3s_usecase (Overall: DIFF) details:
68+
SMS_D_Ln9.f19_f19_mg17.QPC5M7.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
69+
SMS_D_Ln9.ne30pg3_ne30pg3_mt232.FHISTC_MTso.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
70+
SMS_D_Ln9_P1280x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.derecho_intel.cam-outfrq9s (Overall: DIFF) details:
71+
SMS_D_Ln9_P1280x1.ne30pg3_ne30pg3_mt232.FHISTC_MTt1s.derecho_intel.cam-outfrq9s_Leung_dust (Overall: DIFF) details:
72+
SMS_Ld1.f09_f09_mg17.FCHIST_GC.derecho_intel.cam-outfrq1d (Overall: DIFF) details:
73+
SMS_Ld1.f09_f09_mg17.FW2000climo.derecho_intel.cam-outfrq1d (Overall: DIFF) details:
74+
SMS_Ld1.ne30pg3_ne30pg3_mg17.FC2010climo.derecho_intel.cam-outfrq1d (Overall: DIFF) details:
75+
SMS_Lh12.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq3h (Overall: DIFF) details:
76+
SMS_Ln9.f19_f19_mg17.FHIST.derecho_intel.cam-outfrq9s_nochem (Overall: DIFF) details:
77+
SMS_Ln9.ne30pg3_ne30pg3_mg17.FW2000climo.derecho_intel.cam-outfrq9s_rrtmgp (Overall: DIFF) details:
78+
- diagnostic changes (IWC, LWC, AWNC, AWNI) only due to change of magic number to rair
79+
80+
SMS_Ld1.f09_f09_mg17.FCHIST_GC.derecho_intel.cam-outfrq1d (Overall: DIFF) details:
81+
ERP_Ln9.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq9s (Overall: FAIL) details:
82+
FAIL ERP_Ln9.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq9s COMPARE_base_rest
83+
- pre-existing failures due to HEMCO not having reproducible results (issues #1018 and #856)
84+
85+
SMS_D_Ln9_P1280x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.derecho_intel.cam-outfrq9s (Overall: FAIL) details:
86+
FAIL SMS_D_Ln9_P1280x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.derecho_intel.cam-outfrq9s SETUP
87+
- pre-existing failure due to build-namelist error requiring CLM/CTSM external update
88+
89+
derecho/nvhpc/aux_cam:
90+
ERS_Ln9.ne30pg3_ne30pg3_mg17.F2000dev.derecho_nvhpc.cam-outfrq9s_gpu_default (Overall: DIFF) details:
91+
- diagnostic changes (IWC, AWNC, AWNI) only due to change of magic number to rair
92+
93+
izumi/nag/aux_cam:
94+
ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-carma_sea_salt (Overall: DIFF) details:
95+
ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_cosp (Overall: DIFF) details:
96+
ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_subcol (Overall: DIFF) details:
97+
ERC_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am (Overall: DIFF) details:
98+
ERC_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist (Overall: DIFF) details:
99+
ERC_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s (Overall: DIFF) details:
100+
ERC_D_Ln9.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s (Overall: DIFF) details:
101+
ERC_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-outfrq3s_ttrac (Overall: DIFF) details:
102+
ERI_D_Ln18.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac (Overall: DIFF) details:
103+
ERI_D_Ln18.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 (Overall: DIFF) details:
104+
ERP_Ln9.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: DIFF) details:
105+
PLB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 (Overall: DIFF) details:
106+
PLB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 (Overall: DIFF) details:
107+
PLB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 (Overall: DIFF) details:
108+
PLB_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 (Overall: DIFF) details:
109+
PLB_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 (Overall: DIFF) details:
110+
PLB_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 (Overall: DIFF) details:
111+
SMS_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-rad_diag_mam (Overall: DIFF) details:
112+
SMS_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_ba (Overall: DIFF) details:
113+
SMS_P48x1_D_Ln3.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase (Overall: DIFF) details:
114+
SUB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s (Overall: DIFF) details:
115+
TMC_D.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac (Overall: DIFF) details:
116+
- diagnostic changes (IWC, LWC, AWNC, AWNI) only due to change of magic number to rair
117+
118+
izumi/gnu/aux_cam:
119+
ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_gnu.cam-outfrq3s_unicon (Overall: DIFF) details:
120+
ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_gnu.cam-rad_diag (Overall: DIFF) details:
121+
ERC_D_Ln9.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq3s_ba (Overall: DIFF) details:
122+
ERP_D_Ln9.C48_C48_mg17.QPC6.izumi_gnu.cam-outfrq9s (Overall: DIFF) details:
123+
ERP_D_Ln9.ne3pg3_ne3pg3_mg37.FHISTC_LTso.izumi_gnu.cam-outfrq9s (Overall: DIFF) details:
124+
ERP_D_Ln9.ne3pg3_ne3pg3_mg37.QPC7.izumi_gnu.cam-outfrq9s (Overall: DIFF) details:
125+
ERP_Ln9.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq9s (Overall: DIFF) details:
126+
ERP_Ln9_P24x2.f45_f45_mg37.QPWmaC6.izumi_gnu.cam-outfrq9s_mee_fluxes (Overall: DIFF) details:
127+
ERR_D_Ln9.ne3pg3_ne3pg3_mg37.FHISTC_LTso.izumi_gnu.cam-outfrq9s (Overall: DIFF) details:
128+
ERS_Ln9_P24x1.mpasa480_mpasa480.F2000climo.izumi_gnu.cam-outfrq9s_mpasa480 (Overall: DIFF) details:
129+
PLB_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal0 (Overall: DIFF) details:
130+
PLB_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal1 (Overall: DIFF) details:
131+
PLB_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal3 (Overall: DIFF) details:
132+
SMS_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-outfrq3s_ttrac (Overall: DIFF) details:
133+
- diagnostic changes (IWC, LWC, AWNC, AWNI) only due to change of magic number to rair
134+
135+
CAM tag used for the baseline comparison tests if different than previous
136+
tag: N/A
137+
138+
Summarize any changes to answers:
139+
For CAM4: IWC, LWC, wsedl pbuf change
140+
For CAM5/6/7: Diagnostic only changes (cloud_diagnostics: IWC, LWC; PUMAS: AWNC, AWNI)
141+
Except diagnostic fields model state is b4b
142+
143+
===============================================================
144+
145+
3146
Tag name: cam6_4_087
4147
Originator(s): eaton
5148
Date: 21 April 2025
@@ -93,7 +236,7 @@ src/physics/rrtmgp/radiation.F90
93236

94237
src/physics/simple/frierson_cam.F90
95238
. remove PREC_DP from pbuf; it wasn't being used. This was causing a
96-
restart failure when PRECC was requested in the output.
239+
restart failure when PRECC was requested in the output.
97240

98241
If there were any failures reported from running test_driver.sh on any test
99242
platform, and checkin with these failures has been OK'd by the gatekeeper,

src/physics/cam/cloud_diagnostics.F90

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ subroutine cloud_diagnostics_calc(state, pbuf)
225225
use radiation, only: radiation_do
226226
use cloud_cover_diags, only: cloud_cover_diags_out
227227
use phys_control, only: phys_getopts
228+
use physconst, only: rair
228229

229230
use ref_pres, only: top_lev=>trop_cloud_top_lev
230231

@@ -404,8 +405,8 @@ subroutine cloud_diagnostics_calc(state, pbuf)
404405
! in-cloud mixing ratio maximum limit of 0.005 kg/kg
405406
icimr(i,k) = min( allcld_ice(i,k) / max(0.0001_r8,cld(i,k)),0.005_r8 )
406407
icwmr(i,k) = min( allcld_liq(i,k) / max(0.0001_r8,cld(i,k)),0.005_r8 )
407-
iwc(i,k) = allcld_ice(i,k) * state%pmid(i,k) / (287.15_r8*state%t(i,k))
408-
lwc(i,k) = allcld_liq(i,k) * state%pmid(i,k) / (287.15_r8*state%t(i,k))
408+
iwc(i,k) = allcld_ice(i,k) * state%pmid(i,k) / (rair*state%t(i,k))
409+
lwc(i,k) = allcld_liq(i,k) * state%pmid(i,k) / (rair*state%t(i,k))
409410
! Calculate total cloud water paths in each layer
410411
iciwp(i,k) = icimr(i,k) * state%pdel(i,k) / gravit
411412
iclwp(i,k) = icwmr(i,k) * state%pdel(i,k) / gravit

src/physics/cam/micro_pumas_cam.F90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2641,9 +2641,9 @@ subroutine micro_pumas_cam_tend(state, ptend, dtime, pbuf)
26412641
icimrst(i,k) = min( state_loc%q(i,k,ixcldice) / max(mincld,icecldf(i,k)),0.005_r8 )
26422642
icwmrst(i,k) = min( state_loc%q(i,k,ixcldliq) / max(mincld,liqcldf(i,k)),0.005_r8 )
26432643
icinc(i,k) = state_loc%q(i,k,ixnumice) / max(mincld,icecldf(i,k)) * &
2644-
state_loc%pmid(i,k) / (287.15_r8*state_loc%t(i,k))
2644+
state_loc%pmid(i,k) / (rair*state_loc%t(i,k))
26452645
icwnc(i,k) = state_loc%q(i,k,ixnumliq) / max(mincld,liqcldf(i,k)) * &
2646-
state_loc%pmid(i,k) / (287.15_r8*state_loc%t(i,k))
2646+
state_loc%pmid(i,k) / (rair*state_loc%t(i,k))
26472647
! Calculate micro_pumas_cam cloud water paths in each layer
26482648
! Note: uses stratiform cloud fraction!
26492649
iciwpst(i,k) = min(state_loc%q(i,k,ixcldice)/max(mincld,ast(i,k)),0.005_r8) * state_loc%pdel(i,k) / gravit

src/physics/cam/rk_stratiform_cam.F90

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -514,8 +514,6 @@ subroutine rk_stratiform_cam_tend( &
514514
integer :: ncol ! Number of atmospheric columns
515515
integer :: itim_old
516516

517-
real(r8), parameter :: rdair = 287.15_r8
518-
519517
! Physics buffer fields
520518
real(r8), pointer :: landm(:) ! Land fraction ramped over water
521519

@@ -744,7 +742,7 @@ subroutine rk_stratiform_cam_tend( &
744742
call endrun('rk_stratiform_tend:' // errmsg)
745743
endif
746744

747-
wsedl(:ncol,:pver) = pvliq(:ncol,:pver)/gravit/(state1%pmid(:ncol,:pver)/(rdair*state1%t(:ncol,:pver)))
745+
wsedl(:ncol,:pver) = pvliq(:ncol,:pver)/gravit/(state1%pmid(:ncol,:pver)/(rair*state1%t(:ncol,:pver)))
748746

749747
!REMOVECAM - no longer need these when CAM is retired and pcols no longer exists
750748
prec_sed(:) = 0._r8
@@ -1326,8 +1324,8 @@ subroutine rk_stratiform_cam_tend( &
13261324

13271325
do k = 1, pver
13281326
do i = 1, ncol
1329-
iwc(i,k) = state1%q(i,k,ixcldice)*state1%pmid(i,k)/(rdair*state1%t(i,k))
1330-
lwc(i,k) = state1%q(i,k,ixcldliq)*state1%pmid(i,k)/(rdair*state1%t(i,k))
1327+
iwc(i,k) = state1%q(i,k,ixcldice)*state1%pmid(i,k)/(rair*state1%t(i,k))
1328+
lwc(i,k) = state1%q(i,k,ixcldliq)*state1%pmid(i,k)/(rair*state1%t(i,k))
13311329
icimr(i,k) = state1%q(i,k,ixcldice) / max(0.01_r8,rhcloud(i,k))
13321330
icwmr(i,k) = state1%q(i,k,ixcldliq) / max(0.01_r8,rhcloud(i,k))
13331331
end do

src/physics/cam7/micro_pumas_cam.F90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2700,9 +2700,9 @@ subroutine micro_pumas_cam_tend(state, ptend, dtime, pbuf)
27002700
icimrst(i,k) = min( state_loc%q(i,k,ixcldice) / max(mincld,icecldf(i,k)),0.005_r8 )
27012701
icwmrst(i,k) = min( state_loc%q(i,k,ixcldliq) / max(mincld,liqcldf(i,k)),0.005_r8 )
27022702
icinc(i,k) = state_loc%q(i,k,ixnumice) / max(mincld,icecldf(i,k)) * &
2703-
state_loc%pmid(i,k) / (287.15_r8*state_loc%t(i,k))
2703+
state_loc%pmid(i,k) / (rair*state_loc%t(i,k))
27042704
icwnc(i,k) = state_loc%q(i,k,ixnumliq) / max(mincld,liqcldf(i,k)) * &
2705-
state_loc%pmid(i,k) / (287.15_r8*state_loc%t(i,k))
2705+
state_loc%pmid(i,k) / (rair*state_loc%t(i,k))
27062706
! Calculate micro_pumas_cam cloud water paths in each layer
27072707
! Note: uses stratiform cloud fraction!
27082708
iciwpst(i,k) = min(state_loc%q(i,k,ixcldice)/max(mincld,ast(i,k)),0.005_r8) * state_loc%pdel(i,k) / gravit

0 commit comments

Comments
 (0)