Files
GEOS-Chem-adjoint-v35-note/code/nei2008_anthro_mod.F90
2018-08-28 00:46:26 -04:00

3179 lines
111 KiB
Fortran

!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !MODULE: nei2008_anthro_mod
!
! !DESCRIPTION: Module NEI2008\_ANTHRO\_MOD contains variables and routines to
! read the NEI2008 anthropogenic emissions.
!\\
!\\
! !INTERFACE:
!
MODULE NEI2008_ANTHRO_MOD
!
! !USES:
!
IMPLICIT NONE
# include "define.h"
# include "netcdf.inc"
PRIVATE
!
! !PUBLIC DATA MEMBERS:
!
REAL*8, PUBLIC, ALLOCATABLE :: USA_MASK(:,:)
!
! !PUBLIC MEMBER FUNCTIONS:
!
PUBLIC :: CLEANUP_NEI2008_ANTHRO
PUBLIC :: EMISS_NEI2008_ANTHRO
PUBLIC :: EMISS_NEI2008_ANTHRO_NATIVE
PUBLIC :: GET_NEI2008_ANTHRO
!--------------------------------------
! Leave for future use (bmy, 12/3/09)
!PUBLIC :: GET_NEI2005_MASK
!--------------------------------------
!
! !PRIVATE MEMBER FUNCTIONS:
! No longer need scaling except for future emissions
PRIVATE :: NEI2008_SCALE_FUTURE
PRIVATE :: INIT_NEI2008_ANTHRO
PRIVATE :: TOTAL_ANTHRO_TG
PRIVATE :: READ_NEI2008_MASK
!
! !REMARKS:
! (1)
!
! !REVISION HISTORY:
! 12 Feb 2013 - K. Travis - initial version, adapted from Aaron von Donkelaar's NEI05
! Note that NEI2008 does not have MEK, ACET, or C3H8
!------------------------------------------------------------------------------
!
! !PRIVATE TYPES:
!
! Arrays for emissions (lat/lon/lev/hrs)
!REAL*8, ALLOCATABLE, TARGET :: NOX(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: CO(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: NO(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: NO2(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: HNO2(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: SO2(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: NH3(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: ALD2(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: RCHO(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: BENZ(:,:,:,:)
!REAL*8, ALLOCATABLE, TARGET :: CH4(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: C2H6(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: PRPE(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: ALK4(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: TOLU(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: XYLE(:,:,:,:)
!REAL*8, ALLOCATABLE, TARGET :: C2H4(:,:,:,:)
!REAL*8, ALLOCATABLE, TARGET :: MOH(:,:,:,:)
!REAL*8, ALLOCATABLE, TARGET :: EOH(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: CH2O(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: OCPO(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: BCPO(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: SO4(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: NOX_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: CO_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: NO_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: NO2_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: HNO2_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: SO2_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: NH3_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: ALD2_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: RCHO_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: BENZ_WKEND(:,:,:,:)
!REAL*8, ALLOCATABLE, TARGET :: CH4_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: C2H6_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: PRPE_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: ALK4_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: TOLU_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: XYLE_WKEND(:,:,:,:)
!REAL*8, ALLOCATABLE, TARGET :: C2H4_WKEND(:,:,:,:)
!REAL*8, ALLOCATABLE, TARGET :: MOH_WKEND(:,:,:,:)
!REAL*8, ALLOCATABLE, TARGET :: EOH_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: CH2O_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: OCPO_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: BCPO_WKEND(:,:,:,:)
REAL*8, ALLOCATABLE, TARGET :: SO4_WKEND(:,:,:,:)
!
! !DEFINED PARAMETERS:
!
REAL*8, PARAMETER :: SEC_IN_YEAR = 86400d0 * 365.25d0
CONTAINS
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: get_nei2008_anthro
!
! !DESCRIPTION: Function GET\_NEI2008\_ANTHRO returns the NEI2008
! emission for GEOS-Chem grid box (I,J) and tracer N and hour IH.
! Emissions can be returned in units of [kg/s] or [molec/cm2/s].
!\\ (krt, 2/10/13), now need IH
!\\
! !INTERFACE:
!
FUNCTION GET_NEI2008_ANTHRO( I, J, L, IH, N, WEEKDAY ) RESULT( VALUE )
!
! !USES:
!
USE GRID_MOD, ONLY : GET_AREA_CM2
USE TRACER_MOD, ONLY : XNUMOL
USE TRACERID_MOD, ONLY : IDTCO, IDTNO,IDTNO2, IDTHNO2
USE TRACERID_MOD, ONLY : IDTSO2, IDTNH3
USE TRACERID_MOD, ONLY : IDTNOX
USE TRACERID_MOD, ONLY : IDTALD2, IDTRCHO, IDTC2H6
USE TRACERID_MOD, ONLY : IDTPRPE, IDTALK4, IDTC2H4
USE TRACERID_MOD, ONLY : IDTBENZ, IDTTOLU, IDTXYLE
USE TRACERID_MOD, ONLY : IDTSO4, IDTCH2O
USE TRACERID_MOD, ONLY : IDTOCPO, IDTBCPO
USE TRACERID_MOD, ONLY : IDTMOH, IDTEOH, IDTCH4
!
! !INPUT PARAMETERS:
!
! Longitude, latitude, hour, and tracer indices
INTEGER, INTENT(IN) :: I, J, L, IH, N
! OPTIONAL -- return emissions in [molec/cm2/s]
LOGICAL, INTENT(IN), OPTIONAL :: WEEKDAY
!
! !RETURN VALUE in molec/cm2/s
!
! Emissions output
REAL*8 :: VALUE
!
! !REVISION HISTORY:
! 12 Feb 2013 - K. Travis - initial version
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
!=================================================================
! GET_NEI2008_ANTHRO begins here!
!=================================================================
! Initialize
IF ( WEEKDAY ) THEN ! First IF
IF ( N == IDTCO ) THEN ! Second IF
! CO [molec/cm2/s]
VALUE = CO(I,J,L,IH)
ELSE IF ( N == IDTNO ) THEN
ELSE IF ( N == IDTNO ) THEN
! NOX[molec/cm2/s]
! NOX(I,J,L,IH) = NO(I,J,L,IH)!+NO2(I,J,L,IH)+HNO2(I,J,L,IH)
VALUE = NO(I,J,L,IH)
ELSE IF ( N == IDTNO2 ) THEN
! NO2[molec/cm2/s]
VALUE = NO2(I,J,L,IH)
ELSE IF ( N == IDTHNO2 ) THEN
! HNO2[molec/cm2/s]
VALUE = HNO2(I,J,L,IH)
!fp bckw compatibility
ELSE IF (N == IDTNOX ) THEN
VALUE = HNO2(I,J,L,IH) &
+ NO(I,J,L,IH) &
+ NO2(I,J,L,IH)
ELSE IF ( N == IDTSO2 ) THEN
! SO2 [molec/cm2/s]
VALUE = SO2(I,J,L,IH)
ELSE IF ( N == IDTNH3 ) THEN
! NH3 [molec/cm2/s]
VALUE = NH3(I,J,L,IH)
ELSE IF ( N == IDTALD2 ) THEN
! [molec/cm2/s]
VALUE = ALD2(I,J,L,IH)
ELSE IF ( N == IDTRCHO ) THEN
! [molec/cm2/s]
VALUE = RCHO(I,J,L,IH)
ELSE IF ( N == IDTBENZ ) THEN
! [molec/cm2/s]
VALUE = BENZ(I,J,L,IH)
ELSE IF ( N == IDTC2H6 ) THEN
! [molec/cm2/s]
VALUE = C2H6(I,J,L,IH)
ELSE IF ( N == IDTPRPE ) THEN
! [molec/cm2/s]
VALUE = PRPE(I,J,L,IH)
ELSE IF ( N == IDTALK4 ) THEN
! [molec/cm2/s]
VALUE = ALK4(I,J,L,IH)
ELSE IF ( N == IDTTOLU ) THEN
! [molec/cm2/s]
VALUE = TOLU(I,J,L,IH)
ELSE IF ( N == IDTXYLE ) THEN
! [molec/cm2/s]
VALUE = XYLE(I,J,L,IH)
!ELSE IF ( N == IDTC2H4 ) THEN
! [molec/cm2/s]
! VALUE = C2H4(I,J,L,IH)
ELSE IF ( N == IDTCH2O ) THEN
! [molec/cm2/s]
VALUE = CH2O(I,J,L,IH)
ELSE IF ( N == IDTOCPO ) THEN
! [g/cm2/s]
VALUE = OCPO(I,J,L,IH)
ELSE IF ( N == IDTBCPO ) THEN
! [g/cm2/s]
VALUE = BCPO(I,J,L,IH)
ELSE IF ( N == IDTSO4 ) THEN
! [g/cm2/s]
VALUE = SO4(I,J,L,IH)
! ELSE IF ( N == IDTEOH ) THEN
! [molec/cm2/s]
! VALUE = EOH(I,J,L,IH)
!ELSE IF ( N == IDTMOH ) THEN
! [molec/cm2/s]
! VALUE = MOH(I,J,L,IH)
!ELSE IF ( N == IDTCH4 ) THEN
! [molec/cm2/s]
! VALUE = CH4(I,J,L,IH)
ELSE
! Otherwise return a negative value to indicate
! that there are no NEI2008 emissions for tracer N
VALUE = -1d0
RETURN
ENDIF ! END Second IF
ELSE
IF ( N == IDTCO ) THEN ! NEW SECOND IF
! CO [molec/cm2/s]
VALUE = CO_WKEND(I,J,L,IH)
ELSE IF ( N == IDTNO ) THEN
! NO [molec/cm2/s]
!NO_WKEND(I,J,L,IH) = NO_WKEND(I,J,L,IH)+NO2_WKEND(I,J,L,IH) &
! + HNO2_WKEND(I,J,L,IH)
VALUE = NO_WKEND(I,J,L,IH)
ELSE IF ( N == IDTNO2 ) THEN
! NO2 [molec/cm2/s]
VALUE = NO2_WKEND(I,J,L,IH)
ELSE IF ( N == IDTHNO2 ) THEN
! HNO2 [molec/cm2/s]
VALUE = HNO2_WKEND(I,J,L,IH)
!fp bckw compatibility
ELSE IF (N == IDTNOX ) THEN
VALUE = HNO2_WKEND(I,J,L,IH) &
+ NO_WKEND(I,J,L,IH) &
+ NO2_WKEND(I,J,L,IH)
ELSE IF ( N == IDTSO2 ) THEN
! SO2 [molec/cm2/s]
VALUE = SO2_WKEND(I,J,L,IH)
ELSE IF ( N == IDTNH3 ) THEN
! NH3 [molec/cm2/s]
VALUE = NH3_WKEND(I,J,L,IH)
ELSE IF ( N == IDTALD2 ) THEN
! [molec/cm2/s]
VALUE = ALD2_WKEND(I,J,L,IH)
ELSE IF ( N == IDTRCHO ) THEN
! [molec/cm2/s]
VALUE = RCHO_WKEND(I,J,L,IH)
ELSE IF ( N == IDTBENZ ) THEN
! [molec/cm2/s]
VALUE = BENZ_WKEND(I,J,L,IH)
ELSE IF ( N == IDTC2H6 ) THEN
! [molec/cm2/s]
VALUE = C2H6_WKEND(I,J,L,IH)
ELSE IF ( N == IDTPRPE ) THEN
! [molec/cm2/s]
VALUE = PRPE_WKEND(I,J,L,IH)
ELSE IF ( N == IDTALK4 ) THEN
! [molec/cm2/s]
VALUE = ALK4_WKEND(I,J,L,IH)
ELSE IF ( N == IDTTOLU ) THEN
! [molec/cm2/s]
VALUE = TOLU_WKEND(I,J,L,IH)
ELSE IF ( N == IDTXYLE ) THEN
! [molec/cm2/s]
VALUE = XYLE_WKEND(I,J,L,IH)
! ELSE IF ( N == IDTC2H4 ) THEN
! [molec/cm2/s]
! VALUE = C2H4_WKEND(I,J,L,IH)
ELSE IF ( N == IDTCH2O ) THEN
! [molec/cm2/s]
VALUE = CH2O_WKEND(I,J,L,IH)
ELSE IF ( N == IDTOCPO ) THEN
! [g/cm2/s]
VALUE = OCPO_WKEND(I,J,L,IH)
ELSE IF ( N == IDTBCPO ) THEN
! [g/cm2/s]
VALUE = BCPO_WKEND(I,J,L,IH)
ELSE IF ( N == IDTSO4 ) THEN
! [g/cm2/s]
VALUE = SO4_WKEND(I,J,L,IH)
!ELSE IF ( N == IDTEOH ) THEN
! [molec/cm2/s]
! VALUE = EOH_WKEND(I,J,L,IH)
!ELSE IF ( N == IDTMOH ) THEN
! [molec/cm2/s]
! VALUE = MOH_WKEND(I,J,L,IH)
!ELSE IF ( N == IDTCH4 ) THEN
! [molec/cm2/s]
! VALUE = CH4_WKEND(I,J,L,IH)
ELSE
! Otherwise return a negative value to indicate
! that there are no NEI2008 emissions for tracer N
VALUE = -1d0
RETURN
ENDIF !END SECOND IF
ENDIF !END FIRST IF
! Return to calling program
END FUNCTION GET_NEI2008_ANTHRO
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: emiss_nei2008_anthro
!
! !DESCRIPTION: Subroutine EMISS\_NEI2008\_ANTHRO reads the NEI2008
! emission fields at 1x1 resolution and regrids them to the
! current model resolution.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE EMISS_NEI2008_ANTHRO
!
! !USES:
!
USE DIRECTORY_MOD, ONLY : DATA_DIR_1x1
USE DIRECTORY_MOD, ONLY : DATA_DIR
USE BPCH2_MOD, ONLY : READ_BPCH2
USE LOGICAL_MOD, ONLY : LFUTURE
USE REGRID_A2A_MOD, ONLY : DO_REGRID_A2A
USE TIME_MOD, ONLY : GET_YEAR, GET_MONTH, GET_DAY
USE TIME_MOD, ONLY : GET_DAY_OF_WEEK, GET_HOUR
!USE SCALE_ANTHRO_MOD, ONLY : GET_ANNUAL_SCALAR_1x1
USE TRACER_MOD, ONLY : ITS_A_FULLCHEM_SIM
USE TRACERID_MOD, ONLY : IDTCO, IDTNO, IDTNO2, IDTHNO2
USE TRACERID_MOD, ONLY : IDTNOX !fp
USE TRACERID_MOD, ONLY : IDTSO2, IDTNH3
USE TRACERID_MOD, ONLY : IDTALD2, IDTRCHO, IDTC2H6
USE TRACERID_MOD, ONLY : IDTPRPE, IDTALK4, IDTC2H4
USE TRACERID_MOD, ONLY : IDTBENZ, IDTTOLU, IDTXYLE
USE TRACERID_MOD, ONLY : IDTSO4, IDTCH2O
USE TRACERID_MOD, ONLY : IDTOCPO, IDTBCPO
USE TRACERID_MOD, ONLY : IDTCH4, IDTEOH, IDTMOH
USE m_netcdf_io_open
USE m_netcdf_io_read
USE m_netcdf_io_readattr
USE m_netcdf_io_close
USE m_netcdf_io_get_dimlen
# include "CMN_SIZE" ! Size parameters
!# include "CMN_O3" ! FSCALYRXS
!
! !REVISION HISTORY:
! 11 Feb 2013 - K. Travis - initial version
! --------------------------------------------------------
!
! !LOCAL VARIABLES:
!
LOGICAL, SAVE :: FIRST = .TRUE.
LOGICAL :: WEEKDAY
INTEGER :: I, J, IH, THISMONTH, THISYEAR
INTEGER :: SNo,KLM2, DAY_NUM, DOYT
INTEGER :: L, HH, KLM, SPECIES_ID(18), ID, MN
INTEGER :: OFFLINE_ID(15)
INTEGER :: st3d(3), ct3d(3), st4d(4)
INTEGER :: ct4da(4), ct4db(4)
INTEGER :: fId1, fId1b, fId1c, fId1d
INTEGER :: fId2, fId2b, fId2c, fId2d ! netCDF file ID
REAL*4 :: ARRAYWD(I1x1,J1x1,24)
REAL*4 :: ARRAYWE(I1x1,J1x1,24)
REAL*4 :: ARRAYWDPT(2,I1x1,J1x1,24)
REAL*4 :: ARRAYWEPT(2,I1x1,J1x1,24)
REAL*4 :: ARRAYWDPTN(3,I1x1,J1x1,24)
REAL*4 :: ARRAYWEPTN(3,I1x1,J1x1,24)
REAL*4 :: ARRAYWDC3(I1x1,J1x1,24)
REAL*4 :: ARRAYWEC3(I1x1,J1x1,24)
REAL*8, TARGET :: GEOS_1x1WD(I1x1,J1x1,3,24)
REAL*8, TARGET :: GEOS_1x1WE(I1x1,J1x1,3,24)
REAL*4 :: ScCO, ScNOx, ScPM10, ScPM25
REAL*4 :: ScVOC, ScNH3, ScSO2
CHARACTER(LEN=255) :: DATA_DIR_NEI
CHARACTER(LEN=255) :: FILENAMEWD, FILENAMEWE
CHARACTER(LEN=255) :: FILENAMEWDPT, FILENAMEWEPT
CHARACTER(LEN=255) :: FILENAMEWDPTN, FILENAMEWEPTN
CHARACTER(LEN=255) :: FILENAMEWDC3, FILENAMEWEC3
CHARACTER(LEN=4) :: SYEAR, SId
CHARACTER(LEN=5) :: SNAME
CHARACTER(LEN=1) :: SSMN
CHARACTER(LEN=2) :: SMN
CHARACTER(LEN=255) :: LLFILENAME
CHARACTER(LEN=3) :: TTMON
CHARACTER(LEN=24) :: SPCLIST(18)
REAL*8, POINTER :: OUTGRID(:,:) => NULL()
REAL*8, POINTER :: INGRID(:,:) => NULL()
!=================================================================
! EMISS_NEI2008_ANTHRO begins here!
!=================================================================
! First-time initialization
IF ( FIRST ) THEN
CALL INIT_NEI2008_ANTHRO
FIRST = .FALSE.
ENDIF
! Get emissions year
THISYEAR = GET_YEAR()
! Get month
THISMONTH = GET_MONTH()
#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )
SNAME = 'GEOS5'
#elif defined( GEOS_4 )
SNAME = 'GEOS4'
#endif
SPECIES_ID = (/ IDTCO, IDTNOX, IDTNOX, IDTNOX, &
IDTSO2, IDTNH3, IDTALD2, IDTRCHO, IDTC2H6, &
IDTPRPE, IDTALK4, IDTSO4, IDTCH2O, IDTOCPO, &
IDTBCPO, IDTTOLU, IDTXYLE, IDTBENZ/)!, IDTC2H4/)
!IDTMOH, IDTEOH, IDTCH4/)
SPCLIST = (/ 'CO', 'NO2', 'HNO2','NO', 'SO2', 'NH3', &
'ALD2','RCHO', 'C2H6', 'PRPE', 'ALK4', 'SO4', &
'CH2O', 'OC', 'BC','TOLU','XYLE', 'BENZ'/)!, &
!'C2H4'/)!,'MOH', 'EOH','CH4' /)
! ID #'s for that are not tied to IDTxxxx flags
! Needs to be updated for NOx partitioning
OFFLINE_ID = (/ 2, 1, 1, 1, 26, 30, 11, 12, &
21, 18, 5, 27, 20, 36, 37 /)
! File with lat/lon edges for regridding
LLFILENAME = TRIM( DATA_DIR_1x1) // &
'MAP_A2A_Regrid_201203/MAP_A2A_latlon_geos1x1.nc'
! DataDir for year
IF (THISYEAR .lt. 2010) THEN
! model ready
DATA_DIR_NEI = TRIM(DATA_DIR_1x1) // &
'NEI2008_201307/NEI08_2006_1x1_'
ELSEIF (THISYEAR .ge. 2010) THEN
! model ready
DATA_DIR_NEI = TRIM(DATA_DIR_1x1) // &
'NEI2008_201307/NEI08_2010_1x1_'
ENDIF
! Loop over species
DO KLM = 1, SIZE( SPCLIST )
IF ( ITS_A_FULLCHEM_SIM() ) THEN
SId = SPCLIST( KLM )
SNo = SPECIES_ID( KLM )
ELSE
SNo = OFFLINE_ID( KLM )
ENDIF
! Skip undefined tracers
IF ( SNo == 0 ) CYCLE
!
! GET NEI2008 FILES! 1 for wday, 1 for wkend
IF (THISMONTH == 1) THEN
TTMON = 'Jan'
ELSEIF (THISMONTH == 2) THEN
TTMON = 'Feb'
ELSEIF (THISMONTH == 3) THEN
TTMON = 'Mar'
ELSEIF (THISMONTH == 4) THEN
TTMON = 'Apr'
ELSEIF (THISMONTH == 5) THEN
TTMON = 'May'
ELSEIF (THISMONTH == 6) THEN
TTMON = 'Jun'
ELSEIF (THISMONTH == 7) THEN
TTMON = 'Jul'
ELSEIF (THISMONTH == 8) THEN
TTMON = 'Aug'
ELSEIF (THISMONTH == 9) THEN
TTMON = 'Sep'
ELSEIF (THISMONTH == 10) THEN
TTMON = 'Oct'
ELSEIF (THISMONTH == 11) THEN
TTMON = 'Nov'
ELSEIF (THISMONTH == 12) THEN
TTMON = 'Dec'
ENDIF
! model ready
FILENAMEWD = TRIM(DATA_DIR_NEI) // &
TRIM(TTMON) // '_wkday_regrid.nc'
FILENAMEWE = TRIM(DATA_DIR_NEI) // &
TRIM(TTMON) // '_wkend_regrid.nc'
! ptipm
FILENAMEWDPT = TRIM(DATA_DIR_NEI) // 'ptipm_' // &
TRIM(TTMON) // '_wkday_regrid.nc'
FILENAMEWEPT = TRIM(DATA_DIR_NEI) // 'ptipm_' // &
TRIM(TTMON) // '_wkend_regrid.nc'
! ptnonipm
FILENAMEWDPTN = TRIM(DATA_DIR_NEI) // 'ptnonipm_' // &
TRIM(TTMON) // '_wkday_regrid.nc'
FILENAMEWEPTN = TRIM(DATA_DIR_NEI) // 'ptnonipm_' // &
TRIM(TTMON) // '_wkend_regrid.nc'
! c3marine
FILENAMEWDC3 = TRIM(DATA_DIR_NEI) // 'c3marine_' // &
TRIM(TTMON) // '_wkday_regrid.nc'
FILENAMEWEC3= TRIM(DATA_DIR_NEI) // 'c3marine_' // &
TRIM(TTMON) // '_wkend_regrid.nc'
! Called once per month by emissions_mod.F
! Allocate start and count arrays
st3d = (/1, 1, 1/)
st4d = (/1, 1, 1, 1/)
ct3d = (/I1x1, J1x1, 24/)
ct4da = (/2, I1x1, J1x1, 24/)
ct4db= (/3, I1x1, J1x1, 24/)
WRITE( 6, 100 ) TRIM(FILENAMEWD ), SId
WRITE( 6, 100 ) TRIM(FILENAMEWE ), SId
WRITE( 6, 100 ) TRIM(FILENAMEWDPT ), SId
WRITE( 6, 100 ) TRIM(FILENAMEWDPTN ), SId
WRITE( 6, 100 ) TRIM(FILENAMEWDC3 ), Sid
WRITE( 6, 100 ) TRIM(FILENAMEWEPT ), SId
WRITE( 6, 100 ) TRIM(FILENAMEWEPTN ), SId
WRITE( 6, 100 ) TRIM(FILENAMEWEC3 ), SId
! Open and read model_ready data from netCDF file - wkday
CALL Ncop_Rd(fId1, TRIM(FILENAMEWD))
! Open and read ptipm data from netCDF file - wkday
CALL Ncop_Rd(fId1b, TRIM(FILENAMEWDPT))
! Open and read ptnonipm data from netCDF file - wkday
CALL Ncop_Rd(fId1c, TRIM(FILENAMEWDPTN))
! Open and read c3marine data from netCDF file - wkday
CALL Ncop_Rd(fId1d, TRIM(FILENAMEWDC3))
!----WKDAY-------
Call NcRd(ARRAYWD, fId1, TRIM(SId), &
st3d, ct3d ) !Start andCount lat/lon/time
Call NcRd(ARRAYWDPT, fId1b, TRIM(SId), &
st4d, ct4da ) !start and count lat/lon/time/lev
Call NcRd(ARRAYWDPTN, fId1c, TRIM(SId), &
st4d, ct4db ) !start and count lat/lon/time/lev
Call NcRd(ARRAYWDC3, fId1d, TRIM(SId), &
st3d, ct3d ) !Start and Count lat/lon/time
! Close netCDF file
CALL NcCl( fId1 )
CALL NcCl( fId1b )
CALL NcCl( fId1c )
CALL NcCl( fId1d )
! Cast to REAL*8 before regridding
GEOS_1x1WD(:,:,1,:) = ARRAYWD(:,:,:)+ARRAYWDPT(1,:,:,:) + &
ARRAYWDPTN(1,:,:,:)+ARRAYWDC3(:,:,:)
GEOS_1x1WD(:,:,2,:) = ARRAYWDPT(2,:,:,:) + ARRAYWDPTN(2,:,:,:)
GEOS_1x1WD(:,:,3,:) = ARRAYWDPTN(3,:,:,:) !molecules/cm2/s
!ELSE
! Open and read data from netCDF file - wkend
WRITE( 6, 100 ) TRIM( FILENAMEWE ), SId
CALL Ncop_Rd(fId2, TRIM(FILENAMEWE))
CALL Ncop_Rd(fId2b, TRIM(FILENAMEWEPT))
CALL Ncop_Rd(fId2c, TRIM(FILENAMEWEPTN))
CALL Ncop_Rd(fId2d, TRIM(FILENAMEWEC3))
! Get variable / SNo
!----WEEKEND-------
Call NcRd(ARRAYWE,fId2,TRIM(SId), &
(/1, 1, 1/), & !Start
(/ I1x1, J1x1, 24 /) ) !Count
Call NcRd(ARRAYWEPT, fId2b, TRIM(SId), &
(/ 1, 1, 1, 1 /), & !Start
(/ 2, I1x1, J1x1, 24 /) ) !Count lat/lon/time/lev
Call NcRd(ARRAYWEPTN, fId2c, TRIM(SId), &
(/ 1, 1, 1, 1 /), & !Start
(/ 3, I1x1, J1x1, 24 /) ) !Count lat/lon/time/lev
Call NcRd(ARRAYWEC3, fId2d, TRIM(SId), &
(/ 1, 1, 1 /), & !Start
(/ I1x1, J1x1, 24 /) ) !Count lat/lon/time
CALL NcCl( fId2 )
CALL NcCl( fId2b )
CALL NcCl( fId2c )
CALL NcCl( fId2d )
! Cast to REAL*8 before regridding
GEOS_1x1WE(:,:,1,:) = ARRAYWE(:,:,:)+ARRAYWEPT(1,:,:,:) + &
ARRAYWEPTN(1,:,:,:)+ARRAYWEC3(:,:,:)
GEOS_1x1WE(:,:,2,:) = ARRAYWEPT(2,:,:,:) + ARRAYWEPTN(2,:,:,:)
GEOS_1x1WE(:,:,3,:) = ARRAYWEPTN(3,:,:,:)
!ENDIF
100 FORMAT( ' - EMISS_NEI2008_ANTHRO_1x1: &
Reading : ', a , ' -> ', a )
! Initialize scaling factors
ScCO = 1.0
ScNOx = 1.0
ScPM10 = 1.0
ScPM25 = 1.0
ScSO2 = 1.0
ScVOC = 1.0
ScNH3 = 1.0
! Apply annual scalar factor.
! Using EPA's National Tier1 CAPS (http://www.epa.gov/ttnchie1/trends/)
IF (THISYEAR .eq. 2007) THEN ! scale based on 2006
ScCO = 0.939
ScNOx = 0.966
ScPM10 = 1.001
ScSO2 = 0.887
ScPM25 = 1.016
ScVOC = 0.996
ScNH3 = 1.018
ELSEIF (THISYEAR .eq. 2008) THEN ! scale based on 2006
ScCO = 0.877
ScNOx = 0.933
ScPM10 = 1.003
ScPM25 = 1.092
ScSO2 = 0.775
ScVOC = 0.933
ScNH3 = 1.035
ELSEIF (THISYEAR .eq. 2009) THEN ! scale based on 2006
ScCO = 0.854
ScNOx = 0.850
ScPM10 = 1.002
ScPM25 = 1.088
ScSO2 = 0.619
ScVOC = 0.919
ScNH3 = 1.033
ELSEIF (THISYEAR .eq. 2011) THEN ! scale based on 2010
ScCO = 0.916
ScNOx = 0.897
ScPM10 = 0.998
ScPM25 = 0.990
ScSO2 = 0.905
ScVOC = 0.955
ScNH3 = 0.996
ELSEIF (THISYEAR .ge. 2012) THEN ! scale based on 2010
ScCO = 0.820
ScNOx = 0.773
ScPM10 = 0.995
ScPM25 = 0.979
ScSO2 = 0.725
ScVOC = 0.905
ScNH3 = 0.991
ENDIF
DO L=1,3
DO HH=1,24 ! check on whether this is correct
SELECT CASE ( SId)
CASE ('CO')
GEOS_1x1WD(:,:,L,HH) = GEOS_1x1WD(:,:,L,HH) * ScCO
GEOS_1x1WE(:,:,L,HH) = GEOS_1x1WE(:,:,L,HH) * ScCO
CASE ('NO','NO2','HNO2')
GEOS_1x1WD(:,:,L,HH) = GEOS_1x1WD(:,:,L,HH) * ScNOx
GEOS_1x1WE(:,:,L,HH) = GEOS_1x1WE(:,:,L,HH) * ScNOx
CASE ('BENZ','TOLU','XYLE','RCHO','CH2O','ALD2','C2H6','PRPE','ALK4')
GEOS_1x1WD(:,:,L,HH) = GEOS_1x1WD(:,:,L,HH) * ScVOC
GEOS_1x1WE(:,:,L,HH) = GEOS_1x1WE(:,:,L,HH) * ScVOC
CASE('BC','OC')
GEOS_1x1WD(:,:,L,HH) = GEOS_1x1WD(:,:,L,HH) * ScPM25
GEOS_1x1WE(:,:,L,HH) = GEOS_1x1WE(:,:,L,HH) * ScPM25
CASE('SO2')
GEOS_1x1WD(:,:,L,HH) = GEOS_1x1WD(:,:,L,HH) * ScSO2
GEOS_1x1WE(:,:,L,HH) = GEOS_1x1WE(:,:,L,HH) * ScSO2
CASE ('NH3')
GEOS_1x1WD(:,:,L,HH) = GEOS_1x1WD(:,:,L,HH) * ScNH3
GEOS_1x1WE(:,:,L,HH) = GEOS_1x1WE(:,:,L,HH) * ScNH3
END SELECT
ENDDO
ENDDO
! Regrid from GEOS 1x1 --> current model resolution [molec/cm2/2]
IF ( SId .eq. 'CO' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! CO
!-----------------
! Point to array slices
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => CO(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!CO(:,:,L,HH) = CO(:,:,L,HH) * USA_MASK(:,:)
! should still be molecules/cm2/s
ENDDO
ENDDO
ELSEIF ( SId .eq. 'NO' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! NO
!-----------------
! Point to array slices
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => NO(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!NO(:,:,L,HH) = NO(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( TRIM(SId) .eq. 'NO2' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! NO2
!-----------------
! Point to array slices
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => NO2(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!NO2(:,:,L,HH) = NO2(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( TRIM(SId) .eq. 'HNO2' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! HNO2
!-----------------
! Point to array slices
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => HNO2(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
! HNO2(:,:,L,HH) = HNO2(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( TRIM(SId) .eq. 'SO2') THEN
DO L=1,3
DO HH=1,24
!-----------------
! SO2
!-----------------
! Point to array slices
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => SO2(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
! SO2(:,:,L,HH) = SO2(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( TRIM(SId) .eq. 'NH3' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! NH3
!-----------------
! Point to array slices
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => NH3(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!NH3(:,:,L,HH) = NH3(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( TRIM(SId) .eq. 'ALD2' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! ALD2
!-----------------
! Point to array slices
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => ALD2(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!ALD2(:,:,L,HH) = ALD2(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( TRIM(SId) == 'RCHO' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! RCHO
!-----------------
! Point to array slices
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => RCHO(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!RCHO(:,:,L,HH) = RCHO(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'BENZ' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! BENZ
!-----------------
! Point to array slices
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => BENZ(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!BENZ(:,:,L,HH) = BENZ(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'C2H6' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! C2H6
!-----------------
! Point to array slices
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => C2H6(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!C2H6(:,:,L,HH) = C2H6(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'PRPE' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! PRPE
!-----------------
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => PRPE(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!PRPE(:,:,L,HH) = PRPE(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'ALK4' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! ALK4
!-----------------
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => ALK4(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!ALK4(:,:,L,HH) = ALK4(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'TOLU' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! TOLU
!-----------------
! Point to array slices
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => TOLU(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!TOLU(:,:,L,HH) = TOLU(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'XYLE' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! XYLE
!-----------------
! Point to array slices
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => XYLE(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!XYLE(:,:,L,HH) = XYLE(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
! ELSE IF ( TRIM(SId) == 'C2H4' ) THEN
! DO L=1,3
! DO HH=1,24
!-----------------
! C2H4
!-----------------
! INGRID => GEOS_1x1WD(:,:,L,HH)
! OUTGRID => C2H4(:,:,L,HH)
! Regrid
! CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
! INGRID, OUTGRID, IS_MASS=0,&
! netCDF=.TRUE. )
! Free pointers
! NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!C2H4(:,:,L,HH) = C2H4(:,:,L,HH) * USA_MASK(:,:)
! ENDDO
!ENDDO
ELSE IF ( TRIM(SId) == 'CH2O' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! CH2O
!-----------------
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => CH2O(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!CH2O(:,:,L,HH) = CH2O(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'BC' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! BCPO
!-----------------
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => BCPO(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!BCPO(:,:,L,HH) = BCPO(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'OC' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! OCPO
!-----------------
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => OCPO(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!OCPO(:,:,L,HH) = OCPO(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'SO4' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! SO4
!-----------------
INGRID => GEOS_1x1WD(:,:,L,HH)
OUTGRID => SO4(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!SO4(:,:,L,HH) = SO4(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
!ELSE IF ( TRIM(SId) == 'CH4' ) THEN
! DO L=1,3
! DO HH=1,24
!-----------------
! CH4
!-----------------
! INGRID => GEOS_1x1WD(:,:,L,HH)
! OUTGRID => CH4(:,:,L,HH)
! Regrid
! CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
! INGRID, OUTGRID, IS_MASS=0,&
! netCDF=.TRUE. )
! Free pointers
! NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
! CH4(:,:,L,HH) = CH4(:,:,L,HH) * USA_MASK(:,:)
! ENDDO
!ENDDO
! ELSE IF ( TRIM(SId) == 'EOH' ) THEN
!-----------------
! EOH
!-----------------
! DO L=1,3
! DO HH=1,24
! INGRID => GEOS_1x1WD(:,:,L,HH)
! OUTGRID => EOH(:,:,L,HH)
! Regrid
! CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
! INGRID, OUTGRID, IS_MASS=0,&
! netCDF=.TRUE. )
! Free pointers
!NULLIFY( INGRID, OUTGRID )
!ENDDO
!ENDDO
!ELSE IF ( TRIM(SId) == 'MOH' ) THEN
! DO L=1,3
! DO HH=1,24
!-----------------
! MOH
!-----------------
! INGRID => GEOS_1x1WD(:,:,L,HH)
! OUTGRID => MOH(:,:,L,HH)
! Regrid
!CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
! INGRID, OUTGRID, IS_MASS=0,&
! netCDF=.TRUE. )
! Free pointers
!NULLIFY( INGRID, OUTGRID )
!ENDDO
!ENDDO
ENDIF ! END loop through weekdays
! BEGIN WEEKEND
!ELSE
IF ( SId .eq. 'CO' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! CO_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => CO_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!CO_WKEND(:,:,L,HH) = CO_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( SId .eq. 'NO' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! NO_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => NO_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!NO_WKEND(:,:,L,HH) = NO_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( TRIM(SId) .eq. 'NO2' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! NO2_WKEND
!-----------------
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => NO2_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!NO2_WKEND(:,:,L,HH) = NO2_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( TRIM(SId) .eq. 'HNO2' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! HNO2_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => HNO2_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!HNO2_WKEND(:,:,L,HH) = HNO2_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( TRIM(SId) .eq. 'SO2') THEN
DO L=1,3
DO HH=1,24
!-----------------
! SO2_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => SO2_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!SO2_WKEND(:,:,L,HH) = SO2_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( TRIM(SId) .eq. 'NH3' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! NH3_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => NH3_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!NH3_WKEND(:,:,L,HH) = NH3_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( TRIM(SId) .eq. 'ALD2' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! ALD2_WKEND
!-----------------
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => ALD2_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!ALD2_WKEND(:,:,L,HH) = ALD2_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSEIF ( TRIM(SId) == 'RCHO' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! RCHO_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => RCHO_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!RCHO_WKEND(:,:,L,HH) = RCHO_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'BENZ' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! BENZ_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => BENZ_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!BENZ_WKEND(:,:,L,HH) = BENZ_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'C2H6' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! C2H6_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => C2H6_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!C2H6_WKEND(:,:,L,HH) = C2H6_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'PRPE' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! PRPE_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => PRPE_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!PRPE_WKEND(:,:,L,HH) = PRPE_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'ALK4' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! ALK4_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => ALK4_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!ALK4_WKEND(:,:,L,HH) = ALK4_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'TOLU' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! TOLU_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => TOLU_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!TOLU_WKEND(:,:,L,HH) = TOLU_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'XYLE' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! XYLE_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => XYLE_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
! XYLE_WKEND(:,:,L,HH) = XYLE_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
!ELSE IF ( TRIM(SId) == 'C2H4' ) THEN
! DO L=1,3
! DO HH=1,24
!-----------------
! C2H4_WKEND
!-----------------
! Point to array slices
! INGRID => GEOS_1x1WE(:,:,L,HH)
! OUTGRID => C2H4_WKEND(:,:,L,HH)
! Regrid
! CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
! INGRID, OUTGRID, IS_MASS=0,&
! netCDF=.TRUE. )
! Free pointers
! NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
! C2H4_WKEND(:,:,L,HH) = C2H4_WKEND(:,:,L,HH) * USA_MASK(:,:)
! ENDDO
!ENDDO
ELSE IF ( TRIM(SId) == 'CH2O' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! CH2O_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => CH2O_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!CH2O_WKEND(:,:,L,HH) = CH2O_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'BC' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! BCPO_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => BCPO_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!BCPO_WKEND(:,:,L,HH) = BCPO_WKEND(:,:,L,HH) * USA_MASK(:,:)
!BCPO(:,:,L,HH) = BCPO(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'OC' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! OCPO_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => OCPO_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
INGRID, OUTGRID, IS_MASS=0,&
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!OCPO_WKEND(:,:,L,HH) = OCPO_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
ELSE IF ( TRIM(SId) == 'SO4' ) THEN
DO L=1,3
DO HH=1,24
!-----------------
! SO4_WKEND
!-----------------
! Point to array slices
INGRID => GEOS_1x1WE(:,:,L,HH)
OUTGRID => SO4_WKEND(:,:,L,HH)
! Regrid
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
!-----------------
! Apply masks
!-----------------
!SO4_WKEND(:,:,L,HH) = SO4_WKEND(:,:,L,HH) * USA_MASK(:,:)
ENDDO
ENDDO
!!$ ELSE IF ( TRIM(SId) == 'CH4' ) THEN
!!$ DO L=1,3
!!$ DO HH=1,24
!!$ !-----------------
!!$ ! CH4_WKEND
!!$ !-----------------
!!$
!!$ ! Point to array slices
!!$ INGRID => GEOS_1x1WE(:,:,L,HH)
!!$ OUTGRID => CH4_WKEND(:,:,L,HH)
!!$
!!$ ! Regrid
!!$ CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
!!$ INGRID, OUTGRID, IS_MASS=0,&
!!$ netCDF=.TRUE. )
!!$
!!$ ! Free pointers
!!$ NULLIFY( INGRID, OUTGRID )
!!$
!!$ !-----------------
!!$ ! Apply masks
!!$ !-----------------
!!$ CH4_WKEND(:,:,L,HH) = CH4_WKEND(:,:,L,HH) * USA_MASK(:,:)
!!$ ENDDO
!!$ ENDDO
!!$ ELSE IF ( TRIM(SId) == 'EOH' ) THEN
!!$ DO L=1,3
!!$ DO HH=1,24
!!$ !-----------------
!!$ ! EOH_WKEND
!!$ !-----------------
!!$
!!$ ! Point to array slices
!!$ INGRID => GEOS_1x1WE(:,:,L,HH)
!!$ OUTGRID => EOH_WKEND(:,:,L,HH)
!!$
!!$ ! Regrid
!!$ CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
!!$ INGRID, OUTGRID, IS_MASS=0,&
!!$ netCDF=.TRUE. )
!!$
!!$ ! Free pointers
!!$ NULLIFY( INGRID, OUTGRID )
!!$ !-----------------
!!$ ! Apply masks
!!$ !-----------------
!!$ EOH_WKEND(:,:,L,HH) = EOH_WKEND(:,:,L,HH) * USA_MASK(:,:)
!!$ ENDDO
!!$ ENDDO
!!$ ELSE IF ( TRIM(SId) == 'MOH' ) THEN
!!$ DO L=1,3
!!$ DO HH=1,24
!!$ !-----------------
!!$ ! MOH_WKEND
!!$ !-----------------
!!$
!!$ ! Point to array slices
!!$ INGRID => GEOS_1x1WE(:,:,L,HH)
!!$ OUTGRID => MOH_WKEND(:,:,L,HH)
!!$
!!$ ! Regrid
!!$ CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1,&
!!$ INGRID, OUTGRID, IS_MASS=0,&
!!$ netCDF=.TRUE. )
!!$
!!$ ! Free pointers
!!$ NULLIFY( INGRID, OUTGRID )
!!$ !-----------------
!!$ ! Apply masks
!!$ !-----------------
!!$ MOH_WKEND(:,:,L,HH) = MOH_WKEND(:,:,L,HH) * USA_MASK(:,:)
!!$ ENDDO
!!$ ENDDO
ENDIF ! END LOOPTHROUGHS
ENDDO
!--------------------------
! Compute future emissions
!--------------------------
IF ( LFUTURE ) THEN
CALL NEI2008_SCALE_FUTURE
ENDIF
!--------------------------
! Print emission totals for the day
!--------------------------
CALL TOTAL_ANTHRO_Tg( THISMONTH )
! Return to calling program
END SUBROUTINE EMISS_NEI2008_ANTHRO
!EOC
!------------------------------------------------------------------------------
! Adopted from NEI05 from
! Dalhousie University Atmospheric Compositional Analysis Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: emiss_nei2008_anthro_native
!
! !DESCRIPTION: Subroutine EMISS\_NEI2008\_ANTHRO reads the NEI2008
! emission fields at 1/2 x 2.3 or .25 x 0.3125 resolution
! Designed to work with IIPAR and JJPAR as long as emissions are on the
! same nested grid.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE EMISS_NEI2008_ANTHRO_NATIVE
!
! !USES:
!
USE DIRECTORY_MOD, ONLY : DATA_DIR
USE LOGICAL_MOD, ONLY : LFUTURE
USE TIME_MOD, ONLY : GET_YEAR, GET_MONTH, GET_DAY
USE TIME_MOD, ONLY : GET_DAY_OF_WEEK, GET_HOUR
!USE SCALE_ANTHRO_MOD, ONLY : GET_ANNUAL_SCALAR_05x0666_NESTED
USE TRACER_MOD, ONLY : ITS_A_FULLCHEM_SIM
USE TRACERID_MOD, ONLY : IDTCO, IDTNO, IDTHNO2, IDTNO2
USE TRACERID_MOD, ONLY : IDTSO2, IDTNH3, IDTNOX
USE TRACERID_MOD, ONLY : IDTALD2, IDTRCHO, IDTC2H6
USE TRACERID_MOD, ONLY : IDTPRPE, IDTALK4!, IDTC2H4
USE TRACERID_MOD, ONLY : IDTBENZ, IDTTOLU, IDTXYLE
USE TRACERID_MOD, ONLY : IDTSO4, IDTCH2O
USE TRACERID_MOD, ONLY : IDTOCPO, IDTBCPO
!USE TRACERID_MOD, ONLY : IDTEOH, IDTMOH, IDTCH4
USE m_netcdf_io_open
USE m_netcdf_io_read
USE m_netcdf_io_readattr
USE m_netcdf_io_close
USE m_netcdf_io_get_dimlen
# include "CMN_SIZE" ! Size parameters
!# include "CMN_O3" ! FSCALYR
!
! !REVISION HISTORY:
! 16 Feb 2013 - K. Travis - initial version
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
LOGICAL, SAVE :: FIRST = .TRUE.
INTEGER :: I, J, IH, THISYEAR, THISMONTH
INTEGER :: WEEKDAY, DAY_NUM, DOYT
INTEGER :: L, HH, KLM, SPECIES_ID(18), ID, MN
INTEGER :: OFFLINE_ID(15), SNo
INTEGER :: fId1, fId1b, fId1c, fId1d
INTEGER :: fId2, fId2b, fId2c, fId2d ! netCDF file ID
REAL*4 :: ARRAYWD(IIPAR,JJPAR,24)
REAL*4 :: ARRAYWE(IIPAR,JJPAR,24)
REAL*4 :: ARRAYWDPT(2,IIPAR,JJPAR,24)
REAL*4 :: ARRAYWEPT(2,IIPAR,JJPAR,24)
REAL*4 :: ARRAYWDPTN(3,IIPAR,JJPAR,24)
REAL*4 :: ARRAYWEPTN(3,IIPAR,JJPAR,24)
REAL*4 :: ARRAYWDC3(IIPAR,JJPAR,24)
REAL*4 :: ARRAYWEC3(IIPAR,JJPAR,24)
REAL*8 :: GEOS_NATIVEWD(IIPAR,JJPAR,3,24)
REAL*8 :: GEOS_NATIVEWE(IIPAR,JJPAR,3,24)
REAL*4 :: ScCO, ScNOx, ScSO2, ScNH3, ScPM10
REAL*4 :: ScPM25, ScVOC
CHARACTER(LEN=255) :: DATA_DIR_NEI
CHARACTER(LEN=255) :: FILENAMEWD, FILENAMEWE
CHARACTER(LEN=255) :: FILENAMEWDPT, FILENAMEWEPT
CHARACTER(LEN=255) :: FILENAMEWDPTN, FILENAMEWEPTN
CHARACTER(LEN=255) :: FILENAMEWDC3, FILENAMEWEC3
CHARACTER(LEN=24) :: SPCLIST(18)
CHARACTER(LEN=4) :: SYEAR, SId
CHARACTER(LEN=5) :: SNAME
CHARACTER(LEN=1) :: SSMN
CHARACTER(LEN=2) :: SMN
CHARACTER(LEN=3) :: TTMON
!fp (for SD domain)
#if defined( NESTED_SD )
INTEGER, PARAMETER :: ini_lon = 22
INTEGER, PARAMETER :: ini_lat = 7
#else
INTEGER, PARAMETER :: ini_lon = 1
INTEGER, PARAMETER :: ini_lat = 1
#endif
!=================================================================
! EMISS_NEI2008_ANTHRO begins here!
!=================================================================
! First-time initialization
IF ( FIRST ) THEN
CALL INIT_NEI2008_ANTHRO
FIRST = .FALSE.
ENDIF
! Get emissions year
THISYEAR = GET_YEAR()
! Get month
THISMONTH = GET_MONTH()
WRITE(*,*) 'MONTH', THISMONTH
#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )
SNAME = 'GEOS5'
#elif defined( GEOS_4 )
SNAME = 'GEOS4'
#endif
SPECIES_ID = (/ IDTCO, IDTNOX, IDTNOX, IDTNOX, &
IDTSO2, IDTNH3, IDTALD2, IDTRCHO, IDTC2H6, &
IDTPRPE, IDTALK4, IDTSO4, IDTCH2O, IDTOCPO, &
IDTBCPO, IDTTOLU, IDTXYLE, IDTBENZ/)!, IDTC2H4/)
! IDTMOH, IDTEOH,IDTCH4/)
SPCLIST = (/ 'CO', 'NO', 'NO2', 'HNO2', 'SO2', 'NH3', &
'ALD2','RCHO', 'C2H6', 'PRPE', 'ALK4', 'SO4', &
'CH2O', 'OC', 'BC','TOLU','XYLE', 'BENZ'/)!, &
! 'C2H4'/)!,'MOH', 'EOH','CH4' /)
! ID #'s for that are not tied to IDTxxxx flags
OFFLINE_ID = (/ 2, 1, 64, 66, 26, 30, 11, 12, &
21, 18, 5, 27, 20, 36, 37 /)
! Fabien's fix (hml, 10/14/13)
#if defined( GRID05x0666 )
! DataDir for year
IF (THISYEAR .lt. 2010 ) THEN
!force 2010 (fp)
THISYEAR = 2010
ENDIF
DATA_DIR_NEI = TRIM(DATA_DIR) // 'NEI2008_201307/NEI08_2010_05x667_'
! model ready
! DATA_DIR_NEI = TRIM(DATA_DIR) // 'NEI2008_201307/NEI08_2006_05x667_'
! ELSEIF (THISYEAR .ge. 2010) THEN
! ! model ready
! DATA_DIR_NEI = TRIM(DATA_DIR) // 'NEI2008_201307/NEI08_2010_05x667_'
! ENDIF
#elif defined( GRID025x03125)
! DataDir for year
! model ready
DATA_DIR_NEI = '/as/data/geos/GEOS_0.25x0.3125_NA/' // &
'NEI2008_201307/NEI08_2010_25x3125_'
WRITE(*,*) 'DATA ONLY AVAILABLE AT 25x3125 FOR 2010'
IF (THISYEAR .lt. 2010) THEN
THISYEAR = 2010
ENDIF
#endif
! Loop over species
DO KLM = 1, SIZE( SPECIES_ID )
IF ( ITS_A_FULLCHEM_SIM() ) THEN
SId = SPCLIST( KLM )
SNo = SPECIES_ID( KLM )
ELSE
SNo = OFFLINE_ID( KLM )
ENDIF
! Skip undefined tracers
IF ( SNo == 0 ) CYCLE
! GET NEI2008 FILES! 1 for wday, 1 for wkend
IF (THISMONTH == 1) THEN
TTMON = 'Jan'
ELSEIF (THISMONTH == 2) THEN
TTMON = 'Feb'
ELSEIF (THISMONTH == 3) THEN
TTMON = 'Mar'
ELSEIF (THISMONTH == 4) THEN
TTMON = 'Apr'
ELSEIF (THISMONTH == 5) THEN
TTMON = 'May'
ELSEIF (THISMONTH == 6) THEN
TTMON = 'Jun'
ELSEIF (THISMONTH == 7) THEN
TTMON = 'Jul'
ELSEIF (THISMONTH == 8) THEN
TTMON = 'Aug'
ELSEIF (THISMONTH == 9) THEN
TTMON = 'Sep'
ELSEIF (THISMONTH == 10) THEN
TTMON = 'Oct'
ELSEIF (THISMONTH == 11) THEN
TTMON = 'Nov'
ELSEIF (THISMONTH == 12) THEN
TTMON = 'Dec'
ENDIF
! model ready
FILENAMEWD = TRIM(DATA_DIR_NEI) // &
TRIM(TTMON) // '_wkday_regrid.nc'
FILENAMEWE = TRIM(DATA_DIR_NEI) // &
TRIM(TTMON) // '_wkend_regrid.nc'
! ptipm
FILENAMEWDPT = TRIM(DATA_DIR_NEI) // 'ptipm_' // &
TRIM(TTMON) // '_wkday_regrid.nc'
FILENAMEWEPT = TRIM(DATA_DIR_NEI) // 'ptipm_' // &
TRIM(TTMON) // '_wkend_regrid.nc'
! ptnonipm
FILENAMEWDPTN = TRIM(DATA_DIR_NEI) // 'ptnonipm_' // &
TRIM(TTMON) // '_wkday_regrid.nc'
FILENAMEWEPTN = TRIM(DATA_DIR_NEI) // 'ptnonipm_' // &
TRIM(TTMON) // '_wkend_regrid.nc'
! c3marine
FILENAMEWDC3 = TRIM(DATA_DIR_NEI) // 'c3marine_' // &
TRIM(TTMON) // '_wkday_regrid.nc'
FILENAMEWEC3= TRIM(DATA_DIR_NEI) // 'c3marine_' // &
TRIM(TTMON) // '_wkend_regrid.nc'
! Echo info
WRITE( 6, 100 ) TRIM( FILENAMEWD )
WRITE( 6, 100 ) TRIM( FILENAMEWE )
100 FORMAT( ' - EMISS_NEI2008_ANTHRO_NATIVE: &
Reading ', a )
! Called once per month by emissions_mod.F
! Open and read model_ready data from netCDF file - wkday
CALL Ncop_Rd(fId1, TRIM(FILENAMEWD))
! Open and read ptipm data from netCDF file - wkday
CALL Ncop_Rd(fId1b, TRIM(FILENAMEWDPT))
! Open and read ptnonipm data from netCDF file - wkday
CALL Ncop_Rd(fId1c, TRIM(FILENAMEWDPTN))
! Open and read c3marine data from netCDF file - wkday
CALL Ncop_Rd(fId1d, TRIM(FILENAMEWDC3))
!----WKDAY-------
Call NcRd(ARRAYWD, fId1, TRIM(SId), &
(/ ini_lon, ini_lat, 1 /), & !Start
(/ IIPAR, JJPAR, 24 /) ) !Count lat/lon/time
Call NcRd(ARRAYWDPT, fId1b, TRIM(SId), &
(/ 1, ini_lon, ini_lat, 1 /), & !Start
(/ 2, IIPAR, JJPAR, 24 /) ) !Count lat/lon/time/lev
Call NcRd(ARRAYWDPTN, fId1c, TRIM(SId), &
(/ 1, ini_lon, ini_lat, 1 /), & !Start
(/ 3, IIPAR, JJPAR, 24 /) ) !Count lat/lon/time/lev
Call NcRd(ARRAYWDC3, fId1d, TRIM(SId), &
(/ ini_lon, ini_lat, 1 /), & !Start
(/ IIPAR, JJPAR, 24 /) ) !Count lat/lon/time
! Close netCDF file
CALL NcCl( fId1 )
CALL NcCl( fId1b )
CALL NcCl( fId1c )
CALL NcCl( fId1d )
! Cast to REAL*8 before regridding
GEOS_NATIVEWD(:,:,1,:) = ARRAYWD(:,:,:)+ARRAYWDPT(1,:,:,:) + &
ARRAYWDPTN(1,:,:,:)+ARRAYWDC3(:,:,:)
GEOS_NATIVEWD(:,:,2,:) = ARRAYWDPT(2,:,:,:) + ARRAYWDPTN(2,:,:,:)
GEOS_NATIVEWD(:,:,3,:) = ARRAYWDPTN(3,:,:,:)
! ELSE
! Open and read data from netCDF file - wkend
CALL Ncop_Rd(fId2, TRIM(FILENAMEWE))
CALL Ncop_Rd(fId2b, TRIM(FILENAMEWEPT))
CALL Ncop_Rd(fId2c, TRIM(FILENAMEWEPTN))
CALL Ncop_Rd(fId2d, TRIM(FILENAMEWEC3))
! Get variable / SNo
!----WEEKEND-------
Call NcRd(ARRAYWE,fId2,TRIM(SId), &
(/ini_lon, ini_lat, 1/), & !Start
(/IIPAR, JJPAR, 24/) ) !Count
Call NcRd(ARRAYWEPT, fId2b, TRIM(SId), &
(/ 1, ini_lon, ini_lat, 1 /), & !Start
(/ 2, IIPAR, JJPAR, 24 /) ) !Count lat/lon/time/lev
Call NcRd(ARRAYWEPTN, fId2c, TRIM(SId), &
(/ 1, ini_lon, ini_lat, 1 /), & !Start
(/ 3, IIPAR, JJPAR, 24 /) ) !Count lat/lon/time/lev
Call NcRd(ARRAYWEC3, fId2d, TRIM(SId), &
(/ ini_lon, ini_lat, 1 /), & !Start
(/ IIPAR, JJPAR, 24 /) ) !Count lat/lon/time
CALL NcCl( fId2 )
CALL NcCl( fId2b )
CALL NcCl( fId2c )
CALL NcCl( fId2d )
! Cast to REAL*8 before regridding
GEOS_NATIVEWE(:,:,1,:) = ARRAYWE(:,:,:)+ARRAYWEPT(1,:,:,:) + &
ARRAYWEPTN(1,:,:,:)+ARRAYWEC3(:,:,:)
GEOS_NATIVEWE(:,:,2,:) = ARRAYWEPT(2,:,:,:) + ARRAYWEPTN(2,:,:,:)
GEOS_NATIVEWE(:,:,3,:) = ARRAYWEPTN(3,:,:,:)
!ENDIF
! Get variable / SNo
! Apply annual scalar factor. Available for 1985-2005,
! and NOx, CO and SO2 only.
! Initialize scaling factors
ScCO = 1.0
ScNOx = 1.0
ScPM10 = 1.0
ScPM25 = 1.0
ScSO2 = 1.0
ScVOC = 1.0
ScNH3 = 1.0
! Apply annual scalar factor.
! Using EPA's National Tier1 CAPS (http://www.epa.gov/ttnchie1/trends/)
IF (THISYEAR .eq. 2007) THEN !Scale based on 2006
ScCO = 0.939
ScNOx = 0.966
ScPM10 = 1.001
ScSO2 = 0.887
ScPM25 = 1.016
ScVOC = 0.996
ScNH3 = 1.018
ELSEIF (THISYEAR .eq. 2008) THEN !Scale based on 2006
ScCO = 0.877
ScNOx = 0.933
ScPM10 = 1.003
ScPM25 = 1.092
ScSO2 = 0.775
ScVOC = 0.933
ScNH3 = 1.035
ELSEIF (THISYEAR .eq. 2009) THEN !Scale based on 2006
ScCO = 0.854
ScNOx = 0.850
ScPM10 = 1.002
ScPM25 = 1.088
ScSO2 = 0.619
ScVOC = 0.919
ScNH3 = 1.033
ELSEIF (THISYEAR .eq. 2011) THEN !Scale based on 2010
ScCO = 0.916
ScNOx = 0.897
ScPM10 = 0.998
ScPM25 = 0.990
ScSO2 = 0.905
ScVOC = 0.955
ScNH3 = 0.996
ELSEIF (THISYEAR .ge. 2012) THEN !Scale based on 2010
ScCO = 0.820
ScNOx = 0.773
ScPM10 = 0.995
ScPM25 = 0.979
ScSO2 = 0.725
ScVOC = 0.905
ScNH3 = 0.991
ENDIF
DO L=1,3
DO HH=1,24 ! check on whether this is correct
SELECT CASE ( SId)
CASE ('CO')
GEOS_NATIVEWD(:,:,L,HH) = GEOS_NATIVEWD(:,:,L,HH) * ScCO
GEOS_NATIVEWE(:,:,L,HH) = GEOS_NATIVEWE(:,:,L,HH) * ScCO
CASE ('NO','NO2','HNO2')
GEOS_NATIVEWD(:,:,L,HH) = GEOS_NATIVEWD(:,:,L,HH) * ScNOx
GEOS_NATIVEWE(:,:,L,HH) = GEOS_NATIVEWE(:,:,L,HH) * ScNOx
CASE ('BENZ','TOLU','XYLE','RCHO','CH2O','ALD2','C2H6','PRPE','ALK4')
GEOS_NATIVEWD(:,:,L,HH) = GEOS_NATIVEWD(:,:,L,HH) * ScVOC
GEOS_NATIVEWE(:,:,L,HH) = GEOS_NATIVEWE(:,:,L,HH) * ScVOC
CASE('BC','OC')
GEOS_NATIVEWD(:,:,L,HH) = GEOS_NATIVEWD(:,:,L,HH) * ScPM25
GEOS_NATIVEWE(:,:,L,HH) = GEOS_NATIVEWE(:,:,L,HH) * ScPM25
CASE('SO2')
GEOS_NATIVEWD(:,:,L,HH) = GEOS_NATIVEWD(:,:,L,HH) * ScSO2
GEOS_NATIVEWE(:,:,L,HH) = GEOS_NATIVEWE(:,:,L,HH) * ScSO2
CASE ('NH3')
GEOS_NATIVEWD(:,:,L,HH) = GEOS_NATIVEWD(:,:,L,HH) * ScNH3
GEOS_NATIVEWE(:,:,L,HH) = GEOS_NATIVEWE(:,:,L,HH) * ScNH3
END SELECT
ENDDO
ENDDO
! Begin loopthrough tracers
IF ( SId .eq. 'CO') THEN !CO
CO_WKEND(:,:,:,:) = GEOS_NATIVEWE !CO
CO(:,:,:,:) = GEOS_NATIVEWD
ELSEIF ( SId .eq. 'NO') THEN !NO
NO(:,:,:,:) = GEOS_NATIVEWD
NO_WKEND(:,:,:,:) = GEOS_NATIVEWE !NO
ELSEIF ( SId .eq. 'NO2') THEN !NO2
NO2(:,:,:,:) = GEOS_NATIVEWD
NO2_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'HNO2') THEN !HNO2
HNO2(:,:,:,:) = GEOS_NATIVEWD
HNO2_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'SO2') THEN !SO2
SO2(:,:,:,:) = GEOS_NATIVEWD
SO2_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'NH3') THEN !NH3
NH3(:,:,:,:) = GEOS_NATIVEWD
NH3_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'ALD2') THEN !ALD2
ALD2(:,:,:,:) = GEOS_NATIVEWD
ALD2_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'RCHO') THEN !RCHO
RCHO(:,:,:,:) = GEOS_NATIVEWD
RCHO_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'C2H6') THEN !C2H6
C2H6(:,:,:,:) = GEOS_NATIVEWD
C2H6_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'PRPE' ) THEN !PRPE
PRPE(:,:,:,:) = GEOS_NATIVEWD
PRPE_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'ALK4' ) THEN !ALK4
ALK4(:,:,:,:) = GEOS_NATIVEWD
ALK4_WKEND(:,:,:,:) = GEOS_NATIVEWE
!ELSEIF ( SId .eq. 'C2H4' ) THEN !C2H4
! C2H4(:,:,:,:) = GEOS_NATIVEWD
! C2H4_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'BENZ' ) THEN !BENZ
BENZ(:,:,:,:) = GEOS_NATIVEWD
BENZ_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'TOLU' ) THEN !TOLU
TOLU(:,:,:,:) = GEOS_NATIVEWD
TOLU_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'XYLE') THEN !XYLE
XYLE(:,:,:,:) = GEOS_NATIVEWD
XYLE_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'SO4') THEN !SO4
SO4(:,:,:,:) = GEOS_NATIVEWD
SO4_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'CH2O') THEN !CH2O
CH2O(:,:,:,:) = GEOS_NATIVEWD
CH2O_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'OCPO') THEN !OCPO
OCPO(:,:,:,:) = GEOS_NATIVEWD
OCPO_WKEND(:,:,:,:) = GEOS_NATIVEWE
ELSEIF ( SId .eq. 'BCPO') THEN !BCPO
BCPO(:,:,:,:) = GEOS_NATIVEWD
BCPO_WKEND(:,:,:,:) = GEOS_NATIVEWE
!ELSEIF ( SId .eq. 'MOH') THEN !MOH
! MOH(:,:,:,:) = GEOS_NATIVEWD
! MOH_WKEND(:,:,:,:) = GEOS_NATIVEWE
!ELSEIF ( SId .eq. 'EOH') THEN !EOH
! EOH(:,:,:,:) = GEOS_NATIVEWD
! EOH_WKEND(:,:,:,:) = GEOS_NATIVEWE
!ELSEIF ( SId .eq. 'CH4') THEN !CH4
! CH4(:,:,:,:) = GEOS_NATIVEWD
! CH4_WKEND(:,:,L,HH) = GEOS_NATIVEWE
ENDIF ! END LOOP THROUGH WKEND/WKDAY
ENDDO
!--------------------------
! Compute future emissions
!--------------------------
IF ( LFUTURE ) THEN
CALL NEI2008_SCALE_FUTURE
ENDIF
!--------------------------
! Print emission totals
!--------------------------
CALL TOTAL_ANTHRO_Tg( THISMONTH )
! Return to calling program
END SUBROUTINE EMISS_NEI2008_ANTHRO_NATIVE
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: read_nei2008_mask
!
! !DESCRIPTION: Subroutine READ\_NEI2008\_MASK reads the mask for NEI data
!\\
!\\
! !INTERFACE:
SUBROUTINE READ_NEI2008_MASK
!
! !USES:
!
! Reference to F90 modules
USE BPCH2_MOD, ONLY : GET_NAME_EXT_2D, GET_RES_EXT
USE BPCH2_MOD, ONLY : READ_BPCH2
USE LOGICAL_MOD, ONLY : LCAC, LBRAVO
USE DIRECTORY_MOD, ONLY : DATA_DIR_1x1, DATA_DIR
USE REGRID_A2A_MOD, ONLY : DO_REGRID_A2A
USE TRANSFER_MOD, ONLY : TRANSFER_2D
USE m_netcdf_io_open
USE m_netcdf_io_read
USE m_netcdf_io_readattr
USE m_netcdf_io_close
USE m_netcdf_io_get_dimlen
# include "CMN_SIZE" ! Size parameters
!
! !REMARKS:
!
! !REVISION HISTORY:
! 20 Oct 2009 - P. Le Sager - init
! 26 Oct 2009 - P. Le Sager - new masks
! 13 Mar 2012 - M. Cooper - Changed regrid algorithm to map_a2a
! 24 May 2012 - R. Yantosca - Fixed minor bugs in map_a2a implementation
! 15 Aug 2012 - M. Payer - Fixed minor bugs in regridding of mask; Also
! set mask to 1 if greater than 0 (L. Murray)
! 24 Aug 2012 - R. Yantosca - DO_REGRID_A2A now reads netCDF input file
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
REAL*4 :: ARRAY2(I1x1,J1x1)
REAL*8, TARGET :: GEOS_1x1(I1x1,J1x1)
CHARACTER(LEN=255) :: FILENAME
CHARACTER(LEN=255) :: LLFILENAME
REAL*8, POINTER :: INGRID(:,:) => NULL()
INTEGER :: st2d(2), ct2d(2)
INTEGER :: fId1
!=================================================================
! Mask specific to NEI2008 data
!=================================================================
!SNAME = 'usa.'
! NEI2008 covers CANADA if we do not use CAC
!IF ( .NOT. LCAC ) SNAME = TRIM( SNAME ) // 'can.'
! NEI2008 covers Mexico if we do not use BRAVO
!IF ( .NOT. LBRAVO ) SNAME = TRIM( SNAME ) // 'mex.'
!fp
!FILENAME = '/as/home/ktravis/' // &
! 'usa.mask.nei2008.geos.1x1.nc'
FILENAME = TRIM(DATA_DIR_1x1) // &
'NEI2008_201307/usa.mask.nei2008.geos.1x1.nc'
! Echo info
WRITE( 6, 200 ) TRIM( FILENAME )
200 FORMAT( ' - READ_NEI2008_MASK: Reading ', a )
! Allocate start and count arrays
st2d = (/1, 1/)
ct2d = (/I1x1, J1x1/)
! Open and read model_ready data from netCDF file - wkday
CALL Ncop_Rd(fId1, TRIM(FILENAME))
Call NcRd(ARRAY2, fId1, 'MASK', &
st2d, ct2d ) !Start andCount lat/lon
! Close netCDF file
CALL NcCl( fId1 )
! Cast to REAL*8 before regridding
GEOS_1x1(:,:) = ARRAY2(:,:)
! File with lat/lon edges for regridding
LLFILENAME = TRIM( DATA_DIR_1x1) // &
'MAP_A2A_Regrid_201203/MAP_A2A_latlon_geos1x1.nc'
! Regrid from GEOS 1x1 --> current model resolution [unitless]
INGRID => GEOS_1x1(:,:)
CALL DO_REGRID_A2A( LLFILENAME, I1x1, J1x1, &
INGRID, USA_MASK, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointer
NULLIFY( INGRID )
WHERE ( USA_MASK > 0D0 ) USA_MASK = 1D0
! Return to calling program
END SUBROUTINE READ_NEI2008_MASK
!------------------------------------------------------------------------------
! Prior to 12/3/09:
! Leave for future use (bmy, 12/3/09)
!!EOC
!!------------------------------------------------------------------------------
!! Harvard University Atmospheric Chemistry Modeling Group !
!!------------------------------------------------------------------------------
!!BOP
!!
!! !IROUTINE: get_nei2005_mask
!!
!! !DESCRIPTION: Subroutine GET\_NEI2005\_MASK returns the value of the
!! NEI 2005 mask to the calling program. Values of 1 denote grid boxes
!! within the EPA/NEI2005 emission region.!
!!\\
!!\\
!! !INTERFACE:
!
! FUNCTION GET_NEI2005_MASK( I, J ) RESULT ( USA )
!!
!! !INPUT PARAMETERS:
!!
! INTEGER, INTENT(IN) :: I, J ! GEOS-Chem lon & lat indices
!!
!! !RETURN VALUE:
!!
! REAL*8 :: USA ! Value of the mask
!!
!! !REMARKS:
!! This is entended to encapsulate the USA_MASK variable.
!!
!! !REVISION HISTORY:
!! 02 Dec 2009 - R. Yantosca - Initial version
!!EOP
!!------------------------------------------------------------------------------
!!BOC
!!
!! !LOCAL VARIABLES:
!!
! USA = USA_MASK(I,J)
!
! END FUNCTION GET_NEI2005_MASK
!------------------------------------------------------------------------------
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: nei2008_scale_future
!
! !DESCRIPTION: Subroutine NEI2008\_SCALE\_FUTURE applies the IPCC future
! scale factors to the NEI2008 anthropogenic emissions.
!\\
!\\
! !INTERFACE:
SUBROUTINE NEI2008_SCALE_FUTURE
!
! !USES:
!
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_NOxff
USE FUTURE_EMISSIONS_MOD, ONLY : GET_FUTURE_SCALE_SO2ff
USE FUTURE_EMISSIONS_MOD, ONLY : GET_FUTURE_SCALE_OCff
USE FUTURE_EMISSIONS_MOD, ONLY : GET_FUTURE_SCALE_BCff
# include "CMN_SIZE" ! Size parameters
!
! !REMARKS:
! VOC are not scaled, however scale factors are available (see
! epa_nei_mod.f for procedure)
!
! !REVISION HISTORY:
! 7 Oct 2009 - A. van Donkelaar - initial version
! 20 Oct 2009 - P. Le Sager - set L OpenMP private, put L loop first
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
INTEGER :: I, J, L, HH
!=================================================================
! NEI2008_SCALE_FUTURE begins here!
!=================================================================
!$OMP PARALLEL DO
DO J = 1, JJPAR
DO I = 1, IIPAR
DO L = 1,3
DO HH=1,24
! Future NO2 [molec/cm2/s]
NO2(I,J,L,HH) = NO2(I,J,L,HH) * GET_FUTURE_SCALE_NOxff( I, J )
! Future CO [molec/cm2/s]
CO(I,J,L,HH) = CO(I,J,L,HH) * GET_FUTURE_SCALE_COff( I, J )
! Future SO2 [molec/cm2/s]
SO2(I,J,L,HH) = SO2(I,J,L,HH) * GET_FUTURE_SCALE_SO2ff( I, J )
! Future SO4 [molec/cm2/s]
SO4(I,J,L,HH) = SO4(I,J,L,HH) * GET_FUTURE_SCALE_SO2ff( I, J )
! Future NH3 [molec/cm2/s]
NH3(I,J,L,HH) = NH3(I,J,L,HH) * GET_FUTURE_SCALE_NH3an( I, J )
! Future OC [molec/cm2/s]
OCPO(I,J,L,HH) = OCPO(I,J,L,HH) * GET_FUTURE_SCALE_OCff( I, J )
! Future BC [molec/cm2/s]
BCPO(I,J,L,HH) = BCPO(I,J,L,HH) * GET_FUTURE_SCALE_BCff( I, J )
ENDDO
ENDDO
ENDDO
ENDDO
!$OMP END PARALLEL DO
! Return to calling program
END SUBROUTINE NEI2008_SCALE_FUTURE
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: total_anthro_Tg
!
! !DESCRIPTION: Subroutine TOTAL\_ANTHRO\_TG prints the totals for the
! anthropogenic emissions of NOx, CO, SO2 and NH3.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE TOTAL_ANTHRO_TG( MONTH )
!
! !USES:
!
USE GRID_MOD, ONLY : GET_AREA_CM2
USE TRACER_MOD, ONLY : XNUMOL
USE TRACERID_MOD, ONLY : IDTCO, IDTNO,IDTNO2, IDTHNO2
USE TRACERID_MOD, ONLY : IDTSO2, IDTNH3, IDTNOX
USE TRACERID_MOD, ONLY : IDTALD2, IDTRCHO, IDTC2H6
USE TRACERID_MOD, ONLY : IDTPRPE, IDTALK4!, IDTC2H4
USE TRACERID_MOD, ONLY : IDTBENZ, IDTTOLU, IDTXYLE
USE TRACERID_MOD, ONLY : IDTSO4, IDTCH2O
USE TRACERID_MOD, ONLY : IDTOCPO, IDTBCPO
!USE TRACERID_MOD, ONLY : IDTMOH, IDTEOH, IDTCH4
# include "CMN_SIZE" ! Size parameters
! !INPUT PARAMETERS:
!
INTEGER, INTENT(IN) :: MONTH ! Month of data to compute totals
!
! !REVISION HISTORY:
! 7 Oct 2009 - A. van Donkelaar - initial version
! 9 May 2013 - K. Travis - revised for NEI2008
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
INTEGER :: II, JJ, IH, LL
INTEGER :: DAY_LIST(12), DL
REAL*8 :: T_CO, T_NO, T_NO2, T_HNO2, T_SO2, T_NH3
REAL*8 :: T_ALD2, T_RCHO, T_C2H6
REAL*8 :: T_PRPE, T_ALK4, T_TOLU, T_XYLE
REAL*8 :: T_CH2O,T_BC, T_OC, T_SO4
REAL*8 :: T_BENZ!, T_C2H4
REAL*8 :: T_NOX ! fp
REAL*8 :: tmpArea(IIPAR, JJPAR,3)
REAL*4 :: WDFRAC, WEFRAC
CHARACTER(LEN=3) :: UNIT
REAL*8, PARAMETER :: SEC_IN_HOUR = 3600d0! * 365.25d0
!=================================================================
! TOTAL_ANTHRO_TG begins here!
!=================================================================
! Fancy output
WRITE( 6, '(a)' ) REPEAT( '=', 79 )
WRITE( 6, 100 )
100 FORMAT( 'N. E. I. 2008 U. S. A. E M I S S I O N S', / )
DO II = 1, IIPAR
DO JJ = 1, JJPAR
DO LL=1, 3
tmpArea(II,JJ,LL) = GET_AREA_CM2(JJ)
ENDDO
ENDDO
ENDDO
T_CO = 0d0
T_NOx = 0d0
T_NO = 0d0
T_NO2 = 0d0
T_HNO2 = 0d0
T_SO2 = 0d0
T_NH3 = 0d0
T_ALD2 = 0d0
T_RCHO = 0d0
T_BENZ = 0d0
T_C2H6 = 0d0
T_PRPE = 0d0
T_TOLU = 0d0
T_XYLE = 0d0
! J, F, M, A, Ma, Ju, J, Au, Se, Oc, No, Dec
!DAY_LIST = (/31,28,31,30,31,30,31,31,30,31,30,31/)
!DL = DAY_LIST(MONTH)
! Annual average weekends and weekdays
WDFRAC = 21.7d0
WEFRAC = 8.7d0
WRITE(6,101) WDFRAC
101 FORMAT('WEEKDAY FRACTION = ', f11.4)
! Total CO [Tg CO]
IF ( IDTCO .NE. 0 ) &
T_CO = SUM(SUM( CO,4) * tmpArea ) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTCO)* WDFRAC + &
SUM(SUM( CO_WKEND,4) * tmpArea ) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTCO) * WEFRAC
! Total NOX [Tg N]
IF ( IDTNOx .NE. 0 ) &
T_NOx = SUM(SUM( NO+NO2+HNO2,4) * tmpArea ) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTNOx) * 14/46 * WDFRAC + &
SUM(SUM( NO_WKEND+NO2_WKEND+HNO2_WKEND,4) * tmpArea ) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTNOx) * 14/46 * WEFRAC
IF ( IDTNO .NE. 0 ) &
! Total NOX [Tg N]
T_NO = SUM(SUM(NO, 4)*tmpArea ) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTNO)*14/30 * WDFRAC + &
SUM(SUM(NO_WKEND, 4)*tmpArea ) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTNO)*14/30 * WEFRAC
IF ( IDTNO2 .NE. 0 ) &
! Total NO2 [Tg N]
T_NO2 = SUM(SUM( NO2, 4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTNO2)*14/46 * WDFRAC + &
SUM(SUM( NO2_WKEND, 4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTNO2)*14/46 * WEFRAC
IF ( IDTHNO2 .NE. 0 ) &
! Total HNO2 [Tg N]
T_HNO2 = SUM(SUM( HNO2,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTHNO2)*14/47 * WDFRAC + &
SUM(SUM( HNO2_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTHNO2)*14/47 * WEFRAC
! Total SO2 [Tg S]
IF ( IDTSO2 .NE. 0 ) &
T_SO2 = SUM( SUM( SO2,4) * tmpArea )* &
SEC_IN_HOUR *1d-9/XNUMOL(IDTSO2) * WDFRAC + &
SUM(SUM( SO2_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTSO2) * WEFRAC
! Total NH3 [Tg NH3]
IF ( IDTNH3 .NE. 0 ) &
T_NH3 = SUM( SUM( NH3,4) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTNH3) * WDFRAC + &
SUM(SUM( NH3_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTNH3) * WEFRAC
! Total ALD2 [Tg C]
IF ( IDTALD2 .NE. 0 ) &
T_ALD2 = SUM( SUM( ALD2,4) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTALD2) * WDFRAC + &
SUM(SUM( ALD2_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTALD2) * WEFRAC
! WRITE(*,*) XNUMOL(IDTALD2)
! Total RCHO [Tg C]
IF ( IDTRCHO .NE. 0 ) &
T_RCHO = SUM( SUM( RCHO,4) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTRCHO) * WDFRAC + &
SUM(SUM( RCHO_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTRCHO) * WEFRAC
! Total BENZ [Tg C]
IF ( IDTBENZ .NE. 0 ) &
T_BENZ = SUM( SUM( BENZ,4) * tmpArea )* &
SEC_IN_HOUR *1d-9/XNUMOL(IDTBENZ) * WDFRAC + &
SUM(SUM( BENZ_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTBENZ) * WEFRAC
! Total C2H6 [Tg C]
IF ( IDTC2H6 .NE. 0 ) &
T_C2H6 = SUM( SUM( C2H6,4) * tmpArea )* &
SEC_IN_HOUR *1d-9/XNUMOL(IDTC2H6) * WDFRAC + &
SUM(SUM( C2H6_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTC2H6) * WEFRAC
! WRITE(*,*) XNUMOL(IDTC2H6)
! Total PRPE [Tg C]
IF ( IDTPRPE .NE. 0 ) &
T_PRPE = SUM( SUM( PRPE,4) * tmpArea )* &
SEC_IN_HOUR *1d-9/XNUMOL(IDTPRPE) * WDFRAC + &
SUM(SUM( PRPE_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTPRPE) * WEFRAC
! WRITE(*,*) XNUMOL(IDTPRPE)
! Total ALK4 [Tg C]
IF ( IDTALK4 .NE. 0 ) &
T_ALK4 = SUM( SUM( ALK4,4) * tmpArea )* &
SEC_IN_HOUR *1d-9/XNUMOL(IDTALK4) * WDFRAC + &
SUM(SUM( ALK4_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTALK4)* WEFRAC
! WRITE(*,*) XNUMOL(IDTALK4)
! Total TOLU [Tg C]
IF ( IDTTOLU .NE. 0 ) &
T_TOLU = SUM( SUM( TOLU,4) *tmpArea )* &
SEC_IN_HOUR *1d-9/XNUMOL(IDTTOLU) * WDFRAC + &
SUM(SUM( TOLU_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTTOLU) * WEFRAC
! Total XYLE [Tg C]
IF ( IDTXYLE .NE. 0 ) &
T_XYLE = SUM( SUM( XYLE,4) * tmpArea )* &
SEC_IN_HOUR *1d-9/XNUMOL(IDTXYLE) * WDFRAC + &
SUM(SUM( XYLE_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTXYLE) * WEFRAC
! Total C2H4 [Tg C]
!T_C2H4 = SUM( C2H4 * tmpArea )* &
! SEC_IN_HOUR *1d-9/XNUMOL(IDTC2H4) * WDFRAC + &
! SUM(SUM( C2H4_WKEND,4 ) * tmpArea) * &
! SEC_IN_HOUR *1d-12/XNUMOL(C2H4)*14/47 * WEFRAC
! Total CH2O [Tg C]
IF ( IDTCH2O .NE. 0 ) &
T_CH2O = SUM( SUM( CH2O,4) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTCH2O) * WDFRAC + &
SUM(SUM( CH2O_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-9/XNUMOL(IDTCH2O) * WEFRAC
! Total BC [Tg]
IF ( IDTBCPO .NE. 0 ) &
T_BC = SUM( SUM( BCPO,4) * tmpArea) * &
SEC_IN_HOUR *1d-12 * WDFRAC + &
SUM(SUM( BCPO_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-12 * WEFRAC
! Total OC [Tg]
IF ( IDTOCPO .NE. 0 ) &
T_OC = SUM( SUM( OCPO,4) * tmpArea )* &
SEC_IN_HOUR *1d-12 * WDFRAC + &
SUM(SUM( OCPO_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-12 * WEFRAC
! Total SO4 [Tg S]
IF ( IDTSO4 .NE. 0 ) &
T_SO4 = SUM( SUM( SO4,4) * tmpArea) * &
SEC_IN_HOUR *1d-12 * WDFRAC + &
SUM(SUM( SO4_WKEND,4 ) * tmpArea) * &
SEC_IN_HOUR *1d-12* WEFRAC
! Print totals in [Tg]
WRITE( 6, 110 ) 'CO ', MONTH, T_CO, '[Tg CO ]'
!fp for bckwd compatibility
IF ( IDTNOX .ne. 0 ) THEN
WRITE( 6, 110 ) 'NOX ', MONTH, T_NOX, '[Tg N ]'
ELSE
WRITE( 6, 110 ) 'NO ', MONTH, T_NO, '[Tg N ]'
WRITE( 6, 110 ) 'NO2 ', MONTH, T_NO2, '[Tg N ]'
WRITE( 6, 110 ) 'HNO2 ', MONTH, T_HNO2, '[Tg N ]'
ENDIF
WRITE( 6, 110 ) 'SO2 ', MONTH, T_SO2, '[Tg S]'
WRITE( 6, 110 ) 'NH3 ', MONTH, T_NH3, '[Tg NH3]'
WRITE( 6, 110 ) 'ALD2 ', MONTH, T_ALD2, '[Tg C]'
WRITE( 6, 110 ) 'RCHO ', MONTH, T_RCHO, '[Tg C]'
WRITE( 6, 110 ) 'BENZ ', MONTH, T_BENZ, '[Tg C]'
WRITE( 6, 110 ) 'C2H6 ', MONTH, T_C2H6, '[Tg C]'
WRITE( 6, 110 ) 'PRPE ', MONTH, T_PRPE, '[Tg C]'
WRITE( 6, 110 ) 'ALK4 ', MONTH, T_ALK4, '[Tg C]'
WRITE( 6, 110 ) 'TOLU ', MONTH, T_TOLU, '[Tg C]'
WRITE( 6, 110 ) 'XYLE ', MONTH, T_XYLE, '[Tg C]'
!WRITE( 6, 110 ) 'C2H4 ', MONTH, T_C2H4, '[Tg C]'
WRITE( 6, 110 ) 'CH2O ', MONTH, T_CH2O, '[Tg C]'
WRITE( 6, 110 ) 'BC ', MONTH, T_BC, '[Tg ]'
WRITE( 6, 110 ) 'OC ', MONTH, T_OC, '[Tg ]'
WRITE( 6, 110 ) 'SO4 ', MONTH, T_SO4, '[Tg S]'
! Format statement
110 FORMAT( 'NEI2008 anthro ', a5, &
'for month', i4, ': ', f11.4, 1x, a8 )
! Fancy output
WRITE( 6, '(a)' ) REPEAT( '=', 79 )
! Return to calling program
END SUBROUTINE TOTAL_ANTHRO_Tg
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: init_nei2008_anthro
!
! !DESCRIPTION: Subroutine INIT\_NEI2008\_ANTHRO allocates and zeroes all
! module arrays.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE INIT_NEI2008_ANTHRO
!
! !USES:
!
USE ERROR_MOD, ONLY : ALLOC_ERR
USE LOGICAL_MOD, ONLY : LNEI08
# include "CMN_SIZE" ! Size parameters!
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
INTEGER :: RC, J
!=================================================================
! INIT_NEI2008_ANTHRO begins here!
!=================================================================
! Return if LNEI08 is false
IF ( .not. LNEI08 ) RETURN
!--------------------------------------------------
! Allocate and zero arrays for emissions
!--------------------------------------------------
! allocate and read USA Mask
ALLOCATE( USA_MASK( IIPAR, JJPAR ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'USA_MASK' )
USA_MASK = 0d0
CALL READ_NEI2008_MASK
ALLOCATE( CO( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'CO' )
CO = 0d0
!ALLOCATE( NOX( IIPAR, JJPAR, 3, 24 ), STAT=RC)
!IF ( RC /= 0 ) CALL ALLOC_ERR( 'NOX' )
!NOX = 0d0
ALLOCATE( NO( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'NO' )
NO = 0d0
ALLOCATE( NO2( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'NO2' )
NO2 = 0d0
ALLOCATE( HNO2( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'HNO2' )
HNO2 = 0d0
ALLOCATE( SO2( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'SO2' )
SO2 = 0d0
ALLOCATE( NH3( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'NH3' )
NH3 = 0d0
ALLOCATE( ALD2( IIPAR, JJPAR, 3, 24), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'ALD2' )
ALD2 = 0d0
ALLOCATE( RCHO( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'RCHO' )
RCHO = 0d0
ALLOCATE( BENZ( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'BENZ' )
BENZ = 0d0
ALLOCATE( C2H6( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'C2H6' )
C2H6 = 0d0
ALLOCATE( PRPE( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'PRPE' )
PRPE = 0d0
ALLOCATE( ALK4( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'ALK4' )
ALK4 = 0d0
ALLOCATE( TOLU( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'TOLU' )
TOLU = 0d0
ALLOCATE( XYLE( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'XYLE' )
XYLE = 0d0
!ALLOCATE( C2H4( IIPAR, JJPAR, 3, 24 ), STAT=RC )
!IF ( RC /= 0 ) CALL ALLOC_ERR( 'C2H4' )
!C2H4 = 0d0
ALLOCATE( CH2O( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'CH2O' )
CH2O = 0d0
ALLOCATE( BCPO( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'BCPO' )
BCPO = 0d0
ALLOCATE( OCPO( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'OCPO' )
OCPO = 0d0
ALLOCATE( SO4( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'SO4' )
SO4 = 0d0
!ALLOCATE( EOH( IIPAR, JJPAR, 3, 24 ), STAT=RC )
!IF ( RC /= 0 ) CALL ALLOC_ERR( 'EOH' )
!EOH = 0d0
!ALLOCATE( MOH( IIPAR, JJPAR, 3, 24 ), STAT=RC )
!IF ( RC /= 0 ) CALL ALLOC_ERR( 'MOH' )
!MOH = 0d0
!ALLOCATE( CH4( IIPAR, JJPAR, 3, 24 ), STAT=RC )
!IF ( RC /= 0 ) CALL ALLOC_ERR( 'CH4' )
!CH4 = 0d0
! Weekend
ALLOCATE( CO_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'CO_WKEND' )
CO_WKEND = 0d0
!ALLOCATE( NOX_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
!IF ( RC /= 0 ) CALL ALLOC_ERR( 'NOX_WKEND' )
!NOX_WKEND = 0d0
ALLOCATE( NO_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'NO_WKEND' )
NO_WKEND = 0d0
ALLOCATE( NO2_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'NO2_WKEND' )
NO2_WKEND = 0d0
ALLOCATE( HNO2_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'HNO2_WKEND' )
HNO2_WKEND = 0d0
ALLOCATE( SO2_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'SO2_WKEND' )
SO2_WKEND = 0d0
ALLOCATE( NH3_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'NH3_WKEND' )
NH3_WKEND = 0d0
ALLOCATE( ALD2_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'ALD2_WKEND' )
ALD2_WKEND = 0d0
ALLOCATE( RCHO_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'RCHO_WKEND' )
RCHO_WKEND = 0d0
ALLOCATE( BENZ_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'BENZ_WKEND' )
BENZ_WKEND = 0d0
ALLOCATE( C2H6_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'C2H6_WKEND' )
C2H6_WKEND = 0d0
ALLOCATE( PRPE_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'PRPE_WKEND' )
PRPE_WKEND = 0d0
ALLOCATE( ALK4_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'ALK4_WKEND' )
ALK4_WKEND = 0d0
ALLOCATE( TOLU_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'TOLU_WKEND' )
TOLU_WKEND = 0d0
ALLOCATE( XYLE_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'XYLE_WKEND' )
XYLE_WKEND = 0d0
!ALLOCATE( C2H4_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
!IF ( RC /= 0 ) CALL ALLOC_ERR( 'C2H4_WKEND' )
!C2H4_WKEND = 0d0
ALLOCATE( CH2O_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'CH2O_WKEND' )
CH2O_WKEND = 0d0
ALLOCATE( BCPO_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'BCPO_WKEND' )
BCPO_WKEND = 0d0
ALLOCATE( OCPO_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'OCPO_WKEND' )
OCPO_WKEND = 0d0
ALLOCATE( SO4_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
IF ( RC /= 0 ) CALL ALLOC_ERR( 'SO4_WKEND' )
SO4_WKEND = 0d0
!ALLOCATE( EOH_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
!IF ( RC /= 0 ) CALL ALLOC_ERR( 'EOH_WKEND' )
!EOH_WKEND = 0d0
!ALLOCATE( MOH_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
!IF ( RC /= 0 ) CALL ALLOC_ERR( 'MOH_WKEND' )
!MOH_WKEND = 0d0
!ALLOCATE( CH4_WKEND( IIPAR, JJPAR, 3, 24 ), STAT=RC )
!IF ( RC /= 0 ) CALL ALLOC_ERR( 'CH4_WKEND' )
!CH4_WKEND = 0d0
! Return to calling program
END SUBROUTINE INIT_NEI2008_ANTHRO
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: cleanup_nei2008anthro
!
! !DESCRIPTION: Subroutine CLEANUP\_NEI2008\_ANTHRO deallocates all module
! arrays.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE CLEANUP_NEI2008_ANTHRO
!
! !REVISION HISTORY:
! 01 Mar 2012 - R. Yantosca - Remove reference to A_CM2 array
!EOP
!------------------------------------------------------------------------------
!BOC
!=================================================================
! CLEANUP_NEIO2008_ANTHRO begins here!
!=================================================================
! USA mask
IF ( ALLOCATED( USA_MASK) ) DEALLOCATE( USA_MASK )
IF ( ALLOCATED( CO ) ) DEALLOCATE( CO )
!IF ( ALLOCATED( NOX ) ) DEALLOCATE( NOX )
IF ( ALLOCATED( NO ) ) DEALLOCATE( NO )
IF ( ALLOCATED( NO2 ) ) DEALLOCATE( NO2 )
IF ( ALLOCATED( HNO2 ) ) DEALLOCATE( HNO2 )
IF ( ALLOCATED( SO2 ) ) DEALLOCATE( SO2 )
IF ( ALLOCATED( NH3 ) ) DEALLOCATE( NH3 )
IF ( ALLOCATED( ALD2 ) ) DEALLOCATE( ALD2 )
IF ( ALLOCATED( RCHO ) ) DEALLOCATE( RCHO )
IF ( ALLOCATED( BENZ ) ) DEALLOCATE( BENZ )
IF ( ALLOCATED( C2H6 ) ) DEALLOCATE( C2H6 )
IF ( ALLOCATED( PRPE ) ) DEALLOCATE( PRPE )
IF ( ALLOCATED( ALK4 ) ) DEALLOCATE( ALK4 )
IF ( ALLOCATED( TOLU ) ) DEALLOCATE( TOLU )
IF ( ALLOCATED( XYLE ) ) DEALLOCATE( XYLE )
!IF ( ALLOCATED( C2H4 ) ) DEALLOCATE( C2H4 )
IF ( ALLOCATED( CH2O ) ) DEALLOCATE( CH2O )
IF ( ALLOCATED( BCPO ) ) DEALLOCATE( BCPO )
IF ( ALLOCATED( OCPO ) ) DEALLOCATE( OCPO )
IF ( ALLOCATED( SO4 ) ) DEALLOCATE( SO4 )
!IF ( ALLOCATED( EOH ) ) DEALLOCATE( EOH )
!IF ( ALLOCATED( MOH ) ) DEALLOCATE( MOH )
!IF ( ALLOCATED( CH4 ) ) DEALLOCATE( CH4 )
IF ( ALLOCATED( CO_WKEND ) ) DEALLOCATE( CO_WKEND )
!IF ( ALLOCATED( NOX_WKEND ) ) DEALLOCATE( NOX_WKEND )
IF ( ALLOCATED( NO_WKEND ) ) DEALLOCATE( NO_WKEND )
IF ( ALLOCATED( NO2_WKEND ) ) DEALLOCATE( NO2_WKEND )
IF ( ALLOCATED( HNO2_WKEND ) ) DEALLOCATE( HNO2_WKEND )
IF ( ALLOCATED( SO2_WKEND ) ) DEALLOCATE( SO2_WKEND )
IF ( ALLOCATED( NH3_WKEND ) ) DEALLOCATE( NH3_WKEND )
IF ( ALLOCATED( ALD2_WKEND ) ) DEALLOCATE( ALD2_WKEND )
IF ( ALLOCATED( RCHO_WKEND ) ) DEALLOCATE( RCHO_WKEND )
IF ( ALLOCATED( BENZ_WKEND ) ) DEALLOCATE( BENZ_WKEND )
IF ( ALLOCATED( C2H6_WKEND ) ) DEALLOCATE( C2H6_WKEND )
IF ( ALLOCATED( PRPE_WKEND ) ) DEALLOCATE( PRPE_WKEND )
IF ( ALLOCATED( ALK4_WKEND ) ) DEALLOCATE( ALK4_WKEND )
IF ( ALLOCATED( TOLU_WKEND ) ) DEALLOCATE( TOLU_WKEND )
IF ( ALLOCATED( XYLE_WKEND ) ) DEALLOCATE( XYLE_WKEND )
!IF ( ALLOCATED( C2H4_WKEND ) ) DEALLOCATE( C2H4_WKEND )
IF ( ALLOCATED( CH2O_WKEND ) ) DEALLOCATE( CH2O_WKEND )
IF ( ALLOCATED( BCPO_WKEND ) ) DEALLOCATE( BCPO_WKEND )
IF ( ALLOCATED( OCPO_WKEND ) ) DEALLOCATE( OCPO_WKEND )
IF ( ALLOCATED( SO4_WKEND ) ) DEALLOCATE( SO4_WKEND )
!IF ( ALLOCATED( EOH_WKEND ) ) DEALLOCATE( EOH_WKEND )
!IF ( ALLOCATED( MOH_WKEND ) ) DEALLOCATE( MOH_WKEND )
!IF ( ALLOCATED( CH4_WKEND ) ) DEALLOCATE( CH4_WKEND )
END SUBROUTINE CLEANUP_NEI2008_ANTHRO
!EOC
END MODULE NEI2008_ANTHRO_MOD