Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tempo implementation #922

Open
wants to merge 10 commits into
base: develop
Choose a base branch
from
8 changes: 8 additions & 0 deletions ccpp/config/ccpp_prebuild_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
'physics/physics/Radiation/RRTMG/radsw_param.f',
'physics/physics/Radiation/RRTMG/radlw_param.f',
'physics/physics/photochem/module_ozphys.F90',
'physics/physics/MP/TEMPO/TEMPO/module_mp_tempo_params.F90',
'physics/physics/photochem/module_h2ophys.F90',
'physics/physics/SFC_Models/Land/Noahmp/lnd_iau_mod.F90',
'data/CCPP_typedefs.F90',
Expand All @@ -46,6 +47,10 @@
'module_ozphys' : '',
'ty_ozphys' : '',
},
'module_mp_tempo_params' : {
'module_mp_tempo_params' : '',
'ty_tempo_cfg' : '',
},
'module_h2ophys' : {
'module_h2ophys' : '',
'ty_h2ophys' : '',
Expand Down Expand Up @@ -174,6 +179,9 @@
'physics/physics/MP/Thompson/mp_thompson_pre.F90',
'physics/physics/MP/Thompson/mp_thompson.F90',
'physics/physics/MP/Thompson/mp_thompson_post.F90',
'physics/physics/MP/TEMPO/mp_tempo_pre.F90',
'physics/physics/MP/TEMPO/mp_tempo.F90',
'physics/physics/MP/TEMPO/mp_tempo_post.F90',
'physics/physics/MP/Zhao_Carr/zhaocarr_gscond.f',
'physics/physics/MP/Zhao_Carr/zhaocarr_precpd.f',
'physics/physics/PBL/HEDMF/hedmf.f',
Expand Down
13 changes: 8 additions & 5 deletions ccpp/data/CCPP_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -818,7 +818,7 @@ subroutine gfs_interstitial_create (Interstitial, IM, Model)
!
! Allocate arrays that are conditional on physics choices
if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson &
.or. Model%imp_physics == Model%imp_physics_nssl &
.or. Model%imp_physics == Model%imp_physics_tempo .or. Model%imp_physics == Model%imp_physics_nssl &
) then
allocate (Interstitial%graupelmp (IM))
allocate (Interstitial%icemp (IM))
Expand Down Expand Up @@ -906,7 +906,8 @@ subroutine gfs_interstitial_setup_tracers(Interstitial, Model)
! perform aerosol convective transport and PBL diffusion
Interstitial%trans_aero = Model%cplchm .and. Model%trans_trac

if (Model%imp_physics == Model%imp_physics_thompson) then
if (Model%imp_physics == Model%imp_physics_thompson .or. &
Model%imp_physics == Model%imp_physics_tempo) then
if (Model%ltaerosol) then
Interstitial%nvdiff = 12
else if (Model%mraerosol) then
Expand Down Expand Up @@ -959,7 +960,8 @@ subroutine gfs_interstitial_setup_tracers(Interstitial, Model)
if (Model%imp_physics == Model%imp_physics_wsm6) then
Interstitial%ntcwx = 2
Interstitial%ntiwx = 3
elseif (Model%imp_physics == Model%imp_physics_thompson) then
elseif (Model%imp_physics == Model%imp_physics_thompson .or. &
Model%imp_physics == Model%imp_physics_tempo) then
Interstitial%ntcwx = 2
Interstitial%ntiwx = 3
Interstitial%ntrwx = 4
Expand Down Expand Up @@ -997,7 +999,8 @@ subroutine gfs_interstitial_setup_tracers(Interstitial, Model)
endif
elseif (Model%imp_physics == Model%imp_physics_gfdl) then
Interstitial%nvdiff = 7
elseif (Model%imp_physics == Model%imp_physics_thompson) then
elseif (Model%imp_physics == Model%imp_physics_thompson .or. &
Model%imp_physics == Model%imp_physics_tempo) then
if (Model%ltaerosol) then
Interstitial%nvdiff = 12
else if (Model%mraerosol) then
Expand Down Expand Up @@ -1409,7 +1412,7 @@ subroutine gfs_interstitial_phys_reset (Interstitial, Model)
!
! Reset fields that are conditional on physics choices
if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson &
.or. Model%imp_physics == Model%imp_physics_nssl &
.or. Model%imp_physics == Model%imp_physics_tempo .or. Model%imp_physics == Model%imp_physics_nssl &
) then
Interstitial%graupelmp = clear_val
Interstitial%icemp = clear_val
Expand Down
8 changes: 4 additions & 4 deletions ccpp/data/CCPP_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -1128,7 +1128,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme)
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_tempo_microphysics_scheme)
[gwdcu]
standard_name = tendency_of_x_wind_due_to_convective_gravity_wave_drag
long_name = zonal wind tendency due to convective gravity wave drag
Expand Down Expand Up @@ -1220,7 +1220,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme)
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_tempo_microphysics_scheme)
[dry]
standard_name = flag_nonzero_land_surface_fraction
long_name = flag indicating presence of some land surface area fraction
Expand Down Expand Up @@ -1711,7 +1711,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme)
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_tempo_microphysics_scheme)
[rainp]
standard_name = tendency_of_rain_water_mixing_ratio_due_to_microphysics
long_name = tendency of rain water mixing ratio due to microphysics
Expand Down Expand Up @@ -1967,7 +1967,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme)
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_tempo_microphysics_scheme)
[snowmt]
standard_name = surface_snow_melt
long_name = snow melt during timestep
Expand Down
41 changes: 32 additions & 9 deletions ccpp/data/GFS_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ module GFS_typedefs

use module_radsw_parameters, only: topfsw_type, sfcfsw_type
use module_radlw_parameters, only: topflw_type, sfcflw_type
use module_mp_tempo_params, only: ty_tempo_cfg
use module_ozphys, only: ty_ozphys
use module_h2ophys, only: ty_h2ophys
use land_iau_mod, only: land_iau_external_data_type, land_iau_control_type, &
Expand Down Expand Up @@ -943,6 +944,7 @@ module GFS_typedefs
integer :: imp_physics !< choice of microphysics scheme
integer :: imp_physics_gfdl = 11 !< choice of GFDL microphysics scheme
integer :: imp_physics_thompson = 8 !< choice of Thompson microphysics scheme
integer :: imp_physics_tempo = 88 !< choice of TEMPO microphysics scheme
integer :: imp_physics_wsm6 = 6 !< choice of WSMG microphysics scheme
integer :: imp_physics_zhao_carr = 99 !< choice of Zhao-Carr microphysics scheme
integer :: imp_physics_zhao_carr_pdf = 98 !< choice of Zhao-Carr microphysics scheme with PDF clouds
Expand Down Expand Up @@ -1027,6 +1029,7 @@ module GFS_typedefs
!--- Thompson's microphysical parameters
logical :: ltaerosol !< flag for aerosol version
logical :: mraerosol !< flag for merra2_aerosol_aware
logical :: lthailaware !< flag for TEMPO hail-aware
logical :: lradar !< flag for radar reflectivity
real(kind=kind_phys) :: nsfullradar_diag!< seconds between resetting radar reflectivity calculation
real(kind=kind_phys) :: ttendlim !< temperature tendency limiter per time step in K/s
Expand All @@ -1035,6 +1038,7 @@ module GFS_typedefs
real(kind=kind_phys) :: dt_inner !< time step for the inner loop in s
logical :: sedi_semi !< flag for semi Lagrangian sedi of rain
integer :: decfl !< deformed CFL factor
type(ty_tempo_cfg) :: tempo_cfg !< Thompson MP configuration information.
logical :: thompson_mp_is_init=.false. !< Local scheme initialization flag

!--- GFDL microphysical paramters
Expand Down Expand Up @@ -3261,7 +3265,9 @@ subroutine coupling_create (Coupling, Model)
endif

!--- needed for Thompson's aerosol option
if(Model%imp_physics == Model%imp_physics_thompson .and. (Model%ltaerosol .or. Model%mraerosol)) then
if((Model%imp_physics == Model%imp_physics_thompson .or. &
Model%imp_physics == Model%imp_physics_tempo) .and. &
(Model%ltaerosol .or. Model%mraerosol)) then
allocate (Coupling%nwfa2d (IM))
allocate (Coupling%nifa2d (IM))
Coupling%nwfa2d = clear_val
Expand Down Expand Up @@ -3588,6 +3594,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
!--- Thompson microphysical parameters
logical :: ltaerosol = .false. !< flag for aerosol version
logical :: mraerosol = .false. !< flag for merra2_aerosol_aware
logical :: lthailaware = .false. !< flag for TEMPO hail-aware
logical :: lradar = .false. !< flag for radar reflectivity
real(kind=kind_phys) :: nsfullradar_diag = -999.0 !< seconds between resetting radar reflectivity calculation, set to <0 for every time step
real(kind=kind_phys) :: ttendlim = -999.0 !< temperature tendency limiter, set to <0 to deactivate
Expand Down Expand Up @@ -4095,8 +4102,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
mg_do_graupel, mg_do_hail, mg_nccons, mg_nicons, mg_ngcons, &
mg_ncnst, mg_ninst, mg_ngnst, sed_supersat, do_sb_physics, &
mg_alf, mg_qcmin, mg_do_ice_gmao, mg_do_liq_liu, &
ltaerosol, lradar, nsfullradar_diag, lrefres, ttendlim, &
ext_diag_thompson, dt_inner, lgfdlmprad, &
ltaerosol, lthailaware, lradar, nsfullradar_diag, lrefres, &
ttendlim, ext_diag_thompson, dt_inner, lgfdlmprad, &
sedi_semi, decfl, &
nssl_cccn, nssl_alphah, nssl_alphahl, &
nssl_alphar, nssl_ehw0, nssl_ehlw0, &
Expand Down Expand Up @@ -4756,6 +4763,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
!--- Thompson MP parameters
Model%ltaerosol = ltaerosol
Model%mraerosol = mraerosol
Model%lthailaware = lthailaware
if (Model%ltaerosol .and. Model%mraerosol) then
write(0,*) 'Logic error: Only one Thompson aerosol option can be true, either ltaerosol or mraerosol)'
stop
Expand All @@ -4771,6 +4779,16 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
endif
Model%sedi_semi = sedi_semi
Model%decfl = decfl

!--- TEMPO MP parameters
! DJS to Anders: Maybe we put more of these nml options into the TEMPO configuration type?
Model%tempo_cfg%aerosol_aware = (ltaerosol .or. mraerosol)
Model%tempo_cfg%hail_aware = lthailaware
if (Model%ltaerosol .and. Model%mraerosol) then
write(0,*) 'Logic error: Only one TEMPO aerosol option can be true, either ltaerosol or mraerosol)'
stop
end if

!--- F-A MP parameters
Model%rhgrd = rhgrd
Model%spec_adv = spec_adv
Expand Down Expand Up @@ -4874,7 +4892,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
Model%exticeden = exticeden
if (Model%exticeden .and. &
(Model%imp_physics /= Model%imp_physics_gfdl .and. Model%imp_physics /= Model%imp_physics_thompson .and. &
Model%imp_physics /= Model%imp_physics_nssl )) then
Model%imp_physics /= Model%imp_physics_nssl .and. Model%imp_physics /= Model%imp_physics_tempo)) then
!see GFS_MP_generic_post.F90; exticeden is only compatible with GFDL,
!Thompson, or NSSL MP
print *,' Using exticeden = T is only valid when using GFDL, Thompson, or NSSL microphysics.'
Expand Down Expand Up @@ -5793,8 +5811,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
!--- BEGIN CODE FROM COMPNS_PHYSICS
!--- shoc scheme
if (do_shoc) then
if (Model%imp_physics == Model%imp_physics_thompson) then
print *,'SHOC is not currently compatible with Thompson MP -- shutting down'
if ((Model%imp_physics == Model%imp_physics_thompson) .or. &
(Model%imp_physics == Model%imp_physics_tempo)) then
print *,'SHOC is not currently compatible with Thompson/TEMPO MP -- shutting down'
stop
endif
Model%nshoc_3d = 3
Expand Down Expand Up @@ -6154,7 +6173,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
' num_p2d =',Model%num_p2d


elseif (Model%imp_physics == Model%imp_physics_thompson) then !Thompson microphysics
elseif (Model%imp_physics == Model%imp_physics_thompson .or. &
Model%imp_physics == Model%imp_physics_tempo) then !Thompson/TEMPO microphysics
Model%npdf3d = 0
Model%num_p3d = 3
Model%num_p2d = 1
Expand All @@ -6171,9 +6191,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
print *,' Thompson MP requires effr_in to be set to .true. - job aborted'
stop
end if
if (Model%me == Model%master) print *,' Using Thompson double moment microphysics', &
if (Model%me == Model%master) print *,' Using Thompson/TEMPO double moment microphysics', &
' ltaerosol = ',Model%ltaerosol, &
' mraerosol = ',Model%mraerosol, &
' lthailaware = ',Model%lthailaware, &
' ttendlim =',Model%ttendlim, &
' ext_diag_thompson =',Model%ext_diag_thompson, &
' dt_inner =',Model%dt_inner, &
Expand Down Expand Up @@ -6728,10 +6749,12 @@ subroutine control_print(Model)
print *, ' wminco : ', Model%wminco
print *, ' '
endif
if (Model%imp_physics == Model%imp_physics_wsm6 .or. Model%imp_physics == Model%imp_physics_thompson) then
if ((Model%imp_physics == Model%imp_physics_wsm6) .or. (Model%imp_physics == Model%imp_physics_thompson) .or. &
(Model%imp_physics == Model%imp_physics_tempo)) then
print *, ' Thompson microphysical parameters'
print *, ' ltaerosol : ', Model%ltaerosol
print *, ' mraerosol : ', Model%mraerosol
print *, ' lthailaware : ', Model%lthailaware
print *, ' lradar : ', Model%lradar
print *, ' nsfullradar_diag : ', Model%nsfullradar_diag
print *, ' lrefres : ', Model%lrefres
Expand Down
23 changes: 21 additions & 2 deletions ccpp/data/GFS_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -3155,15 +3155,15 @@
dimensions = (horizontal_dimension)
type = real
kind = kind_phys
active = (control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .and. (flag_for_aerosol_physics .or. do_merra2_aerosol_awareness))
active = ((control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_tempo_microphysics_scheme) .and. (flag_for_aerosol_physics .or. do_merra2_aerosol_awareness))
[nifa2d]
standard_name = tendency_of_nonhygroscopic_ice_nucleating_aerosols_at_surface_adjacent_layer
long_name = instantaneous ice-friendly sfc aerosol source
units = kg-1 s-1
dimensions = (horizontal_dimension)
type = real
kind = kind_phys
active = (control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .and. (flag_for_aerosol_physics .or. do_merra2_aerosol_awareness))
active = ((control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_tempo_microphysics_scheme) .and. (flag_for_aerosol_physics .or. do_merra2_aerosol_awareness))
[ebu_smoke]
standard_name = ebu_smoke
long_name = buffer of vertical fire emission
Expand Down Expand Up @@ -4337,6 +4337,12 @@
units = flag
dimensions = ()
type = integer
[imp_physics_tempo]
standard_name = identifier_for_tempo_microphysics_scheme
long_name = choice of TEMPO microphysics scheme
units = flag
dimensions = ()
type = integer
[imp_physics_wsm6]
standard_name = identifier_for_wsm6_microphysics_scheme
long_name = choice of WSM6 microphysics scheme
Expand Down Expand Up @@ -4861,6 +4867,12 @@
units = flag
dimensions = ()
type = logical
[lthailaware]
standard_name = flag_for_hail_physics
long_name = flag for hail physics
units = flag
dimensions = ()
type = logical
[mraerosol]
standard_name = do_merra2_aerosol_awareness
long_name = flag for merra2 aerosol-aware physics for example the thompson microphysics
Expand Down Expand Up @@ -4911,6 +4923,12 @@
units = count
dimensions = ()
type = integer
[tempo_cfg]
standard_name = configuration_for_TEMPO_microphysics
long_name = configuration information for TEMPO microphysics
units = mixed
dimensions = ()
type = ty_tempo_cfg
[thompson_mp_is_init]
standard_name = flag_for_thompson_mp_scheme_initialization
long_name = flag carrying scheme initialization status
Expand Down Expand Up @@ -10133,6 +10151,7 @@
relative_path = ../physics/physics/
dependencies = hooks/machine.F,hooks/physcons.F90
dependencies = Radiation/RRTMG/radlw_param.f,Radiation/RRTMG/radsw_param.f
dependencies = MP/TEMPO/TEMPO/module_mp_tempo_params.F90
dependencies = photochem/module_ozphys.F90,photochem/module_h2ophys.F90
dependencies = SFC_Models/Land/Noahmp/lnd_iau_mod.F90,MP/GFDL/GFDL_parse_tracers.F90

Expand Down
2 changes: 1 addition & 1 deletion ccpp/driver/GFS_diagnostics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -5044,7 +5044,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop

! Cloud effective radii from Microphysics
if (Model%imp_physics == Model%imp_physics_thompson .or. Model%imp_physics == Model%imp_physics_fer_hires .or. &
Model%imp_physics == Model%imp_physics_nssl ) then
Model%imp_physics == Model%imp_physics_nssl .or. Model%imp_physics == Model%imp_physics_tempo ) then
idx = idx + 1
ExtDiag(idx)%axes = 3
ExtDiag(idx)%name = 'cleffr'
Expand Down
Loading
Loading