! $Id: epa_nei_mod.f,v 1.7 2006/06/06 14:26:01 bmy Exp $
MODULE EPA_NEI_MOD 10
!
!******************************************************************************
! Module EPA_NEI_MOD contains variables and routines to read the
! weekday/weekend emissions from the EPA/NEI emissions inventory.
! (rch, bmy, 11/10/04, 5/30/06)
!
! Module Variables:
! ============================================================================
! (1 ) USA_MASK : Array used to mask out the continental USA
! (2 ) EPA_WD_AN_NOX : Avg weekday NOX anthro emissions [ molec/cm2/s]
! (3 ) EPA_WD_AN_CO : Avg weekday CO anthro emissions [ molec/cm2/s]
! (4 ) EPA_WD_AN_ALK4 : Avg weekday ALK4 anthro emissions [atoms C/cm2/s]
! (5 ) EPA_WD_AN_ACET : Avg weekday ACET anthro emissions [atoms C/cm2/s]
! (6 ) EPA_WD_AN_MEK : Avg weekday MEK anthro emissions [atoms C/cm2/s]
! (7 ) EPA_WD_AN_PRPE : Avg weekday PRPE anthro emissions [atoms C/cm2/s]
! (8 ) EPA_WD_AN_C2H6 : Avg weekday C2H6 anthro emissions [atoms C/cm2/s]
! (9 ) EPA_WD_AN_C3H8 : Avg weekday C3H8 anthro emissions [atoms C/cm2/s]
! (10) EPA_WD_AN_CH2O : Avg weekday CH2O anthro emissions [ molec/cm2/s]
! (11) EPA_WD_AN_NH3 : Avg weekday NH3 anthro emissions [ molec/cm2/s]
! (12) EPA_WD_AN_SO2 : Avg weekday SO2 anthro emissions [ molec/cm2/s]
! (13) EPA_WD_AN_SO4 : Avg weekday SO4 anthro emissions [ molec/cm2/s]
! (14) EPA_WE_AN_NOX : Avg weekend NOX anthro emissions [ molec/cm2/s]
! (15) EPA_WE_AN_CO : Avg weekend CO anthro emissions [atoms C/cm2/s]
! (16) EPA_WE_AN_ALK4 : Avg weekend ALK4 anthro emissions [atoms C/cm2/s]
! (17) EPA_WE_AN_ACET : Avg weekend ACET anthro emissions [atoms C/cm2/s]
! (18) EPA_WE_AN_MEK : Avg weekend MEK anthro emissions [atoms C/cm2/s]
! (19) EPA_WE_AN_PRPE : Avg weekend PRPE anthro emissions [atoms C/cm2/s]
! (20) EPA_WE_AN_C2H6 : Avg weekend C2H6 anthro emissions [atoms C/cm2/s]
! (21) EPA_WE_AN_C3H8 : Avg weekend C3H8 anthro emissions [atoms C/cm2/s]
! (22) EPA_WE_AN_CH2O : Avg weekend CH2O anthro emissions [ molec/cm2/s]
! (23) EPA_WE_AN_NH3 : Avg weekend NH3 anthro emissions [ molec/cm2/s]
! (24) EPA_WE_AN_SO2 : Avg weekend SO2 anthro emissions [ molec/cm2/s]
! (25) EPA_WE_AN_SO4 : Avg weekend SO4 anthro emissions [ molec/cm2/s]
! (26) EPA_WD_BF_NOX : Avg weekday NOX anthro emissions [ molec/cm2/s]
! (27) EPA_WD_BF_CO : Avg weekday CO anthro emissions [ molec/cm2/s]
! (28) EPA_WD_BF_ALK4 : Avg weekday ALK4 anthro emissions [atoms C/cm2/s]
! (29) EPA_WD_BF_ACET : Avg weekday ACET anthro emissions [atoms C/cm2/s]
! (30) EPA_WD_BF_MEK : Avg weekday MEK anthro emissions [atoms C/cm2/s]
! (31) EPA_WD_BF_PRPE : Avg weekday PRPE anthro emissions [atoms C/cm2/s]
! (32) EPA_WD_BF_C2H6 : Avg weekday C2H6 anthro emissions [atoms C/cm2/s]
! (33) EPA_WD_BF_C3H8 : Avg weekday C3H8 anthro emissions [atoms C/cm2/s]
! (34) EPA_WD_BF_CH2O : Avg weekday CH2O anthro emissions [ molec/cm2/s]
! (35) EPA_WD_BF_NH3 : Avg weekday NH3 anthro emissions [ molec/cm2/s]
! (36) EPA_WD_BF_SO2 : Avg weekday SO2 anthro emissions [ molec/cm2/s]
! (37) EPA_WD_BF_SO4 : Avg weekday SO4 anthro emissions [ molec/cm2/s]
! (38) EPA_WE_BF_NOX : Avg weekend NOX anthro emissions [ molec/cm2/s]
! (39) EPA_WE_BF_CO : Avg weekend CO anthro emissions [atoms C/cm2/s]
! (40) EPA_WE_BF_ALK4 : Avg weekend ALK4 anthro emissions [atoms C/cm2/s]
! (41) EPA_WE_BF_ACET : Avg weekend ACET anthro emissions [atoms C/cm2/s]
! (42) EPA_WE_BF_MEK : Avg weekend MEK anthro emissions [atoms C/cm2/s]
! (43) EPA_WE_BF_PRPE : Avg weekend PRPE anthro emissions [atoms C/cm2/s]
! (44) EPA_WE_BF_C2H6 : Avg weekend C2H6 anthro emissions [atoms C/cm2/s]
! (45) EPA_WE_BF_C3H8 : Avg weekend C3H8 anthro emissions [atoms C/cm2/s]
! (46) EPA_WE_BF_CH2O : Avg weekend CH2O anthro emissions [ molec/cm2/s]
! (47) EPA_WE_BF_NH3 : Avg weekend NH3 anthro emissions [ molec/cm2/s]
! (48) EPA_WE_BF_SO2 : Avg weekend SO2 anthro emissions [ molec/cm2/s]
! (49) EPA_WE_BF_SO4 : Avg weekend SO4 anthro emissions [ molec/cm2/s]
!
! Module Routines:
! ============================================================================
! (1 ) EMISS_EPA : Driver routine for EPA emissions
! (2 ) READ_EPA : Reads EPA emissions from disk
! (3 ) READ_USA_MASK : Reads USA Mask from disk
! (4 ) TOTAL_ANTHRO_TG : Prints monthly anthro emission sums in Tg or Tg C
! (5 ) TOTAL_BIOFUEL_TG: Prints monthly biofuel emission sums in Tg or Tg C
! (6 ) GET_USA_MASK : Returns value of USA mask at a (I,J) location
! (7 ) GET_EPA_ANTHRO : Gets EPA anthro emissions at a (I,J) location
! (8 ) GET_EPA_BIOFUEL : Gets EPA biofuel emissions at a (I,J) location
! (9 ) INIT_EPA_NEI : Allocates and zeroes module arrays
! (10) CLEANUP_EPA_NEI : Deallocates all module arrays
!
! GEOS-CHEM modules referenced by epa_nei_mod.f
! ============================================================================
! (1 ) bpch2_mod.f : Module w/ routines for binary punch file I/O
! (2 ) directory_mod.f : Module w/ GEOS-CHEM met field and data dirs
! (3 ) error_mod.f : Module w/ I/O error and NaN check routines
! (3 ) file_mod.f : Module w/ file unit numbers and error checks
! (4 ) future_emissions_mod.f : Module w/ routines for IPCC future emissions
! (5 ) logical_mod.f : Module w/ GEOS-Chem logical switches
! (6 ) time_mod.f : Module w/ routines for computing time & date
! (7 ) transfer_mod.f : Module w/ routines to cast & resize arrays
!
! NOTES:
! (1 ) Prevent out of bounds errors in routines TOTAL_ANTHRO_TG and
! TOTAL_BIOFUEL_TG (bmy, 1/26/05)
! (2 ) Now can read data for both GEOS and GCAP grids (bmy, 8/16/05)
! (3 ) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
! (4 ) Now replace FMOL with TRACER_MW_KG (bmy, 10/25/05)
! (5 ) Now modified for IPCC future emissions (swu, bmy, 5/30/06)
!******************************************************************************
!
IMPLICIT NONE
!=================================================================
! MODULE PRIVATE DECLARATIONS -- keep certain internal variables
! and routines from being seen outside "epa_nei_mod.f"
!=================================================================
! Make everything PRIVATE ...
PRIVATE
! ... except these routines
PUBLIC :: CLEANUP_EPA_NEI
PUBLIC :: EMISS_EPA_NEI
PUBLIC :: GET_USA_MASK
PUBLIC :: GET_EPA_ANTHRO
PUBLIC :: GET_EPA_BIOFUEL
!=================================================================
! MODULE VARIABLES
!=================================================================
! USA Mask
REAL*8, ALLOCATABLE :: USA_MASK(:,:)
! Fossil fuel arrays -- weekday
REAL*4, ALLOCATABLE :: EPA_WD_AN_NOX(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_AN_CO(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_AN_ALK4(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_AN_ACET(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_AN_MEK(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_AN_PRPE(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_AN_C2H6(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_AN_C3H8(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_AN_CH2O(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_AN_NH3(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_AN_SO2(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_AN_SO4(:,:)
! Fossil fuel arrays -- weekend
REAL*4, ALLOCATABLE :: EPA_WE_AN_NOX(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_AN_CO(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_AN_ALK4(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_AN_ACET(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_AN_MEK(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_AN_PRPE(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_AN_C2H6(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_AN_C3H8(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_AN_CH2O(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_AN_NH3(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_AN_SO2(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_AN_SO4(:,:)
! Biofuel arrays -- weekday
REAL*4, ALLOCATABLE :: EPA_WD_BF_NOX(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_BF_CO(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_BF_ALK4(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_BF_ACET(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_BF_MEK(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_BF_PRPE(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_BF_C2H6(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_BF_C3H8(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_BF_CH2O(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_BF_NH3(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_BF_SO2(:,:)
REAL*4, ALLOCATABLE :: EPA_WD_BF_SO4(:,:)
! Biofuel arrays -- weekend
REAL*4, ALLOCATABLE :: EPA_WE_BF_NOX(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_BF_CO(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_BF_ALK4(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_BF_ACET(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_BF_MEK(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_BF_PRPE(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_BF_C2H6(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_BF_C3H8(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_BF_CH2O(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_BF_NH3(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_BF_SO2(:,:)
REAL*4, ALLOCATABLE :: EPA_WE_BF_SO4(:,:)
!=================================================================
! MODULE ROUTINES -- follow below the "CONTAINS" statement
!=================================================================
CONTAINS
!------------------------------------------------------------------------------
SUBROUTINE EMISS_EPA_NEI 4,55
!
!******************************************************************************
! Subroutine EMISS_EPA_NEI reads all EPA emissions from disk at the start
! of a new month. (rch, bmy, 11/10/04, 5/30/06)
!
! NOTES:
! (1 ) Now can read data for both GEOS and GCAP grids (bmy, 8/16/05)
! (2 ) Modified for IPCC future emissions (swu, bmy, 5/30/06)
!******************************************************************************
!
! References to F90 modules
USE BPCH2_MOD
, ONLY : GET_NAME_EXT_2D, GET_RES_EXT
USE DIRECTORY_MOD
, ONLY : DATA_DIR
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_ALK4ff
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_C2H6ff
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_C3H8ff
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_CObf
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_COff
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_NH3an
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_NH3bf
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_NOxbf
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_NOxff
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_PRPEff
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_SO2bf
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_SO2ff
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_TONEff
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_VOCbf
USE FUTURE_EMISSIONS_MOD
, ONLY : GET_FUTURE_SCALE_VOCff
USE LOGICAL_MOD
, ONLY : LFUTURE
USE TIME_MOD
, ONLY : EXPAND_DATE, GET_MONTH
# include "CMN_SIZE" ! Size parameters
! Local variables
LOGICAL, SAVE :: FIRST = .TRUE.
INTEGER :: I, J, THISMONTH, YYYYMMDD
REAL*8 :: ALK4ff, C2H6ff, C3H8ff, COff
REAL*8 :: NH3an, NOxff, PRPEff, SO2ff
REAL*8 :: TONEff, VOCff, CObf, NH3bf
REAL*8 :: NOxbf, SO2bf, VOCbf
CHARACTER(LEN=255) :: FILENAME
!=================================================================
! EMISS_EPA_NEI begins here!
!=================================================================
! First-time initialization
IF ( FIRST ) THEN
! Allocate arrays
CALL INIT_EPA_NEI
! Read mask over the USA
CALL READ_USA_MASK
! Reset first-time flag
FIRST = .FALSE.
ENDIF
! Get the current month
THISMONTH = GET_MONTH
()
! Get date for 1999 emissions
YYYYMMDD = 19990000 + ( THISMONTH * 100 ) + 01
! Echo info
WRITE( 6, '(a)' ) REPEAT( '=', 79 )
WRITE( 6, 100 )
100 FORMAT( 'E P A / N E I E M I S S I O N S',
& ' -- Baseline Year: 1999', / )
!=================================================================
! Read EPA weekday average anthropogenic emissions
!=================================================================
! Weekday anthro file name
FILENAME = TRIM( DATA_DIR ) //
& 'EPA_NEI_200411/wkday_avg_an.YYYYMM.' //
& GET_NAME_EXT_2D
() // '.' // GET_RES_EXT
()
! Replace date in filename
CALL EXPAND_DATE
( FILENAME, YYYYMMDD, 000000 )
! Read weekday data
CALL READ_EPA
( FILENAME,
& EPA_WD_AN_NOX, EPA_WD_AN_CO, EPA_WD_AN_ALK4,
& EPA_WD_AN_ACET, EPA_WD_AN_MEK, EPA_WD_AN_PRPE,
& EPA_WD_AN_C3H8, EPA_WD_AN_CH2O, EPA_WD_AN_C2H6,
& EPA_WD_AN_SO2, EPA_WD_AN_SO4, EPA_WD_AN_NH3 )
!=================================================================
! Read EPA weekend average anthropogenic emissions
!=================================================================
! Weekend anthro file name
FILENAME = TRIM( DATA_DIR ) //
& 'EPA_NEI_200411/wkend_avg_an.YYYYMM.' //
& GET_NAME_EXT_2D
() // '.' // GET_RES_EXT
()
! Replace date in filename
CALL EXPAND_DATE
( FILENAME, YYYYMMDD, 000000 )
! Read weekday data
CALL READ_EPA
( FILENAME,
& EPA_WE_AN_NOX, EPA_WE_AN_CO, EPA_WE_AN_ALK4,
& EPA_WE_AN_ACET, EPA_WE_AN_MEK, EPA_WE_AN_PRPE,
& EPA_WE_AN_C3H8, EPA_WE_AN_CH2O, EPA_WE_AN_C2H6,
& EPA_WE_AN_SO2, EPA_WE_AN_SO4, EPA_WE_AN_NH3 )
!=================================================================
! Read EPA weekday average biofuel emissions
!=================================================================
! Weekday biofuel file name
FILENAME = TRIM( DATA_DIR ) //
& 'EPA_NEI_200411/wkday_avg_bf.YYYYMM.' //
& GET_NAME_EXT_2D
() // '.' // GET_RES_EXT
()
! Replace date in filename
CALL EXPAND_DATE
( FILENAME, YYYYMMDD, 000000 )
! Read weekday data
CALL READ_EPA
( FILENAME,
& EPA_WD_BF_NOX, EPA_WD_BF_CO, EPA_WD_BF_ALK4,
& EPA_WD_BF_ACET, EPA_WD_BF_MEK, EPA_WD_BF_PRPE,
& EPA_WD_BF_C3H8, EPA_WD_BF_CH2O, EPA_WD_BF_C2H6,
& EPA_WD_BF_SO2, EPA_WD_BF_SO4, EPA_WD_BF_NH3 )
!=================================================================
! Read EPA weekend average biofuel emissions
!=================================================================
! Weekend biofuel file name
FILENAME = TRIM( DATA_DIR ) //
& 'EPA_NEI_200411/wkend_avg_bf.YYYYMM.' //
& GET_NAME_EXT_2D
() // '.' // GET_RES_EXT
()
! Replace date in filename
CALL EXPAND_DATE
( FILENAME, YYYYMMDD, 000000 )
! Read weekend data
CALL READ_EPA
( FILENAME,
& EPA_WE_BF_NOX, EPA_WE_BF_CO, EPA_WE_BF_ALK4,
& EPA_WE_BF_ACET, EPA_WE_BF_MEK, EPA_WE_BF_PRPE,
& EPA_WE_BF_C3H8, EPA_WE_BF_CH2O, EPA_WE_BF_C2H6,
& EPA_WE_BF_SO2, EPA_WE_BF_SO4, EPA_WE_BF_NH3 )
!=================================================================
! Apply USA Mask (keep emissions over US, zero elsewhere)
!=================================================================
!$OMP PARALLEL DO
!$OMP+DEFAULT( SHARED )
!$OMP+PRIVATE( I, J, ALK4ff, C2H6ff, C3H8ff, COff )
!$OMP+PRIVATE( NH3an, NOxff, PRPEff, SO2ff, TONEff, VOCff )
!$OMP+PRIVATE( CObf, NH3bf, NOxbf, SO2bf, VOCbf )
!$OMP+SCHEDULE( DYNAMIC )
DO J = 1, JJPAR
DO I = 1, IIPAR
! Weekday avg anthro
EPA_WD_AN_NOX (I,J) = EPA_WD_AN_NOX (I,J) * USA_MASK(I,J)
EPA_WD_AN_CO (I,J) = EPA_WD_AN_CO (I,J) * USA_MASK(I,J)
EPA_WD_AN_ALK4(I,J) = EPA_WD_AN_ALK4(I,J) * USA_MASK(I,J)
EPA_WD_AN_ACET(I,J) = EPA_WD_AN_ACET(I,J) * USA_MASK(I,J)
EPA_WD_AN_MEK (I,J) = EPA_WD_AN_MEK (I,J) * USA_MASK(I,J)
EPA_WD_AN_PRPE(I,J) = EPA_WD_AN_PRPE(I,J) * USA_MASK(I,J)
EPA_WD_AN_C3H8(I,J) = EPA_WD_AN_C3H8(I,J) * USA_MASK(I,J)
EPA_WD_AN_CH2O(I,J) = EPA_WD_AN_CH2O(I,J) * USA_MASK(I,J)
EPA_WD_AN_C2H6(I,J) = EPA_WD_AN_C2H6(I,J) * USA_MASK(I,J)
EPA_WD_AN_SO2 (I,J) = EPA_WD_AN_SO2 (I,J) * USA_MASK(I,J)
EPA_WD_AN_SO4 (I,J) = EPA_WD_AN_SO4 (I,J) * USA_MASK(I,J)
EPA_WD_AN_NH3 (I,J) = EPA_WD_AN_NH3 (I,J) * USA_MASK(I,J)
! Weekend avg anthro
EPA_WE_AN_NOX (I,J) = EPA_WE_AN_NOX (I,J) * USA_MASK(I,J)
EPA_WE_AN_CO (I,J) = EPA_WE_AN_CO (I,J) * USA_MASK(I,J)
EPA_WE_AN_ALK4(I,J) = EPA_WE_AN_ALK4(I,J) * USA_MASK(I,J)
EPA_WE_AN_ACET(I,J) = EPA_WE_AN_ACET(I,J) * USA_MASK(I,J)
EPA_WE_AN_MEK (I,J) = EPA_WE_AN_MEK (I,J) * USA_MASK(I,J)
EPA_WE_AN_PRPE(I,J) = EPA_WE_AN_PRPE(I,J) * USA_MASK(I,J)
EPA_WE_AN_C3H8(I,J) = EPA_WE_AN_C3H8(I,J) * USA_MASK(I,J)
EPA_WE_AN_CH2O(I,J) = EPA_WE_AN_CH2O(I,J) * USA_MASK(I,J)
EPA_WE_AN_C2H6(I,J) = EPA_WE_AN_C2H6(I,J) * USA_MASK(I,J)
EPA_WE_AN_SO2 (I,J) = EPA_WE_AN_SO2 (I,J) * USA_MASK(I,J)
EPA_WE_AN_SO4 (I,J) = EPA_WE_AN_SO4 (I,J) * USA_MASK(I,J)
EPA_WE_AN_NH3 (I,J) = EPA_WE_AN_NH3 (I,J) * USA_MASK(I,J)
! Weekday avg biofuel
EPA_WD_BF_NOX (I,J) = EPA_WD_BF_NOX (I,J) * USA_MASK(I,J)
EPA_WD_BF_CO (I,J) = EPA_WD_BF_CO (I,J) * USA_MASK(I,J)
EPA_WD_BF_ALK4(I,J) = EPA_WD_BF_ALK4(I,J) * USA_MASK(I,J)
EPA_WD_BF_ACET(I,J) = EPA_WD_BF_ACET(I,J) * USA_MASK(I,J)
EPA_WD_BF_MEK (I,J) = EPA_WD_BF_MEK (I,J) * USA_MASK(I,J)
EPA_WD_BF_PRPE(I,J) = EPA_WD_BF_PRPE(I,J) * USA_MASK(I,J)
EPA_WD_BF_C3H8(I,J) = EPA_WD_BF_C3H8(I,J) * USA_MASK(I,J)
EPA_WD_BF_CH2O(I,J) = EPA_WD_BF_CH2O(I,J) * USA_MASK(I,J)
EPA_WD_BF_C2H6(I,J) = EPA_WD_BF_C2H6(I,J) * USA_MASK(I,J)
EPA_WD_BF_SO2 (I,J) = EPA_WD_BF_SO2 (I,J) * USA_MASK(I,J)
EPA_WD_BF_SO4 (I,J) = EPA_WD_BF_SO4 (I,J) * USA_MASK(I,J)
EPA_WD_BF_NH3 (I,J) = EPA_WD_BF_NH3 (I,J) * USA_MASK(I,J)
! Weekend avg biofuel
EPA_WE_BF_NOX (I,J) = EPA_WE_BF_NOX (I,J) * USA_MASK(I,J)
EPA_WE_BF_CO (I,J) = EPA_WE_BF_CO (I,J) * USA_MASK(I,J)
EPA_WE_BF_ALK4(I,J) = EPA_WE_BF_ALK4(I,J) * USA_MASK(I,J)
EPA_WE_BF_ACET(I,J) = EPA_WE_BF_ACET(I,J) * USA_MASK(I,J)
EPA_WE_BF_MEK (I,J) = EPA_WE_BF_MEK (I,J) * USA_MASK(I,J)
EPA_WE_BF_PRPE(I,J) = EPA_WE_BF_PRPE(I,J) * USA_MASK(I,J)
EPA_WE_BF_C3H8(I,J) = EPA_WE_BF_C3H8(I,J) * USA_MASK(I,J)
EPA_WE_BF_CH2O(I,J) = EPA_WE_BF_CH2O(I,J) * USA_MASK(I,J)
EPA_WE_BF_C2H6(I,J) = EPA_WE_BF_C2H6(I,J) * USA_MASK(I,J)
EPA_WE_BF_SO2 (I,J) = EPA_WE_BF_SO2 (I,J) * USA_MASK(I,J)
EPA_WE_BF_SO4 (I,J) = EPA_WE_BF_SO4 (I,J) * USA_MASK(I,J)
EPA_WE_BF_NH3 (I,J) = EPA_WE_BF_NH3 (I,J) * USA_MASK(I,J)
!----------------------------------------------
! Compute IPCC future emissions (if necessary)
!----------------------------------------------
IF ( LFUTURE .and. USA_MASK(I,J) > 0d0 ) THEN
! Future anthro scale factors
ALK4ff = GET_FUTURE_SCALE_ALK4ff
( I, J )
C2H6ff = GET_FUTURE_SCALE_C2H6ff
( I, J )
C3H8ff = GET_FUTURE_SCALE_C3H8ff
( I, J )
COff = GET_FUTURE_SCALE_COff
( I, J )
NH3an = GET_FUTURE_SCALE_NH3an
( I, J )
NOxff = GET_FUTURE_SCALE_NOxff
( I, J )
PRPEff = GET_FUTURE_SCALE_PRPEff
( I, J )
TONEff = GET_FUTURE_SCALE_TONEff
( I, J )
SO2ff = GET_FUTURE_SCALE_SO2ff
( I, J )
VOCff = GET_FUTURE_SCALE_VOCff
( I, J )
! Future biofuel scale factors
CObf = GET_FUTURE_SCALE_CObf
( I, J )
NH3bf = GET_FUTURE_SCALE_NH3bf
( I, J )
NOxbf = GET_FUTURE_SCALE_NOXbf
( I, J )
SO2bf = GET_FUTURE_SCALE_SO2bf
( I, J )
VOCbf = GET_FUTURE_SCALE_VOCbf
( I, J )
! Future weekday avg anthro
EPA_WD_AN_NOX (I,J) = EPA_WD_AN_NOX (I,J) * NOxff
EPA_WD_AN_CO (I,J) = EPA_WD_AN_CO (I,J) * COff
EPA_WD_AN_ALK4(I,J) = EPA_WD_AN_ALK4(I,J) * ALK4ff
EPA_WD_AN_ACET(I,J) = EPA_WD_AN_ACET(I,J) * TONEff
EPA_WD_AN_MEK (I,J) = EPA_WD_AN_MEK (I,J) * TONEff
EPA_WD_AN_PRPE(I,J) = EPA_WD_AN_PRPE(I,J) * PRPEff
EPA_WD_AN_C3H8(I,J) = EPA_WD_AN_C3H8(I,J) * C3H8ff
EPA_WD_AN_CH2O(I,J) = EPA_WD_AN_CH2O(I,J) * VOCff
EPA_WD_AN_C2H6(I,J) = EPA_WD_AN_C2H6(I,J) * C2H6ff
EPA_WD_AN_SO2 (I,J) = EPA_WD_AN_SO2 (I,J) * SO2ff
EPA_WD_AN_SO4 (I,J) = EPA_WD_AN_SO4 (I,J) * SO2ff
EPA_WD_AN_NH3 (I,J) = EPA_WD_AN_NH3 (I,J) * NH3an
! Weekend avg anthro
EPA_WE_AN_NOX (I,J) = EPA_WE_AN_NOX (I,J) * NOxff
EPA_WE_AN_CO (I,J) = EPA_WE_AN_CO (I,J) * COff
EPA_WE_AN_ALK4(I,J) = EPA_WE_AN_ALK4(I,J) * ALK4ff
EPA_WE_AN_ACET(I,J) = EPA_WE_AN_ACET(I,J) * TONEff
EPA_WE_AN_MEK (I,J) = EPA_WE_AN_MEK (I,J) * TONEff
EPA_WE_AN_PRPE(I,J) = EPA_WE_AN_PRPE(I,J) * PRPEff
EPA_WE_AN_C3H8(I,J) = EPA_WE_AN_C3H8(I,J) * C3H8ff
EPA_WE_AN_CH2O(I,J) = EPA_WE_AN_CH2O(I,J) * VOCff
EPA_WE_AN_C2H6(I,J) = EPA_WE_AN_C2H6(I,J) * C2H6ff
EPA_WE_AN_SO2 (I,J) = EPA_WE_AN_SO2 (I,J) * SO2ff
EPA_WE_AN_SO4 (I,J) = EPA_WE_AN_SO4 (I,J) * SO2ff
EPA_WE_AN_NH3 (I,J) = EPA_WE_AN_NH3 (I,J) * NH3an
! Weekday avg biofuel
EPA_WD_BF_NOX (I,J) = EPA_WD_BF_NOX (I,J) * NOxbf
EPA_WD_BF_CO (I,J) = EPA_WD_BF_CO (I,J) * CObf
EPA_WD_BF_ALK4(I,J) = EPA_WD_BF_ALK4(I,J) * VOCbf
EPA_WD_BF_ACET(I,J) = EPA_WD_BF_ACET(I,J) * VOCbf
EPA_WD_BF_MEK (I,J) = EPA_WD_BF_MEK (I,J) * VOCbf
EPA_WD_BF_PRPE(I,J) = EPA_WD_BF_PRPE(I,J) * VOCbf
EPA_WD_BF_C3H8(I,J) = EPA_WD_BF_C3H8(I,J) * VOCbf
EPA_WD_BF_CH2O(I,J) = EPA_WD_BF_CH2O(I,J) * VOCbf
EPA_WD_BF_C2H6(I,J) = EPA_WD_BF_C2H6(I,J) * VOCbf
EPA_WD_BF_SO2 (I,J) = EPA_WD_BF_SO2 (I,J) * SO2bf
EPA_WD_BF_SO4 (I,J) = EPA_WD_BF_SO4 (I,J) * SO2bf
EPA_WD_BF_NH3 (I,J) = EPA_WD_BF_NH3 (I,J) * NH3bf
! Weekend avg biofuel
EPA_WE_BF_NOX (I,J) = EPA_WE_BF_NOX (I,J) * NOxbf
EPA_WE_BF_CO (I,J) = EPA_WE_BF_CO (I,J) * CObf
EPA_WE_BF_ALK4(I,J) = EPA_WE_BF_ALK4(I,J) * VOCbf
EPA_WE_BF_ACET(I,J) = EPA_WE_BF_ACET(I,J) * VOCbf
EPA_WE_BF_MEK (I,J) = EPA_WE_BF_MEK (I,J) * VOCbf
EPA_WE_BF_PRPE(I,J) = EPA_WE_BF_PRPE(I,J) * VOCbf
EPA_WE_BF_C3H8(I,J) = EPA_WE_BF_C3H8(I,J) * VOCbf
EPA_WE_BF_CH2O(I,J) = EPA_WE_BF_CH2O(I,J) * VOCbf
EPA_WE_BF_C2H6(I,J) = EPA_WE_BF_C2H6(I,J) * VOCbf
EPA_WE_BF_SO2 (I,J) = EPA_WE_BF_SO2 (I,J) * SO2bf
EPA_WE_BF_SO4 (I,J) = EPA_WE_BF_SO4 (I,J) * SO2bf
EPA_WE_BF_NH3 (I,J) = EPA_WE_BF_NH3 (I,J) * NH3bf
ENDIF
ENDDO
ENDDO
!$OMP END PARALLEL DO
! Print totals to the log file
CALL TOTAL_ANTHRO_TG
( THISMONTH )
CALL TOTAL_BIOFUEL_TG
( THISMONTH )
! Fancy output
WRITE( 6, '(a)' ) REPEAT( '=', 79 )
! Return to calling program
END SUBROUTINE EMISS_EPA_NEI
!------------------------------------------------------------------------------
SUBROUTINE READ_EPA( FILENAME, NOX, CO, ALK4, ACET, MEK, 4,19
& PRPE, C3H8, CH2O, C2H6, SO2, SO4, NH3 )
!
!******************************************************************************
! Subroutine READ_EPA reads an EPA data file (biomass or anthro) from disk.
! The entire file is read through on one pass for better I/O optimization.
! (rch, bmy, 7/1/04)
!
! Arguments as Input:
! ============================================================================
! (1 ) FILENAME (CHARACTER) : Name of anthro or biomass file to read
!
! Arguments as Output:
! ============================================================================
! (2 ) NOx (REAL*4 ) : Array for NOx anthro or biomass data
! (3 ) CO (REAL*4 ) : Array for CO anthro or biomass data
! (4 ) ALK4 (REAL*4 ) : Array for ALK4 anthro or biomass data
! (5 ) ACET (REAL*4 ) : Array for ACET anthro or biomass data
! (6 ) MEK (REAL*4 ) : Array for MEK anthro or biomass data
! (7 ) PRPE (REAL*4 ) : Array for PRPE anthro or biomass data
! (8 ) C3H8 (REAL*4 ) : Array for C3H8 anthro or biomass data
! (9 ) CH2O (REAL*4 ) : Array for CH2O anthro or biomass data
! (10) C2H6 (REAL*4 ) : Array for C2H6 anthro or biomass data
! (11) NH3 (REAL*4 ) : Array for NH3 anthro or biomass data
! (12) SO2 (REAL*4 ) : Array for SO4 anthro or biomass data
! (13) SO4 (REAL*4 ) : Array for SO4 anthro or biomass data
!
! NOTES:
!******************************************************************************
!
! References to F90 modules
USE BPCH2_MOD
, ONLY : OPEN_BPCH2_FOR_READ
USE FILE_MOD
, ONLY : IU_FILE, IOERROR
USE TRANSFER_MOD
, ONLY : TRANSFER_2D
# include "CMN_SIZE" ! Size parameters
! Arguments
CHARACTER(LEN=*), INTENT(IN) :: FILENAME
REAL*4, INTENT(INOUT) :: NOX(IIPAR,JJPAR)
REAL*4, INTENT(INOUT) :: CO(IIPAR,JJPAR)
REAL*4, INTENT(INOUT) :: ALK4(IIPAR,JJPAR)
REAL*4, INTENT(INOUT) :: ACET(IIPAR,JJPAR)
REAL*4, INTENT(INOUT) :: MEK(IIPAR,JJPAR)
REAL*4, INTENT(INOUT) :: PRPE(IIPAR,JJPAR)
REAL*4, INTENT(INOUT) :: C3H8(IIPAR,JJPAR)
REAL*4, INTENT(INOUT) :: CH2O(IIPAR,JJPAR)
REAL*4, INTENT(INOUT) :: C2H6(IIPAR,JJPAR)
REAL*4, INTENT(INOUT) :: SO2(IIPAR,JJPAR)
REAL*4, INTENT(INOUT) :: SO4(IIPAR,JJPAR)
REAL*4, INTENT(INOUT) :: NH3(IIPAR,JJPAR)
! Local variables
INTEGER :: I, J, L, N, IOS
INTEGER :: NTRACER, NSKIP
INTEGER :: HALFPOLAR, CENTER180
INTEGER :: NI, NJ, NL
INTEGER :: IFIRST, JFIRST, LFIRST
REAL*4 :: ARRAY(IGLOB,JGLOB,1)
REAL*4 :: LONRES, LATRES
REAL*8 :: ZTAU0, ZTAU1
CHARACTER(LEN=20) :: MODELNAME
CHARACTER(LEN=40) :: CATEGORY
CHARACTER(LEN=40) :: UNIT
CHARACTER(LEN=40) :: RESERVED
!=================================================================
! READ_EPA begins here!
!=================================================================
! Echo info
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( 'READ_EPA: Reading ', a )
! Open file
CALL OPEN_BPCH2_FOR_READ
( IU_FILE, FILENAME )
! Read the entire file in one pass (for I/O optimization)
DO
! Read 1st data block header line
READ( IU_FILE, IOSTAT=IOS )
& MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
! Check for EOF or errors
IF ( IOS < 0 ) EXIT
IF ( IOS > 0 ) CALL IOERROR
( IOS, IU_FILE, 'read_data:2' )
! Read 2nd data block header line
READ( IU_FILE, IOSTAT=IOS )
& CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
& NI, NJ, NL, IFIRST, JFIRST, LFIRST,
& NSKIP
! Error check
IF ( IOS /= 0 ) CALL IOERROR
( IOS, IU_FILE, 'read_data:3' )
! Read data
READ( IU_FILE, IOSTAT=IOS )
& ( ( ( ARRAY(I,J,L), I=1,NI ), J=1,NJ ), L=1,NL )
! Error check
IF ( IOS /= 0 ) CALL IOERROR
( IOS, IU_FILE, 'read_data:4' )
!==============================================================
! Save into tracer arrays
!==============================================================
SELECT CASE ( NTRACER )
CASE( 1 )
CALL TRANSFER_2D
( ARRAY(:,:,1), NOx )
CASE( 4 )
CALL TRANSFER_2D
( ARRAY(:,:,1), CO )
CASE( 5 )
CALL TRANSFER_2D
( ARRAY(:,:,1), ALK4 )
CASE( 9 )
CALL TRANSFER_2D
( ARRAY(:,:,1), ACET )
CASE( 10 )
CALL TRANSFER_2D
( ARRAY(:,:,1), MEK )
CASE( 18 )
CALL TRANSFER_2D
( ARRAY(:,:,1), PRPE )
CASE( 19 )
CALL TRANSFER_2D
( ARRAY(:,:,1), C3H8 )
CASE( 20 )
CALL TRANSFER_2D
( ARRAY(:,:,1), CH2O )
CASE( 21 )
CALL TRANSFER_2D
( ARRAY(:,:,1), C2H6 )
CASE( 26 )
CALL TRANSFER_2D
( ARRAY(:,:,1), SO2 )
CASE( 27 )
CALL TRANSFER_2D
( ARRAY(:,:,1), SO4 )
CASE( 29 )
CALL TRANSFER_2D
( ARRAY(:,:,1), NH3 )
CASE DEFAULT
! Nothing
END SELECT
ENDDO
! Close file
CLOSE( IU_FILE )
! Return to calling program
END SUBROUTINE READ_EPA
!------------------------------------------------------------------------------
SUBROUTINE READ_USA_MASK 1,8
!
!******************************************************************************
! Subroutine READ_USA_MASK reads the USA mask from disk. The USA mask is
! the fraction of the grid box (I,J) which lies w/in the continental USA.
! (rch, bmy, 11/10/04, 10/3/05)
!
! NOTES:
! (1 ) Now can read data for GEOS and GCAP grids (bmy, 8/16/05)
! (2 ) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
!******************************************************************************
!
! Reference to F90 modules
USE BPCH2_MOD
, ONLY : GET_NAME_EXT_2D, GET_RES_EXT
USE BPCH2_MOD
, ONLY : GET_TAU0, READ_BPCH2
USE DIRECTORY_MOD
, ONLY : DATA_DIR
USE TRANSFER_MOD
, ONLY : TRANSFER_2D
# include "CMN_SIZE" ! Size parameters
! Local variables
REAL*4 :: ARRAY(IGLOB,JGLOB,1)
REAL*8 :: XTAU
CHARACTER(LEN=255) :: FILENAME
!=================================================================
! READ_USA_MASK begins here!
!=================================================================
! File name
FILENAME = TRIM( DATA_DIR ) //
& 'EPA_NEI_200411/usa_mask.' // GET_NAME_EXT_2D
() //
& '.' // GET_RES_EXT
()
! Echo info
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( ' - READ_USA_MASK: Reading ', a )
! Get TAU0 for Jan 1985
XTAU = GET_TAU0( 1, 1, 1985 )
! USA mask is stored in the bpch file as #2
CALL READ_BPCH2
( FILENAME, 'LANDMAP', 2,
& XTAU, IGLOB, JGLOB,
& 1, ARRAY, QUIET=.TRUE. )
! Cast to REAL*8
CALL TRANSFER_2D
( ARRAY(:,:,1), USA_MASK )
! Return to calling program
END SUBROUTINE READ_USA_MASK
!------------------------------------------------------------------------------
SUBROUTINE TOTAL_ANTHRO_TG( THISMONTH ) 4,17
!
!******************************************************************************
! Subroutine TOTAL_ANTHRO_TG prints the amount of EPA/NEI anthropogenic
! emissions that are emitted each month in Tg or Tg C.
! (rch, bmy, 11/10/04, 10/25/05)
!
! Arguments as Input:
! ============================================================================
! (1 ) FFARRAY (REAL*8 ) : Fossil Fuel CO emissions [molec (C)/cm2/month]
! (2-4) IX,JX,LX (INTEGER) : Dimensions of FFARRAY
! (5 ) MOLWT (REAL*8 ) : Molecular wt [kg/mole] for the given tracer
! (6 ) NAME (REAL*8 ) : Tracer name
! (7 ) NSEASON (INTEGER) : Number of the season, for seasonal NOx/SOX
!
! NOTES:
! (1) Scale factors were determined by Jennifer Logan (jal@io.harvard.edu),
! Bryan Duncan (bnd@io.harvard.edu), and Daniel Jacob (djj@io.harvard.edu)
! (2) Now replace DXYP(J)*1d4 with routine GET_AREA_CM2 from "grid_mod.f".
! (bmy, 2/4/03)
! (3) Prevent out of bounds error when tracers are undefined (bmy, 1/25/05)
! (4) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
! (5) Now replace FMOL with TRACER_MW_KG (bmy, 10/25/05)
!******************************************************************************
!
! References to F90 modules
USE GRID_MOD
, ONLY : GET_AREA_CM2
USE TRACER_MOD
, ONLY : TRACER_MW_KG
USE TRACERID_MOD
, ONLY : IDTACET, IDTALK4, IDTC2H6, IDTC3H8
USE TRACERID_MOD
, ONLY : IDTCH2O, IDTCO, IDTMEK, IDTNOX
USE TRACERID_MOD
, ONLY : IDTNH3, IDTPRPE, IDTSO2, IDTSO4
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: THISMONTH
! Local variables
INTEGER :: I, J
REAL*8 :: WD_NOX, WD_CO, WD_ALK4, WD_ACET
REAL*8 :: WD_MEK, WD_PRPE, WD_C2H6, WD_C3H8
REAL*8 :: WD_CH2O, WD_NH3, WD_SO2, WD_SO4, A
REAL*8 :: WE_NOX, WE_CO, WE_ALK4, WE_ACET
REAL*8 :: WE_MEK, WE_PRPE, WE_C2H6, WE_C3H8
REAL*8 :: WE_CH2O, WE_NH3, WE_SO2, WE_SO4
REAL*8 :: F_NOX, F_CO, F_ALK4, F_ACET
REAL*8 :: F_MEK, F_PRPE, F_C2H6, F_C3H8
REAL*8 :: F_CH2O, F_SO2, F_SO4, F_NH3
CHARACTER(LEN=6) :: UNIT
! Days per month
INTEGER :: D(12) = (/ 31, 28, 31, 30, 31, 30,
& 31, 31, 30, 31, 30, 31 /)
!=================================================================
! TOTAL_ANTHRO_TG begins here!
!=================================================================
! Summing variables for weekday avg anthro
WD_NOX = 0d0
WD_CO = 0d0
WD_ALK4 = 0d0
WD_ACET = 0d0
WD_MEK = 0d0
WD_PRPE = 0d0
WD_C2H6 = 0d0
WD_C3H8 = 0d0
WD_CH2O = 0d0
WD_NH3 = 0d0
WD_SO2 = 0d0
WD_SO4 = 0d0
! Summing variables for weekend avg anthro
WE_NOX = 0d0
WE_CO = 0d0
WE_ALK4 = 0d0
WE_ACET = 0d0
WE_MEK = 0d0
WE_PRPE = 0d0
WE_C2H6 = 0d0
WE_C3H8 = 0d0
WE_CH2O = 0d0
WE_NH3 = 0d0
WE_SO2 = 0d0
WE_SO4 = 0d0
! Molecular weights
F_NOX = 0d0
F_CO = 0d0
F_ALK4 = 0d0
F_ACET = 0d0
F_MEK = 0d0
F_PRPE = 0d0
F_C2H6 = 0d0
F_C3H8 = 0d0
F_CH2O = 0d0
F_SO2 = 0d0
F_SO4 = 0d0
F_NH3 = 0d0
! Prevent array out of bounds error for undefined tracers
IF ( IDTNOX > 0 ) F_NOX = TRACER_MW_KG(IDTNOX )
IF ( IDTCO > 0 ) F_CO = TRACER_MW_KG(IDTCO )
IF ( IDTALK4 > 0 ) F_ALK4 = TRACER_MW_KG(IDTALK4)
IF ( IDTACET > 0 ) F_ACET = TRACER_MW_KG(IDTACET)
IF ( IDTMEK > 0 ) F_MEK = TRACER_MW_KG(IDTMEK )
IF ( IDTPRPE > 0 ) F_PRPE = TRACER_MW_KG(IDTPRPE)
IF ( IDTC2H6 > 0 ) F_C2H6 = TRACER_MW_KG(IDTC2H6)
IF ( IDTC3H8 > 0 ) F_C3H8 = TRACER_MW_KG(IDTC3H8)
IF ( IDTCH2O > 0 ) F_CH2O = TRACER_MW_KG(IDTCH2O)
IF ( IDTSO2 > 0 ) F_SO2 = TRACER_MW_KG(IDTSO2 )
IF ( IDTSO4 > 0 ) F_SO4 = TRACER_MW_KG(IDTSO4 )
IF ( IDTNH3 > 0 ) F_NH3 = TRACER_MW_KG(IDTNH3 )
!=================================================================
! Sum anthropogenic emissions
!=================================================================
! Loop over latitudes
DO J = 1, JJPAR
! Surface area [cm2] * seconds in this month / AVOGADRO's number
! Also multiply by the factor 1d-9 to convert kg to Tg
A = GET_AREA_CM2
( J ) * ( D(THISMONTH) * 86400d-9 ) / 6.0225d23
! Loop over longitudes
DO I = 1, IIPAR
! Weekday avg emissions
WD_NOX = WD_NOX + EPA_WD_AN_NOX (I,J) * A * F_NOX
WD_CO = WD_CO + EPA_WD_AN_CO (I,J) * A * F_CO
WD_ALK4 = WD_ALK4 + EPA_WD_AN_ALK4(I,J) * A * F_ALK4
WD_ACET = WD_ACET + EPA_WD_AN_ACET(I,J) * A * F_ACET
WD_MEK = WD_MEK + EPA_WD_AN_MEK (I,J) * A * F_MEK
WD_PRPE = WD_PRPE + EPA_WD_AN_PRPE(I,J) * A * F_PRPE
WD_C2H6 = WD_C2H6 + EPA_WD_AN_C2H6(I,J) * A * F_C2H6
WD_C3H8 = WD_C3H8 + EPA_WD_AN_C3H8(I,J) * A * F_C3H8
WD_CH2O = WD_CH2O + EPA_WD_AN_CH2O(I,J) * A * F_CH2O
WD_SO2 = WD_SO2 + EPA_WD_AN_SO2 (I,J) * A * F_SO2
WD_SO4 = WD_SO4 + EPA_WD_AN_SO4 (I,J) * A * F_SO4
WD_NH3 = WD_NH3 + EPA_WD_AN_NH3 (I,J) * A * F_NH3
! Weekend avg emissions
WE_NOX = WE_NOX + EPA_WE_AN_NOX (I,J) * A * F_NOX
WE_CO = WE_CO + EPA_WE_AN_CO (I,J) * A * F_CO
WE_ALK4 = WE_ALK4 + EPA_WE_AN_ALK4(I,J) * A * F_ALK4
WE_ACET = WE_ACET + EPA_WE_AN_ACET(I,J) * A * F_ACET
WE_MEK = WE_MEK + EPA_WE_AN_MEK (I,J) * A * F_MEK
WE_PRPE = WE_PRPE + EPA_WE_AN_PRPE(I,J) * A * F_PRPE
WE_C2H6 = WE_C2H6 + EPA_WE_AN_C2H6(I,J) * A * F_C2H6
WE_C3H8 = WE_C3H8 + EPA_WE_AN_C3H8(I,J) * A * F_C3H8
WE_CH2O = WE_CH2O + EPA_WE_AN_CH2O(I,J) * A * F_CH2O
WE_SO2 = WE_SO2 + EPA_WE_AN_SO2 (I,J) * A * F_SO2
WE_SO4 = WE_SO4 + EPA_WE_AN_SO4 (I,J) * A * F_SO4
WE_NH3 = WE_NH3 + EPA_WE_AN_NH3 (I,J) * A * F_NH3
ENDDO
ENDDO
!=================================================================
! Print info
!=================================================================
! Weekday avg anthro
WRITE( 6, '(a)' )
WRITE( 6, 100 ) 'NOx ', THISMONTH, WD_NOX, ' '
WRITE( 6, 100 ) 'CO ', THISMONTH, WD_CO, ' '
WRITE( 6, 100 ) 'ALK4', THISMONTH, WD_ALK4, ' C'
WRITE( 6, 100 ) 'ACET', THISMONTH, WD_ACET, ' C'
WRITE( 6, 100 ) 'MEK ', THISMONTH, WD_MEK, ' C'
WRITE( 6, 100 ) 'PRPE', THISMONTH, WD_PRPE, ' C'
WRITE( 6, 100 ) 'C3H8', THISMONTH, WD_C3H8, ' C'
WRITE( 6, 100 ) 'CH2O', THISMONTH, WD_CH2O, ' '
WRITE( 6, 100 ) 'C2H6', THISMONTH, WD_C2H6, ' C'
WRITE( 6, 100 ) 'SO2 ', THISMONTH, WD_SO2, ' '
WRITE( 6, 100 ) 'SO4 ', THISMONTH, WD_SO4, ' '
WRITE( 6, 100 ) 'NH3 ', THISMONTH, WD_NH3, ' '
100 FORMAT( 'Total weekday avg anthro ', a4, ' for 1999/',
& i2.2, ': ', f13.6, ' Tg', a2 )
! Weekend avg anthro
WRITE( 6, '(a)' )
WRITE( 6, 110 ) 'NOx ', THISMONTH, WE_NOX, ' '
WRITE( 6, 110 ) 'CO ', THISMONTH, WE_CO, ' '
WRITE( 6, 110 ) 'ALK4', THISMONTH, WE_ALK4, ' C'
WRITE( 6, 110 ) 'ACET', THISMONTH, WE_ACET, ' C'
WRITE( 6, 110 ) 'MEK ', THISMONTH, WE_MEK, ' C'
WRITE( 6, 110 ) 'PRPE', THISMONTH, WE_PRPE, ' C'
WRITE( 6, 110 ) 'C3H8', THISMONTH, WE_C3H8, ' C'
WRITE( 6, 110 ) 'CH2O', THISMONTH, WE_CH2O, ' '
WRITE( 6, 110 ) 'C2H6', THISMONTH, WE_C2H6, ' C'
WRITE( 6, 110 ) 'SO2 ', THISMONTH, WE_SO2, ' '
WRITE( 6, 110 ) 'SO4 ', THISMONTH, WE_SO4, ' '
WRITE( 6, 110 ) 'NH3 ', THISMONTH, WE_NH3, ' '
110 FORMAT( 'Total weekend avg anthro ', a4, ' for 1999/',
& i2.2, ': ', f13.6, ' Tg', a2 )
! Return to calling program
END SUBROUTINE TOTAL_ANTHRO_TG
!------------------------------------------------------------------------------
SUBROUTINE TOTAL_BIOFUEL_TG( THISMONTH ) 1,6
!
!******************************************************************************
! Subroutine TOTAL_BIOFUEL_TG prints the amount of EPA/NEI biofuel emissions
! that are emitted each month in Tg or Tg C. (rch, bmy, 11/10/04, 1/26/05)
!
! Arguments as Input:
! ============================================================================
! (1 ) THISMONTH (INTEGER) : Current month number
!
! NOTES:
! (1 ) Prevent out of bounds error when tracers are undefined (bmy, 1/25/05)
! (2 ) Now replace FMOL with TRACER_MW_KG
!******************************************************************************
!
! References to F90 modules
USE GRID_MOD
, ONLY : GET_AREA_CM2
USE TRACER_MOD
, ONLY : TRACER_MW_KG
USE TRACERID_MOD
, ONLY : IDTACET, IDTALK4, IDTC2H6, IDTC3H8
USE TRACERID_MOD
, ONLY : IDTCH2O, IDTCO, IDTMEK, IDTNOX
USE TRACERID_MOD
, ONLY : IDTNH3, IDTPRPE, IDTSO2, IDTSO4
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: THISMONTH
! Local variables
INTEGER :: I, J
REAL*8 :: WD_NOX, WD_CO, WD_ALK4, WD_ACET
REAL*8 :: WD_MEK, WD_PRPE, WD_C2H6, WD_C3H8
REAL*8 :: WD_CH2O, WD_NH3, WD_SO2, WD_SO4, A
REAL*8 :: WE_NOX, WE_CO, WE_ALK4, WE_ACET
REAL*8 :: WE_MEK, WE_PRPE, WE_C2H6, WE_C3H8
REAL*8 :: WE_CH2O, WE_NH3, WE_SO2, WE_SO4
REAL*8 :: F_NOX, F_CO, F_ALK4, F_ACET
REAL*8 :: F_MEK, F_PRPE, F_C2H6, F_C3H8
REAL*8 :: F_CH2O, F_SO2, F_SO4, F_NH3
CHARACTER(LEN=6) :: UNIT
! Days per month
INTEGER :: D(12) = (/ 31, 28, 31, 30, 31, 30,
& 31, 31, 30, 31, 30, 31 /)
!=================================================================
! TOTAL_BIOFUEL_TG begins here!
!=================================================================
! Summing variables for weekday avg anthro
WD_NOX = 0d0
WD_CO = 0d0
WD_ALK4 = 0d0
WD_ACET = 0d0
WD_MEK = 0d0
WD_PRPE = 0d0
WD_C2H6 = 0d0
WD_C3H8 = 0d0
WD_CH2O = 0d0
WD_NH3 = 0d0
WD_SO2 = 0d0
WD_SO4 = 0d0
! Summing variables for weekend avg anthro
WE_NOX = 0d0
WE_CO = 0d0
WE_ALK4 = 0d0
WE_ACET = 0d0
WE_MEK = 0d0
WE_PRPE = 0d0
WE_C2H6 = 0d0
WE_C3H8 = 0d0
WE_CH2O = 0d0
WE_NH3 = 0d0
WE_SO2 = 0d0
WE_SO4 = 0d0
! Molecular weights
F_NOX = 0d0
F_CO = 0d0
F_ALK4 = 0d0
F_ACET = 0d0
F_MEK = 0d0
F_PRPE = 0d0
F_C2H6 = 0d0
F_C3H8 = 0d0
F_CH2O = 0d0
F_SO2 = 0d0
F_SO4 = 0d0
F_NH3 = 0d0
! Prevent array out of bounds error for undefined tracers
IF ( IDTNOX > 0 ) F_NOX = TRACER_MW_KG(IDTNOX )
IF ( IDTCO > 0 ) F_CO = TRACER_MW_KG(IDTCO )
IF ( IDTALK4 > 0 ) F_ALK4 = TRACER_MW_KG(IDTALK4)
IF ( IDTACET > 0 ) F_ACET = TRACER_MW_KG(IDTACET)
IF ( IDTMEK > 0 ) F_MEK = TRACER_MW_KG(IDTMEK )
IF ( IDTPRPE > 0 ) F_PRPE = TRACER_MW_KG(IDTPRPE)
IF ( IDTC2H6 > 0 ) F_C2H6 = TRACER_MW_KG(IDTC2H6)
IF ( IDTC3H8 > 0 ) F_C3H8 = TRACER_MW_KG(IDTC3H8)
IF ( IDTCH2O > 0 ) F_CH2O = TRACER_MW_KG(IDTCH2O)
IF ( IDTSO2 > 0 ) F_SO2 = TRACER_MW_KG(IDTSO2 )
IF ( IDTSO4 > 0 ) F_SO4 = TRACER_MW_KG(IDTSO4 )
IF ( IDTNH3 > 0 ) F_NH3 = TRACER_MW_KG(IDTNH3 )
!=================================================================
! Sum biofuel emissions
!=================================================================
! Loop over surface boxes
DO J = 1, JJPAR
! Surface area [cm2] * seconds in this month / AVOGADRO's number
! Also multiply by the factor 1d-9 to convert kg to Tg
A = GET_AREA_CM2
( J ) * ( D(THISMONTH) * 86400d-9 ) / 6.0225d23
DO I = 1, IIPAR
! Weekday avg emissions
WD_NOX = WD_NOX + EPA_WD_BF_NOX (I,J) * A * F_NOX
WD_CO = WD_CO + EPA_WD_BF_CO (I,J) * A * F_CO
WD_ALK4 = WD_ALK4 + EPA_WD_BF_ALK4(I,J) * A * F_ALK4
WD_ACET = WD_ACET + EPA_WD_BF_ACET(I,J) * A * F_ACET
WD_MEK = WD_MEK + EPA_WD_BF_MEK (I,J) * A * F_MEK
WD_PRPE = WD_PRPE + EPA_WD_BF_PRPE(I,J) * A * F_PRPE
WD_C2H6 = WD_C2H6 + EPA_WD_BF_C2H6(I,J) * A * F_C2H6
WD_C3H8 = WD_C3H8 + EPA_WD_BF_C3H8(I,J) * A * F_C3H8
WD_CH2O = WD_CH2O + EPA_WD_BF_CH2O(I,J) * A * F_CH2O
WD_SO2 = WD_SO2 + EPA_WD_BF_SO2 (I,J) * A * F_SO2
WD_SO4 = WD_SO4 + EPA_WD_BF_SO4 (I,J) * A * F_SO4
WD_NH3 = WD_NH3 + EPA_WD_BF_NH3 (I,J) * A * F_NH3
! Weekend avg emissions
WE_NOX = WE_NOX + EPA_WE_BF_NOX (I,J) * A * F_NOX
WE_CO = WE_CO + EPA_WE_BF_CO (I,J) * A * F_CO
WE_ALK4 = WE_ALK4 + EPA_WE_BF_ALK4(I,J) * A * F_ALK4
WE_ACET = WE_ACET + EPA_WE_BF_ACET(I,J) * A * F_ACET
WE_MEK = WE_MEK + EPA_WE_BF_MEK (I,J) * A * F_MEK
WE_PRPE = WE_PRPE + EPA_WE_BF_PRPE(I,J) * A * F_PRPE
WE_C2H6 = WE_C2H6 + EPA_WE_BF_C2H6(I,J) * A * F_C2H6
WE_C3H8 = WE_C3H8 + EPA_WE_BF_C3H8(I,J) * A * F_C3H8
WE_CH2O = WE_CH2O + EPA_WE_BF_CH2O(I,J) * A * F_CH2O
WE_SO2 = WE_SO2 + EPA_WE_BF_SO2 (I,J) * A * F_SO2
WE_SO4 = WE_SO4 + EPA_WE_BF_SO4 (I,J) * A * F_SO4
WE_NH3 = WE_NH3 + EPA_WE_BF_NH3 (I,J) * A * F_NH3
ENDDO
ENDDO
!=================================================================
! Print info
!=================================================================
! Weekday avg biofuel
WRITE( 6, '(a)' )
WRITE( 6, 100 ) 'NOx ', THISMONTH, WD_NOX, ' '
WRITE( 6, 100 ) 'CO ', THISMONTH, WD_CO, ' '
WRITE( 6, 100 ) 'ALK4', THISMONTH, WD_ALK4, ' C'
WRITE( 6, 100 ) 'ACET', THISMONTH, WD_ACET, ' C'
WRITE( 6, 100 ) 'MEK ', THISMONTH, WD_MEK, ' C'
WRITE( 6, 100 ) 'PRPE', THISMONTH, WD_PRPE, ' C'
WRITE( 6, 100 ) 'C3H8', THISMONTH, WD_C3H8, ' C'
WRITE( 6, 100 ) 'CH2O', THISMONTH, WD_CH2O, ' '
WRITE( 6, 100 ) 'C2H6', THISMONTH, WD_C2H6, ' C'
WRITE( 6, 100 ) 'SO2 ', THISMONTH, WD_SO2, ' '
WRITE( 6, 100 ) 'SO4 ', THISMONTH, WD_SO4, ' '
WRITE( 6, 100 ) 'NH3 ', THISMONTH, WD_NH3, ' '
100 FORMAT( 'Total weekday avg biofuel ', a4, ' for 1999/',
& i2.2, ': ', f13.6, ' Tg', a2 )
! Weekend avg biofuel
WRITE( 6, '(a)' )
WRITE( 6, 110 ) 'NOx ', THISMONTH, WE_NOX, ' '
WRITE( 6, 110 ) 'CO ', THISMONTH, WE_CO, ' '
WRITE( 6, 110 ) 'ALK4', THISMONTH, WE_ALK4, ' C'
WRITE( 6, 110 ) 'ACET', THISMONTH, WE_ACET, ' C'
WRITE( 6, 110 ) 'MEK ', THISMONTH, WE_MEK, ' C'
WRITE( 6, 110 ) 'PRPE', THISMONTH, WE_PRPE, ' C'
WRITE( 6, 110 ) 'C3H8', THISMONTH, WE_C3H8, ' C'
WRITE( 6, 110 ) 'CH2O', THISMONTH, WE_CH2O, ' '
WRITE( 6, 110 ) 'C2H6', THISMONTH, WE_C2H6, ' C'
WRITE( 6, 110 ) 'SO2 ', THISMONTH, WE_SO2, ' '
WRITE( 6, 110 ) 'SO4 ', THISMONTH, WE_SO4, ' '
WRITE( 6, 110 ) 'NH3 ', THISMONTH, WE_NH3, ' '
110 FORMAT( 'Total weekend avg biofuel ', a4, ' for 1999/',
& i2.2, ': ', f13.6, ' Tg', a2 )
! Return to calling program
END SUBROUTINE TOTAL_BIOFUEL_TG
!------------------------------------------------------------------------------
FUNCTION GET_USA_MASK( I, J ) RESULT( USA ) 5
!
!******************************************************************************
! Function GET_USA_MASK returns the value of the USA mask (i.e. the fraction
! of a grid box which lies w/in the continental USA) at a given (I,J)
! location. (rch, bmy, 11/10/04)
!
! Arguments as Input:
! ============================================================================
! (1 ) I (INTEGER) : Longitude index
! (2 ) J (INTEGER) : Latitude index
!
! NOTES:
!******************************************************************************
!
! Arguments
INTEGER, INTENT(IN) :: I, J
! Local variables
REAL*8 :: USA
!=================================================================
! GET_USA_MASK begins here!
!=================================================================
USA = USA_MASK(I,J)
! Return to calling program
END FUNCTION GET_USA_MASK
!------------------------------------------------------------------------------
FUNCTION GET_EPA_ANTHRO( I, J, N, WEEKDAY ) RESULT( EPA_NEI ) 4,3
!
!******************************************************************************
! Function GET_EPA_ANTHRO returns the EPA weekday avg or weekend avg
! anthropogenic emissions at a (I,J) location. (rch, bmy, 11/10/04, 10/3/05)
!
! Arguments as Input:
! ============================================================================
! (1 ) I (INTEGER) : Longitude index
! (2 ) J (INTEGER) : Latitude index
! (3 ) N (INTEGER) : Tracer index (i.e. as listed in "inptr.ctm")
! (4 ) WEEKDAY (LOGICAL) : Fla for weekday (=T) or weekend (=F) emissions
!
! NOTES:
! (1 ) Now make sure all USE statements are USE, ONLY. Also remove reference
! to BPCH2_MOD and TRACERID_MOD, they're not needed. (bmy, 10/3/05)
!******************************************************************************
!
! References to F90 modules
USE TRACERID_MOD
, ONLY : IDTACET, IDTALK4, IDTC2H6, IDTC3H8
USE TRACERID_MOD
, ONLY : IDTCH2O, IDTCO, IDTMEK, IDTNOX
USE TRACERID_MOD
, ONLY : IDTNH3, IDTPRPE, IDTSO2, IDTSO4
# include "CMN_SIZE" ! Size parameters
! Arguments
LOGICAL, INTENT(IN) :: WEEKDAY
INTEGER, INTENT(IN) :: I, J, N
! Local variables
REAL*8 :: EPA_NEI
!=================================================================
! GET_EPA_ANTHRO begins here!
!=================================================================
! Return either weekday or weekend avg emissions
IF ( WEEKDAY ) THEN
!--------------------
! Weekday avg anthro
!--------------------
IF ( N == IDTNOX ) THEN
EPA_NEI = EPA_WD_AN_NOX(I,J)
ELSE IF ( N == IDTCO ) THEN
EPA_NEI = EPA_WD_AN_CO(I,J)
ELSE IF ( N == IDTALK4 ) THEN
EPA_NEI = EPA_WD_AN_ALK4(I,J)
ELSE IF ( N == IDTACET ) THEN
EPA_NEI = EPA_WD_AN_ACET(I,J)
ELSE IF ( N == IDTMEK ) THEN
EPA_NEI = EPA_WD_AN_MEK(I,J)
ELSE IF ( N == IDTPRPE ) THEN
EPA_NEI = EPA_WD_AN_PRPE(I,J)
ELSE IF ( N == IDTC3H8 ) THEN
EPA_NEI = EPA_WD_AN_C3H8(I,J)
ELSE IF ( N == IDTCH2O ) THEN
EPA_NEI = EPA_WD_AN_CH2O(I,J)
ELSE IF ( N == IDTC2H6 ) THEN
EPA_NEI = EPA_WD_AN_C2H6(I,J)
ELSE IF ( N == IDTSO2 ) THEN
EPA_NEI = EPA_WD_AN_SO2(I,J)
ELSE IF ( N == IDTSO4 ) THEN
EPA_NEI = EPA_WD_AN_SO4(I,J)
ELSE IF ( N == IDTNH3 ) THEN
EPA_NEI = EPA_WD_AN_NH3(I,J)
ELSE
EPA_NEI = 0d0
ENDIF
ELSE
!--------------------
! Weekend avg anthro
!--------------------
IF ( N == IDTNOX ) THEN
EPA_NEI = EPA_WE_AN_NOX(I,J)
ELSE IF ( N == IDTCO ) THEN
EPA_NEI = EPA_WE_AN_CO(I,J)
ELSE IF ( N == IDTALK4 ) THEN
EPA_NEI = EPA_WE_AN_ALK4(I,J)
ELSE IF ( N == IDTACET ) THEN
EPA_NEI = EPA_WE_AN_ACET(I,J)
ELSE IF ( N == IDTMEK ) THEN
EPA_NEI = EPA_WE_AN_MEK(I,J)
ELSE IF ( N == IDTPRPE ) THEN
EPA_NEI = EPA_WE_AN_PRPE(I,J)
ELSE IF ( N == IDTC3H8 ) THEN
EPA_NEI = EPA_WE_AN_C3H8(I,J)
ELSE IF ( N == IDTCH2O ) THEN
EPA_NEI = EPA_WE_AN_CH2O(I,J)
ELSE IF ( N == IDTC2H6 ) THEN
EPA_NEI = EPA_WE_AN_C2H6(I,J)
ELSE IF ( N == IDTSO2 ) THEN
EPA_NEI = EPA_WE_AN_SO2(I,J)
ELSE IF ( N == IDTSO4 ) THEN
EPA_NEI = EPA_WE_AN_SO4(I,J)
ELSE IF ( N == IDTNH3 ) THEN
EPA_NEI = EPA_WE_AN_NH3(I,J)
ELSE
EPA_NEI = 0d0
ENDIF
ENDIF
! Return to calling program
END FUNCTION GET_EPA_ANTHRO
!------------------------------------------------------------------------------
FUNCTION GET_EPA_BIOFUEL( I, J, N, WEEKDAY ) RESULT( EPA_NEI ) 3,3
!
!******************************************************************************
! Function GET_EPA_BIOFUEL returns the EPA weekday avg or weekend avg
! biofuel emissions at a (I,J) location. (rch, bmy, 11/10/04, 10/3/05)
!
! Arguments as Input:
! ============================================================================
! (1 ) I (INTEGER) : Longitude index
! (2 ) J (INTEGER) : Latitude index
! (3 ) N (INTEGER) : Tracer index (i.e. as listed in "inptr.ctm")
! (4 ) WEEKDAY (LOGICAL) : Fla for weekday (=T) or weekend (=F) emissions
!
! NOTES:
! (1 ) Now make sure all USE statements are USE, ONLY. Also remove reference
! to BPCH2_MOD and TRACERID_MOD, they're not needed. (bmy, 10/3/05)
!******************************************************************************
!
! References to F90 modules
USE TRACERID_MOD
, ONLY : IDTACET, IDTALK4, IDTC2H6, IDTC3H8
USE TRACERID_MOD
, ONLY : IDTCH2O, IDTCO, IDTMEK, IDTNOX
USE TRACERID_MOD
, ONLY : IDTNH3, IDTPRPE, IDTSO2, IDTSO4
# include "CMN_SIZE" ! Size parameters
! Arguments
LOGICAL, INTENT(IN) :: WEEKDAY
INTEGER, INTENT(IN) :: I, J, N
! Local variables
REAL*8 :: EPA_NEI
!=================================================================
! GET_EPA_BIOFUEL begins here!
!=================================================================
! Return either weekday or weekend avg emissions
IF ( WEEKDAY ) THEN
!---------------------
! Weekday avg biofuel
!---------------------
IF ( N == IDTNOX ) THEN
EPA_NEI = EPA_WD_BF_NOX(I,J)
ELSE IF ( N == IDTCO ) THEN
EPA_NEI = EPA_WD_BF_CO(I,J)
ELSE IF ( N == IDTALK4 ) THEN
EPA_NEI = EPA_WD_BF_ALK4(I,J)
ELSE IF ( N == IDTACET ) THEN
EPA_NEI = EPA_WD_BF_ACET(I,J)
ELSE IF ( N == IDTMEK ) THEN
EPA_NEI = EPA_WD_BF_MEK(I,J)
ELSE IF ( N == IDTPRPE ) THEN
EPA_NEI = EPA_WD_BF_PRPE(I,J)
ELSE IF ( N == IDTC3H8 ) THEN
EPA_NEI = EPA_WD_BF_C3H8(I,J)
ELSE IF ( N == IDTCH2O ) THEN
EPA_NEI = EPA_WD_BF_CH2O(I,J)
ELSE IF ( N == IDTC2H6 ) THEN
EPA_NEI = EPA_WD_BF_C2H6(I,J)
ELSE IF ( N == IDTSO2 ) THEN
EPA_NEI = EPA_WD_BF_SO2(I,J)
ELSE IF ( N == IDTSO4 ) THEN
EPA_NEI = EPA_WD_BF_SO4(I,J)
ELSE IF ( N == IDTNH3 ) THEN
EPA_NEI = EPA_WD_BF_NH3(I,J)
ELSE
EPA_NEI = 0d0
ENDIF
ELSE
!---------------------
! Weekend avg biofuel
!---------------------
IF ( N == IDTNOX ) THEN
EPA_NEI = EPA_WE_BF_NOX(I,J)
ELSE IF ( N == IDTCO ) THEN
EPA_NEI = EPA_WE_BF_CO(I,J)
ELSE IF ( N == IDTALK4 ) THEN
EPA_NEI = EPA_WE_BF_ALK4(I,J)
ELSE IF ( N == IDTACET ) THEN
EPA_NEI = EPA_WE_BF_ACET(I,J)
ELSE IF ( N == IDTMEK ) THEN
EPA_NEI = EPA_WE_BF_MEK(I,J)
ELSE IF ( N == IDTPRPE ) THEN
EPA_NEI = EPA_WE_BF_PRPE(I,J)
ELSE IF ( N == IDTC3H8 ) THEN
EPA_NEI = EPA_WE_BF_C3H8(I,J)
ELSE IF ( N == IDTCH2O ) THEN
EPA_NEI = EPA_WE_BF_CH2O(I,J)
ELSE IF ( N == IDTC2H6 ) THEN
EPA_NEI = EPA_WE_BF_C2H6(I,J)
ELSE IF ( N == IDTSO2 ) THEN
EPA_NEI = EPA_WE_BF_SO2(I,J)
ELSE IF ( N == IDTSO4 ) THEN
EPA_NEI = EPA_WE_BF_SO4(I,J)
ELSE IF ( N == IDTNH3 ) THEN
EPA_NEI = EPA_WE_BF_NH3(I,J)
ELSE
EPA_NEI = 0d0
ENDIF
ENDIF
! Return to calling program
END FUNCTION GET_EPA_BIOFUEL
!------------------------------------------------------------------------------
SUBROUTINE INIT_EPA_NEI 1,51
!
!******************************************************************************
! Subroutine INIT_EPA_NEI allocates and zeroes all module arrays.
! (rch, bmy, 11/10/04)
!
! NOTES:
!******************************************************************************
!
! References to F90 modules
USE ERROR_MOD
, ONLY : ALLOC_ERR
USE LOGICAL_MOD
, ONLY : LNEI99
# include "CMN_SIZE" ! Size parameters
! Local variables
INTEGER :: AS
!=================================================================
! INIT_EPA_NEI begins here!
!=================================================================
! Return if we LNEI99 = .FALSE.
IF ( .not. LNEI99 ) RETURN
! USA Mask
ALLOCATE( USA_MASK( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'USA_MASK' )
USA_MASK = 0d0
!-----------------------
! Anthro - weekday avg
!-----------------------
ALLOCATE( EPA_WD_AN_NOX( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_AN_NOX' )
EPA_WD_AN_NOX = 0e0
ALLOCATE( EPA_WD_AN_CO( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_AN_CO' )
EPA_WD_AN_CO = 0e0
ALLOCATE( EPA_WD_AN_ALK4( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_AN_ALK4' )
EPA_WD_AN_ALK4 = 0e0
ALLOCATE( EPA_WD_AN_ACET( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_AN_ACET' )
EPA_WD_AN_ACET = 0e0
ALLOCATE( EPA_WD_AN_MEK( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_AN_MEK' )
EPA_WD_AN_MEK = 0e0
ALLOCATE( EPA_WD_AN_PRPE( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_AN_PRPE' )
EPA_WD_AN_PRPE = 0e0
ALLOCATE( EPA_WD_AN_C2H6( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_AN_C2H6' )
EPA_WD_AN_C2H6 = 0e0
ALLOCATE( EPA_WD_AN_C3H8( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_AN_C3H8' )
EPA_WD_AN_C3H8 = 0e0
ALLOCATE( EPA_WD_AN_CH2O( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_AN_CH2O' )
EPA_WD_AN_CH2O = 0e0
ALLOCATE( EPA_WD_AN_NH3( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_AN_NH3' )
EPA_WD_AN_NH3 = 0e0
ALLOCATE( EPA_WD_AN_SO2( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_AN_SO2' )
EPA_WD_AN_SO2 = 0e0
ALLOCATE( EPA_WD_AN_SO4( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_AN_SO4' )
EPA_WD_AN_SO4 = 0e0
!-----------------------
! Anthro - weekend avg
!-----------------------
ALLOCATE( EPA_WE_AN_NOX( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_AN_NOX' )
EPA_WE_AN_NOX = 0e0
ALLOCATE( EPA_WE_AN_CO( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_AN_CO' )
EPA_WE_AN_CO = 0e0
ALLOCATE( EPA_WE_AN_ALK4( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_AN_ALK4' )
EPA_WE_AN_ALK4 = 0e0
ALLOCATE( EPA_WE_AN_ACET( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_AN_ACET' )
EPA_WE_AN_ACET = 0e0
ALLOCATE( EPA_WE_AN_MEK( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_AN_MEK' )
EPA_WE_AN_MEK = 0e0
ALLOCATE( EPA_WE_AN_PRPE( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_AN_PRPE' )
EPA_WE_AN_PRPE = 0e0
ALLOCATE( EPA_WE_AN_C2H6( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_AN_C2H6' )
EPA_WE_AN_C2H6 = 0e0
ALLOCATE( EPA_WE_AN_C3H8( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_AN_C3H8' )
EPA_WE_AN_C3H8 = 0e0
ALLOCATE( EPA_WE_AN_CH2O( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_AN_CH2O' )
EPA_WE_AN_CH2O = 0e0
ALLOCATE( EPA_WE_AN_NH3( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_AN_NH3' )
EPA_WE_AN_NH3 = 0e0
ALLOCATE( EPA_WE_AN_SO2( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_AN_SO2' )
EPA_WE_AN_SO2 = 0e0
ALLOCATE( EPA_WE_AN_SO4( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_AN_SO4' )
EPA_WE_AN_SO4 = 0e0
!-----------------------
! Biofuel - weekday avg
!-----------------------
ALLOCATE( EPA_WD_BF_NOX( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_BF_NOX' )
EPA_WD_BF_NOX = 0e0
ALLOCATE( EPA_WD_BF_CO( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_BF_CO' )
EPA_WD_BF_CO = 0e0
ALLOCATE( EPA_WD_BF_ALK4( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_BF_ALK4' )
EPA_WD_BF_ALK4 = 0e0
ALLOCATE( EPA_WD_BF_ACET( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_BF_ACET' )
EPA_WD_BF_ACET = 0e0
ALLOCATE( EPA_WD_BF_MEK( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_BF_MEK' )
EPA_WD_BF_MEK = 0e0
ALLOCATE( EPA_WD_BF_PRPE( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_BF_PRPE' )
EPA_WD_BF_PRPE = 0e0
ALLOCATE( EPA_WD_BF_C2H6( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_BF_C2H6' )
EPA_WD_BF_C2H6 = 0e0
ALLOCATE( EPA_WD_BF_C3H8( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_BF_C3H8' )
EPA_WD_BF_C3H8 = 0e0
ALLOCATE( EPA_WD_BF_CH2O( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_BF_CH2O' )
EPA_WD_BF_CH2O = 0e0
ALLOCATE( EPA_WD_BF_NH3( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_BF_NH3' )
EPA_WD_BF_NH3 = 0e0
ALLOCATE( EPA_WD_BF_SO2( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_BF_SO2' )
EPA_WD_BF_SO2 = 0e0
ALLOCATE( EPA_WD_BF_SO4( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WD_BF_SO4' )
EPA_WD_BF_SO4 = 0e0
!-----------------------
! Biofuel - weekend avg
!-----------------------
ALLOCATE( EPA_WE_BF_NOX( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_BF_NOX' )
EPA_WE_BF_NOX = 0e0
ALLOCATE( EPA_WE_BF_CO( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_BF_CO' )
EPA_WE_BF_CO = 0e0
ALLOCATE( EPA_WE_BF_ALK4( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_BF_ALK4' )
EPA_WE_BF_ALK4 = 0e0
ALLOCATE( EPA_WE_BF_ACET( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_BF_ACET' )
EPA_WE_BF_ACET = 0e0
ALLOCATE( EPA_WE_BF_MEK( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_BF_MEK' )
EPA_WE_BF_MEK = 0e0
ALLOCATE( EPA_WE_BF_PRPE( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_BF_PRPE' )
EPA_WE_BF_PRPE = 0e0
ALLOCATE( EPA_WE_BF_C2H6( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_BF_C2H6' )
EPA_WE_BF_C2H6 = 0e0
ALLOCATE( EPA_WE_BF_C3H8( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_BF_C3H8' )
EPA_WE_BF_C3H8 = 0e0
ALLOCATE( EPA_WE_BF_CH2O( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_BF_CH2O' )
EPA_WE_BF_CH2O = 0e0
ALLOCATE( EPA_WE_BF_NH3( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_BF_NH3' )
EPA_WE_BF_NH3 = 0e0
ALLOCATE( EPA_WE_BF_SO2( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_BF_SO2' )
EPA_WE_BF_SO2 = 0e0
ALLOCATE( EPA_WE_BF_SO4( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR
( 'EPA_WE_BF_SO4' )
EPA_WE_BF_SO4 = 0e0
! Return to calling program
END SUBROUTINE INIT_EPA_NEI
!------------------------------------------------------------------------------
SUBROUTINE CLEANUP_EPA_NEI 1
!
!******************************************************************************
! Subroutine CLEANUP_EPA_NEI deallocates all module arrays
! (rch, bmy, 11/10/04)
!
! NOTES:
!******************************************************************************
!
!=================================================================
! CLEANUP_EPA_NEI begins here!
!=================================================================
! USA mask
IF ( ALLOCATED( USA_MASK ) ) DEALLOCATE( USA_MASK )
! Fossil fuel -- weekday
IF ( ALLOCATED( EPA_WD_AN_NOX ) ) DEALLOCATE( EPA_WD_AN_NOX )
IF ( ALLOCATED( EPA_WD_AN_CO ) ) DEALLOCATE( EPA_WD_AN_CO )
IF ( ALLOCATED( EPA_WD_AN_ALK4 ) ) DEALLOCATE( EPA_WD_AN_ALK4 )
IF ( ALLOCATED( EPA_WD_AN_ACET ) ) DEALLOCATE( EPA_WD_AN_ACET )
IF ( ALLOCATED( EPA_WD_AN_MEK ) ) DEALLOCATE( EPA_WD_AN_MEK )
IF ( ALLOCATED( EPA_WD_AN_PRPE ) ) DEALLOCATE( EPA_WD_AN_PRPE )
IF ( ALLOCATED( EPA_WD_AN_C2H6 ) ) DEALLOCATE( EPA_WD_AN_C2H6 )
IF ( ALLOCATED( EPA_WD_AN_C3H8 ) ) DEALLOCATE( EPA_WD_AN_C3H8 )
IF ( ALLOCATED( EPA_WD_AN_C2H6 ) ) DEALLOCATE( EPA_WD_AN_C2H6 )
IF ( ALLOCATED( EPA_WD_AN_NH3 ) ) DEALLOCATE( EPA_WD_AN_NH3 )
IF ( ALLOCATED( EPA_WD_AN_SO2 ) ) DEALLOCATE( EPA_WD_AN_SO2 )
IF ( ALLOCATED( EPA_WD_AN_SO4 ) ) DEALLOCATE( EPA_WD_AN_SO4 )
! Fossil fuel -- weekend
IF ( ALLOCATED( EPA_WE_AN_NOX ) ) DEALLOCATE( EPA_WE_AN_NOX )
IF ( ALLOCATED( EPA_WE_AN_CO ) ) DEALLOCATE( EPA_WE_AN_CO )
IF ( ALLOCATED( EPA_WE_AN_ALK4 ) ) DEALLOCATE( EPA_WE_AN_ALK4 )
IF ( ALLOCATED( EPA_WE_AN_ACET ) ) DEALLOCATE( EPA_WE_AN_ACET )
IF ( ALLOCATED( EPA_WE_AN_MEK ) ) DEALLOCATE( EPA_WE_AN_MEK )
IF ( ALLOCATED( EPA_WE_AN_PRPE ) ) DEALLOCATE( EPA_WE_AN_PRPE )
IF ( ALLOCATED( EPA_WE_AN_C2H6 ) ) DEALLOCATE( EPA_WE_AN_C2H6 )
IF ( ALLOCATED( EPA_WE_AN_C3H8 ) ) DEALLOCATE( EPA_WE_AN_C3H8 )
IF ( ALLOCATED( EPA_WE_AN_C2H6 ) ) DEALLOCATE( EPA_WE_AN_C2H6 )
IF ( ALLOCATED( EPA_WE_AN_NH3 ) ) DEALLOCATE( EPA_WE_AN_NH3 )
IF ( ALLOCATED( EPA_WE_AN_SO2 ) ) DEALLOCATE( EPA_WE_AN_SO2 )
IF ( ALLOCATED( EPA_WE_AN_SO4 ) ) DEALLOCATE( EPA_WE_AN_SO4 )
! Biofuel -- weekday
IF ( ALLOCATED( EPA_WD_BF_NOX ) ) DEALLOCATE( EPA_WD_BF_NOX )
IF ( ALLOCATED( EPA_WD_BF_CO ) ) DEALLOCATE( EPA_WD_BF_CO )
IF ( ALLOCATED( EPA_WD_BF_ALK4 ) ) DEALLOCATE( EPA_WD_BF_ALK4 )
IF ( ALLOCATED( EPA_WD_BF_ACET ) ) DEALLOCATE( EPA_WD_BF_ACET )
IF ( ALLOCATED( EPA_WD_BF_MEK ) ) DEALLOCATE( EPA_WD_BF_MEK )
IF ( ALLOCATED( EPA_WD_BF_PRPE ) ) DEALLOCATE( EPA_WD_BF_PRPE )
IF ( ALLOCATED( EPA_WD_BF_C2H6 ) ) DEALLOCATE( EPA_WD_BF_C2H6 )
IF ( ALLOCATED( EPA_WD_BF_C3H8 ) ) DEALLOCATE( EPA_WD_BF_C3H8 )
IF ( ALLOCATED( EPA_WD_BF_C2H6 ) ) DEALLOCATE( EPA_WD_BF_C2H6 )
IF ( ALLOCATED( EPA_WD_BF_NH3 ) ) DEALLOCATE( EPA_WD_BF_NH3 )
IF ( ALLOCATED( EPA_WD_BF_SO2 ) ) DEALLOCATE( EPA_WD_BF_SO2 )
IF ( ALLOCATED( EPA_WD_BF_SO4 ) ) DEALLOCATE( EPA_WD_BF_SO4 )
! Biofuel -- weekend
IF ( ALLOCATED( EPA_WE_BF_NOX ) ) DEALLOCATE( EPA_WE_BF_NOX )
IF ( ALLOCATED( EPA_WE_BF_CO ) ) DEALLOCATE( EPA_WE_BF_CO )
IF ( ALLOCATED( EPA_WE_BF_ALK4 ) ) DEALLOCATE( EPA_WE_BF_ALK4 )
IF ( ALLOCATED( EPA_WE_BF_ACET ) ) DEALLOCATE( EPA_WE_BF_ACET )
IF ( ALLOCATED( EPA_WE_BF_MEK ) ) DEALLOCATE( EPA_WE_BF_MEK )
IF ( ALLOCATED( EPA_WE_BF_PRPE ) ) DEALLOCATE( EPA_WE_BF_PRPE )
IF ( ALLOCATED( EPA_WE_BF_C2H6 ) ) DEALLOCATE( EPA_WE_BF_C2H6 )
IF ( ALLOCATED( EPA_WE_BF_C3H8 ) ) DEALLOCATE( EPA_WE_BF_C3H8 )
IF ( ALLOCATED( EPA_WE_BF_C2H6 ) ) DEALLOCATE( EPA_WE_BF_C2H6 )
IF ( ALLOCATED( EPA_WE_BF_NH3 ) ) DEALLOCATE( EPA_WE_BF_NH3 )
IF ( ALLOCATED( EPA_WE_BF_SO2 ) ) DEALLOCATE( EPA_WE_BF_SO2 )
IF ( ALLOCATED( EPA_WE_BF_SO4 ) ) DEALLOCATE( EPA_WE_BF_SO4 )
! Return to calling program
END SUBROUTINE CLEANUP_EPA_NEI
!------------------------------------------------------------------------------
END MODULE EPA_NEI_MOD