Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@
path = physics/MP/TEMPO/TEMPO
url = https://github.com/NCAR/TEMPO
branch = main
[submodule "physics/MP/TEMPO/tempo_v3"]
path = physics/MP/TEMPO/tempo_v3
url = https://github.com/AndersJensen-NOAA/TEMPO.git
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,18 @@ module GFS_PBL_generic_common

subroutine set_aerosol_tracer_index(imp_physics, imp_physics_wsm6, &
imp_physics_thompson, ltaerosol,mraerosol, &
imp_physics_tempo, lthailaware, &
imp_physics_mg, ntgl, imp_physics_gfdl, &
imp_physics_zhao_carr, imp_physics_nssl,&
nssl_hail_on, nssl_ccn_on, nssl_3moment, kk, &
errmsg, errflg)
implicit none
!
integer, intent(in ) :: imp_physics, imp_physics_wsm6, &
imp_physics_thompson, &
imp_physics_thompson, imp_physics_tempo,&
imp_physics_mg, ntgl, imp_physics_gfdl, &
imp_physics_zhao_carr,imp_physics_nssl
logical, intent(in ) :: ltaerosol, mraerosol, nssl_hail_on, nssl_ccn_on, nssl_3moment
logical, intent(in ) :: ltaerosol, mraerosol, nssl_hail_on, nssl_ccn_on, nssl_3moment, lthailaware
integer, intent(out) :: kk
character(len=*), intent(out) :: errmsg
integer, intent(out) :: errflg
Expand All @@ -43,6 +44,18 @@ subroutine set_aerosol_tracer_index(imp_physics, imp_physics_wsm6, &
else
kk = 9
endif
elseif (imp_physics == imp_physics_tempo) then
! Tempo (Note: why are we setting tracer indices manually?)
! I'll assume that kk = 9 includes qv, qc, qr, qi, qs, qg, ni, nr
! when ltaerosol = true: nc, nwfa, and nifa are added (+3)
! when lthail = true: ng and volg are added (+2)
kk = 9
if(ltaerosol) then
kk = kk + 3
endif
if(lthailaware) then
kk = kk + 2
endif
! MG
elseif (imp_physics == imp_physics_mg) then
if (ntgl > 0) then
Expand Down
45 changes: 42 additions & 3 deletions physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_post.F90
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac,
ntqv, ntcw, ntiw, ntrw, ntsw, ntlnc, ntinc, ntrnc, ntsnc, ntgnc, ntwa, ntia, ntgl, ntoz, ntke, ntkev,nqrimef, &
trans_aero, ntchs, ntchm, ntccn, nthl, nthnc, ntgv, nthv, ntrz, ntgz, nthz, &
imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, imp_physics_zhao_carr, imp_physics_mg, &
imp_physics_tempo, lthailaware, &
imp_physics_fer_hires, imp_physics_nssl, nssl_ccn_on, ltaerosol, mraerosol, nssl_hail_on, nssl_3moment, &
cplflx, cplaqm, cplchm, lssav, flag_for_pbl_generic_tend, ldiag3d, lsidea, hybedmf, do_shoc, satmedmf, &
shinhong, do_ysu, dvdftra, dusfc1, dvsfc1, dtsfc1, dqsfc1, dtf, dudt, dvdt, dtdt, htrsw, htrlw, xmu, &
Expand All @@ -32,11 +33,11 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac,
integer, intent(in) :: ntqv, ntcw, ntiw, ntrw, ntsw, ntlnc, ntinc, ntrnc, ntsnc, ntgnc, ntwa, ntia, ntgl, ntoz, ntke, ntkev, nqrimef
integer, intent(in) :: ntccn, nthl, nthnc, ntgv, nthv, ntrz, ntgz, nthz
logical, intent(in) :: trans_aero
integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6
integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, imp_physics_tempo
integer, intent(in) :: imp_physics_zhao_carr, imp_physics_mg, imp_physics_fer_hires
integer, intent(in) :: imp_physics_nssl
logical, intent(in) :: nssl_ccn_on, nssl_hail_on, nssl_3moment
logical, intent(in) :: ltaerosol, cplflx, cplaqm, cplchm, lssav, ldiag3d, lsidea, use_med_flux, mraerosol
logical, intent(in) :: ltaerosol, cplflx, cplaqm, cplchm, lssav, ldiag3d, lsidea, use_med_flux, mraerosol, lthailaware
logical, intent(in) :: hybedmf, do_shoc, satmedmf, shinhong, do_ysu

logical, intent(in) :: flag_for_pbl_generic_tend
Expand Down Expand Up @@ -107,7 +108,8 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac,
if (trans_aero) then
! Set kk if chemistry-aerosol tracers are diffused
call set_aerosol_tracer_index(imp_physics, imp_physics_wsm6, &
imp_physics_thompson, ltaerosol,mraerosol, &
imp_physics_thompson, ltaerosol,mraerosol, &
imp_physics_tempo, lthailaware, &
imp_physics_mg, ntgl, imp_physics_gfdl, &
imp_physics_zhao_carr, imp_physics_nssl,&
nssl_hail_on, nssl_ccn_on, nssl_3moment, kk, &
Expand Down Expand Up @@ -198,6 +200,43 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac,
enddo
enddo
endif
elseif (imp_physics == imp_physics_tempo) then
! Tempo
do k=1,levs
do i=1,im
dqdt(i,k,ntqv) = dvdftra(i,k,1)
dqdt(i,k,ntcw) = dvdftra(i,k,2)
dqdt(i,k,ntiw) = dvdftra(i,k,3)
dqdt(i,k,ntrw) = dvdftra(i,k,4)
dqdt(i,k,ntsw) = dvdftra(i,k,5)
dqdt(i,k,ntgl) = dvdftra(i,k,6)
dqdt(i,k,ntinc) = dvdftra(i,k,7)
dqdt(i,k,ntrnc) = dvdftra(i,k,8)
dqdt(i,k,ntoz) = dvdftra(i,k,9)
enddo
enddo

n = 10
if (ltaerosol) then
do k=1,levs
do i=1,im
dqdt(i,k,ntlnc) = dvdftra(i,k,n)
dqdt(i,k,ntwa) = dvdftra(i,k,n+1)
dqdt(i,k,ntia) = dvdftra(i,k,n+2)
enddo
enddo
n = 13
endif

if (lthailaware) then
do k=1,levs
do i=1,im
dqdt(i,k,ntgnc) = dvdftra(i,k,n)
dqdt(i,k,ntgv) = dvdftra(i,k,n+1)
enddo
enddo
endif

elseif (imp_physics == imp_physics_mg) then ! MG3/2
if (ntgl > 0) then ! MG
do k=1,levs
Expand Down
14 changes: 14 additions & 0 deletions physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_post.meta
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,13 @@
dimensions = ()
type = integer
intent = in
[imp_physics_tempo]
standard_name = identifier_for_tempo_microphysics_scheme
long_name = choice of Tempo microphysics scheme
units = flag
dimensions = ()
type = integer
intent = in
[imp_physics_wsm6]
standard_name = identifier_for_wsm6_microphysics_scheme
long_name = choice of WSM6 microphysics scheme
Expand Down Expand Up @@ -295,6 +302,13 @@
dimensions = ()
type = logical
intent = in
[lthailaware]
standard_name = flag_for_hail_physics
long_name = flag for hail physics
units = flag
dimensions = ()
type = logical
intent = in
[mraerosol]
standard_name = do_merra2_aerosol_awareness
long_name = flag for merra2 aerosol-aware physics for example the thompson microphysics
Expand Down
43 changes: 41 additions & 2 deletions physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_pre.F90
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ subroutine GFS_PBL_generic_pre_run (im, levs, nvdiff, ntrac, rtg_ozone_index,
ntwa, ntia, ntgl, ntoz, ntke, ntkev, nqrimef, trans_aero, ntchs, ntchm, &
ntccn, nthl, nthnc, ntgv, nthv, ntrz, ntgz, nthz, &
imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, &
imp_physics_tempo, lthailaware, &
imp_physics_zhao_carr, imp_physics_mg, imp_physics_fer_hires, imp_physics_nssl, &
ltaerosol, mraerosol, nssl_ccn_on, nssl_hail_on, nssl_3moment, &
hybedmf, do_shoc, satmedmf, qgrs, vdftra, save_u, save_v, save_t, save_q, &
Expand All @@ -31,9 +32,9 @@ subroutine GFS_PBL_generic_pre_run (im, levs, nvdiff, ntrac, rtg_ozone_index,
integer, intent(in) :: ntwa, ntia, ntgl, ntoz, ntke, ntkev, nqrimef,ntchs, ntchm
integer, intent(in) :: ntccn, nthl, nthnc, ntgv, nthv, ntrz, ntgz, nthz
logical, intent(in) :: trans_aero, ldiag3d, qdiag3d, lssav
integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6
integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, imp_physics_tempo
integer, intent(in) :: imp_physics_zhao_carr, imp_physics_mg, imp_physics_fer_hires
logical, intent(in) :: ltaerosol, hybedmf, do_shoc, satmedmf, flag_for_pbl_generic_tend, mraerosol
logical, intent(in) :: ltaerosol, hybedmf, do_shoc, satmedmf, flag_for_pbl_generic_tend, mraerosol, lthailaware
integer, intent(in) :: imp_physics_nssl
logical, intent(in) :: nssl_hail_on, nssl_ccn_on, nssl_3moment

Expand Down Expand Up @@ -140,6 +141,43 @@ subroutine GFS_PBL_generic_pre_run (im, levs, nvdiff, ntrac, rtg_ozone_index,
enddo
rtg_ozone_index = 9
endif
elseif (imp_physics == imp_physics_tempo) then
! Tempo
do k=1,levs
do i=1,im
vdftra(i,k,1) = qgrs(i,k,ntqv)
vdftra(i,k,2) = qgrs(i,k,ntcw)
vdftra(i,k,3) = qgrs(i,k,ntiw)
vdftra(i,k,4) = qgrs(i,k,ntrw)
vdftra(i,k,5) = qgrs(i,k,ntsw)
vdftra(i,k,6) = qgrs(i,k,ntgl)
vdftra(i,k,7) = qgrs(i,k,ntinc)
vdftra(i,k,8) = qgrs(i,k,ntrnc)
vdftra(i,k,9) = qgrs(i,k,ntoz)
enddo
enddo
rtg_ozone_index = 9
n = 10

if (ltaerosol) then
do k=1,levs
do i=1,im
vdftra(i,k,n) = qgrs(i,k,ntlnc)
vdftra(i,k,n+1) = qgrs(i,k,ntwa)
vdftra(i,k,n+2) = qgrs(i,k,ntia)
enddo
enddo
n = 13
endif

if (lthailaware) then
do k=1,levs
do i=1,im
vdftra(i,k,n) = qgrs(i,k,ntgnc)
vdftra(i,k,n+1) = qgrs(i,k,ntgv)
enddo
enddo
endif
! MG
elseif (imp_physics == imp_physics_mg) then ! MG3/2
if (ntgl > 0) then ! MG3
Expand Down Expand Up @@ -274,6 +312,7 @@ subroutine GFS_PBL_generic_pre_run (im, levs, nvdiff, ntrac, rtg_ozone_index,
if (trans_aero) then
call set_aerosol_tracer_index(imp_physics, imp_physics_wsm6, &
imp_physics_thompson, ltaerosol,mraerosol, &
imp_physics_tempo, lthailaware, &
imp_physics_mg, ntgl, imp_physics_gfdl, &
imp_physics_zhao_carr, imp_physics_nssl,&
nssl_hail_on, nssl_ccn_on, nssl_3moment, kk, &
Expand Down
14 changes: 14 additions & 0 deletions physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_pre.meta
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,13 @@
dimensions = ()
type = integer
intent = in
[imp_physics_tempo]
standard_name = identifier_for_tempo_microphysics_scheme
long_name = choice of Tempo microphysics scheme
units = flag
dimensions = ()
type = integer
intent = in
[imp_physics_wsm6]
standard_name = identifier_for_wsm6_microphysics_scheme
long_name = choice of WSM6 microphysics scheme
Expand Down Expand Up @@ -301,6 +308,13 @@
dimensions = ()
type = logical
intent = in
[lthailaware]
standard_name = flag_for_hail_physics
long_name = flag for hail physics
units = flag
dimensions = ()
type = logical
intent = in
[mraerosol]
standard_name = do_merra2_aerosol_awareness
long_name = flag for merra2 aerosol-aware physics for example the thompson microphysics
Expand Down
27 changes: 11 additions & 16 deletions physics/Interstitials/UFS_SCM_NEPTUNE/GFS_rrtmg_pre.F90
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,&
gasvmr_ccl4, gasvmr_cfc113, aerodp,ext550, clouds6, clouds7, clouds8, &
clouds9, cldsa, cldfra, cldfra2d, lwp_ex,iwp_ex, lwp_fc,iwp_fc, &
faersw1, faersw2, faersw3, faerlw1, faerlw2, faerlw3, alpha, rrfs_sd, &
aero_dir_fdb, fdb_coef, spp_wts_rad, spp_rad, ico2, ozphys, tempo_cfg, &
aero_dir_fdb, fdb_coef, spp_wts_rad, spp_rad, ico2, ozphys, &
errmsg, errflg)

use machine, only: kind_phys
Expand Down Expand Up @@ -88,8 +88,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,&
make_DropletNumber_thompson => make_DropletNumber, &
make_RainNumber_thompson => make_RainNumber

use module_mp_tempo_params, only: &
ty_tempo_cfg, &
use module_mp_tempo_params_v2, only: &
Nt_c_l_tempo => Nt_c_l, &
Nt_c_o_tempo => Nt_c_o, &
re_qc_min_tempo => re_qc_min, &
Expand All @@ -99,7 +98,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,&
re_qs_min_tempo => re_qs_min, &
re_qs_max_tempo => re_qs_max

use module_mp_tempo_utils, only: &
use module_mp_tempo_utils_v2, only: &
calc_effectRad_tempo => calc_effectRad, &
make_IceNumber_tempo => make_IceNumber, &
make_DropletNumber_tempo => make_DropletNumber, &
Expand Down Expand Up @@ -260,9 +259,6 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,&
real (kind=kind_phys), dimension(lm) :: cldfra1d, qv1d, &
& qc1d, qi1d, qs1d, dz1d, p1d, t1d

! For TEMPO MP
type(ty_tempo_cfg), intent(in) :: tempo_cfg

! for F-A MP
real(kind=kind_phys), dimension(im,lm+LTP+1) :: tem2db, hz

Expand Down Expand Up @@ -794,13 +790,13 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,&
if(nint(slmsk(i)) == 1) then
if (imp_physics == imp_physics_thompson) then
nc_mp (i,k) = Nt_c_l_thompson*orho(i,k)
else
else ! tempo
nc_mp (i,k) = Nt_c_l_tempo*orho(i,k)
endif
else
if (imp_physics == imp_physics_thompson) then
nc_mp (i,k) = Nt_c_o_thompson*orho(i,k)
else
else ! tempo
nc_mp (i,k) = Nt_c_o_tempo*orho(i,k)
endif
endif
Expand Down Expand Up @@ -925,14 +921,14 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,&
if ((ltaerosol .or. mraerosol) .and. qc_mp(i,k)>1.e-12 .and. nc_mp(i,k)<100.) then
if (imp_physics == imp_physics_thompson) then
nc_mp(i,k) = make_DropletNumber_thompson(qc_mp(i,k)*rho(i,k), nwfa(i,k)*rho(i,k)) * orho(i,k)
else
else ! tempo
nc_mp(i,k) = make_DropletNumber_tempo(qc_mp(i,k)*rho(i,k), nwfa(i,k)*rho(i,k)) * orho(i,k)
endif
endif
if (qi_mp(i,k)>1.e-12 .and. ni_mp(i,k)<100.) then
if (imp_physics == imp_physics_thompson) then
ni_mp(i,k) = make_IceNumber_thompson(qi_mp(i,k)*rho(i,k), tlyr(i,k)) * orho(i,k)
else
else ! tempo
ni_mp(i,k) = make_IceNumber_tempo(qi_mp(i,k)*rho(i,k), tlyr(i,k)) * orho(i,k)
endif
endif
Expand All @@ -959,11 +955,10 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,&
effrl(i,lmk) = re_qc_min_thompson*1.e6
effri(i,lmk) = re_qi_min_thompson*1.e6
effrs(i,lmk) = re_qs_min_thompson*1.e6
else
call calc_effectRad_tempo(t1d=tlyr(i,:), p1d=plyr(i,:)*100., qv1d=qv_mp(i,:), qc1d=qc_mp(i,:), &
nc1d=nc_mp(i,:), qi1d=qi_mp(i,:), ni1d=ni_mp(i,:), qs1d=qs_mp(i,:), &
re_qc1d=effrl(i,:), re_qi1d=effri(i,:), re_qs1d=effrs(i,:), kts=1, kte=lm, &
lsml=islmsk, configs=tempo_cfg)
else ! tempo
call calc_effectRad_thompson(tlyr(i,:), plyr(i,:)*100., qv_mp(i,:), qc_mp(i,:), &
nc_mp(i,:), qi_mp(i,:), ni_mp(i,:), qs_mp(i,:), &
effrl(i,:), effri(i,:), effrs(i,:), islmsk, 1, lm )
! Scale Thompson's effective radii from meter to micron
do k=1,lm
effrl(i,k) = MAX(re_qc_min_tempo, MIN(effrl(i,k), re_qc_max_tempo))*1.e6
Expand Down
9 changes: 1 addition & 8 deletions physics/Interstitials/UFS_SCM_NEPTUNE/GFS_rrtmg_pre.meta
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
type = scheme
dependencies_path = ../../
dependencies = tools/funcphys.f90,hooks/machine.F
dependencies = MP/TEMPO/TEMPO/module_mp_tempo_params.F90,MP/TEMPO/TEMPO/module_mp_tempo_utils.F90
dependencies = MP/TEMPO/TEMPO/module_mp_tempo_params_v2.F90,MP/TEMPO/TEMPO/module_mp_tempo_utils_v2.F90
dependencies = MP/Thompson/module_mp_thompson.F90,MP/Thompson/module_mp_thompson_make_number_concentrations.F90
dependencies = Radiation/RRTMG/radcons.f90,Radiation/radiation_aerosols.f
dependencies = Radiation/radiation_astronomy.f,Radiation/radiation_clouds.f,Radiation/radiation_gases.f
Expand Down Expand Up @@ -267,13 +267,6 @@
dimensions = ()
type = ty_ozphys
intent = in
[tempo_cfg]
standard_name = configuration_for_TEMPO_microphysics
long_name = configuration information for TEMPO microphysics
units = mixed
dimensions = ()
type = ty_tempo_cfg
intent = in
[iaermdl]
standard_name = control_for_aerosol_radiation_scheme
long_name = control of aerosol scheme in radiation
Expand Down
Loading