!********************************************************************************** ! This computer software was prepared by Battelle Memorial Institute, hereinafter ! the Contractor, under Contract No. DE-AC05-76RL0 1830 with the Department of ! Energy (DOE). NEITHER THE GOVERNMENT NOR THE CONTRACTOR MAKES ANY WARRANTY, ! EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. ! ! MOSAIC module: see module_mosaic_driver.F for references and terms of use !********************************************************************************** MODULE module_wetscav_driver REAL, PARAMETER :: mwso4 = 96.00 ! Molecular mass of SO4-- (g/mol) REAL, PARAMETER :: mwno3 = 62.0 ! Molecular mass of NO3- (g/mol) CONTAINS !=========================================================================== !=========================================================================== subroutine wetscav_driver( id, ktau, dtstep, ktauc, config_flags, & dtstepc, alt, t_phy, moist, p8w, & t8w, dx, dy, p_phy, chem, & rho_phy, cldfra, cldfra2, rainprod, evapprod, & hno3_col_mdel, qlsink, precr, preci, precs, precg, & wdflx, & gas_aqfrac, numgas_aqfrac, dz8w, & h2oaj,h2oai,nu3,ac3,cor3,asulf,ahno3,anh3,cvaro1, & cvaro2,cvalk1,cvole1,cvapi1,cvapi2,cvlim1,cvlim2, & wd_no3,wd_so4,wd_nh4,wd_oa, & wd_so2, wd_sulf, wd_hno3, wd_nh3, & wd_cvasoa, wd_cvbsoa, wd_asoa, wd_bsoa, & qv_b4mp, qc_b4mp, qi_b4mp, qs_b4mp, & !====================================================================================== !Variables required for CAM_MAM_WETSCAV p_hyd,scalar,dgnum4d,dgnumwet4d,dlf3d,dlf2_3d,qme3d,prain3d,& nevapr3d,rate1ord_cw2pr_st3d,shfrc3d,cmfmc,cmfmc2,evapcsh, & icwmrsh,rprdsh,evapcdp3d,icwmrdp3d,rprddp3d,fracis3d, & f_ice_phy,f_rain_phy,cldfrai,cldfral,cldfra_mp_all, & is_CAMMGMP_used, & !====================================================================================== ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) !---------------------------------------------------------------------- ! ! wet removal by grid-resolved precipitation ! scavenging of cloud-phase aerosols and gases by collection, freezing, ... ! scavenging of interstitial-phase aerosols by impaction ! scavenging of gas-phase gases by mass transfer and reaction ! ! This driver calls subroutines for wet scavenging. ! ! 1. MADE-SORGAM ! 2. MOSAIC ! 3. CAM5's Wet scavenging ! !---------------------------------------------------------------------- USE module_configure USE module_state_description USE module_model_constants USE modal_aero_data, only: ntot_amode ! For cam_mam_wetscav variables USE module_mozcart_wetscav, only: wetscav_mozcart USE module_mosaic_wetscav, only: wetscav_cbmz_mosaic, wetscav_mozart_mosaic !!! TUCCELLA (BUG, the line below is commented now) !USE module_aerosols_sorgam, only: wetscav_sorgam_driver USE module_aerosols_sorgam_vbs, only: wetscav_sorgam_vbs_driver USE module_cam_mam_wetscav, only: wetscav_cam_mam_driver USE module_cam_support, only: pcnst =>pcnst_runtime !!! TUCCELLA (BUG, the line below is commented now) !USE module_aerosols_soa_vbs, only: wetscav_soa_vbs_driver !!! TUCCELLA (BUG, the drivers for wet scavenging of SORGAM and VBS now are in ! module_prep_wetscav_sorgam.F) USE module_prep_wetscav_sorgam, only: wetscav_sorgam_driver, wetscav_soa_vbs_driver USE module_data_mosaic_asect, only: mw_so4_aer, mw_no3_aer, mw_nh4_aer, & mw_smpa_aer, mw_smpbb_aer, mw_oc_aer, & mw_glysoa_r1_aer, mw_glysoa_r2_aer, & mw_glysoa_sfc_aer, mw_glysoa_nh4_aer, & mw_glysoa_oh_aer,& mw_asoaX_aer, mw_asoa1_aer, mw_asoa2_aer, mw_asoa3_aer, mw_asoa4_aer, & mw_bsoaX_aer, mw_bsoa1_aer, mw_bsoa2_aer, mw_bsoa3_aer, mw_bsoa4_aer, & mw_biog1_c_aer, mw_biog1_o_aer IMPLICIT NONE !====================================================================== ! Grid structure in physics part of WRF !---------------------------------------------------------------------- ! The horizontal velocities used in the physics are unstaggered ! relative to temperature/moisture variables. All predicted ! variables are carried at half levels except w, which is at full ! levels. Some arrays with names (*8w) are at w (full) levels. ! !---------------------------------------------------------------------- ! In WRF, kms (smallest number) is the bottom level and kme (largest ! number) is the top level. In your scheme, if 1 is at the top level, ! then you have to reverse the order in the k direction. ! ! kme - half level (no data at this level) ! kme ----- full level ! kme-1 - half level ! kme-1 ----- full level ! . ! . ! . ! kms+2 - half level ! kms+2 ----- full level ! kms+1 - half level ! kms+1 ----- full level ! kms - half level ! kms ----- full level ! !====================================================================== ! Definitions !----------- !-- alt inverse density !-- t_phy temperature (K) !-- w vertical velocity (m/s) !-- moist moisture array (4D - last index is species) (kg/kg) !-- dz8w dz between full levels (m) !-- p8w pressure at full levels (Pa) !-- p_phy pressure (Pa) ! points (dimensionless) !-- z 3D height with lowest level being the terrain !-- rho_phy density (kg/m^3) !-- qlsink Fractional cloud water sink (/s) !-- precr rain precipitation rate at all levels (kg/m2/s) !-- preci ice precipitation rate at all levels (kg/m2/s) !-- precs snow precipitation rate at all levels (kg/m2/s) !-- precg graupel precipitation rate at all levels (kg/m2/s) & !-- R_d gas constant for dry air ( 287. J/kg/K) !-- R_v gas constant for water vapor (461 J/k/kg) !-- Cp specific heat at constant pressure (1004 J/k/kg) !-- rvovrd R_v divided by R_d (dimensionless) !-- G acceleration due to gravity (m/s^2) !-- p_hyd Hydrostatic pressure(Pa) !-- z_sea_level Height above sea level at mid-level (m) !-- dlf3d Detrainment of convective condensate (kg/kg/s) !-- dlf2_3d dq/dt due to export of cloud water into environment by shallow convection(kg/kg/s) !-- qme3d Net condensation rate (kg/kg/s) !-- prain3d Rate of conversion of condensate to precipitation (kg/kg/s) !-- nevapr3d Evaporation rate of rain + snow (kg/kg/s) !-- rate1ord_cw2pr_st3d 1st order rate for direct conversion of strat. cloud water to precip (1/s) !-- shfrc3d Shallow cloud fraction !-- cmfmc Deep + Shallow Convective mass flux [ kg /s/m^2 ] !-- cmfmc2 Shallow convective mass flux [ kg/s/m^2 ] !-- evapcsh Evaporation of shallow convection precipitation (kg/kg/s) !-- icwmrsh shallow cumulus in-cloud water mixing ratio (kg/m2) !-- rprdsh dq/dt due to deep and shallow convective rainout(kg/kg/s) !-- evapcdp3d Evaporation of deep convective precipitation (kg/kg/s) !-- icwmrdp3d Deep Convection in-cloud water mixing ratio (kg/m2) !-- rprddp3d dq/dt due to deep convective rainout (kg/kg/s) !-- fracis3d fraction of transported species that are insoluble !-- ids start index for i in domain !-- ide end index for i in domain !-- jds start index for j in domain !-- jde end index for j in domain !-- kds start index for k in domain !-- kde end index for k in domain !-- ims start index for i in memory !-- ime end index for i in memory !-- jms start index for j in memory !-- jme end index for j in memory !-- kms start index for k in memory !-- kme end index for k in memory !-- its start index for i in tile !-- ite end index for i in tile !-- jts start index for j in tile !-- jte end index for j in tile !-- kts start index for k in tile !-- kte end index for k in tile !-- config_flags%kemit end index for k for emissions arrays ! !====================================================================== TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags LOGICAL, INTENT(IN) :: is_CAMMGMP_used INTEGER, INTENT(IN ) :: & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte, & id, ktau, ktauc, numgas_aqfrac REAL, INTENT(IN ) :: dtstep,dtstepc REAL, INTENT(IN ) :: dx, dy ! ! moisture variables ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme, num_moist ), & INTENT(INOUT ) :: moist ! scalar variables ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme, num_scalar ), & INTENT(INOUT) :: scalar ! ! all advected chemical species ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme, num_chem ), & INTENT(INOUT ) :: chem ! fraction of gas species in cloud water REAL, DIMENSION( ims:ime, kms:kme, jms:jme, numgas_aqfrac ), & INTENT(IN ) :: gas_aqfrac ! ! following are aerosol arrays that are not advected ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), & INTENT(INOUT ) :: & h2oaj,h2oai,nu3,ac3,cor3,asulf,ahno3,anh3,cvaro1,cvaro2, & cvalk1,cvole1,cvapi1,cvapi2,cvlim1,cvlim2 ! ! Accumulated wet deposition ! REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT) :: wd_no3,wd_so4, & wd_nh4, wd_oa, & wd_so2, wd_sulf, & wd_hno3, wd_nh3 REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT) :: & wd_cvasoa, wd_cvbsoa, wd_asoa, wd_bsoa ! ! input from meteorology(3D) REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , & INTENT(IN ) :: & alt, & t_phy, & p_phy, & t8w, & p8w, & dz8w, & qlsink,precr,preci,precs,precg, & rho_phy,cldfra, & !variables needed for cam_mam_wetscav cldfrai,cldfral,cldfra_mp_all, & p_hyd,dlf3d,dlf2_3d, & qme3d,prain3d,nevapr3d, & rate1ord_cw2pr_st3d,shfrc3d, & cmfmc,cmfmc2,evapcsh,icwmrsh, & rprdsh,evapcdp3d,icwmrdp3d, & rprddp3d,f_ice_phy,f_rain_phy REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , & INTENT(INOUT ) :: cldfra2, & rainprod, & evapprod REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , & INTENT(IN) :: qc_b4mp, & qv_b4mp, & qi_b4mp, & qs_b4mp REAL, DIMENSION( ims:ime , jms:jme ) , & INTENT(INOUT ) :: hno3_col_mdel REAL, DIMENSION( ims:ime, jms:jme, num_chem ) , & INTENT(INOUT) :: & wdflx !wet deposition mol/m^2 or #/m^2 or ug/m^2 ! !input (4D) REAL, DIMENSION( ims:ime , kms:kme , jms:jme , ntot_amode ), & INTENT(IN ) :: dgnum4d,dgnumwet4d !variables needed for cam_mam_wetscav ! ! output variables (3D) REAL, DIMENSION( ims:ime , kms:kme , jms:jme, pcnst ) , & INTENT(OUT ) :: & fracis3d ! LOCAL VAR integer :: ii,jj,kk REAL, DIMENSION( ims:ime, jms:jme, num_chem ) :: qsrflx, delta_mass_col ! column change due to scavening REAL :: tmp_minval = 1.0e7 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) :: rainrate, evaprate ! ! Wet deposition over the current time step ! REAL, DIMENSION( ims:ime , jms:jme ) :: wdi_no3,wdi_so4,wdi_nh4,wdi_oa, & wdi_so2, wdi_sulf, wdi_hno3, wdi_nh3 REAL, DIMENSION( ims:ime , jms:jme ) :: wdi_cvasoa,wdi_cvbsoa,wdi_asoa,wdi_bsoa !----------------------------------------------------------------- ! These are unneeded, since the default behavior is to do nothing. ! If the default changes, then lines need to be added for CBMZ and ! CBMZ_BB. ! IF (config_flags%chem_opt .eq. 0) return ! IF (config_flags%chem_opt .eq. 1) return ! ! select which aerosol scheme to take ! cps_select: SELECT CASE(config_flags%chem_opt) CASE ( RADM2SORG_AQ, RADM2SORG_AQCHEM, RACMSORG_AQ, RACMSORG_AQCHEM_KPP, RACM_ESRLSORG_AQCHEM_KPP, CBMZSORG_AQ, & CB05_SORG_AQ_KPP) CALL wrf_debug(15,'wetscav_driver calling sorgam_wetscav_driver' ) call wetscav_sorgam_driver (id,ktau,dtstep,ktauc,config_flags, & dtstepc,alt,t_phy,p8w,t8w,p_phy,chem,rho_phy,cldfra, & qlsink,precr,preci,precs,precg, qsrflx, & gas_aqfrac, numgas_aqfrac, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) ! not clear if the following is necessary or appropriate tmp_minval = 1.0e7 do jj=jts,jte do kk=kts,kte do ii=its,ite if (chem(ii,kk,jj,p_nu0) .lt. tmp_minval) then chem(ii,kk,jj,p_nu0) = tmp_minval endif enddo enddo enddo !!! TUCCELLA CASE ( RACM_SOA_VBS_AQCHEM_KPP ) CALL wrf_debug(15,'wetscav_driver calling soa_vbs_wetscav_driver' ) call wetscav_soa_vbs_driver (id,ktau,dtstep,ktauc,config_flags, & dtstepc,alt,t_phy,p8w,t8w,p_phy,chem,rho_phy,cldfra, & qlsink,precr,preci,precs,precg, qsrflx, & gas_aqfrac, numgas_aqfrac, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) ! not clear if the following is necessary or appropriate tmp_minval = 1.0e7 do jj=jts,jte do kk=kts,kte do ii=its,ite if (chem(ii,kk,jj,p_nu0) .lt. tmp_minval) then chem(ii,kk,jj,p_nu0) = tmp_minval endif enddo enddo enddo CASE (CB05_SORG_VBS_AQ_KPP ) CALL wrf_debug(15,'wetscav_driver calling sorgam_wetscav_driver' ) call wetscav_sorgam_vbs_driver (id,ktau,dtstep,ktauc,config_flags, & dtstepc,alt,t_phy,p8w,t8w,p_phy,chem,rho_phy,cldfra, & qlsink,precr,preci,precs,precg, qsrflx, & gas_aqfrac, numgas_aqfrac, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) ! not clear if the following is necessary or appropriate tmp_minval = 1.0e7 do jj=jts,jte do kk=kts,kte do ii=its,ite if (chem(ii,kk,jj,p_nu0) .lt. tmp_minval) then chem(ii,kk,jj,p_nu0) = tmp_minval endif enddo enddo enddo CASE (CBMZ_MOSAIC_4BIN, CBMZ_MOSAIC_8BIN, CBMZ_MOSAIC_DMS_4BIN, CBMZ_MOSAIC_DMS_8BIN) CALL wrf_error_fatal('Wet scavenging is currently not possible with MOSAIC unless aqueous aerosols are turned on.') CASE (CBMZ_MOSAIC_4BIN_AQ, CBMZ_MOSAIC_8BIN_AQ, CBMZ_MOSAIC_DMS_4BIN_AQ, CBMZ_MOSAIC_DMS_8BIN_AQ, & CRI_MOSAIC_8BIN_AQ_KPP, CRI_MOSAIC_4BIN_AQ_KPP,SAPRC99_MOSAIC_8BIN_VBS2_AQ_KPP )!BSINGH(12/05/2013): Added for SAPRC 8 bin vbs ) CALL wrf_debug(15,'wetscav_driver calling mosaic_wetscav_driver') call wetscav_cbmz_mosaic (id,ktau,dtstep,ktauc,config_flags, & dtstepc,alt,t_phy,p8w,t8w,p_phy,chem,rho_phy,cldfra, & qlsink,precr,preci,precs,precg, qsrflx, & gas_aqfrac, numgas_aqfrac, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) CASE (MOZART_KPP,MOZCART_KPP,T1_MOZCART_KPP,MOZART_MOSAIC_4BIN_KPP) CALL wrf_debug(15,'wetscav_driver calling wetscav_mozcart') if( config_flags%mp_physics == THOMPSON ) then rainrate(:,:,:) = rainprod(:,:,:) evaprate(:,:,:) = evapprod(:,:,:) elseif( config_flags%mp_physics == WSM6SCHEME ) then rainrate(:,:,:) = rainprod(:,:,:) evaprate(:,:,:) = evapprod(:,:,:) elseif( config_flags%mp_physics == CAMMGMPSCHEME ) then rainrate(:,:,:) = prain3d(:,:,:) evaprate(:,:,:) = nevapr3d(:,:,:) elseif( config_flags%mp_physics == MORR_TWO_MOMENT ) then rainrate(:,:,:) = rainprod(:,:,:) evaprate(:,:,:) = evapprod(:,:,:) else rainrate(:,:,:) = 0. evaprate(:,:,:) = 0. endif call wetscav_mozcart( id, ktau, dtstep, ktauc, config_flags, & dtstepc, t_phy, p8w, t8w, p_phy, & chem, rho_phy, cldfra2, rainrate, evaprate, & qv_b4mp, qc_b4mp, qi_b4mp, qs_b4mp, & gas_aqfrac, numgas_aqfrac, dz8w, dx, dy, & moist(ims,kms,jms,p_qv), moist(ims,kms,jms,p_qc), & moist(ims,kms,jms,p_qi), moist(ims,kms,jms,p_qs), & ! hno3_col_mdel, & delta_mass_col, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) hno3_col_mdel = delta_mass_col(:,:,p_hno3) ! STUPID - cases have to be unique. We repeat both calls done above ! (mosaic_wetscav for aerosols, mozcart for gases) CASE (MOZART_MOSAIC_4BIN_AQ_KPP) CALL wrf_debug(15,'wetscav_driver calling mosaic_wetscav_driver') if( config_flags%mp_physics == THOMPSON ) then rainrate(:,:,:) = rainprod(:,:,:) evaprate(:,:,:) = evapprod(:,:,:) elseif( config_flags%mp_physics == WSM6SCHEME ) then rainrate(:,:,:) = rainprod(:,:,:) evaprate(:,:,:) = evapprod(:,:,:) elseif( config_flags%mp_physics == CAMMGMPSCHEME ) then rainrate(:,:,:) = prain3d(:,:,:) evaprate(:,:,:) = nevapr3d(:,:,:) elseif( config_flags%mp_physics == MORR_TWO_MOMENT ) then rainrate(:,:,:) = rainprod(:,:,:) evaprate(:,:,:) = evapprod(:,:,:) else rainrate(:,:,:) = 0. evaprate(:,:,:) = 0. endif call wetscav_mozart_mosaic (id,ktau,dtstep,ktauc,config_flags, & dtstepc,alt,t_phy,p8w,t8w,p_phy,chem,rho_phy,cldfra, & qlsink,precr,preci,precs,precg, qsrflx, & gas_aqfrac, numgas_aqfrac, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) CALL wrf_debug(15,'wetscav_driver calling wetscav_mozcart') call wetscav_mozcart( id, ktau, dtstep, ktauc, config_flags, & dtstepc, t_phy, p8w, t8w, p_phy, & chem, rho_phy, cldfra2, rainrate, evaprate, & qv_b4mp, qc_b4mp, qi_b4mp, qs_b4mp, & gas_aqfrac, numgas_aqfrac, dz8w, dx, dy, & moist(ims,kms,jms,p_qv), moist(ims,kms,jms,p_qc), & moist(ims,kms,jms,p_qi), moist(ims,kms,jms,p_qs), & ! hno3_col_mdel, & delta_mass_col, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) hno3_col_mdel = delta_mass_col(:,:,p_hno3) CASE (CBMZ_CAM_MAM3_NOAQ,CBMZ_CAM_MAM3_AQ,CBMZ_CAM_MAM7_NOAQ,CBMZ_CAM_MAM7_AQ) CALL wrf_debug(15,'wetscav_driver calling wetscav_cam_mam_driver') call wetscav_cam_mam_driver (ktau,p_hyd,p8w,t_phy,dgnum4d, & dgnumwet4d,dlf3d,dlf2_3d,dtstep,qme3d,prain3d,nevapr3d, & rate1ord_cw2pr_st3d,shfrc3d,cmfmc,cmfmc2,evapcsh,icwmrsh, & rprdsh,evapcdp3d,icwmrdp3d,rprddp3d,moist(ims,kms,jms,P_QS), & f_ice_phy,f_rain_phy,config_flags,cldfra_mp_all,cldfrai, & cldfral,cldfra,is_CAMMGMP_used, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte, & !intent-inout moist(ims,kms,jms,P_QV),moist(ims,kms,jms,P_QC), & moist(ims,kms,jms,P_QI),scalar(ims,kms,jms,P_QNI), & scalar(ims,kms,jms,P_QNC),chem, & !intent-out fracis3D ) CASE DEFAULT END SELECT cps_select ! Calculate wet deposition of the species by accumulating their (negative) ! column change. It is assumed that all precipitation reaches the ground. SELECT CASE(config_flags%chem_opt) CASE ( RADM2SORG_AQCHEM,RACMSORG_AQCHEM_KPP,RACM_ESRLSORG_AQCHEM_KPP ) do jj=jts,jte do ii=its,ite ! Nitrate wet deposition over the current time step: wdi_no3(ii,jj) = - 0.001*qsrflx(ii,jj,p_no3cwj)/mwno3 & - 0.001*qsrflx(ii,jj,p_no3cwi)/mwno3 ! mmol/m2 ! Accumulated nitrate wet deposition: wd_no3(ii,jj) = wd_no3(ii,jj) + wdi_no3(ii,jj) ! mmol/m2 ! Sulfate wet deposition over the current time step: wdi_so4(ii,jj) = - 0.001*qsrflx(ii,jj,p_so4cwj)/mwso4 & - 0.001*qsrflx(ii,jj,p_so4cwi)/mwso4 & - qsrflx(ii,jj,p_sulf) & - qsrflx(ii,jj,p_so2) ! mmol/m2 ! Accumulated sulfate wet deposition: wd_so4(ii,jj) = wd_so4(ii,jj) + wdi_so4(ii,jj) ! mmol/m2 enddo enddo CASE ( MOZART_MOSAIC_4BIN_AQ_KPP) do jj=jts,jte do ii=its,ite ! Nitrate wet deposition over the current time step: wdi_no3(ii,jj) = - 0.001*qsrflx(ii,jj,p_no3_cw01)/mw_no3_aer & - 0.001*qsrflx(ii,jj,p_no3_cw02)/mw_no3_aer & - 0.001*qsrflx(ii,jj,p_no3_cw03)/mw_no3_aer & - 0.001*qsrflx(ii,jj,p_no3_cw04)/mw_no3_aer ! mmol/m2 ! Accumulated nitrate wet deposition: wd_no3(ii,jj) = wd_no3(ii,jj) + wdi_no3(ii,jj) ! mmol/m2 ! Sulfate wet deposition over the current time step: wdi_so4(ii,jj) = - 0.001*qsrflx(ii,jj,p_so4_cw01)/mw_so4_aer & - 0.001*qsrflx(ii,jj,p_so4_cw02)/mw_so4_aer & - 0.001*qsrflx(ii,jj,p_so4_cw03)/mw_so4_aer & - 0.001*qsrflx(ii,jj,p_so4_cw04)/mw_so4_aer ! mmol/m2 ! Accumulated sulfate wet deposition: wd_so4(ii,jj) = wd_so4(ii,jj) + wdi_so4(ii,jj) ! mmol/m2 ! Ammoni* wet deposition over the current time step: wdi_nh4(ii,jj) = - 0.001*qsrflx(ii,jj,p_nh4_cw01)/mw_nh4_aer & - 0.001*qsrflx(ii,jj,p_nh4_cw02)/mw_nh4_aer & - 0.001*qsrflx(ii,jj,p_nh4_cw03)/mw_nh4_aer & - 0.001*qsrflx(ii,jj,p_nh4_cw04)/mw_nh4_aer ! mmol/m2 ! Accumulated ammoni* wet deposition: wd_nh4(ii,jj) = wd_nh4(ii,jj) + wdi_nh4(ii,jj) ! mmol/m2 ! Total organics wet deposition over the current time step: wdi_oa(ii,jj) = - 0.001*qsrflx(ii,jj,p_oc_cw01)/mw_oc_aer & - 0.001*qsrflx(ii,jj,p_oc_cw02)/mw_oc_aer & - 0.001*qsrflx(ii,jj,p_oc_cw03)/mw_oc_aer & - 0.001*qsrflx(ii,jj,p_oc_cw04)/mw_oc_aer & - 0.001*qsrflx(ii,jj,p_asoaX_cw01)/mw_asoaX_aer & - 0.001*qsrflx(ii,jj,p_asoaX_cw02)/mw_asoaX_aer & - 0.001*qsrflx(ii,jj,p_asoaX_cw03)/mw_asoaX_aer & - 0.001*qsrflx(ii,jj,p_asoaX_cw04)/mw_asoaX_aer & - 0.001*qsrflx(ii,jj,p_asoa1_cw01)/mw_asoa1_aer & - 0.001*qsrflx(ii,jj,p_asoa1_cw02)/mw_asoa1_aer & - 0.001*qsrflx(ii,jj,p_asoa1_cw03)/mw_asoa1_aer & - 0.001*qsrflx(ii,jj,p_asoa1_cw04)/mw_asoa1_aer & - 0.001*qsrflx(ii,jj,p_asoa2_cw01)/mw_asoa2_aer & - 0.001*qsrflx(ii,jj,p_asoa2_cw02)/mw_asoa2_aer & - 0.001*qsrflx(ii,jj,p_asoa2_cw03)/mw_asoa2_aer & - 0.001*qsrflx(ii,jj,p_asoa2_cw04)/mw_asoa2_aer & - 0.001*qsrflx(ii,jj,p_asoa3_cw01)/mw_asoa3_aer & - 0.001*qsrflx(ii,jj,p_asoa3_cw02)/mw_asoa3_aer & - 0.001*qsrflx(ii,jj,p_asoa3_cw03)/mw_asoa3_aer & - 0.001*qsrflx(ii,jj,p_asoa3_cw04)/mw_asoa3_aer & - 0.001*qsrflx(ii,jj,p_asoa4_cw01)/mw_asoa4_aer & - 0.001*qsrflx(ii,jj,p_asoa4_cw02)/mw_asoa4_aer & - 0.001*qsrflx(ii,jj,p_asoa4_cw03)/mw_asoa4_aer & - 0.001*qsrflx(ii,jj,p_asoa4_cw04)/mw_asoa4_aer & - 0.001*qsrflx(ii,jj,p_bsoaX_cw01)/mw_bsoaX_aer & - 0.001*qsrflx(ii,jj,p_bsoaX_cw02)/mw_bsoaX_aer & - 0.001*qsrflx(ii,jj,p_bsoaX_cw03)/mw_bsoaX_aer & - 0.001*qsrflx(ii,jj,p_bsoaX_cw04)/mw_bsoaX_aer & - 0.001*qsrflx(ii,jj,p_bsoa1_cw01)/mw_bsoa1_aer & - 0.001*qsrflx(ii,jj,p_bsoa1_cw02)/mw_bsoa1_aer & - 0.001*qsrflx(ii,jj,p_bsoa1_cw03)/mw_bsoa1_aer & - 0.001*qsrflx(ii,jj,p_bsoa1_cw04)/mw_bsoa1_aer & - 0.001*qsrflx(ii,jj,p_bsoa2_cw01)/mw_bsoa2_aer & - 0.001*qsrflx(ii,jj,p_bsoa2_cw02)/mw_bsoa2_aer & - 0.001*qsrflx(ii,jj,p_bsoa2_cw03)/mw_bsoa2_aer & - 0.001*qsrflx(ii,jj,p_bsoa2_cw04)/mw_bsoa2_aer & - 0.001*qsrflx(ii,jj,p_bsoa3_cw01)/mw_bsoa3_aer & - 0.001*qsrflx(ii,jj,p_bsoa3_cw02)/mw_bsoa3_aer & - 0.001*qsrflx(ii,jj,p_bsoa3_cw03)/mw_bsoa3_aer & - 0.001*qsrflx(ii,jj,p_bsoa3_cw04)/mw_bsoa3_aer & - 0.001*qsrflx(ii,jj,p_bsoa4_cw01)/mw_bsoa4_aer & - 0.001*qsrflx(ii,jj,p_bsoa4_cw02)/mw_bsoa4_aer & - 0.001*qsrflx(ii,jj,p_bsoa4_cw03)/mw_bsoa4_aer & - 0.001*qsrflx(ii,jj,p_bsoa4_cw04)/mw_bsoa4_aer & - 0.001*qsrflx(ii,jj,p_glysoa_r1_cw01)/mw_glysoa_r1_aer & - 0.001*qsrflx(ii,jj,p_glysoa_r1_cw02)/mw_glysoa_r1_aer & - 0.001*qsrflx(ii,jj,p_glysoa_r1_cw03)/mw_glysoa_r1_aer & - 0.001*qsrflx(ii,jj,p_glysoa_r1_cw04)/mw_glysoa_r1_aer & - 0.001*qsrflx(ii,jj,p_glysoa_r2_cw01)/mw_glysoa_r2_aer & - 0.001*qsrflx(ii,jj,p_glysoa_r2_cw02)/mw_glysoa_r2_aer & - 0.001*qsrflx(ii,jj,p_glysoa_r2_cw03)/mw_glysoa_r2_aer & - 0.001*qsrflx(ii,jj,p_glysoa_r2_cw04)/mw_glysoa_r2_aer & - 0.001*qsrflx(ii,jj,p_glysoa_sfc_cw01)/mw_glysoa_sfc_aer & - 0.001*qsrflx(ii,jj,p_glysoa_sfc_cw02)/mw_glysoa_sfc_aer & - 0.001*qsrflx(ii,jj,p_glysoa_sfc_cw03)/mw_glysoa_sfc_aer & - 0.001*qsrflx(ii,jj,p_glysoa_sfc_cw04)/mw_glysoa_sfc_aer & - 0.001*qsrflx(ii,jj,p_glysoa_nh4_cw01)/mw_glysoa_nh4_aer & - 0.001*qsrflx(ii,jj,p_glysoa_nh4_cw02)/mw_glysoa_nh4_aer & - 0.001*qsrflx(ii,jj,p_glysoa_nh4_cw03)/mw_glysoa_nh4_aer & - 0.001*qsrflx(ii,jj,p_glysoa_nh4_cw04)/mw_glysoa_nh4_aer & - 0.001*qsrflx(ii,jj,p_glysoa_oh_cw01)/mw_glysoa_oh_aer & - 0.001*qsrflx(ii,jj,p_glysoa_oh_cw02)/mw_glysoa_oh_aer & - 0.001*qsrflx(ii,jj,p_glysoa_oh_cw03)/mw_glysoa_oh_aer & - 0.001*qsrflx(ii,jj,p_glysoa_oh_cw04)/mw_glysoa_oh_aer ! mmol/m2 ! Accumulated total organics wet deposition: wd_oa(ii,jj) = wd_oa(ii,jj) + wdi_oa(ii,jj) ! mmol/m2 wdi_asoa(ii,jj)= - 0.001*qsrflx(ii,jj,p_asoaX_cw01)/mw_asoaX_aer & - 0.001*qsrflx(ii,jj,p_asoaX_cw02)/mw_asoaX_aer & - 0.001*qsrflx(ii,jj,p_asoaX_cw03)/mw_asoaX_aer & - 0.001*qsrflx(ii,jj,p_asoaX_cw04)/mw_asoaX_aer & - 0.001*qsrflx(ii,jj,p_asoa1_cw01)/mw_asoa1_aer & - 0.001*qsrflx(ii,jj,p_asoa1_cw02)/mw_asoa1_aer & - 0.001*qsrflx(ii,jj,p_asoa1_cw03)/mw_asoa1_aer & - 0.001*qsrflx(ii,jj,p_asoa1_cw04)/mw_asoa1_aer & - 0.001*qsrflx(ii,jj,p_asoa2_cw01)/mw_asoa2_aer & - 0.001*qsrflx(ii,jj,p_asoa2_cw02)/mw_asoa2_aer & - 0.001*qsrflx(ii,jj,p_asoa2_cw03)/mw_asoa2_aer & - 0.001*qsrflx(ii,jj,p_asoa2_cw04)/mw_asoa2_aer & - 0.001*qsrflx(ii,jj,p_asoa3_cw01)/mw_asoa3_aer & - 0.001*qsrflx(ii,jj,p_asoa3_cw02)/mw_asoa3_aer & - 0.001*qsrflx(ii,jj,p_asoa3_cw03)/mw_asoa3_aer & - 0.001*qsrflx(ii,jj,p_asoa3_cw04)/mw_asoa3_aer & - 0.001*qsrflx(ii,jj,p_asoa4_cw01)/mw_asoa4_aer & - 0.001*qsrflx(ii,jj,p_asoa4_cw02)/mw_asoa4_aer & - 0.001*qsrflx(ii,jj,p_asoa4_cw03)/mw_asoa4_aer & - 0.001*qsrflx(ii,jj,p_asoa4_cw04)/mw_asoa4_aer ! mmol/m2 ! Accumulated total organics wet deposition: wd_asoa(ii,jj) = wd_asoa(ii,jj) + wdi_asoa(ii,jj) ! mmol/m2 wdi_bsoa(ii,jj)= - 0.001*qsrflx(ii,jj,p_bsoaX_cw01)/mw_bsoaX_aer & - 0.001*qsrflx(ii,jj,p_bsoaX_cw02)/mw_bsoaX_aer & - 0.001*qsrflx(ii,jj,p_bsoaX_cw03)/mw_bsoaX_aer & - 0.001*qsrflx(ii,jj,p_bsoaX_cw04)/mw_bsoaX_aer & - 0.001*qsrflx(ii,jj,p_bsoa1_cw01)/mw_bsoa1_aer & - 0.001*qsrflx(ii,jj,p_bsoa1_cw02)/mw_bsoa1_aer & - 0.001*qsrflx(ii,jj,p_bsoa1_cw03)/mw_bsoa1_aer & - 0.001*qsrflx(ii,jj,p_bsoa1_cw04)/mw_bsoa1_aer & - 0.001*qsrflx(ii,jj,p_bsoa2_cw01)/mw_bsoa2_aer & - 0.001*qsrflx(ii,jj,p_bsoa2_cw02)/mw_bsoa2_aer & - 0.001*qsrflx(ii,jj,p_bsoa2_cw03)/mw_bsoa2_aer & - 0.001*qsrflx(ii,jj,p_bsoa2_cw04)/mw_bsoa2_aer & - 0.001*qsrflx(ii,jj,p_bsoa3_cw01)/mw_bsoa3_aer & - 0.001*qsrflx(ii,jj,p_bsoa3_cw02)/mw_bsoa3_aer & - 0.001*qsrflx(ii,jj,p_bsoa3_cw03)/mw_bsoa3_aer & - 0.001*qsrflx(ii,jj,p_bsoa3_cw04)/mw_bsoa3_aer & - 0.001*qsrflx(ii,jj,p_bsoa4_cw01)/mw_bsoa4_aer & - 0.001*qsrflx(ii,jj,p_bsoa4_cw02)/mw_bsoa4_aer & - 0.001*qsrflx(ii,jj,p_bsoa4_cw03)/mw_bsoa4_aer & - 0.001*qsrflx(ii,jj,p_bsoa4_cw04)/mw_bsoa4_aer ! mmol/m2 ! Accumulated total organics wet deposition: wd_bsoa(ii,jj) = wd_bsoa(ii,jj) + wdi_bsoa(ii,jj) ! mmol/m2 wdi_cvasoa(ii,jj) = - delta_mass_col(ii,jj,p_cvasoaX) & - delta_mass_col(ii,jj,p_cvasoa1) & - delta_mass_col(ii,jj,p_cvasoa2) & - delta_mass_col(ii,jj,p_cvasoa3) & - delta_mass_col(ii,jj,p_cvasoa4) ! kg wdi_cvasoa(ii,jj) = wdi_cvasoa(ii,jj) / (dx * dy) / (150.0 * 1e-3) * 1e3 ! mmol/m2 ! Accumulated CVASOA wet deposition: wd_cvasoa(ii,jj) = wd_cvasoa(ii,jj) + wdi_cvasoa(ii,jj) ! mmol/m2 wdi_cvbsoa(ii,jj) = - delta_mass_col(ii,jj,p_cvbsoaX) & - delta_mass_col(ii,jj,p_cvbsoa1) & - delta_mass_col(ii,jj,p_cvbsoa2) & - delta_mass_col(ii,jj,p_cvbsoa3) & - delta_mass_col(ii,jj,p_cvbsoa4) ! kg wdi_cvbsoa(ii,jj) = wdi_cvbsoa(ii,jj) / (dx * dy) / (180.0 * 1e-3) * 1e3 ! mmol/m2 ! Accumulated CVbsoa wet deposition: wd_cvbsoa(ii,jj) = wd_cvbsoa(ii,jj) + wdi_cvbsoa(ii,jj) ! mmol/m2 ! add inorganic gas washout wdi_hno3(ii,jj) = - delta_mass_col(ii,jj,p_hno3) / (63.0123405 * 1e-3) ! kg wdi_hno3(ii,jj) = wdi_hno3(ii,jj) / (dx * dy) * 1e3 ! mmol/m2 wd_hno3(ii,jj) = wd_hno3(ii,jj) + wdi_hno3(ii,jj) ! mmol/m2 wdi_so2(ii,jj) = - delta_mass_col(ii,jj,p_so2) / (63.961901 * 1e-3) ! kg wdi_so2(ii,jj) = wdi_so2(ii,jj) / (dx * dy) * 1e3 ! mmol/m2 wd_so2(ii,jj) = wd_so2(ii,jj) + wdi_so2(ii,jj) ! mmol/m2 wdi_sulf(ii,jj) = - delta_mass_col(ii,jj,p_sulf) / (98.078 * 1e-3) ! kg wdi_sulf(ii,jj) = wdi_sulf(ii,jj) / (dx * dy) * 1e3 ! mmol/m2 wd_sulf(ii,jj) = wd_sulf(ii,jj) + wdi_sulf(ii,jj) ! mmol/m2 wdi_nh3(ii,jj) = - delta_mass_col(ii,jj,p_nh3) / (17.0289402 * 1e-3) ! kg wdi_nh3(ii,jj) = wdi_nh3(ii,jj) / (dx * dy) * 1e3 ! mmol/m2 wd_nh3(ii,jj) = wd_nh3(ii,jj) + wdi_nh3(ii,jj) ! mmol/m2 enddo enddo CASE DEFAULT END SELECT if( config_flags%diagnostic_dep == 1 ) then wdflx(its:ite,jts:jte,:)=wdflx(its:ite,jts:jte,:)-qsrflx(its:ite,jts:jte,:) end if end subroutine wetscav_driver END MODULE module_wetscav_driver