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"/> +