!********************************************************************************** ! 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 !********************************************************************************** ! file cloudchem_driver.F SUBROUTINE cloudchem_driver( & id, ktau, ktauc, dtstep, dtstepc, config_flags, & t_phy, p_phy, rho_phy, alt, dz8w, & p8w, prain3d,scalar,dvmrdt_sv13d,dvmrcwdt_sv13d, & !Balwinder.Singh@pnnl.gov: Variables required for CAM-MAM cloud chemistry f_ice_phy, f_rain_phy, cldfrai, cldfral, & moist, cldfra, cldfra_mp_all, ph_no2, & chem, gas_aqfrac, numgas_aqfrac, & is_CAMMGMP_used, &!BSINGH:01/31/2013: Added is_CAMMGMP_used for CAM_MAM_cloudchem 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 !---------------------------------------------------------------------- USE module_configure USE module_state_description USE module_model_constants USE module_cam_support, only: gas_pcnst => gas_pcnst_modal_aero, & gas_pcnst_pos => gas_pcnst_modal_aero_pos USE module_mosaic_cloudchem, only: mosaic_cloudchem_driver USE module_sorgam_cloudchem, only: sorgam_cloudchem_driver USE module_sorgam_vbs_cloudchem, only: sorgam_vbs_cloudchem_driver USE module_cam_mam_cloudchem, only: cam_mam_cloudchem_driver USE module_sorgam_aqchem, only: sorgam_aqchem_driver USE module_sorgam_vbs_aqchem, only: sorgam_vbs_aqchem_driver ! This driver calls subroutines for wet scavenging. ! ! 1. MADE-SORGAM ! 2. MOSAIC !---------------------------------------------------------------------- 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) !-- scalar scalar array (4D) #/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) !-- 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 ! ! moisture variables ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme, num_moist ), & INTENT(IN ) :: moist REAL, DIMENSION( ims:ime, kms:kme, jms:jme, num_scalar ), & INTENT(IN ) :: scalar !Balwinder.Singh@pnnl.gov: Variables required for CAM-MAM cloud chemistry ! !tendencies:dvmrdt_sv13d,dvmrcwdt_sv13d are the tendencies which are passsed on from the CAM-MAM cloud chemistry ! to gasaerexch subroutine in cam_mam_aerchem_driver ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme, gas_pcnst_pos ), & INTENT(OUT ) :: dvmrdt_sv13d,dvmrcwdt_sv13d ! input from meteorology REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , & INTENT(IN ) :: & t_phy, & p_phy, & rho_phy, & alt, & dz8w, & cldfra, & ph_no2, & p8w, & !Balwinder.Singh@pnnl.gov: Variables required for CAM-MAM cloud chemistry prain3d, & F_ICE_PHY, & F_RAIN_PHY, & cldfrai, & cldfral, & cldfra_mp_all ! ! all advected chemical species ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme, num_chem ), & INTENT(INOUT ) :: chem REAL, DIMENSION( ims:ime, kms:kme, jms:jme, numgas_aqfrac ), & INTENT(INOUT ) :: gas_aqfrac ! LOCAL VAR integer :: ii,jj,kk !----------------------------------------------------------------- ! 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 ( CBMZ_MOSAIC_4BIN, CBMZ_MOSAIC_8BIN, CBMZ_MOSAIC_4BIN_AQ, CBMZ_MOSAIC_8BIN_AQ, & CBMZ_MOSAIC_DMS_4BIN, CBMZ_MOSAIC_DMS_8BIN, CBMZ_MOSAIC_DMS_4BIN_AQ, & CBMZ_MOSAIC_DMS_8BIN_AQ, CRI_MOSAIC_8BIN_AQ_KPP, CRI_MOSAIC_4BIN_AQ_KPP, & MOZART_MOSAIC_4BIN_AQ_KPP, & SAPRC99_MOSAIC_8BIN_VBS2_AQ_KPP)!BSINGH(12/03/2013): Added SAPRC 8 bin call wrf_debug(15, & 'cloudchem_driver calling mosaic_cloudchem_driver') call mosaic_cloudchem_driver( & id, ktau, ktauc, dtstepc, config_flags, & p_phy, t_phy, rho_phy, alt, & cldfra, ph_no2, & moist, chem, & gas_aqfrac, numgas_aqfrac, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) CASE ( RADM2SORG_AQ, RACMSORG_AQ, CBMZSORG_AQ ) call wrf_debug(15, & 'cloudchem_driver calling sorgam_cloudchem_driver') call sorgam_cloudchem_driver( & id, ktau, ktauc, dtstepc, config_flags, & p_phy, t_phy, rho_phy, alt, & cldfra, ph_no2, & moist, chem, & gas_aqfrac, numgas_aqfrac, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) CASE (CBMZ_CAM_MAM3_NOAQ,CBMZ_CAM_MAM3_AQ,CBMZ_CAM_MAM7_NOAQ,CBMZ_CAM_MAM7_AQ) CALL wrf_debug(15,'cloudchem_driver calling mam_cloudchem_driver') call cam_mam_cloudchem_driver ( & !Intent Outs dvmrdt_sv13d,dvmrcwdt_sv13d, & !Intent in-outs chem, & !Intent ins moist, scalar, p8w, prain3d, p_phy, & t_phy, dtstepc, ktau,alt, f_ice_phy, & f_rain_phy, cldfra, cldfra_mp_all, & cldfrai, cldfral, is_CAMMGMP_used, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) CASE ( CB05_SORG_VBS_AQ_KPP ) call wrf_debug(15, & 'cloudchem_driver calling sorgam_vbs_aqchem_driver') call sorgam_vbs_aqchem_driver( & id, ktau, ktauc, dtstepc, config_flags, & p_phy, t_phy, rho_phy, alt, dz8w, & moist, chem, & gas_aqfrac, numgas_aqfrac, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) CASE ( RADM2SORG_AQCHEM, RACMSORG_AQCHEM_KPP, RACM_ESRLSORG_AQCHEM_KPP, & CB05_SORG_AQ_KPP,RACM_SOA_VBS_AQCHEM_KPP ) call wrf_debug(15, & 'cloudchem_driver calling sorgam_aqchem_driver') call sorgam_aqchem_driver( & id, ktau, ktauc, dtstepc, config_flags, & p_phy, t_phy, rho_phy, alt, dz8w, & moist, chem, & gas_aqfrac, numgas_aqfrac, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) CASE DEFAULT END SELECT cps_select END SUBROUTINE cloudchem_driver