@@ -1661,6 +1661,8 @@ module GFS_typedefs
1661
1661
real (kind= kind_phys) :: rhcmax ! maximum critical relative humidity, replaces rhc_max in physcons.F90
1662
1662
real (kind= kind_phys) :: huge ! < huge fill value
1663
1663
1664
+ !- -- AQM Canopy
1665
+ logical :: do_canopy ! < control flag for aqm canopy effects
1664
1666
!- -- lightning threat and diagsnostics
1665
1667
logical :: lightning_threat ! < report lightning threat indices
1666
1668
@@ -2219,6 +2221,18 @@ module GFS_typedefs
2219
2221
! Diagnostics for coupled air quality model
2220
2222
real (kind= kind_phys), pointer :: aod (:) = > null () ! < instantaneous aerosol optical depth ( n/a )
2221
2223
2224
+ ! IVAI
2225
+ ! Diagnostics for coupled air quality model
2226
+ real (kind= kind_phys), pointer :: coszens(:) = > null () ! Cosine SZA for photolysis
2227
+ real (kind= kind_phys), pointer :: jo3o1d(:) = > null () ! instantaneous O3O1D photolysis rate
2228
+ real (kind= kind_phys), pointer :: jno2 (:) = > null () ! instantaneous NO2 photolysis rate
2229
+ real (kind= kind_phys), pointer :: claie(:) = > null () ! Leaf Area Index ECCC
2230
+ real (kind= kind_phys), pointer :: cfch (:) = > null () ! Forest Canopy Height
2231
+ real (kind= kind_phys), pointer :: cfrt (:) = > null () ! Forest Fraction
2232
+ real (kind= kind_phys), pointer :: cclu (:) = > null () ! Clumping Index
2233
+ real (kind= kind_phys), pointer :: cpopu(:) = > null () ! Population density
2234
+ ! IVAI
2235
+
2222
2236
! Auxiliary output arrays for debugging
2223
2237
real (kind= kind_phys), pointer :: aux2d(:,:) = > null () ! < auxiliary 2d arrays in output (for debugging)
2224
2238
real (kind= kind_phys), pointer :: aux3d(:,:,:)= > null () ! < auxiliary 2d arrays in output (for debugging)
@@ -3747,8 +3761,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
3747
3761
logical :: do_ugwp_v1 = .false. ! < flag for version 1 ugwp GWD
3748
3762
logical :: do_ugwp_v1_orog_only = .false. ! < flag for version 1 ugwp GWD (orographic drag only)
3749
3763
logical :: do_ugwp_v1_w_gsldrag = .false. ! < flag for version 1 ugwp GWD (orographic drag only)
3750
- logical :: do_ngw_ec = .false. ! < flag for ecmwf ngwd algorithm
3751
3764
!- -- vay-2018
3765
+ logical :: do_ngw_ec = .false. ! < flag for ecmwf ngwd algorithm
3752
3766
logical :: ldiag_ugwp = .false. ! < flag for UGWP diag fields
3753
3767
logical :: ugwp_seq_update = .false. ! < flag for updating winds between UGWP steps
3754
3768
logical :: do_ugwp = .false. ! < flag do UGWP+RF
@@ -4119,6 +4133,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
4119
4133
! logical :: land_iau_do_stcsmc_adjustment = .false.
4120
4134
! real(kind=kind_phys) :: land_iau_min_T_increment = 0.0001
4121
4135
4136
+ !- -- switch for aqm canopy effects
4137
+ logical :: do_canopy = .false. ! < flag for canopy option
4138
+
4122
4139
!- -- END NAMELIST VARIABLES
4123
4140
4124
4141
NAMELIST / gfs_physics_nml/ &
@@ -4243,7 +4260,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
4243
4260
diag_flux, diag_log, &
4244
4261
! vertical diffusion
4245
4262
xkzm_m, xkzm_h, xkzm_s, xkzminv, moninq_fac, dspfac, &
4246
- bl_upfr, bl_dnfr, rlmx, elmx, sfc_rlm, tc_pbl, use_lpt, &
4263
+ bl_upfr, bl_dnfr, rlmx, elmx, sfc_rlm, tc_pbl, use_lpt, &
4247
4264
!- -- canopy heat storage parameterization
4248
4265
h0facu, h0facs, &
4249
4266
!- -- cellular automata
@@ -4278,6 +4295,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
4278
4295
!- -- (DFI) time ranges with radar-prescribed microphysics tendencies
4279
4296
! and (maybe) convection suppression
4280
4297
fh_dfi_radar, radar_tten_limits, do_cap_suppress, &
4298
+ ! aqm canopy option
4299
+ do_canopy, &
4281
4300
!- -- GSL lightning threat indices
4282
4301
lightning_threat, &
4283
4302
!- -- CCPP suite simulator
@@ -5303,6 +5322,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
5303
5322
Model% do_spp = do_spp
5304
5323
Model% n_var_spp = n_var_spp
5305
5324
5325
+ !- -- aqm canopy effects in physics
5326
+ Model% do_canopy = do_canopy
5327
+
5306
5328
if (Model% lndp_type/= 0 ) then
5307
5329
allocate (Model% lndp_var_list(Model% n_var_lndp))
5308
5330
allocate (Model% lndp_prt_list(Model% n_var_lndp))
@@ -7265,6 +7287,7 @@ subroutine control_print(Model)
7265
7287
print * , ' first_time_step : ' , Model% first_time_step
7266
7288
print * , ' restart : ' , Model% restart
7267
7289
print * , ' lsm_cold_start : ' , Model% lsm_cold_start
7290
+ print * , ' do_canopy : ' , Model% do_canopy
7268
7291
print * , ' '
7269
7292
print * , ' lightning threat indexes'
7270
7293
print * , ' lightning_threat : ' , Model% lightning_threat
@@ -8189,6 +8212,42 @@ subroutine diag_create (Diag, Model)
8189
8212
Diag% aod = zero
8190
8213
end if
8191
8214
8215
+ ! IVAI:
8216
+ ! Air quality diagnostics
8217
+ ! -- initialize diagnostic variables
8218
+ if (Model% cplaqm) then
8219
+
8220
+ ! IVAI: photdiag arrays
8221
+ allocate (Diag% coszens(IM))
8222
+ Diag% coszens= zero
8223
+
8224
+ allocate (Diag% jo3o1d(IM))
8225
+ Diag% jo3o1d = zero
8226
+
8227
+ allocate (Diag% jno2(IM))
8228
+ Diag% jno2 = zero
8229
+
8230
+ ! IVAI: canopy arrays read via aqm_emis_read
8231
+ if (Model% do_canopy) then
8232
+ allocate (Diag% claie(IM))
8233
+ Diag% claie = zero
8234
+
8235
+ allocate (Diag% cfch (IM))
8236
+ Diag% cfch = zero
8237
+
8238
+ allocate (Diag% cfrt (IM))
8239
+ Diag% cfrt = zero
8240
+
8241
+ allocate (Diag% cclu (IM))
8242
+ Diag% cclu = zero
8243
+
8244
+ allocate (Diag% cpopu (IM))
8245
+ Diag% cpopu = zero
8246
+ end if ! (Model%do_canopy)
8247
+
8248
+ end if ! (Model%cplaqm)
8249
+ ! IVAI
8250
+
8192
8251
! Auxiliary arrays in output for debugging
8193
8252
if (Model% naux2d> 0 ) then
8194
8253
allocate (Diag% aux2d(IM,Model% naux2d))
0 commit comments