Skip to content

Commit

Permalink
Merge branch 'whannah/atm/rcemip-phase-2-update' (PR #6616)
Browse files Browse the repository at this point in the history
This adds compsets and new output variables to facilitate the E3SM and E3SM-MMF
contributions to phase 1 & 2 of the radiative-convective equilibrium model inter-comparison project (RCEMIP).

NOTE: in the original RCE compsets there was a slight error in the value of constant_zenith_deg being off by 1/100. This difference is inconsequential, but I wanted to fix it here to ensure consistency with the other RCEMIP models.

[non-BFB] - only for RCE cases because of updated constant_zenith_deg value
  • Loading branch information
rljacob authored Sep 20, 2024
2 parents 663ad44 + 09e4ea5 commit cdb4ce6
Show file tree
Hide file tree
Showing 9 changed files with 125 additions and 7 deletions.
10 changes: 8 additions & 2 deletions components/data_comps/docn/cime_config/config_component.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
This file may have ocn desc entries.
-->
<description modifier_mode="1">
<desc ocn="DOCN[%NULL][%DOM][%SOM][%SOMAQP][%IAF][%SST_AQUAP][%AQP1][%AQP2][%AQP3][%AQP4][%AQP5][%AQP6][%AQP7][%AQP8][%AQP9][%AQP10][%AQPFILE][%AQPCONST]">DOCN </desc>
<desc ocn="DOCN[%NULL][%DOM][%SOM][%SOMAQP][%IAF][%SST_AQUAP][%AQP1][%AQP2][%AQP3][%AQP4][%AQP5][%AQP6][%AQP7][%AQP8][%AQP9][%AQP10][%AQP11][%AQP12][%AQP13][%AQP14][%AQP15][%AQPFILE][%AQPCONST]">DOCN </desc>
<desc option="NULL"> null mode</desc>
<desc option="DOM"> prescribed ocean mode</desc>
<desc option="SOM"> slab ocean mode</desc>
Expand Down Expand Up @@ -45,7 +45,7 @@

<entry id="DOCN_MODE">
<type>char</type>
<valid_values>prescribed,sst_aquap1,sst_aquap2,sst_aquap3,sst_aquap4,sst_aquap5,sst_aquap6,sst_aquap7,sst_aquap8,sst_aquap9,sst_aquap10,sst_aquapfile,som,som_aquap,sst_aquap_constant,interannual,null</valid_values>
<valid_values>prescribed,sst_aquap1,sst_aquap2,sst_aquap3,sst_aquap4,sst_aquap5,sst_aquap6,sst_aquap7,sst_aquap8,sst_aquap9,sst_aquap10,sst_aquap11,sst_aquap12,sst_aquap13,sst_aquap14,sst_aquap15,sst_aquapfile,som,som_aquap,sst_aquap_constant,interannual,null</valid_values>
<default_value>prescribed</default_value>
<values match="last">
<value compset="_DOCN%NULL_">null</value>
Expand All @@ -63,6 +63,12 @@
<value compset="_DOCN%AQP8_">sst_aquap8</value>
<value compset="_DOCN%AQP9_">sst_aquap9</value>
<value compset="_DOCN%AQP10_">sst_aquap10</value>
<!-- RCEMIP phase 2 Mock-Walker SST patterns -->
<value compset="_DOCN%AQP11_">sst_aquap11</value>
<value compset="_DOCN%AQP12_">sst_aquap12</value>
<value compset="_DOCN%AQP13_">sst_aquap13</value>
<value compset="_DOCN%AQP14_">sst_aquap14</value>
<value compset="_DOCN%AQP15_">sst_aquap15</value>
<value compset="_DOCN%AQPFILE_">sst_aquapfile</value>
<value compset="_DOCN%AQPCONST_">sst_aquap_constant</value>
</values>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@
<type>char</type>
<category>streams</category>
<group>shr_strdata_nml</group>
<valid_values>SSTDATA,SST_AQUAP1,SST_AQUAP2,SST_AQUAP3,SST_AQUAP4,SST_AQUAP5,SST_AQUAP6,SST_AQUAP7,SST_AQUAP8,SST_AQUAP9,SST_AQUAP10,SST_AQUAPFILE,SST_AQUAP_CONSTANT,SOM,SOM_AQUAP,IAF,NULL,COPYALL</valid_values>
<valid_values>SSTDATA,SST_AQUAP1,SST_AQUAP2,SST_AQUAP3,SST_AQUAP4,SST_AQUAP5,SST_AQUAP6,SST_AQUAP7,SST_AQUAP8,SST_AQUAP9,SST_AQUAP10,SST_AQUAP11,SST_AQUAP12,SST_AQUAP13,SST_AQUAP14,SST_AQUAP15,SST_AQUAPFILE,SST_AQUAP_CONSTANT,SOM,SOM_AQUAP,IAF,NULL,COPYALL</valid_values>
<desc>
General method that operates on the data. This is generally
implemented in the data models but is set in the strdata method for
Expand Down Expand Up @@ -323,6 +323,11 @@
<value docn_mode="sst_aquap8$">SST_AQUAP8</value>
<value docn_mode="sst_aquap9$">SST_AQUAP9</value>
<value docn_mode="sst_aquap10$">SST_AQUAP10</value>
<value docn_mode="sst_aquap11$">SST_AQUAP11</value>
<value docn_mode="sst_aquap12$">SST_AQUAP12</value>
<value docn_mode="sst_aquap13$">SST_AQUAP13</value>
<value docn_mode="sst_aquap14$">SST_AQUAP14</value>
<value docn_mode="sst_aquap15$">SST_AQUAP15</value>
<value docn_mode="sst_aquapfile$">SST_AQUAPFILE</value>
<value docn_mode="sst_aquap_constant$">SST_AQUAP_CONSTANT</value>
<value docn_mode="som$">SOM</value>
Expand Down
19 changes: 17 additions & 2 deletions components/data_comps/docn/src/docn_comp_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -984,6 +984,7 @@ subroutine prescribed_sst(xc, yc, lsize, sst_option, sst)
integer :: i
real(r8) :: tmp, tmp1, pi
real(r8) :: rlon(lsize), rlat(lsize)
real(r8) :: mean_SST, delta_SST

real(r8), parameter :: pio180 = SHR_CONST_PI/180._r8

Expand Down Expand Up @@ -1013,8 +1014,8 @@ subroutine prescribed_sst(xc, yc, lsize, sst_option, sst)

! Control

if (sst_option < 1 .or. sst_option > 10) then
call shr_sys_abort ('prescribed_sst: ERROR: sst_option must be between 1 and 10')
if (sst_option < 1 .or. sst_option > 15) then
call shr_sys_abort ('prescribed_sst: ERROR: sst_option must be between 1 and 15')
end if

if (sst_option == 1 .or. sst_option == 6 .or. sst_option == 7 .or. sst_option == 8) then
Expand Down Expand Up @@ -1174,6 +1175,20 @@ subroutine prescribed_sst(xc, yc, lsize, sst_option, sst)
end do
end if

!-------------------------------------------------------------------------------
! RCEMIP phase 2 - Mock-Walker
if (sst_option>=11 .and. sst_option<=15) then
if (sst_option==11) then; mean_SST = 295 - TkFrz; delta_SST = 1.250; end if ! MW_295dT1p25
if (sst_option==12) then; mean_SST = 300 - TkFrz; delta_SST = 0.625; end if ! MW_300dT0p625
if (sst_option==13) then; mean_SST = 300 - TkFrz; delta_SST = 1.250; end if ! MW_300dT1p25
if (sst_option==14) then; mean_SST = 300 - TkFrz; delta_SST = 2.500; end if ! MW_300dT2p5
if (sst_option==15) then; mean_SST = 305 - TkFrz; delta_SST = 1.250; end if ! MW_305dT1p25
do i = 1, lsize
sst(i) = mean_SST + (delta_SST/2) * cos( rlat(i) * 360/54 )
end do
end if
!-------------------------------------------------------------------------------

end subroutine prescribed_sst

end module docn_comp_mod
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<omega>0.0</omega>

<!-- NOTE: solar zenith angle, sfc albedo, and min sfc wind are set via user mods -->
<!-- see: cam/cime_config/usermods_dirs/rcemip/user_nl_cpl -->
<!-- see: components/eam/cime_config/usermods_dirs/rcemip/user_nl_cpl -->

<!-- ======================================================================= -->
<!-- Constant hydrometeor number -->
Expand Down
44 changes: 44 additions & 0 deletions components/eam/cime_config/config_compsets.xml
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,50 @@
<lname>2000_EAM%RCE-MMF2_SLND_SICE_DOCN%AQPCONST_SROF_SGLC_SWAV</lname>
</compset>

<!-- Mock-Walker RCE for RCEMIP phase 2 -->
<compset>
<alias>FRCE-MW_295dT1p25</alias>
<lname>2000_EAM%RCE_SLND_SICE_DOCN%AQP11_SROF_SGLC_SWAV</lname>
</compset>
<compset>
<alias>FRCE-MW_300dT0p625</alias>
<lname>2000_EAM%RCE_SLND_SICE_DOCN%AQP12_SROF_SGLC_SWAV</lname>
</compset>
<compset>
<alias>FRCE-MW_300dT1p25</alias>
<lname>2000_EAM%RCE_SLND_SICE_DOCN%AQP13_SROF_SGLC_SWAV</lname>
</compset>
<compset>
<alias>FRCE-MW_300dT2p5</alias>
<lname>2000_EAM%RCE_SLND_SICE_DOCN%AQP14_SROF_SGLC_SWAV</lname>
</compset>
<compset>
<alias>FRCE-MW_305dT1p25</alias>
<lname>2000_EAM%RCE_SLND_SICE_DOCN%AQP15_SROF_SGLC_SWAV</lname>
</compset>

<compset>
<alias>FRCE-MW-MMF1_295dT1p25</alias>
<lname>2000_EAM%RCE-MMF1_SLND_SICE_DOCN%AQP11_SROF_SGLC_SWAV</lname>
</compset>
<compset>
<alias>FRCE-MW-MMF1_300dT0p625</alias>
<lname>2000_EAM%RCE-MMF1_SLND_SICE_DOCN%AQP12_SROF_SGLC_SWAV</lname>
</compset>
<compset>
<alias>FRCE-MW-MMF1_300dT1p25</alias>
<lname>2000_EAM%RCE-MMF1_SLND_SICE_DOCN%AQP13_SROF_SGLC_SWAV</lname>
</compset>
<compset>
<alias>FRCE-MW-MMF1_300dT2p5</alias>
<lname>2000_EAM%RCE-MMF1_SLND_SICE_DOCN%AQP14_SROF_SGLC_SWAV</lname>
</compset>
<compset>
<alias>FRCE-MW-MMF1_305dT1p25</alias>
<lname>2000_EAM%RCE-MMF1_SLND_SICE_DOCN%AQP15_SROF_SGLC_SWAV</lname>
</compset>


<!-- *********************************** -->
<!-- idealized / adiabatic -->
<!-- *********************************** -->
Expand Down
3 changes: 2 additions & 1 deletion components/eam/cime_config/usermods_dirs/rcemip/user_nl_cpl
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ seq_flux_mct_albdif = 0.07
seq_flux_mct_albdir = 0.07
seq_flux_atmocn_minwind = 1

constant_zenith_deg = 42.05
constant_zenith_deg = 42.04

9 changes: 9 additions & 0 deletions components/eam/src/physics/cam/cam_diagnostics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,7 @@ subroutine diag_init()
call addfld ('MQ',(/ 'lev' /), 'A','kg/m2','Water vapor mass in layer')
call addfld ('TMQ',horiz_only, 'A','kg/m2','Total (vertically integrated) precipitable water', &
standard_name='atmosphere_mass_content_of_water_vapor')
call addfld ('TMQS',horiz_only, 'A','kg/m2','Total (vertically integrated) saturated precipitable water')
call addfld ('TTQ',horiz_only, 'A', 'kg/m/s','Total (vertically integrated) vapor transport')
call addfld ('TUQ',horiz_only, 'A','kg/m/s','Total (vertically integrated) zonal water flux')
call addfld ('TVQ',horiz_only, 'A','kg/m/s','Total (vertically integrated) meridional water flux')
Expand Down Expand Up @@ -1368,6 +1369,14 @@ subroutine diag_phys_writeout(state, psl)

if (moist_physics) then

! Mass of saturated q vertically integrated
call qsat(state%t(:ncol,:), state%pmid(:ncol,:), tem2(:ncol,:), ftem(:ncol,:))
ftem(:ncol,:) = ftem(:ncol,:) * state%pdel(:ncol,:) * rga
do k=2,pver
ftem(:ncol,1) = ftem(:ncol,1) + ftem(:ncol,k)
end do
call outfld ('TMQS ',ftem, pcols ,lchnk )

! Relative humidity
call qsat(state%t(:ncol,:), state%pmid(:ncol,:), &
tem2(:ncol,:), ftem(:ncol,:))
Expand Down
19 changes: 19 additions & 0 deletions components/eam/src/physics/crm/rrtmgp/radiation.F90
Original file line number Diff line number Diff line change
Expand Up @@ -768,6 +768,18 @@ subroutine radiation_init(state)
call addfld('FLNTC'//diag(icall), horiz_only, 'A', 'W/m2', &
'Clearsky net longwave flux at top of model', &
sampling_seq='rad_lwsw', flag_xyfill=.true.)
call addfld('FLUTOA'//diag(icall), horiz_only, 'A', 'W/m2', &
'Upwelling longwave flux at top of atmosphere', &
sampling_seq='rad_lwsw', flag_xyfill=.true.)
call addfld('FLNTOA'//diag(icall), horiz_only, 'A', 'W/m2', &
'Net longwave flux at top of atmosphere', &
sampling_seq='rad_lwsw', flag_xyfill=.true.)
call addfld('FLUTOAC'//diag(icall), horiz_only, 'A', 'W/m2', &
'Clearsky upwelling longwave flux at top of atmosphere', &
sampling_seq='rad_lwsw', flag_xyfill=.true.)
call addfld('FLNTOAC'//diag(icall), horiz_only, 'A', 'W/m2', &
'Clearsky net longwave flux at top of atmosphere', &
sampling_seq='rad_lwsw', flag_xyfill=.true.)
call addfld('LWCF'//diag(icall), horiz_only, 'A', 'W/m2', &
'Longwave cloud forcing', &
sampling_seq='rad_lwsw', flag_xyfill=.true.)
Expand Down Expand Up @@ -2494,6 +2506,7 @@ subroutine output_fluxes_lw(icall, state, flux_all, flux_clr, qrl, qrlc)
! Working arrays
real(r8), dimension(pcols,pver+1) :: flux_up, flux_dn, flux_net
integer :: ncol
integer :: ktop_rad = 1

ncol = state%ncol

Expand Down Expand Up @@ -2531,6 +2544,12 @@ subroutine output_fluxes_lw(icall, state, flux_all, flux_clr, qrl, qrlc)
call outfld('FLUTC'//diag(icall), flux_clr%flux_up(1:ncol,ktop), ncol, state%lchnk)
call outfld('FLDSC'//diag(icall), flux_clr%flux_dn(1:ncol,kbot+1), ncol, state%lchnk)

! TOA fluxes (above model top, use index to rad top)
call outfld('FLUTOA'//diag(icall), flux_all%flux_up(1:ncol,ktop_rad), ncol, state%lchnk)
call outfld('FLNTOA'//diag(icall), flux_all%flux_net(1:ncol,ktop_rad), ncol, state%lchnk)
call outfld('FLUTOAC'//diag(icall), flux_clr%flux_up(1:ncol,ktop_rad), ncol, state%lchnk)
call outfld('FLNTOAC'//diag(icall), flux_clr%flux_net(1:ncol,ktop_rad), ncol, state%lchnk)

! Calculate and output the cloud radiative effect (LWCF in history)
cloud_radiative_effect(1:ncol) = flux_all%flux_net(1:ncol,ktop) - flux_clr%flux_net(1:ncol,ktop)
call outfld('LWCF'//diag(icall), cloud_radiative_effect, ncol, state%lchnk)
Expand Down
19 changes: 19 additions & 0 deletions components/eam/src/physics/rrtmgp/radiation.F90
Original file line number Diff line number Diff line change
Expand Up @@ -767,6 +767,18 @@ subroutine radiation_init(state,pbuf)
call addfld('FLNTC'//diag(icall), horiz_only, 'A', 'W/m2', &
'Clearsky net longwave flux at top of model', &
sampling_seq='rad_lwsw', flag_xyfill=.true.)
call addfld('FLUTOA'//diag(icall), horiz_only, 'A', 'W/m2', &
'Upwelling longwave flux at top of atmosphere', &
sampling_seq='rad_lwsw', flag_xyfill=.true.)
call addfld('FLNTOA'//diag(icall), horiz_only, 'A', 'W/m2', &
'Net longwave flux at top of atmosphere', &
sampling_seq='rad_lwsw', flag_xyfill=.true.)
call addfld('FLUTOAC'//diag(icall), horiz_only, 'A', 'W/m2', &
'Clearsky upwelling longwave flux at top of atmosphere', &
sampling_seq='rad_lwsw', flag_xyfill=.true.)
call addfld('FLNTOAC'//diag(icall), horiz_only, 'A', 'W/m2', &
'Clearsky net longwave flux at top of atmosphere', &
sampling_seq='rad_lwsw', flag_xyfill=.true.)
call addfld('LWCF'//diag(icall), horiz_only, 'A', 'W/m2', &
'Longwave cloud forcing', &
sampling_seq='rad_lwsw', flag_xyfill=.true.)
Expand Down Expand Up @@ -2375,6 +2387,7 @@ subroutine output_fluxes_lw(icall, state, flux_all, flux_clr, qrl, qrlc)
! Working arrays
real(r8), dimension(pcols,pver+1) :: flux_up, flux_dn, flux_net
integer :: ncol
integer :: ktop_rad = 1

ncol = state%ncol

Expand Down Expand Up @@ -2412,6 +2425,12 @@ subroutine output_fluxes_lw(icall, state, flux_all, flux_clr, qrl, qrlc)
call outfld('FLUTC'//diag(icall), flux_clr%flux_up(1:ncol,ktop), ncol, state%lchnk)
call outfld('FLDSC'//diag(icall), flux_clr%flux_dn(1:ncol,kbot+1), ncol, state%lchnk)

! TOA fluxes (above model top, use index to rad top)
call outfld('FLUTOA'//diag(icall), flux_all%flux_up(1:ncol,ktop_rad), ncol, state%lchnk)
call outfld('FLNTOA'//diag(icall), flux_all%flux_net(1:ncol,ktop_rad), ncol, state%lchnk)
call outfld('FLUTOAC'//diag(icall), flux_clr%flux_up(1:ncol,ktop_rad), ncol, state%lchnk)
call outfld('FLNTOAC'//diag(icall), flux_clr%flux_net(1:ncol,ktop_rad), ncol, state%lchnk)

! Calculate and output the cloud radiative effect (LWCF in history)
cloud_radiative_effect(1:ncol) = flux_all%flux_net(1:ncol,ktop) - flux_clr%flux_net(1:ncol,ktop)
call outfld('LWCF'//diag(icall), cloud_radiative_effect, ncol, state%lchnk)
Expand Down

0 comments on commit cdb4ce6

Please sign in to comment.