diff --git a/src/core_atmosphere/CMakeLists.txt b/src/core_atmosphere/CMakeLists.txt
index ea4f57448e..1b1d3e5e73 100644
--- a/src/core_atmosphere/CMakeLists.txt
+++ b/src/core_atmosphere/CMakeLists.txt
@@ -136,6 +136,7 @@ set(ATMOSPHERE_CORE_PHYSICS_SMOKE_SOURCES
seas_data_mod.F90
seas_ngac_mod.F90
ssalt_mod.F90
+ module_anthro_emissions.F90
)
list(TRANSFORM ATMOSPHERE_CORE_PHYSICS_SMOKE_SOURCES PREPEND physics/physics_noaa/SMOKE/)
diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F b/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F
index 2f0da5914a..f290f208bd 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F
@@ -131,6 +131,7 @@ subroutine allocate_pbl(configs)
if(.not.allocated(tend_chem_settle_p)) allocate(tend_chem_settle_p(ims:ime,kms:kme,jms:jme,1:num_chem))
if(.not.allocated(chem_p)) allocate(chem_p(ims:ime,kms:kme,jms:jme,1:num_chem))
if(.not.allocated(frp_out_p)) allocate(frp_out_p(ims:ime,jms:jme))
+ if(.not.allocated(aero_emis_for_enhmix_p)) allocate(aero_emis_for_enhmix_p(ims:ime,jms:jme))
endif
pbl_select: select case (trim(pbl_scheme))
@@ -311,10 +312,11 @@ subroutine deallocate_pbl(configs)
!deallocation of chemistry arrays
if (do_chemistry) then
- if(allocated(ddvel_p) ) deallocate(ddvel_p )
- if(allocated(chem_p) ) deallocate(chem_p )
- if(allocated(tend_chem_settle_p)) deallocate(tend_chem_settle_p)
- if(allocated(frp_out_p) ) deallocate(frp_out_p )
+ if(allocated(ddvel_p) ) deallocate(ddvel_p )
+ if(allocated(chem_p) ) deallocate(chem_p )
+ if(allocated(tend_chem_settle_p) ) deallocate(tend_chem_settle_p )
+ if(allocated(frp_out_p) ) deallocate(frp_out_p )
+ if(allocated(aero_emis_for_enhmix_p)) deallocate(aero_emis_for_enhmix_p )
endif
pbl_select: select case (trim(pbl_scheme))
@@ -499,8 +501,12 @@ subroutine pbl_from_MPAS(configs,state,mesh,sfc_input,diag_physics,tend_physics,
real(kind=RKIND),dimension(:,: ),pointer :: ddvel
real(kind=RKIND),dimension(:,:,:),pointer :: chem
real(kind=RKIND),dimension(:),pointer :: frp_out
+ real(kind=RKIND),dimension(:),pointer :: aero_emis_for_enhmix
integer,pointer:: drydep_opt
logical,pointer:: enh_mix
+ character(len=StrKIND),pointer :: config_smoke_scheme, &
+ config_anthro_scheme, &
+ config_rwc_scheme
!local pointers for MYJ scheme:
real(kind=RKIND),dimension(:),pointer :: chlowq,thz0,qz0,uz0,vz0,ct,akhs,akms,lh,mixht
@@ -555,17 +561,42 @@ subroutine pbl_from_MPAS(configs,state,mesh,sfc_input,diag_physics,tend_physics,
call mpas_pool_get_dimension(state, 'chemistry_end', chemistry_end)
chem => scalars(chemistry_start:chemistry_end,:,:)
call mpas_pool_get_config(configs,'config_mynn_enh_mix',enh_mix)
+
if (enh_mix) then
- call mpas_pool_get_array(diag_physics,'frp_out',frp_out)
- end if
+ call mpas_pool_get_config(configs,'config_smoke_scheme',config_smoke_scheme)
+ if ( config_smoke_scheme .ne. 'off' ) then
+ call mpas_pool_get_array(diag_physics,'frp_out',frp_out)
+ do j = jts,jte
+ do i = its,ite
+ frp_out_p(i,j) = frp_out(i)
+ enddo
+ enddo
+ else
+ do j = jts,jte
+ do i = its,ite
+ frp_out_p(i,j) = 0._RKIND
+ enddo
+ enddo
+ endif
+
+ call mpas_pool_get_config(configs,'config_anthro_scheme',config_anthro_scheme)
+ call mpas_pool_get_config(configs,'config_rwc_scheme',config_rwc_scheme)
+ if ( config_anthro_scheme .ne. 'off' .or. config_rwc_scheme .ne. 'off') then
+ call mpas_pool_get_array(diag_physics,'aero_emis_for_enhmix',aero_emis_for_enhmix)
+ do j = jts,jte
+ do i = its,ite
+ aero_emis_for_enhmix_p(i,j) = aero_emis_for_enhmix(i)
+ enddo
+ enddo
+ else
+ do j = jts,jte
+ do i = its,ite
+ aero_emis_for_enhmix_p(i,j) = 0._RKIND
+ enddo
+ enddo
+ endif
+ endif ! If enh
- do j = jts,jte
- do i = its,ite
- if ( enh_mix ) then
- frp_out_p(i,j) = frp_out(i)
- endif
- enddo
- enddo
do n = 1,num_chem
do j = jts,jte
@@ -1622,7 +1653,7 @@ subroutine driver_pbl(itimestep,configs,state,mesh,sfc_input,diag_physics,tend_p
settle3d = tend_chem_settle_p , &
enh_mix = enh_mix , &
frp_mean = frp_out_p , &
- emis_ant_no = xland_p , &
+ emis_ant_no = aero_emis_for_enhmix_p , &
ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , &
ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , &
its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte , &
diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_smoke.F b/src/core_atmosphere/physics/mpas_atmphys_driver_smoke.F
index 1883720c81..dc37bc12f3 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_driver_smoke.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_driver_smoke.F
@@ -40,6 +40,9 @@ subroutine allocate_smoke(configs)
character(len=StrKIND),pointer :: config_smoke_scheme
character(len=StrKIND),pointer :: config_dust_scheme
+ character(len=StrKIND),pointer :: config_anthro_scheme
+ character(len=StrKIND),pointer :: config_rwc_scheme
+
integer, pointer :: ebb_dcycle
integer, pointer :: wetdep_ls_opt
integer, pointer :: drydep_opt
@@ -50,6 +53,8 @@ subroutine allocate_smoke(configs)
call mpas_pool_get_config(configs,'config_smoke_scheme', config_smoke_scheme)
call mpas_pool_get_config(configs,'config_dust_scheme', config_dust_scheme)
+ call mpas_pool_get_config(configs,'config_anthro_scheme',config_anthro_scheme)
+ call mpas_pool_get_config(configs,'config_rwc_scheme',config_rwc_scheme)
call mpas_pool_get_config(configs,'ebb_dcycle', ebb_dcycle)
call mpas_pool_get_config(configs,'plumerise_opt',plumerise_opt)
@@ -166,12 +171,26 @@ subroutine allocate_smoke(configs)
if ( num_e_bb_in .gt. 0 .and. config_smoke_scheme .ne. 'off' ) then
if(.not.allocated(e_bb_in_p)) allocate(e_bb_in_p (ims:ime,1:kwildfire,jms:jme,1:num_e_bb_in) )
endif
+ if ( num_e_ant_in .gt. 0 .and. config_anthro_scheme .ne. 'off' ) then
+ if(.not.allocated(e_ant_in_p)) allocate(e_ant_in_p(ims:ime,1:kanthro,jms:jme,1:num_e_ant_in))
+ endif
if ( num_e_bb_out .gt. 0 .and. config_smoke_scheme .ne. 'off' ) then
if(.not.allocated(e_bb_out_p)) allocate(e_bb_out_p (ims:ime,kms:kme,jms:jme,1:num_e_bb_out) )
endif
if ( num_e_dust_out .gt. 0 .and. config_dust_scheme .ne. 'off' ) then
if(.not.allocated(e_dust_out_p)) allocate(e_dust_out_p(ims:ime,kms:kme,jms:jme,1:num_e_dust_out))
endif
+ if ( num_e_ant_out .gt. 0 .and. config_anthro_scheme .ne. 'off' ) then
+ if(.not.allocated(e_ant_out_p)) allocate(e_ant_out_p (ims:ime,kms:kme,jms:jme,1:num_e_ant_out) )
+ endif
+ if ( config_rwc_scheme .ne. 'off' ) then
+ if(.not.allocated(RWC_denominator_p)) allocate(RWC_denominator_p(ims:ime,jms:jme))
+ if(.not.allocated(RWC_annual_sum_p)) allocate(RWC_annual_sum_p(ims:ime,1:kreswoodcomb,jms:jme))
+ if(.not.allocated(RWC_annual_sum_smoke_fine_p)) allocate(RWC_annual_sum_smoke_fine_p(ims:ime,1:kreswoodcomb,jms:jme))
+ if(.not.allocated(RWC_annual_sum_smoke_coarse_p)) allocate(RWC_annual_sum_smoke_coarse_p(ims:ime,1:kreswoodcomb,jms:jme))
+ if(.not.allocated(RWC_annual_sum_unspc_fine_p)) allocate(RWC_annual_sum_unspc_fine_p(ims:ime,1:kreswoodcomb,jms:jme))
+ if(.not.allocated(RWC_annual_sum_unspc_coarse_p)) allocate(RWC_annual_sum_unspc_coarse_p(ims:ime,1:kreswoodcomb,jms:jme))
+ endif
end subroutine allocate_smoke
@@ -259,9 +278,11 @@ subroutine deallocate_smoke(configs)
if(allocated(aod3d_p) ) deallocate(aod3d_p )
if(allocated(e_bb_in_p) ) deallocate(e_bb_in_p )
+ if(allocated(e_ant_in_p) ) deallocate(e_ant_in_p )
if(allocated(e_bb_out_p) ) deallocate(e_bb_out_p )
if(allocated(e_dust_out_p) ) deallocate(e_dust_out_p )
+ if(allocated(e_ant_out_p) ) deallocate(e_ant_out_p )
!-----------------------------------------------------------------------------------------------------------------
@@ -310,9 +331,13 @@ subroutine smoke_from_MPAS(dt_dyn, time_lev, emission_input, state, configs, &
real(kind=RKIND),dimension(:),pointer :: hfx_bb, qfx_bb, frac_grid_burned
integer,dimension(:),pointer :: min_bb_plume, max_bb_plume
real(kind=RKIND),dimension(:),pointer :: sandfrac_in, clayfrac_in, uthres_in, uthres_sg_in, &
- sep_in, albedo_drag, feff
- real(kind=RKIND),dimension(:,:,:),pointer :: e_bb_in
- real(kind=RKIND),dimension(:,:,:),pointer :: e_bb_out, e_dust_out
+ sep_in, albedo_drag,feff
+ real(kind=RKIND),dimension(:),pointer :: RWC_denominator
+ real(kind=RKIND),dimension(:,:), pointer :: RWC_annual_sum, RWC_annual_sum_smoke_fine, &
+ RWC_annual_sum_smoke_coarse,RWC_annual_sum_unspc_fine, &
+ RWC_annual_sum_unspc_coarse
+ real(kind=RKIND),dimension(:,:,:),pointer :: e_bb_in, e_ant_in
+ real(kind=RKIND),dimension(:,:,:),pointer :: e_bb_out, e_dust_out, e_ant_out
integer,dimension(:),pointer :: isltyp,ivgtyp,kpbl
integer,pointer :: chemistry_start,chemistry_end
@@ -320,12 +345,13 @@ subroutine smoke_from_MPAS(dt_dyn, time_lev, emission_input, state, configs, &
integer,pointer :: ebb_dcycle
character(len=StrKIND),pointer :: config_smoke_scheme
character(len=StrKIND),pointer :: config_dust_scheme
+ character(len=StrKIND),pointer :: config_anthro_scheme
+ character(len=StrKIND),pointer :: config_rwc_scheme
character(len=StrKIND),pointer :: config_convection_scheme
integer, pointer :: wetdep_ls_opt
integer, pointer :: drydep_opt
integer, pointer :: plumerise_opt
logical, pointer :: add_fire_heat_flux, add_fire_moist_flux
-
real(kind=RKIND),dimension(:,:,:),pointer :: scalars
real(kind=RKIND),dimension(:,:,:),pointer :: chem
@@ -342,6 +368,8 @@ subroutine smoke_from_MPAS(dt_dyn, time_lev, emission_input, state, configs, &
call mpas_pool_get_config(configs,'config_smoke_scheme', config_smoke_scheme)
call mpas_pool_get_config(configs,'config_dust_scheme', config_dust_scheme)
+ call mpas_pool_get_config(configs,'config_anthro_scheme', config_anthro_scheme)
+ call mpas_pool_get_config(configs,'config_rwc_scheme',config_rwc_scheme)
call mpas_pool_get_config(configs,'wetdep_ls_opt',wetdep_ls_opt)
call mpas_pool_get_config(configs,'drydep_opt',drydep_opt)
@@ -411,6 +439,19 @@ subroutine smoke_from_MPAS(dt_dyn, time_lev, emission_input, state, configs, &
call mpas_pool_get_array(emission_input, 'e_bb_in', e_bb_in)
endif
+ if (config_anthro_scheme .ne. 'off' .and. num_e_ant_in .gt. 0 ) then
+ call mpas_pool_get_array(emission_input, 'e_ant_in', e_ant_in)
+ endif
+
+ if (config_rwc_scheme .ne. 'off' ) then
+ call mpas_pool_get_array(diag_physics,'RWC_denominator',RWC_denominator)
+ call mpas_pool_get_array(diag_physics,'RWC_annual_sum',RWC_annual_sum)
+ call mpas_pool_get_array(diag_physics,'RWC_annual_sum_smoke_fine',RWC_annual_sum_smoke_fine)
+ call mpas_pool_get_array(diag_physics,'RWC_annual_sum_smoke_coarse',RWC_annual_sum_smoke_coarse)
+ call mpas_pool_get_array(diag_physics,'RWC_annual_sum_unspc_fine',RWC_annual_sum_unspc_fine)
+ call mpas_pool_get_array(diag_physics,'RWC_annual_sum_unspc_coarse',RWC_annual_sum_unspc_coarse)
+ endif
+
if (config_smoke_scheme .ne. 'off' ) then
call mpas_pool_get_array(diag_physics,'frp_out',frp_out)
call mpas_pool_get_array(diag_physics,'fre_out',fre_out)
@@ -450,6 +491,9 @@ subroutine smoke_from_MPAS(dt_dyn, time_lev, emission_input, state, configs, &
if ( num_e_dust_out .gt. 0 ) then
call mpas_pool_get_array(diag_physics, 'e_dust_out',e_dust_out)
endif
+ if ( num_e_ant_out .gt. 0 .and. config_anthro_scheme .ne. 'off') then
+ call mpas_pool_get_array(diag_physics, 'e_ant_out',e_ant_out)
+ endif
chem => scalars(chemistry_start:chemistry_end,:,:)
@@ -491,6 +535,18 @@ subroutine smoke_from_MPAS(dt_dyn, time_lev, emission_input, state, configs, &
enddo
endif
!
+ if ( num_e_ant_in .gt. 0 .and. config_anthro_scheme .ne. 'off') then
+ do n = 1, num_e_ant_in
+ do j = jts, jte
+ do k = 1, kanthro
+ do i = its, ite
+ e_ant_in_p(i,k,j,n) = e_ant_in(n,k,i)
+ enddo
+ enddo
+ enddo
+ enddo
+ endif
+
do j = jts,jte
do n = 1,num_soils
do i = its,ite
@@ -536,6 +592,24 @@ subroutine smoke_from_MPAS(dt_dyn, time_lev, emission_input, state, configs, &
enddo
endif
!
+ if ( config_rwc_scheme .ne. 'off' ) then
+ do j = jts, jte
+ do k = 1,kreswoodcomb
+ do i = its, ite
+ RWC_annual_sum_p(i,k,j) = RWC_annual_sum(k,i)
+ RWC_annual_sum_smoke_fine_p(i,k,j) = RWC_annual_sum_smoke_fine(k,i)
+ RWC_annual_sum_smoke_coarse_p(i,k,j) = RWC_annual_sum_smoke_coarse(k,i)
+ RWC_annual_sum_unspc_fine_p(i,k,j) = RWC_annual_sum_unspc_fine(k,i)
+ RWC_annual_sum_unspc_coarse_p(i,k,j) = RWC_annual_sum_unspc_coarse(k,i)
+ enddo
+ enddo
+ enddo
+ do j = jts, jte
+ do i = its, ite
+ RWC_denominator_p(i,j) = RWC_denominator(i)
+ enddo
+ enddo
+ endif
if ( config_smoke_scheme .ne. 'off' .and. ebb_dcycle .eq. 2 ) then
do blk = 1, nblocks
@@ -661,24 +735,42 @@ subroutine smoke_from_MPAS(dt_dyn, time_lev, emission_input, state, configs, &
enddo
enddo
enddo
-
- ! Accumulated emissions or?
+
+ if (num_e_ant_out .gt. 0 .and. config_anthro_scheme .ne. 'off') then
+ do n = 1, num_e_ant_out
do j = jts, jte
do k = kts, kte
do i = its, ite
- if (num_e_bb_out .gt. 0 ) then
- do n = 1, num_e_bb_out
- e_bb_out_p(i,k,j,n) = e_bb_out(n,k,i)
- enddo
- endif
- if (num_e_dust_out .gt. 0 ) then
- do n = 1, num_e_dust_out
- e_dust_out_p(i,k,j,n) = e_dust_out(n,k,i)
- enddo
- endif
+ e_ant_out_p(i,k,j,n) = 0._RKIND !e_ant_out(n,k,i)
+ enddo
+ enddo
+ enddo
+ enddo
+ endif
+
+ if (num_e_bb_out .gt. 0 .and. config_smoke_scheme .ne. 'off') then
+ do n = 1, num_e_bb_out
+ do j = jts, jte
+ do k = kts, kte
+ do i = its, ite
+ e_bb_out_p(i,k,j,n) = e_bb_out(n,k,i)
+ enddo
+ enddo
+ enddo
+ enddo
+ endif
+
+ if (num_e_dust_out .gt. 0 .and. config_dust_scheme .ne. 'off') then
+ do n = 1, num_e_dust_out
+ do j = jts, jte
+ do k = kts, kte
+ do i = its, ite
+ e_dust_out_p(i,k,j,n) = e_dust_out(n,k,i)
enddo
enddo
enddo
+ enddo
+ endif
end subroutine smoke_from_MPAS
@@ -708,13 +800,15 @@ subroutine smoke_to_MPAS(configs,time_lev,state,diag_physics,tend_physics,its,it
real(kind=RKIND),dimension(:,:) ,pointer:: PM2_5, PM10
real(kind=RKIND),dimension(:,:) ,pointer:: aod3d_smoke, aod3d
real(kind=RKIND),dimension(:), pointer:: aod550
- real(kind=RKIND),dimension(:,:,:),pointer:: e_bb_out, e_dust_out
+ real(kind=RKIND),dimension(:,:,:),pointer:: e_bb_out, e_dust_out, e_ant_out
+ real(kind=RKIND),dimension(:),pointer :: aero_emis_for_enhmix
integer,dimension(:),pointer:: min_bb_plume, max_bb_plume
integer,pointer :: chemistry_start,chemistry_end
integer,pointer :: ebb_dcycle
character(len=StrKIND),pointer :: config_smoke_scheme
character(len=StrKIND),pointer :: config_dust_scheme
+ character(len=StrKIND),pointer :: config_anthro_scheme
integer, pointer :: wetdep_ls_opt
integer, pointer :: drydep_opt
integer, pointer :: plumerise_opt
@@ -735,6 +829,7 @@ subroutine smoke_to_MPAS(configs,time_lev,state,diag_physics,tend_physics,its,it
call mpas_pool_get_array(diag_physics,'drydep_flux',drydep_flux)
call mpas_pool_get_array(diag_physics,'vis',vis)
+ call mpas_pool_get_array(diag_physics,'aero_emis_for_enhmix',aero_emis_for_enhmix)
call mpas_pool_get_array(tend_physics,'tend_chem_settle',tend_chem_settle)
@@ -742,6 +837,7 @@ subroutine smoke_to_MPAS(configs,time_lev,state,diag_physics,tend_physics,its,it
call mpas_pool_get_dimension(state, 'chemistry_end', chemistry_end)
call mpas_pool_get_config(configs,'config_smoke_scheme', config_smoke_scheme)
call mpas_pool_get_config(configs,'config_dust_scheme', config_dust_scheme)
+ call mpas_pool_get_config(configs,'config_anthro_scheme',config_anthro_scheme)
call mpas_pool_get_config(configs,'ebb_dcycle', ebb_dcycle)
call mpas_pool_get_config(configs,'wetdep_ls_opt',wetdep_ls_opt)
call mpas_pool_get_config(configs,'drydep_opt',drydep_opt)
@@ -755,6 +851,9 @@ subroutine smoke_to_MPAS(configs,time_lev,state,diag_physics,tend_physics,its,it
if (num_e_dust_out .gt. 0 ) then
call mpas_pool_get_array(diag_physics, 'e_dust_out',e_dust_out)
endif
+ if (num_e_ant_out .gt. 0 ) then
+ call mpas_pool_get_array(diag_physics, 'e_ant_out',e_ant_out)
+ endif
if (config_smoke_scheme .ne. 'off' ) then
call mpas_pool_get_array(diag_physics,'aod3d_smoke',aod3d_smoke)
call mpas_pool_get_array(diag_physics,'frp_out',frp_out)
@@ -824,6 +923,24 @@ subroutine smoke_to_MPAS(configs,time_lev,state,diag_physics,tend_physics,its,it
enddo
enddo
+! Initialize output emissions for MYNN enhanced mixing
+ do i=its,ite
+ aero_emis_for_enhmix(i) = 0._RKIND
+ enddo
+
+ if (num_e_ant_out .gt. 0 ) then
+ do n = 1, num_e_ant_out
+ do j = jts,jte
+ do k = kts,kte
+ do i = its,ite
+ e_ant_out(n,k,i) = e_ant_out_p(i,k,j,n)
+ aero_emis_for_enhmix(i) = aero_emis_for_enhmix(i) + e_ant_out_p(i,k,j,n)
+ enddo
+ enddo
+ enddo
+ enddo
+ endif
+
if (num_e_bb_out .gt. 0 ) then
do n = 1, num_e_bb_out
do j = jts,jte
@@ -913,16 +1030,23 @@ subroutine driver_smoke(itimestep,time_lev,emission_input,state,configs, &
!local pointers:
integer,pointer :: index_smoke_fine
integer,pointer :: index_dust_fine, index_dust_coarse
+ integer,pointer :: index_unspc_fine
integer,pointer :: index_e_bb_in_smoke_fine
+ integer,pointer :: index_e_ant_in_unspc_fine
+ integer,pointer :: index_e_ant_in_unspc_coarse
integer,pointer :: index_e_bb_out_smoke_fine
integer,pointer :: index_e_dust_out_dust_fine, index_e_dust_out_dust_coarse
+ integer,pointer :: index_e_ant_out_unspc_fine, index_e_ant_out_unspc_coarse
+
integer,pointer :: chemistry_start
!namelists
logical,pointer :: config_do_restart
character(len=StrKIND),pointer :: config_smoke_scheme
character(len=StrKIND),pointer :: config_dust_scheme
- logical :: do_mpas_smoke, do_mpas_dust
+ character(len=StrKIND),pointer :: config_anthro_scheme
+ character(len=StrKIND),pointer :: config_rwc_scheme
+ logical :: do_mpas_smoke, do_mpas_dust, do_mpas_anthro, do_mpas_rwc
integer,pointer :: hwp_method
real(kind=RKIND),pointer :: hwp_alpha
integer,pointer :: wetdep_ls_opt
@@ -942,11 +1066,14 @@ subroutine driver_smoke(itimestep,time_lev,emission_input,state,configs, &
integer,pointer :: plumerisefire_frq
real(kind=RKIND),pointer :: dust_alpha, dust_gamma
real(kind=RKIND),pointer :: dust_drylimit_factor, dust_moist_correction
+ real(kind=RKIND),pointer :: rwc_emis_scale_factor
integer :: i,j,k,nblocks
do_mpas_smoke = .false.
do_mpas_dust = .false.
+ do_mpas_anthro = .false.
+ do_mpas_rwc = .false.
!copy MPAS arrays to local arrays:
call smoke_from_MPAS(dt_dyn, time_lev, emission_input, state, configs, mesh, &
@@ -956,6 +1083,7 @@ subroutine driver_smoke(itimestep,time_lev,emission_input,state,configs, &
! Namelist: schemes
call mpas_pool_get_config(configs,'config_smoke_scheme', config_smoke_scheme)
call mpas_pool_get_config(configs,'config_dust_scheme', config_dust_scheme)
+ call mpas_pool_get_config(configs,'config_anthro_scheme', config_anthro_scheme)
! Namelist: smoke
call mpas_pool_get_config(configs,'hwp_method',hwp_method)
call mpas_pool_get_config(configs,'hwp_alpha',hwp_alpha)
@@ -971,6 +1099,8 @@ subroutine driver_smoke(itimestep,time_lev,emission_input,state,configs, &
call mpas_pool_get_config(configs,'calc_bb_emis_online',calc_bb_emis_online)
call mpas_pool_get_config(configs,'bb_beta',bb_beta)
call mpas_pool_get_config(configs,'bb_qv_scale_factor',bb_qv_scale_factor)
+ call mpas_pool_get_config(configs,'config_rwc_scheme',config_rwc_scheme)
+ call mpas_pool_get_config(configs,'rwc_emis_scale_factor',rwc_emis_scale_factor)
! Namelist: Wet/dry deposition
call mpas_pool_get_config(configs,'wetdep_ls_opt',wetdep_ls_opt)
call mpas_pool_get_config(configs,'wetdep_ls_alpha',wetdep_ls_alpha)
@@ -983,6 +1113,8 @@ subroutine driver_smoke(itimestep,time_lev,emission_input,state,configs, &
call mpas_pool_get_config(configs,'dust_moist_correction', dust_moist_correction)
! Indexes: emissions in
call mpas_pool_get_dimension(emission_input,'index_e_bb_in_smoke_fine',index_e_bb_in_smoke_fine)
+ call mpas_pool_get_dimension(emission_input,'index_e_ant_in_unspc_fine',index_e_ant_in_unspc_fine)
+ call mpas_pool_get_dimension(emission_input,'index_e_ant_in_unspc_coarse',index_e_ant_in_unspc_coarse)
! Indexes: emissions out
call mpas_pool_get_dimension(diag_physics,'index_e_bb_out_smoke_fine',index_e_bb_out_smoke_fine)
@@ -990,11 +1122,15 @@ subroutine driver_smoke(itimestep,time_lev,emission_input,state,configs, &
call mpas_pool_get_dimension(diag_physics,'index_e_dust_out_dust_fine',index_e_dust_out_dust_fine)
call mpas_pool_get_dimension(diag_physics,'index_e_dust_out_dust_coarse',index_e_dust_out_dust_coarse)
+ call mpas_pool_get_dimension(diag_physics,'index_e_ant_out_unspc_fine',index_e_ant_out_unspc_fine)
+ call mpas_pool_get_dimension(diag_physics,'index_e_ant_out_unspc_coarse',index_e_ant_out_unspc_coarse)
+
! Tracer indexes
call mpas_pool_get_dimension(state,'chemistry_start', chemistry_start)
call mpas_pool_get_dimension(state,'index_smoke_fine' ,index_smoke_fine )
call mpas_pool_get_dimension(state,'index_dust_fine' ,index_dust_fine )
call mpas_pool_get_dimension(state,'index_dust_coarse' ,index_dust_coarse )
+ call mpas_pool_get_dimension(state,'index_unspc_fine' ,index_unspc_fine )
initflag = 1
if(config_do_restart .or. itimestep > 1) initflag = 0
@@ -1006,59 +1142,93 @@ subroutine driver_smoke(itimestep,time_lev,emission_input,state,configs, &
nblocks = 24 / bb_input_prevh
endif
endif
+ if (config_rwc_scheme .ne. 'off' .and. (index_smoke_fine .gt. 0 .or. &
+ index_unspc_fine .gt. 0 )) then
+ do_mpas_rwc = .true.
+ endif
if (config_dust_scheme .ne. 'off' .and. &
(index_dust_fine .gt. 0 .or. index_dust_coarse .gt. 0 )) then
do_mpas_dust = .true.
endif
+ if (config_anthro_scheme .ne. 'off' .and. &
+ index_unspc_fine .gt. 0 ) then
+ do_mpas_anthro= .true.
+ endif
call mpas_timer_start('mpas_smoke')
call mpas_smoke_driver( &
+!--- Chemistry array
chem = chem_p, num_chem = num_chem, chemistry_start = chemistry_start, &
+!--- Number vertical levels in emissions
kanthro = kanthro, kfire = kwildfire, kbio = kbiogenic, kvol = kvolcanic, &
- index_smoke_fine = index_smoke_fine, &
+ krwc = kreswoodcomb, &
+!--- Emission arrays
+ e_bb_in = e_bb_in_p, e_bb_out = e_bb_out_p, &
+ e_ant_in = e_ant_in_p, e_ant_out = e_ant_out_p, &
+ e_dust_out = e_dust_out_p, &
+!--- Number of emissions in each array
+ num_e_ant_in = num_e_ant_in, num_e_bb_in = num_e_bb_in, &
+ num_e_ant_out = num_e_ant_out, num_e_bb_out = num_e_bb_out, &
+ num_e_dust_out = num_e_dust_out, &
+!--- Tracer indices
+ index_smoke_fine = index_smoke_fine, &
index_dust_fine = index_dust_fine, index_dust_coarse = index_dust_coarse, &
+ index_unspc_fine = index_unspc_fine, &
+! --- Emission (input) indices
index_e_bb_in_smoke_fine = index_e_bb_in_smoke_fine, &
+ index_e_ant_in_unspc_fine = index_e_ant_in_unspc_fine, &
+ index_e_ant_in_unspc_coarse = index_e_ant_in_unspc_coarse, &
+! --- Emission (output) indices
index_e_bb_out_smoke_fine = index_e_bb_out_smoke_fine, &
index_e_dust_out_dust_fine = index_e_dust_out_dust_fine, &
index_e_dust_out_dust_coarse = index_e_dust_out_dust_coarse, &
- hwp = hwp_p, &
+ index_e_ant_out_unspc_fine = index_e_ant_out_unspc_fine, &
+ index_e_ant_out_unspc_coarse = index_e_ant_out_unspc_coarse, &
+! --- Wildfire related arrays
+ hwp = hwp_p, &
+ hwp_method = hwp_method, hwp_alpha = hwp_alpha, &
frp_in = frp_in_p, frp_out = frp_out_p, &
fre_in = fre_in_p, fre_out = fre_out_p, &
totprcp_prev24 = totprcp_prev24_p, hwp_avg = hwp_avg_p, &!JR
frp_avg = frp_avg_p, fre_avg = fre_avg_p, &!JR
fire_end_hr = fire_end_hr_p, eco_id = eco_id_p, &!JR:as the avg blocks are calculated here
+ calc_bb_emis_online = calc_bb_emis_online, &
efs_smold = efs_smold_p, efs_flam= efs_flam_p, &!JR
efs_rsmold = efs_rsmold_p, fmc_avg = fmc_avg_p, &!JR
hfx_bb = hfx_bb_p, qfx_bb = qfx_bb_p, &
- frac_grid_burned = frac_grid_burned_p, vis = vis_p, &
+ frac_grid_burned = frac_grid_burned_p, &
min_bb_plume = min_bb_plume_p, max_bb_plume = max_bb_plume_p, &
coef_bb_dc = coef_bb_dc_p, nblocks = nblocks, &
+! --- Dust related arrays
sandfrac_in = sandfrac_in_p, clayfrac_in = clayfrac_in_p, &
uthres_in = uthres_in_p, uthres_sg_in = uthres_sg_in_p, &
albedo_drag_in = albedo_drag_p, feff_in = feff_p, sep_in = sep_in_p, &
- e_bb_in = e_bb_in_p, e_bb_out = e_bb_out_p, &
- e_dust_out = e_dust_out_p, &
- num_e_bb_in = num_e_bb_in, num_e_bb_out = num_e_bb_out, &
- num_e_dust_out = num_e_dust_out, &
- drydep_flux = drydep_flux_p, &
- ddvel = ddvel_p, wetdep_resolved = wetdep_resolved_p, &
- tend_chem_settle = tend_chem_settle_p, &
+! --- Dry/Wet deposition, settling
+ wetdep_ls_opt = wetdep_ls_opt, drydep_flux = drydep_flux_p, &
+ tend_chem_settle = tend_chem_settle_p, ddvel = ddvel_p, &
+ wetdep_resolved = wetdep_resolved_p, &
+! --- Package activation
do_mpas_smoke = do_mpas_smoke, do_mpas_dust = do_mpas_dust, &
- calc_bb_emis_online = calc_bb_emis_online, &
- hwp_method = hwp_method, hwp_alpha = hwp_alpha, wetdep_ls_opt = wetdep_ls_opt,&
- wetdep_ls_alpha = wetdep_ls_alpha, plumerise_opt = plumerise_opt, &
+ do_mpas_anthro = do_mpas_anthro, do_mpas_rwc = do_mpas_rwc, &
+! --- Namelist: Wildfire
plume_wind_eff = plume_wind_eff, plume_alpha = plume_alpha, &
bb_emis_scale_factor = bb_emis_scale_factor, &
bb_qv_scale_factor = bb_qv_scale_factor, &
ebb_dcycle = ebb_dcycle, &
- drydep_opt = drydep_opt, pm_settling = pm_settling, &
add_fire_heat_flux = add_fire_heat_flux, &
add_fire_moist_flux = add_fire_moist_flux, &
plumerisefire_frq = plumerisefire_frq, &
+ bb_beta = bb_beta, bb_input_prevh = bb_input_prevh, &
+! --- Namelist: Dry/Wet deposition and settling
+ wetdep_ls_alpha = wetdep_ls_alpha, plumerise_opt = plumerise_opt, &
+ drydep_opt = drydep_opt, pm_settling = pm_settling, &
+! --- Namelist: Dust
dust_alpha = dust_alpha, dust_gamma = dust_gamma, &
dust_drylimit_factor = dust_drylimit_factor, &
dust_moist_correction = dust_moist_correction, &
- bb_beta = bb_beta, bb_input_prevh = bb_input_prevh, &
+! --- Namelist: Other
+ rwc_emis_scale_factor = rwc_emis_scale_factor, &
+! --- Met variables
ktau = itimestep , dt = dt_dyn , dxcell = dx_p , &
area = area_p , &
xland = xland_p , u10 = u10_p , v10 = v10_p , &
@@ -1067,15 +1237,10 @@ subroutine driver_smoke(itimestep,time_lev,emission_input,state,configs, &
p8w = pres2_hyd_p , dz8w = dz_p , z_at_w = zgrid_p , &
p_phy = pres_hyd_p , t_phy = t_p , u_phy = u_p , &
v_phy = v_p , qv = qv_p , vvel = w_p , &
- qc_vis = qc_p, &
- qr_vis = qr_p, &
- qi_vis = qi_p, &
- qs_vis = qs_p, &
- qg_vis = qg_p, &
- blcldw_vis = qcbl_p, &
- blcldi_vis = qibl_p, &
- coszen = coszr_p, &
- aod3d_smoke = aod3d_smoke_p, aod3d = aod3d_p, &
+ qc_vis = qc_p, qr_vis = qr_p, qi_vis = qi_p, qs_vis = qs_p, qg_vis = qg_p, &
+ blcldw_vis = qcbl_p, blcldi_vis = qibl_p, &
+ coszen = coszr_p, &
+ aod3d_smoke = aod3d_smoke_p, aod3d = aod3d_p, vis = vis_p , &
pi_phy = pi_p , rho_phy = rho_p , kpbl = kpbl_p , &
nsoil = num_soils , smois = smois_p , tslb = tslb_p , &
ivgtyp = ivgtyp_p , isltyp = isltyp_p , nlcat = num_landcat, &
@@ -1098,6 +1263,7 @@ subroutine driver_smoke(itimestep,time_lev,emission_input,state,configs, &
PM2_5_p(i,k,j) = 0.0_RKIND
if (index_smoke_fine .gt. 0) PM2_5_p(i,k,j) = PM2_5_p(i,k,j) + chem_p(i,k,j,index_smoke_fine - chemistry_start + 1)
if (index_dust_fine .gt. 0) PM2_5_p(i,k,j) = PM2_5_p(i,k,j) + chem_p(i,k,j,index_dust_fine - chemistry_start + 1)
+ if (index_unspc_fine .gt. 0) PM2_5_p(i,k,j) = PM2_5_p(i,k,j) + chem_p(i,k,j,index_unspc_fine - chemistry_start + 1)
PM2_5_p(i,k,j) = PM2_5_p(i,k,j) * rho_p(i,k,j)
PM10_p(i,k,j) = 0.0_RKIND
diff --git a/src/core_atmosphere/physics/mpas_atmphys_init.F b/src/core_atmosphere/physics/mpas_atmphys_init.F
index 745e89e28a..23c44290e3 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_init.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_init.F
@@ -19,7 +19,7 @@ module mpas_atmphys_init
use mpas_atmphys_driver_radiation_sw,only: init_radiation_sw
use mpas_atmphys_driver_sfclayer,only: init_sfclayer
use mpas_atmphys_vars,only: f_qc,f_qr,f_qi,f_qs,f_qg,f_qoz,f_nc,f_ni,f_nifa,f_nwfa,f_nbca, &
- f_smoke_fine,f_dust_fine,f_dust_coarse
+ f_smoke_fine,f_dust_fine,f_dust_coarse,f_unspc_fine
use mpas_atmphys_landuse
use mpas_atmphys_o3climatology
@@ -256,7 +256,7 @@ subroutine physics_init(dminfo,stream_manager,clock,configs,mesh,diag,tend,state
!initialization of logical flags for cloud mixing ratios and number concentrations, and aerosols
!number concentrations from the Thompson cloud microphysics:
call init_physics_flags(state,f_qc,f_qr,f_qi,f_qs,f_qg,f_qoz,f_nc,f_ni,f_nifa,f_nwfa,f_nbca, &
- f_smoke_fine,f_dust_fine,f_dust_coarse)
+ f_smoke_fine,f_dust_fine,f_dust_coarse,f_unspc_fine)
!initialization of counters i_rainc and i_rainnc. i_rainc and i_rainnc track the number of
!times the accumulated convective (rainc) and grid-scale (rainnc) rain exceed the prescribed
@@ -478,7 +478,7 @@ end subroutine physics_init
!=================================================================================================================
subroutine init_physics_flags(state,f_qc,f_qr,f_qi,f_qs,f_qg,f_qoz,f_nc,f_ni,f_nifa,f_nwfa,f_nbca, &
- f_smoke_fine,f_dust_fine,f_dust_coarse)
+ f_smoke_fine,f_dust_fine,f_dust_coarse,f_unspc_fine)
!=================================================================================================================
!input arguments:
@@ -487,12 +487,12 @@ subroutine init_physics_flags(state,f_qc,f_qr,f_qi,f_qs,f_qg,f_qoz,f_nc,f_ni,f_n
!output arguments:
logical,intent(out):: f_qc,f_qr,f_qi,f_qs,f_qg,f_qoz
logical,intent(out):: f_nc,f_ni,f_nifa,f_nwfa,f_nbca
- logical,intent(out):: f_smoke_fine,f_dust_fine,f_dust_coarse
+ logical,intent(out):: f_smoke_fine,f_dust_fine,f_dust_coarse,f_unspc_fine
!local pointers:
integer,pointer:: index_qc,index_qr,index_qi,index_qs,index_qg
integer,pointer:: index_nc,index_ni,index_nifa,index_nwfa
- integer,pointer:: index_smoke_fine,index_dust_fine,index_dust_coarse
+ integer,pointer:: index_smoke_fine,index_dust_fine,index_dust_coarse,index_unspc_fine
!-----------------------------------------------------------------------------------------------------------------
@@ -506,6 +506,7 @@ subroutine init_physics_flags(state,f_qc,f_qr,f_qi,f_qs,f_qg,f_qoz,f_nc,f_ni,f_n
f_smoke_fine = .false.
f_dust_fine = .false.
f_dust_coarse = .false.
+ f_unspc_fine = .false.
call mpas_pool_get_dimension(state,'index_qc',index_qc)
call mpas_pool_get_dimension(state,'index_qr',index_qr)
call mpas_pool_get_dimension(state,'index_qi',index_qi)
@@ -514,15 +515,17 @@ subroutine init_physics_flags(state,f_qc,f_qr,f_qi,f_qs,f_qg,f_qoz,f_nc,f_ni,f_n
call mpas_pool_get_dimension(state,'index_smoke_fine',index_smoke_fine)
call mpas_pool_get_dimension(state,'index_dust_fine',index_dust_fine)
call mpas_pool_get_dimension(state,'index_dust_coarse',index_dust_coarse)
+ call mpas_pool_get_dimension(state,'index_unspc_fine',index_unspc_fine)
if(index_qc .gt. -1) f_qc = .true.
if(index_qr .gt. -1) f_qr = .true.
if(index_qi .gt. -1) f_qi = .true.
if(index_qs .gt. -1) f_qs = .true.
if(index_qg .gt. -1) f_qg = .true.
- if(index_smoke_fine .gt. -1) f_smoke_fine = .true.
+ if(index_smoke_fine .gt. -1) f_smoke_fine = .true.
if(index_dust_fine .gt. -1) f_dust_fine = .true.
if(index_dust_coarse .gt. -1) f_dust_coarse = .true.
+ if(index_unspc_fine .gt. -1) f_unspc_fine = .true.
!initializes the logical assigned to number concentrations:
f_nc = .false.
diff --git a/src/core_atmosphere/physics/mpas_atmphys_manager.F b/src/core_atmosphere/physics/mpas_atmphys_manager.F
index 7880e40aa9..b3c9b9eedc 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_manager.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_manager.F
@@ -398,7 +398,8 @@ subroutine physics_run_init(configs,mesh,state,emission_input,diag_physics,clock
config_radt_lw_scheme, &
config_radt_sw_scheme, &
config_smoke_scheme, &
- config_dust_scheme
+ config_dust_scheme, &
+ config_anthro_scheme
character(len=StrKIND),pointer:: config_conv_interval, &
config_pbl_interval, &
@@ -417,9 +418,9 @@ subroutine physics_run_init(configs,mesh,state,emission_input,diag_physics,clock
integer,pointer:: nMonths
integer,pointer:: nAerosols,nAerLevels,nOznLevels
integer,pointer:: nCellsSolve,nSoilLevels,nVertLevels,nlcat,nscat
- integer,pointer:: nChem,nkanthro,nkwildfire,nkbiogenic,nkvolcanic
- integer,pointer:: n_e_bb_in
- integer,pointer:: n_e_bb_out,n_e_dust_out
+ integer,pointer:: nChem,nkanthro,nkwildfire,nkbiogenic,nkvolcanic,nkreswoodcomb
+ integer,pointer:: n_e_bb_in,n_e_ant_in
+ integer,pointer:: n_e_bb_out,n_e_dust_out,n_e_ant_out
real(kind=RKIND):: dt
@@ -451,6 +452,7 @@ subroutine physics_run_init(configs,mesh,state,emission_input,diag_physics,clock
call mpas_pool_get_config(configs,'config_microp_re' ,config_microp_re )
call mpas_pool_get_config(configs,'config_smoke_scheme' ,config_smoke_scheme )
call mpas_pool_get_config(configs,'config_dust_scheme' ,config_dust_scheme )
+ call mpas_pool_get_config(configs,'config_anthro_scheme' ,config_anthro_scheme )
call mpas_get_timeInterval(mpas_get_clock_timestep(clock, ierr), dt=dt)
@@ -471,11 +473,14 @@ subroutine physics_run_init(configs,mesh,state,emission_input,diag_physics,clock
call mpas_pool_get_dimension(mesh,'nkwildfire' ,nkwildfire )
call mpas_pool_get_dimension(mesh,'nkbiogenic' ,nkbiogenic )
call mpas_pool_get_dimension(mesh,'nkvolcanic' ,nkvolcanic )
+ call mpas_pool_get_dimension(mesh,'nkreswoodcomb',nkreswoodcomb )
call mpas_pool_get_dimension(diag_physics, 'num_e_bb_out',n_e_bb_out )
call mpas_pool_get_dimension(diag_physics, 'num_e_dust_out',n_e_dust_out)
+ call mpas_pool_get_dimension(diag_physics, 'num_e_ant_out',n_e_ant_out)
call mpas_pool_get_dimension(emission_input,'num_e_bb_in',n_e_bb_in )
+ call mpas_pool_get_dimension(emission_input,'num_e_ant_in',n_e_ant_in )
!initialization of gmt, julian day, and alarms:
@@ -709,13 +714,17 @@ subroutine physics_run_init(configs,mesh,state,emission_input,diag_physics,clock
kwildfire = nkwildfire
kbiogenic = nkbiogenic
kvolcanic = nkvolcanic
+ kreswoodcomb= nkreswoodcomb
num_e_bb_in = n_e_bb_in
+ num_e_ant_in = n_e_ant_in
num_e_bb_out = n_e_bb_out
num_e_dust_out= n_e_dust_out
+ num_e_ant_out = n_e_ant_out
- if(config_smoke_scheme .ne. 'off' .or. config_dust_scheme .ne. 'off') then
+ if(config_smoke_scheme .ne. 'off' .or. config_dust_scheme .ne. 'off' &
+ .or. config_anthro_scheme .ne. 'off') then
do_chemistry = .true.
else
do_chemistry = .false.
diff --git a/src/core_atmosphere/physics/mpas_atmphys_packages.F b/src/core_atmosphere/physics/mpas_atmphys_packages.F
index e1a9513669..a34c56660d 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_packages.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_packages.F
@@ -39,8 +39,6 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie
character(len=StrKIND),pointer:: config_convection_scheme
character(len=StrKIND),pointer:: config_pbl_scheme
character(len=StrKIND),pointer:: config_lsm_scheme
- character(len=StrKIND),pointer:: config_smoke_scheme
- character(len=StrKIND),pointer:: config_dust_scheme
logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware
logical,pointer:: mp_kessler_in,mp_thompson_in,mp_thompson_aers_in,mp_wsm6_in,mp_nssl2m_in,nssl3m_in
logical,pointer:: mp_tempo_in, tempo_hailaware_in, tempo_aerosolaware_in
@@ -48,7 +46,6 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie
logical,pointer:: bl_mynn_in,bl_mynnedmf_in,bl_ysu_in,bl_myj_in
logical,pointer:: lsm_noah_in,lsm_ruc_in
logical,pointer:: sf_noahmp_in
- logical,pointer:: mpas_smoke_in,mpas_dust_in
integer :: ierr
@@ -300,54 +297,6 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie
call mpas_log_write(' sf_noahmp_in = $l', logicArgs=(/sf_noahmp_in/))
call mpas_log_write('')
-!--- initialization of packages for parameterizations of smoke:
-
- call mpas_pool_get_config(configs,'config_smoke_scheme', config_smoke_scheme)
-
- nullify(mpas_smoke_in)
- call mpas_pool_get_package(packages,'mpas_smoke_inActive', mpas_smoke_in)
-
- if(.not.associated(mpas_smoke_in)) then
- call mpas_log_write('================================================================================',messageType=MPAS_LOG_ERR)
- call mpas_log_write('* Error while setting up packages for smoke options in atmosphere core.', messageType=MPAS_LOG_ERR)
- call mpas_log_write('================================================================================',messageType=MPAS_LOG_ERR)
- ierr = 1
- return
- endif
-
- mpas_smoke_in = .false.
-
- if(config_smoke_scheme.ne.'off') then
- mpas_smoke_in = .true.
- endif
-
- call mpas_log_write(' mpas_smoke_in = $l', logicArgs=(/mpas_smoke_in/))
- call mpas_log_write('')
-
-!--- initialization of packages for parameterizations of dust:
-
- call mpas_pool_get_config(configs,'config_dust_scheme', config_dust_scheme)
-
- nullify(mpas_dust_in)
- call mpas_pool_get_package(packages,'mpas_dust_inActive', mpas_dust_in)
-
- if(.not.associated(mpas_dust_in)) then
- call mpas_log_write('================================================================================',messageType=MPAS_LOG_ERR)
- call mpas_log_write('* Error while setting up packages for dust options in atmosphere core.', messageType=MPAS_LOG_ERR)
- call mpas_log_write('================================================================================',messageType=MPAS_LOG_ERR)
- ierr = 1
- return
- endif
-
- mpas_dust_in = .false.
-
- if(config_dust_scheme.ne.'off') then
- mpas_dust_in = .true.
- endif
-
- call mpas_log_write(' mpas_dust_in = $l', logicArgs=(/mpas_dust_in/))
- call mpas_log_write('')
-
end function atmphys_setup_packages
!=================================================================================================================
diff --git a/src/core_atmosphere/physics/mpas_atmphys_vars.F b/src/core_atmosphere/physics/mpas_atmphys_vars.F
index b379086243..fd139096db 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_vars.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_vars.F
@@ -159,7 +159,7 @@ module mpas_atmphys_vars
integer,public:: num_months !number of months [-]
integer,public:: num_chem !Temporary workaround for defining dimensions holding chem data
- integer,public:: kanthro,kbiogenic,kwildfire,kvolcanic!Number of vertical levels in input emission data
+ integer,public:: kanthro,kbiogenic,kwildfire,kvolcanic,kreswoodcomb!Number of vertical levels in input emission data
logical:: do_chemistry !controls call to smoke, dust and other chemical processes
integer,public:: num_e_ant_in,num_e_bb_in,num_e_bio_in,num_e_vol_in
@@ -248,6 +248,8 @@ module mpas_atmphys_vars
aod3d_smoke_p, aod3d_p
real(kind=RKIND),dimension(:,:),allocatable:: &
aod550_p
+ real(kind=RKIND),dimension(:,:),allocatable:: &
+ aero_emis_for_enhmix_p
! Input/output smoke 2D fields - JLS
real(kind=RKIND),dimension(:,:),allocatable:: &
frp_in_p, &!
diff --git a/src/core_atmosphere/physics/physics_noaa/SMOKE b/src/core_atmosphere/physics/physics_noaa/SMOKE
index 2604d19dcb..9652bbf152 160000
--- a/src/core_atmosphere/physics/physics_noaa/SMOKE
+++ b/src/core_atmosphere/physics/physics_noaa/SMOKE
@@ -1 +1 @@
-Subproject commit 2604d19dcbf543fefe51e6322e3625766ed9c3c1
+Subproject commit 9652bbf152f8b946bf04f72a2b48ff67e15d7973
diff --git a/src/core_atmosphere/physics/registry.chemistry.xml b/src/core_atmosphere/physics/registry.chemistry.xml
index 92581393a4..16995fcb4f 100644
--- a/src/core_atmosphere/physics/registry.chemistry.xml
+++ b/src/core_atmosphere/physics/registry.chemistry.xml
@@ -17,7 +17,9 @@
+ description="A constant value of 24"/>
+
@@ -25,10 +27,24 @@
-
-
-
-
+
+
+
+
+
+
@@ -47,7 +63,15 @@
+
+
+
@@ -176,6 +204,7 @@
filename_template="history.$Y-$M-$D_$h.$m.$s.nc"
output_interval="6:00:00"
runtime_format="separate_file">
+
@@ -253,10 +282,24 @@
input_interval="1:00:00"
immutable="true"
in_defaults="false">
-
+
+
+
+
+
+
+
+
+
+
@@ -267,60 +310,57 @@
+ packages="mpas_smoke_fine"/>
+ packages="mpas_dust_in"/>
+ packages="mpas_dust_in"/>
+
+
-
+
-
-
-
-
-
+
+
+
-
+
-
-
-
-
+
+
+
@@ -376,6 +416,8 @@
+
@@ -439,7 +481,25 @@
+ description="aerosol optical depth (2D) from all aerosols"/>
+
+
+
+
+
+
@@ -451,14 +511,17 @@
+ packages="mpas_smoke_fine"/>
+
+
-
#endif
@@ -468,13 +531,14 @@
-
-
+ description="Lateral boundary tendency of coarse dust mixing ratio"/>
+