Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
38b48a9
Adds TEMPO cloud fraction control flag and initial variables -- sgs c…
AndersJensen-NOAA Jul 10, 2025
aa36d4a
Adds SGS prognostic cloud fraction and water to MPAS interface, micro…
AndersJensen-NOAA Jul 11, 2025
a41b88f
Adds cloud fraction module to TEMPO
AndersJensen-NOAA Jul 11, 2025
531dc29
Fix cloud fraction scalar index names
AndersJensen-NOAA Jul 11, 2025
c24a709
Intial version of cloud fraction scheme for testing: creates sgs clou…
AndersJensen-NOAA Jul 11, 2025
609d1d3
Cloud fraction module with large-scale evolution and erosion
AndersJensen-NOAA Jul 11, 2025
b2b0550
Cloud fraction tuning and addition of in-cloud calculations for qr
AndersJensen-NOAA Jul 13, 2025
d44d9f1
Adds qi_sgs, sgs cloud ice
AndersJensen-NOAA Jul 14, 2025
ce48a4f
Adds full hookup of sgs cloud water, ice, rain, snow
AndersJensen-NOAA Jul 14, 2025
ae12a47
Adds connection between TEMPO cloud fraction and radiation
AndersJensen-NOAA Jul 14, 2025
84e925e
refactored cloud fraction / separate liquid and ice
AndersJensen-NOAA Aug 10, 2025
92beb51
Final refactor
AndersJensen-NOAA Aug 15, 2025
b9a19d3
Complete hookup to TEMPO
AndersJensen-NOAA Aug 19, 2025
e46f1f2
Addss prognostic cloud fraction to PBL driver
AndersJensen-NOAA Aug 20, 2025
7c6f49f
Pull in gsl/develop
AndersJensen-NOAA Sep 5, 2025
d2398f6
Correct pointer to MYNN
AndersJensen-NOAA Sep 5, 2025
8c8f91c
Roll back MYNN to pre-smoke changes
AndersJensen-NOAA Sep 10, 2025
8401b9c
Merge branch 'gsl/develop' into feature/sgs
AndersJensen-NOAA Sep 10, 2025
73a282f
Tuning cloud fraction scheme to reduce clouds and precipitation
AndersJensen-NOAA Sep 17, 2025
5099110
Update pointer to TEMPO with bugfix changes
AndersJensen-NOAA Sep 19, 2025
e58c070
Cloud fraction v3 tuning
AndersJensen-NOAA Sep 22, 2025
7850397
Add snow to cloud ice for radiation if significant amount of cloud ice
AndersJensen-NOAA Sep 30, 2025
917c9d5
Update TEMPO pointer
AndersJensen-NOAA Sep 30, 2025
79bc0ef
mods to radiation coupling based on suggestions from Dustin
AndersJensen-NOAA Dec 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 33 additions & 2 deletions src/core_atmosphere/Registry.xml
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,7 @@
<package name="mp_tempo_in" description="parameterization of TEMPO cloud microphysics."/>
<package name="tempo_aerosolaware_in" description="variables for TEMPO with aerosol-aware microphysics."/>
<package name="tempo_hailaware_in" description="variables for TEMPO hail-aware microphysics."/>
<package name="tempo_cldfra_in" description="variables for TEMPO prognostic cloud fraction microphysics."/>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Annoying comment: there are two spaces between "fraction" and "microphysics."

<package name="mp_wsm6_in" description="parameterization of WSM6 cloud microphysics."/>
<package name="mp_nssl2m_in" description="parameterization of NSSL 2-moment microphysics."/>
<package name="nssl3m_in" description="variables for NSSL 3-moment microphysics."/>
Expand Down Expand Up @@ -2113,6 +2114,14 @@
<var name="nwfa" array_group="number" units="nb kg^{-1}"
description="Water-friendly aerosol number concentration"
packages="mp_thompson_aers_in;tempo_aerosolaware_in"/>

<var name="qal" array_group="passive" units=""
description="Prognostic loud liquid fraction"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

loud --> cloud?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that is kind of a loud typo

packages="tempo_cldfra_in"/>

<var name="qai" array_group="passive" units=""
description="Prognostic cloud ice fraction"
packages="tempo_cldfra_in"/>
</var_array>
#endif

Expand Down Expand Up @@ -2504,6 +2513,14 @@
<var name="tend_nwfa" name_in_code="nwfa" array_group="number" units="nb m^{-3} s^{-1}"
description="Tendency of water-friendly aerosol number concentration multiplied by dry air density divided by d(zeta)/dz"
packages="mp_thompson_aers_in;tempo_aerosolaware_in"/>

<var name="tend_qal" name_in_code="qal" array_group="passive" units=""
description="Tendency of prognostic cloud liquid fraction multiplied by dry air density divided by d(zeta)/dz"
packages="tempo_cldfra_in"/>

<var name="tend_qai" name_in_code="qai" array_group="passive" units=""
description="Tendency of prognostic cloud ice fraction multiplied by dry air density divided by d(zeta)/dz"
packages="tempo_cldfra_in"/>
</var_array>
#endif
</var_struct>
Expand Down Expand Up @@ -2603,6 +2620,14 @@
<var name="lbc_nwfa" name_in_code="nwfa" array_group="number" packages="mp_thompson_aers_in;tempo_aerosolaware_in"
units="m^{-3} s^{-1}"
description="Lateral boundary tendency of water-friendly aerosol number concentration"/>

<var name="lbc_qal" name_in_code="qal" array_group="passive" packages="tempo_cldfra_in"
units=""
description="Lateral boundary tendency of prognostic cloud liquid fraction"/>

<var name="lbc_qai" name_in_code="qai" array_group="passive" packages="tempo_cldfra_in"
units=""
description="Lateral boundary tendency of prognostic cloud ice fraction"/>
</var_array>
</var_struct>

Expand Down Expand Up @@ -2775,7 +2800,10 @@
units="-"
description="Logical flag to turn on/off prognostic cloud fraction"
possible_values=".true. or .false."/>

<nml_option name="config_tempo_incld" type="logical" default_value="false" in_defaults="false"
units="-"
description="Logical flag to turn on/off in-cloud microphysics when config_tempo_cldfra is true"
possible_values=".true. or .false."/>
<nml_option name="config_tempo_ml_nc_pbl" type="logical" default_value="false" in_defaults="false"
units="-"
description="Logical flag to turn on/off ML prediction of boundary layer cloud number concentrations"
Expand Down Expand Up @@ -2844,7 +2872,7 @@
<nml_option name="config_radt_cld_scheme" type="character" default_value="suite" in_defaults="false"
units="-"
description="configuration for calculation of horizontal cloud fraction"
possible_values="`suite',`cld_fraction',`cld_incidence',`cld_fraction_thompson',`cld_fraction_mynn'"/>
possible_values="`suite',`cld_fraction',`cld_incidence',`cld_fraction_thompson',`cld_fraction_mynn',`cld_tempo'"/>

<nml_option name="config_radt_lw_scheme" type="character" default_value="suite" in_defaults="false"
units="-"
Expand Down Expand Up @@ -3168,6 +3196,9 @@
<var name="precipw" type="real" dimensions="nCells Time" units="kg m^{-2}"
description="precipitable water"/>

<var name="precipfrac" type="real" dimensions="nVertLevels nCells Time" units=""
description="rain/snow precipitation fraction"
packages="tempo_cldfra_in"/>

<!-- ================================================================================================== -->
<!-- ... PARAMETERIZATION OF CONVECTION: -->
Expand Down
12 changes: 7 additions & 5 deletions src/core_atmosphere/physics/mpas_atmphys_control.F
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,9 @@ subroutine physics_namelist_check(configs)
config_radt_lw_scheme, &
config_radt_sw_scheme, &
config_sfclayer_scheme
integer,pointer:: config_mynn_cloudpdf

logical,pointer:: config_tempo_cldfra
integer,pointer:: config_mynn_cloudpdf
!-----------------------------------------------------------------------------------------------------------------
!call mpas_log_write('')
!call mpas_log_write('--- enter subroutine physics_namelist_check:')
Expand All @@ -122,8 +123,8 @@ subroutine physics_namelist_check(configs)
call mpas_pool_get_config(configs,'config_radt_lw_scheme' ,config_radt_lw_scheme )
call mpas_pool_get_config(configs,'config_radt_sw_scheme' ,config_radt_sw_scheme )
call mpas_pool_get_config(configs,'config_sfclayer_scheme' ,config_sfclayer_scheme )
call mpas_pool_get_config(configs,'config_tempo_cldfra' ,config_tempo_cldfra )
call mpas_pool_get_config(configs,'config_mynn_cloudpdf' ,config_mynn_cloudpdf )
call mpas_pool_get_config(configs,'config_tempo_cldfra' ,config_tempo_cldfra )
call mpas_pool_get_config(configs,'config_mynn_cloudpdf' ,config_mynn_cloudpdf )

call mpas_log_write('')
call mpas_log_write('----- Setting up physics suite '''//trim(config_physics_suite)//''' -----')
Expand Down Expand Up @@ -267,6 +268,7 @@ subroutine physics_namelist_check(configs)
config_radt_cld_scheme .eq. 'cld_incidence' .or. &
config_radt_cld_scheme .eq. 'cld_fraction' .or. &
config_radt_cld_scheme .eq. 'cld_fraction_thompson' .or. &
config_radt_cld_scheme .eq. 'cld_tempo' .or. &
config_radt_cld_scheme .eq. 'cld_fraction_mynn')) then

write(mpas_err_message,'(A,A20)') 'illegal value for calculation of cloud fraction: ', &
Expand Down Expand Up @@ -304,12 +306,12 @@ subroutine physics_namelist_check(configs)
config_radt_cld_scheme = "cld_tempo"
if ((config_pbl_scheme == 'bl_mynn') .and. (config_mynn_cloudpdf .ge. 0)) then
write(mpas_err_message,'(A,A20)') &
' setting config_mynn_cloudpdf to -2 when using tempo prognostic clouds'
' setting config_mynn_cloudpdf to -2 when using tempo prognostic clouds'
call physics_message(mpas_err_message)
config_mynn_cloudpdf = -2
endif
endif

!surface-layer scheme:
if(.not. (config_sfclayer_scheme .eq. 'off' .or. &
config_sfclayer_scheme .eq. 'sf_mynn' .or. &
Expand Down
4 changes: 2 additions & 2 deletions src/core_atmosphere/physics/mpas_atmphys_driver.F
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ subroutine physics_driver(domain,itimestep,xtime_s,exchange_halo_group)
call allocate_cloudiness(block%configs)
!$OMP PARALLEL DO
do thread=1,nThreads
call driver_cloudiness(itimestep,block%configs,mesh,diag_physics,sfc_input, &
call driver_cloudiness(itimestep,block%configs,mesh,state,diag_physics,sfc_input, &
cellSolveThreadStart(thread),cellSolveThreadEnd(thread))
end do
!$OMP END PARALLEL DO
Expand Down Expand Up @@ -337,7 +337,7 @@ subroutine physics_driver(domain,itimestep,xtime_s,exchange_halo_group)
call allocate_pbl(block%configs)
!$OMP PARALLEL DO
do thread=1,nThreads
call driver_pbl(itimestep,block%configs,mesh,sfc_input,diag_physics,tend_physics, &
call driver_pbl(itimestep,block%configs,mesh,state,sfc_input,diag_physics,tend_physics, &
cellSolveThreadStart(thread),cellSolveThreadEnd(thread))
end do
!$OMP END PARALLEL DO
Expand Down
46 changes: 43 additions & 3 deletions src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ subroutine allocate_cloudiness(configs)
case("cld_fraction_mynn")
if(.not.allocated(qibl_p)) allocate(qibl_p(ims:ime,kms:kme,jms:jme))
if(.not.allocated(qcbl_p)) allocate(qcbl_p(ims:ime,kms:kme,jms:jme))

case("cld_tempo")
if(.not.allocated(qal_p)) allocate(qal_p(ims:ime,kms:kme,jms:jme))
if(.not.allocated(qai_p)) allocate(qai_p(ims:ime,kms:kme,jms:jme))
case default

end select cld_fraction_select
Expand Down Expand Up @@ -124,6 +128,10 @@ subroutine deallocate_cloudiness(configs)

if(allocated(qibl_p)) deallocate(qibl_p)
if(allocated(qcbl_p)) deallocate(qcbl_p)

case("cld_tempo")
if(allocated(qal_p)) deallocate(qal_p)
if(allocated(qai_p)) deallocate(qai_p)
case default

end select cld_fraction_select
Expand All @@ -137,7 +145,7 @@ subroutine deallocate_cloudiness(configs)
end subroutine deallocate_cloudiness

!=================================================================================================================
subroutine cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,its,ite)
subroutine cloudiness_from_MPAS(itimestep,configs,mesh,state,diag_physics,sfc_input,its,ite)
!=================================================================================================================

!input arguments:
Expand All @@ -147,6 +155,7 @@ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,it
!input and inout arguments:
type(mpas_pool_type),intent(in) :: configs
type(mpas_pool_type),intent(in) :: mesh
type(mpas_pool_type),intent(in) :: state
type(mpas_pool_type),intent(in) :: sfc_input

!inout arguments:
Expand All @@ -164,6 +173,10 @@ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,it
character(len=StrKIND),pointer:: radt_cld_scheme
character(len=StrKIND),pointer:: convection_scheme

integer,pointer:: index_qal, index_qai
real(kind=RKIND),dimension(:,:,:),pointer:: scalars
real(kind=RKIND),dimension(:,:),pointer:: qal, qai

!-----------------------------------------------------------------------------------------------------------------

call mpas_pool_get_config(configs,'config_len_disp',len_disp)
Expand Down Expand Up @@ -235,6 +248,32 @@ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,it
enddo
enddo

case("cld_tempo")
call mpas_pool_get_array(state,'scalars',scalars)
call mpas_pool_get_dimension(state,'index_qal',index_qal)
call mpas_pool_get_dimension(state,'index_qai',index_qai)

qal => scalars(index_qal,:,:)
qai => scalars(index_qai,:,:)
do j = jts,jte
do k = kts,kte
do i = its,ite
qal_p(i,k,j) = qal(k,i)
qai_p(i,k,j) = qai(k,i)
cldfrac_p(i,k,j) = max(0., max(qal(k,i), qai(k,i))) ! Avoid cldfrac < 0
if (cldfrac_p(i,k,j) > 0.) then
if (qirad_p(i,k,j) > 1.e-7) then
qirad_p(i,k,j) = max(0. , qirad_p(i,k,j) + qsrad_p(i,k,j))
qsrad_p(i,k,j) = 0.
endif
else
qcrad_p(i,k,j) = 0. ! No cloud
qirad_p(i,k,j) = 0. ! No cloud
qsrad_p(i,k,j) = 0. ! No cloud
endif
enddo
enddo
enddo
case default

end select cld_fraction_select
Expand Down Expand Up @@ -288,12 +327,13 @@ subroutine cloudiness_to_MPAS(diag_physics,its,ite)
end subroutine cloudiness_to_MPAS

!=================================================================================================================
subroutine driver_cloudiness(itimestep,configs,mesh,diag_physics,sfc_input,its,ite)
subroutine driver_cloudiness(itimestep,configs,mesh,state,diag_physics,sfc_input,its,ite)
!=================================================================================================================

!input arguments:
type(mpas_pool_type),intent(in) :: configs
type(mpas_pool_type),intent(in) :: mesh
type(mpas_pool_type),intent(in) :: state
type(mpas_pool_type),intent(in) :: sfc_input

integer,intent(in):: its,ite
Expand All @@ -316,7 +356,7 @@ subroutine driver_cloudiness(itimestep,configs,mesh,diag_physics,sfc_input,its,i
call mpas_pool_get_config(configs,'config_convection_scheme',convection_scheme)

!copy MPAS arrays to local arrays:
call cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,its,ite)
call cloudiness_from_MPAS(itimestep,configs,mesh,state,diag_physics,sfc_input,its,ite)

cld_fraction_select: select case (trim(radt_cld_scheme))
case("cld_incidence")
Expand Down
Loading