Skip to content

Commit

Permalink
Cleanup to radiation_aerosols. Related to NCAR#923. Made changes to m…
Browse files Browse the repository at this point in the history
…ade radiation_aerosols.f ccpp compliant
  • Loading branch information
dustinswales committed Aug 12, 2022
1 parent a282821 commit 7c37906
Show file tree
Hide file tree
Showing 15 changed files with 455 additions and 174 deletions.
5 changes: 2 additions & 3 deletions physics/GFS_phys_time_vary.fv3.F90
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ module GFS_phys_time_vary
!--- variables needed for calculating 'sncovr'
use namelist_soilveg, only: salp_data, snupx
use set_soilveg_mod, only: set_soilveg
use physparam, only : iaermdl

! --- needed for Noah MP init
use noahmp_tables, only: laim_table,saim_table,sla_table, &
Expand Down Expand Up @@ -68,7 +67,7 @@ module GFS_phys_time_vary
!>\section gen_GFS_phys_time_vary_init GFS_phys_time_vary_init General Algorithm
!! @{
subroutine GFS_phys_time_vary_init ( &
me, master, ntoz, h2o_phys, iaerclm, iccn, iflip, im, levs, &
me, master, ntoz, h2o_phys, iaerclm, iccn, iaermdl, iflip, im, levs, &
nx, ny, idate, xlat_d, xlon_d, &
jindx1_o3, jindx2_o3, ddy_o3, ozpl, jindx1_h, jindx2_h, ddy_h, h2opl,fhour, &
jindx1_aer, jindx2_aer, ddy_aer, iindx1_aer, iindx2_aer, ddx_aer, aer_nm, &
Expand All @@ -87,7 +86,7 @@ subroutine GFS_phys_time_vary_init (
implicit none

! Interface variables
integer, intent(in) :: me, master, ntoz, iccn, iflip, im, nx, ny, levs
integer, intent(in) :: me, master, ntoz, iccn, iflip, im, nx, ny, levs, iaermdl
logical, intent(in) :: h2o_phys, iaerclm, lsm_cold_start
integer, intent(in) :: idate(:)
real(kind_phys), intent(in) :: fhour
Expand Down
7 changes: 7 additions & 0 deletions physics/GFS_phys_time_vary.fv3.meta
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,13 @@
dimensions = ()
type = logical
intent = in
[iaermdl]
standard_name = flag_for_aerosol_radiation_scheme
long_name = flag for aerosol scheme to use in radiation
units = flag
dimensions = ()
type = integer
intent = in
[iccn]
standard_name = control_for_ice_cloud_condensation_nuclei_forcing
long_name = flag for IN and CCN forcing for morrison gettelman microphysics
Expand Down
2 changes: 1 addition & 1 deletion physics/GFS_rad_time_vary.fv3.F90
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ subroutine GFS_rad_time_vary_timestep_init (
imap, jmap, sec, kdt, imp_physics, imp_physics_zhao_carr, ps_2delt, &
ps_1delt, t_2delt, t_1delt, qv_2delt, qv_1delt, t, qv, ps, errmsg, errflg)

use physparam, only: ipsd0, ipsdlim, iaerflg
use physparam, only: ipsd0, ipsdlim
use mersenne_twister, only: random_setseed, random_index, random_stat
use machine, only: kind_phys
use radcons, only: qmin, con_100
Expand Down
2 changes: 1 addition & 1 deletion physics/GFS_rad_time_vary.scm.F90
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ subroutine GFS_rad_time_vary_timestep_init (
imap, jmap, sec, kdt, imp_physics, imp_physics_zhao_carr, ps_2delt, &
ps_1delt, t_2delt, t_1delt, qv_2delt, qv_1delt, t, qv, ps, errmsg, errflg)

use physparam, only: ipsd0, ipsdlim, iaerflg
use physparam, only: ipsd0, ipsdlim
use mersenne_twister, only: random_setseed, random_index, random_stat
use machine, only: kind_phys
use radcons, only: qmin, con_100
Expand Down
17 changes: 10 additions & 7 deletions physics/GFS_rrtmg_pre.F90
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, &
lmfdeep2, fhswr, fhlwr, solhr, sup, con_eps, epsm1, fvirt, &
rog, rocp, con_rd, xlat_d, xlat, xlon, coslat, sinlat, tsfc, slmsk, &
prsi, prsl, prslk, tgrs, sfc_wts, mg_cld, effrr_in, pert_clds, &
sppt_wts, sppt_amp, cnvw_in, cnvc_in, qgrs, aer_nm, dx, icloud, & !inputs from here and above
sppt_wts, sppt_amp, cnvw_in, cnvc_in, qgrs, aer_nm, dx, icloud, &
iaermdl, iaerflg, & !inputs from here and above
coszen, coszdg, effrl_inout, effri_inout, effrs_inout, &
clouds1, clouds2, clouds3, clouds4, clouds5, qci_conv, & !in/out from here and above
kd, kt, kb, mtopa, mbota, raddt, tsfg, tsfa, de_lgth, alb1d, delp, dz, & !output from here and below
Expand All @@ -43,7 +44,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, &
clouds9, cldsa, cldfra, cldfra2d, lwp_ex,iwp_ex, lwp_fc,iwp_fc, &
faersw1, faersw2, faersw3, faerlw1, faerlw2, faerlw3, alpha, &
aero_dir_fdb, smoke_ext, dust_ext, &
spp_wts_rad, spp_rad, rrfs_smoke_band, errmsg, errflg)
spp_wts_rad, spp_rad, rrfs_smoke_band, top_at_1, errmsg, errflg)

use machine, only: kind_phys

Expand Down Expand Up @@ -80,7 +81,6 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, &
make_IceNumber, &
make_DropletNumber, &
make_RainNumber
use physparam, only : iaermdl
implicit none

integer, intent(in) :: im, levs, lm, lmk, lmp, n_var_lndp, &
Expand All @@ -100,7 +100,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, &
imp_physics_mg, imp_physics_wsm6, &
imp_physics_nssl, &
imp_physics_fer_hires, &
yearlen, icloud
yearlen, icloud, iaermdl, iaerflg

integer, intent(in) :: &
iovr_rand, & ! Flag for random cloud overlap method
Expand Down Expand Up @@ -200,7 +200,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, &
faerlw2,&
faerlw3
real(kind=kind_phys), dimension(:,:), intent(out) :: alpha

logical, intent(out) :: top_at_1
character(len=*), intent(out) :: errmsg
integer, intent(out) :: errflg

Expand Down Expand Up @@ -257,6 +257,9 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, &
errmsg = ''
errflg = 0

! Vertical ordering
top_at_1 = (prsi(1,1) .lt. prsi(1, lm))

if (.not. (lsswr .or. lslwr)) return

!--- set commonly used integers
Expand Down Expand Up @@ -634,8 +637,8 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, &

call setaer (plvl, plyr, prslk1, tvly, rhly, slmsk, & ! --- inputs
tracer1, aer_nm, xlon, xlat, IM, LMK, LMP,&
lsswr,lslwr, &
faersw,faerlw,aerodp) ! --- outputs
lsswr,lslwr,iaermdl,iaerflg,top_at_1, &
faersw,faerlw,aerodp,errflg,errmsg) ! --- outputs

! CCPP
do j = 1,NBDSW
Expand Down
23 changes: 22 additions & 1 deletion physics/GFS_rrtmg_pre.meta
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = GFS_rrtmg_pre
type = scheme
dependencies = funcphys.f90,iounitdef.f,machine.F,module_bfmicrophysics.f,module_mp_radar.F90,module_mp_thompson.F90
dependencies = module_mp_thompson_make_number_concentrations.F90,physcons.F90,physparam.f,radcons.f90,radiation_aerosols.f
dependencies = module_mp_thompson_make_number_concentrations.F90,physparam.f,physcons.F90,radcons.f90,radiation_aerosols.f
dependencies = radiation_astronomy.f,radiation_clouds.f,radiation_gases.f,radlw_param.f,radsw_param.f,surface_perturbation.F90,radiation_cloud_overlap.F90

########################################################################
Expand Down Expand Up @@ -205,6 +205,20 @@
dimensions = ()
type = integer
intent = in
[iaermdl]
standard_name = flag_for_aerosol_radiation_scheme
long_name = flag for aerosol scheme to use in radiation
units = flag
dimensions = ()
type = integer
intent = in
[iaerflg]
standard_name = flag_for_aerosol_effects_in_radiation
long_name = flag for aerosol effects to include in radiation
units = flag
dimensions = ()
type = integer
intent = in
[nssl_ccn_on]
standard_name = nssl_ccn_on
long_name = CCN activation flag in NSSL micro
Expand Down Expand Up @@ -1306,6 +1320,13 @@
type = real
kind = kind_phys
intent = out
[top_at_1]
standard_name = flag_for_vertical_ordering_in_RRTMGP
long_name = flag for vertical ordering in RRTMGP
units = flag
dimensions = ()
type = logical
intent = out
[aero_dir_fdb]
standard_name = do_smoke_aerosol_direct_feedback
long_name = flag for smoke and dust radiation feedback
Expand Down
60 changes: 39 additions & 21 deletions physics/GFS_rrtmg_setup.F90
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
!> \defgroup GFS_rrtmg_setup_mod GFS RRTMG Scheme Setup
module GFS_rrtmg_setup

use physparam, only : isolar , ictmflg, ico2flg, ioznflg, iaerflg, &
& iaermdl, icldflg, &
use physparam, only : isolar , ictmflg, ico2flg, ioznflg, &
& icldflg, &
& iovrRad=>iovr, lcrick , lcnorm , lnoprec, &
& isubcsw, isubclw, ivflip , ipsd0, &
& iswcliq, &
Expand Down Expand Up @@ -48,7 +48,8 @@ subroutine GFS_rrtmg_setup_init ( &
icliq_sw, crick_proof, ccnorm, &
imp_physics, &
norad_precip, idate, iflip, &
do_RRTMGP, me, errmsg, errflg)
do_RRTMGP, me, lalw1bd, iaermdl, iaerflg, &
aeros_file, errmsg, errflg)
! ================= subprogram documentation block ================ !
! !
! subprogram: GFS_rrtmg_setup_init - a subprogram to initialize radiation !
Expand Down Expand Up @@ -167,10 +168,12 @@ subroutine GFS_rrtmg_setup_init ( &
logical, intent(in) :: norad_precip
integer, intent(in) :: idate(:)
integer, intent(in) :: iflip
logical, intent(in) :: do_RRTMGP
logical, intent(in) :: do_RRTMGP, lalw1bd
integer, intent(in) :: me
character(len=26), intent(in) :: aeros_file
character(len=*), intent(out) :: errmsg
integer, intent(out) :: errflg
integer, intent(out) :: iaermdl, iaerflg

! Initialize the CCPP error handling variables
errmsg = ''
Expand Down Expand Up @@ -241,7 +244,8 @@ subroutine GFS_rrtmg_setup_init ( &

call radinit &
! --- inputs:
& ( si, levr, imp_physics, me )
& ( si, levr, imp_physics, me, iaermdl, iaerflg, lalw1bd, &
& aeros_file, errmsg, errflg )
! --- outputs:
! ( none )

Expand All @@ -261,8 +265,8 @@ end subroutine GFS_rrtmg_setup_init
!! \htmlinclude GFS_rrtmg_setup_timestep_init.html
!!
subroutine GFS_rrtmg_setup_timestep_init ( &
idate, jdate, deltsw, deltim, lsswr, me, &
slag, sdec, cdec, solcon, errmsg, errflg)
idate, jdate, deltsw, deltim, lsswr, me, iaermdl, &
iaerflg, aeros_file, slag, sdec, cdec, solcon, errmsg, errflg)

implicit none

Expand All @@ -273,6 +277,8 @@ subroutine GFS_rrtmg_setup_timestep_init ( &
real(kind=kind_phys), intent(in) :: deltim
logical, intent(in) :: lsswr
integer, intent(in) :: me
integer, intent(in) :: iaermdl, iaerflg
character(len=26), intent(in) :: aeros_file
real(kind=kind_phys), intent(out) :: slag
real(kind=kind_phys), intent(out) :: sdec
real(kind=kind_phys), intent(out) :: cdec
Expand All @@ -291,8 +297,8 @@ subroutine GFS_rrtmg_setup_timestep_init ( &
errmsg = ''
errflg = 0

call radupdate(idate,jdate,deltsw,deltim,lsswr,me, &
slag,sdec,cdec,solcon)
call radupdate(idate,jdate,deltsw,deltim,lsswr,me, iaermdl,&
iaerflg, aeros_file, slag,sdec,cdec,solcon,errflg,errmsg)

end subroutine GFS_rrtmg_setup_timestep_init

Expand Down Expand Up @@ -322,13 +328,14 @@ end subroutine GFS_rrtmg_setup_finalize
! Private functions


subroutine radinit( si, NLAY, imp_physics, me )
subroutine radinit( si, NLAY, imp_physics, me, iaermdl, iaerflg, lalw1bd, &
aeros_file, errmsg, errflg)
!...................................

! --- inputs:
! & ( si, NLAY, imp_physics, me )
! & ( si, NLAY, imp_physics, me, iaermdl, iaerflg)
! --- outputs:
! ( none )
! ( errmsg, errflg )

! ================= subprogram documentation block ================ !
! !
Expand Down Expand Up @@ -435,12 +442,14 @@ subroutine radinit( si, NLAY, imp_physics, me )
implicit none

! --- inputs:
integer, intent(in) :: NLAY, me, imp_physics

integer, intent(in) :: NLAY, me, imp_physics, iaermdl, iaerflg
logical, intent(in) :: lalw1bd
real (kind=kind_phys), intent(in) :: si(:)
character(len=26), intent(in) :: aeros_file

! --- outputs: (none, to module variables)

! --- outputs: (ccpp error handling)
character(len=*), intent(out) :: errmsg
integer, intent(out) :: errflg
! --- locals:

!
Expand Down Expand Up @@ -525,7 +534,7 @@ subroutine radinit( si, NLAY, imp_physics, me )

call sol_init ( me ) ! --- ... astronomy initialization routine

call aer_init ( NLAY, me ) ! --- ... aerosols initialization routine
call aer_init ( NLAY, me, iaermdl, iaerflg, lalw1bd, aeros_file, errflg, errmsg) ! --- ... aerosols initialization routine

call gas_init ( me ) ! --- ... co2 and other gases initialization routine

Expand Down Expand Up @@ -561,8 +570,9 @@ end subroutine radinit
!> \section gen_radupdate General Algorithm
!> @{
!-----------------------------------
subroutine radupdate( idate,jdate,deltsw,deltim,lsswr, me, &
& slag,sdec,cdec,solcon)
subroutine radupdate( idate,jdate,deltsw,deltim,lsswr,me, iaermdl,&
& iaerflg, aeros_file, slag,sdec,cdec,solcon, &
& errflg,errmsg)
!...................................

! ================= subprogram documentation block ================ !
Expand Down Expand Up @@ -630,13 +640,16 @@ subroutine radupdate( idate,jdate,deltsw,deltim,lsswr, me, &
implicit none

! --- inputs:
integer, intent(in) :: idate(:), jdate(:), me
integer, intent(in) :: idate(:), jdate(:), me, iaermdl, iaerflg
logical, intent(in) :: lsswr
character(len=26),intent(in) :: aeros_file

real (kind=kind_phys), intent(in) :: deltsw, deltim

! --- outputs:
real (kind=kind_phys), intent(out) :: slag, sdec, cdec, solcon
character(len=*), intent(out) :: errmsg
integer, intent(out) :: errflg

! --- locals:
integer :: iyear, imon, iday, ihour
Expand All @@ -648,6 +661,11 @@ subroutine radupdate( idate,jdate,deltsw,deltim,lsswr, me, &
!
!===> ... begin here
!

! Initialize the CCPP error handling variables
errmsg = ''
errflg = 0

!> -# Set up time stamp at fcst time and that for green house gases
!! (currently co2 only)
! --- ... time stamp at fcst time
Expand Down Expand Up @@ -703,7 +721,7 @@ subroutine radupdate( idate,jdate,deltsw,deltim,lsswr, me, &
!> -# Call module_radiation_aerosols::aer_update(), monthly update, no
!! time interpolation
if ( lmon_chg ) then
call aer_update ( iyear, imon, me )
call aer_update ( iyear, imon, me, iaermdl, aeros_file, errflg, errmsg )
endif

!> -# Call co2 and other gases update routine:
Expand Down
Loading

0 comments on commit 7c37906

Please sign in to comment.