! $Id: streets_anthro_mod.f,v 1.4 2006/11/07 19:02:04 bmy Exp $

      MODULE STREETS_ANTHRO_MOD 7
!
!******************************************************************************
!  Module STREETS_ANTHRO_MOD contains variables and routines to read the 
!  David Streets et al Asian anthropogenic emissions for NOx and CO. 
!  (yxw, bmy, 8/16/06, 9/5/06)
!
!  Module Variables:
!  ============================================================================
!  (1 ) A_CM2          (REAL*8 ) : Array for grid box surface area [cm2]
!  (2 ) MASK_CHINA_1x1 (INTEGER) : Mask for the China region at 1x1 
!  (2 ) MASK_CHINA     (REAL*8)  : Mask for the China region (for 2001 CO)
!  (3 ) MASK_SE_ASIA   (REAL*8)  : Mask for the SE Asia region (for 2000 emiss)
!  (4 ) NOx            (REAL*8)  : Streets anthro NOx emissions [kg/yr]
!  (5 ) CO             (REAL*8)  : Streets anthro CO  emissions [kg/yr]
!  (6 ) SO2            (REAL*8)  : Streets anthro SO2 emissions [kg/yr]
!  (7 ) NH3            (REAL*8)  : Streets anthro NH3 emissions [kg/yr]       
!  (8 ) CO2            (REAL*8)  : Streets anthro CO2 emissions [kg/yr]
!  (9 ) CH4            (REAL*8)  : Streets anthro CH4 emissions [kg/yr]
! 
!  Module Routines:
!  ============================================================================
!  (1 ) GET_CHINA_MASK         : Gets the China mask value at (I,J) 
!  (2 ) GET_SE_ASIA_MASK       : Gets the SE Asia mask value at (I,J) 
!  (3 ) GET_STREETS_ANTHRO     : Gets emissions at (I,J) for emissions species 
!  (4 ) EMISS_STREETS_ANTHRO   : Reads Streets' emissions from disk
!  (5 ) STREETS_SCALE_FUTURE   : Applies IPCC future scale factors to emissions
!  (6 ) READ_STREETS_MASKS     : Reads mask info from disk
!  (7 ) INIT_STREETS_ANTHRO    : Allocates and zeroes module arrays
!  (8 ) CLEANUP_STREETS_ANTHRO : Dealocates module arrays
!
!  GEOS-Chem modules referenced by "streets_anthro_mod.f"
!  ============================================================================
!  (1 ) bpch2_mod.f            : Module w/ routines for binary punch file I/O
!  (2 ) directory_mod.f        : Module w/ GEOS-Chem data & met field dirs
!  (3 ) error_mod.f            : Module w/ I/O error and NaN check routines
!  (4 ) future_emissions_mod.f : Module w/ routines for IPCC future emissions
!  (5 ) grid_mod.f             : Module w/ horizontal grid information
!  (6 ) logical_mod.f          : Module w/ GEOS-Chem logical switches
!  (7 ) regrid_1x1_mod.f       : Module w/ routines to regrid 1x1 data  
!  (8 ) time_mod.f             : Module w/ routines for computing time & date
!  (9 ) tracerid_mod.f         : Module w/ pointers to tracers & emissions  
!
!  References:
!  ============================================================================
!  (1 ) Streets, D.G, Q. Zhang, L. Wang, K. He, J. Hao, Y. Wu, Y. Tang,
!        and G.C. Carmichael, "Revisiting China's CO emissions after the
!        Transport and Chemical Evolution over the Pacific (TRACE-P) mission:
!        Synthesis of inventories, atmospheric modeling, and observations",
!        J. Geophys. Res, 111, D14306, doi:10.1029/2006JD007118, 2006.
!  (2 ) Streets, D.G., T.C. Bond, G.R. Carmichael, S.D. Fernandes, Q. Fu,
!        Z. Klimont, S.M. Nelson, N.Y. Tsai, M.Q. Wang, J-H. Woo, and
!        K.F. Yarber, "An inventory of gaseous and primary aerosol emissions
!        in Asia in the year 2000", J. Geophys. Res, 108, D21, 
!        doi:10.1029/2002JD003093, 2003.
!  
!  NOTES: 
!  (1 ) Modification: Now use 2001 CO over China, and 2000 CO over countries
!        other than China in the larger SE Asia region. (yxw, bmy, 9/5/06)
!******************************************************************************
!
      IMPLICIT NONE

      !=================================================================
      ! MODULE PRIVATE DECLARATIONS -- keep certain internal variables 
      ! and routines from being seen outside "streets_anthro_mod.f"
      !=================================================================

      ! Make everything PRIVATE ...
      PRIVATE

      ! ... except these routines
      PUBLIC :: CLEANUP_STREETS_ANTHRO
      PUBLIC :: EMISS_STREETS_ANTHRO
      PUBLIC :: GET_CHINA_MASK
      PUBLIC :: GET_SE_ASIA_MASK
      PUBLIC :: GET_STREETS_ANTHRO

      !=================================================================
      ! MODULE VARIABLES 
      !=================================================================

      ! Arrays
      INTEGER, ALLOCATABLE :: MASK_CHINA_1x1(:,:)
      REAL*8,  ALLOCATABLE :: A_CM2(:)
      REAL*8,  ALLOCATABLE :: MASK_CHINA(:,:)
      REAL*8,  ALLOCATABLE :: MASK_SE_ASIA(:,:)
      REAL*8,  ALLOCATABLE :: NOx(:,:)
      REAL*8,  ALLOCATABLE :: CO(:,:)
      REAL*8,  ALLOCATABLE :: SO2(:,:)
      REAL*8,  ALLOCATABLE :: NH3(:,:)
      REAL*8,  ALLOCATABLE :: CO2(:,:)
      REAL*8,  ALLOCATABLE :: CH4(:,:)

      ! Parameters
      REAL*8,  PARAMETER   :: SEC_IN_YEAR  = 86400d0 * 365.25d0

      !=================================================================
      ! MODULE ROUTINES -- follow below the "CONTAINS" statement 
      !=================================================================
      CONTAINS

!------------------------------------------------------------------------------


      FUNCTION GET_CHINA_MASK( I, J ) RESULT( THISMASK )
!
!******************************************************************************
!  Function GET_STREETS_MASK returns the value of the China mask for the David
!  Streets et al emissions at grid box (I,J).  MASK=1 if (I,J) is China, or 
!  MASK=0 otherwise. (bmy, 8/16/06)
!
!  NOTE: The China Mask is used with the 2001 CO emissions.
!
!  Arguments as Input:
!  ============================================================================
!  (1 ) I (INTEGER) : GEOS-Chem longitude index 
!  (2 ) J (INTEGER) : GEOS-Chem latitude  index 
!
!  NOTES:
!******************************************************************************
!
      ! Arguments
      INTEGER, INTENT(IN) :: I, J

      ! Local variables
      REAL*8              :: THISMASK

      !=================================================================
      ! GET_CHINA_MASK begins here!
      !=================================================================
      THISMASK = MASK_CHINA(I,J)

      ! Return to calling program
      END FUNCTION GET_CHINA_MASK

!------------------------------------------------------------------------------


      FUNCTION GET_SE_ASIA_MASK( I, J ) RESULT( THISMASK ) 5
!
!******************************************************************************
!  Function GET_SE_ASIA_MASK returns the value of the China mask for the David
!  Streets et al emissions at grid box (I,J).  MASK=1 if (I,J) is China, or 
!  MASK=0 otherwise. (bmy, 8/16/06)
!
!  NOTE: The SE Asia Mask is used with the 2000 emissions for 
!        NOx, CO, CO2, SO2, NH3, and CH4. 
!
!  Arguments as Input:
!  ============================================================================
!  (1 ) I (INTEGER) : GEOS-Chem longitude index 
!  (2 ) J (INTEGER) : GEOS-Chem latitude  index 
!
!  NOTES:
!******************************************************************************
!
      ! Arguments
      INTEGER, INTENT(IN) :: I, J

      ! Local variables
      REAL*8              :: THISMASK

      !=================================================================
      ! GET_SE_ASIA_MASK begins here!
      !=================================================================
      THISMASK = MASK_SE_ASIA(I,J)

      ! Return to calling program
      END FUNCTION GET_SE_ASIA_MASK

!------------------------------------------------------------------------------


      FUNCTION GET_STREETS_ANTHRO( I,    J,     N,  5,6
     &                             MOLEC_CM2_S, KG_S ) RESULT( VALUE )
!
!******************************************************************************
!  Function GET_STREETS_ANTHRO returns the David Streets et al emission for 
!  GEOS-Chem grid box (I,J) and tracer N.  Emissions can be returned in
!  units of [kg/s] or [molec/cm2/s].  (bmy, 8/16/06)
!
!  Arguments as Input:
!  ============================================================================
!  (1 ) I           (INTEGER) : GEOS-Chem longitude index
!  (2 ) J           (INTEGER) : GEOS-Chem latitude index
!  (3 ) N           (INTEGER) : GEOS-Chem tracer number
!  (4 ) MOLEC_CM2_S (LOGICAL) : OPTIONAL -- return emissions in [molec/cm2/s]
!  (5 ) KG_S        (LOGICAL) : OPTIONAL -- return emissions in [kg/s]
!  
!  NOTES:
!******************************************************************************
!
      ! References to F90 modules
      USE TRACER_MOD,           ONLY : ITS_A_CH4_SIM
      USE TRACER_MOD,           ONLY : ITS_A_CO2_SIM
      USE TRACER_MOD,           ONLY : XNUMOL
      USE TRACERID_MOD,         ONLY : IDTNOx, IDTCO, IDTSO2, IDTNH3

      ! Arguments
      INTEGER, INTENT(IN)           :: I, J, N
      LOGICAL, INTENT(IN), OPTIONAL :: MOLEC_CM2_S
      LOGICAL, INTENT(IN), OPTIONAL :: KG_S
      
      ! Local variables
      LOGICAL                       :: DO_KGS, DO_MCS
      REAL*8                        :: VALUE

      !=================================================================
      ! GET_STREETS_ANTHRO begins here!
      !=================================================================

      ! Initialize
      DO_KGS = .FALSE.
      DO_MCS = .FALSE.
      
      ! Return data in [kg/s] or [molec/cm2/s]?
      IF ( PRESENT( KG_S        ) ) DO_KGS = KG_S
      IF ( PRESENT( MOLEC_CM2_S ) ) DO_MCS = MOLEC_CM2_S

      ! Test for simulation type
      IF ( ITS_A_CH4_SIM() ) THEN

         !-------------------
         ! CH4 simulation
         !-------------------
         VALUE = CH4(I,J)

      ELSE IF ( ITS_A_CO2_SIM() ) THEN
         
         !-------------------
         ! CH4 simulation
         !-------------------
         VALUE = CO2(I,J)

      ELSE

         !-------------------
         ! Other simulations
         !-------------------
         IF ( N == IDTNOx ) THEN

            ! NOx [kg/yr]
            VALUE = NOx(I,J)

         ELSE IF ( N == IDTCO ) THEN

            ! CO [kg/yr]
            VALUE = CO(I,J)

         ELSE IF ( N == IDTSO2 ) THEN

            ! SO2 [kg/yr]
            VALUE = SO2(I,J)

         ELSE IF ( N == IDTNH3 ) THEN

            ! NH3 [kg/yr]
            VALUE = NH3(I,J)

         ELSE

            ! Otherwise return a negative value to indicate
            ! that there are no STREETS emissions for tracer N
            VALUE = -1d0
            RETURN

         ENDIF

      ENDIF

      !------------------------------
      ! Convert units (if necessary)
      !------------------------------
      IF ( DO_KGS ) THEN
            
         ! Convert from [kg/yr] to [kg/s]
         VALUE = VALUE / SEC_IN_YEAR

      ELSE IF ( DO_MCS ) THEN

         ! Convert NOx from [kg/yr] to [molec/cm2/s]
         VALUE = VALUE * XNUMOL(N) / ( A_CM2(J) * SEC_IN_YEAR )

      ENDIF

      ! Return to calling program
      END FUNCTION GET_STREETS_ANTHRO

!------------------------------------------------------------------------------


      SUBROUTINE EMISS_STREETS_ANTHRO 6,29
!
!******************************************************************************
!  Subroutine EMISS_STREETS_ANTHRO reads the David Streets et al emission 
!  fields at 1x1 resolution and regrids them to the current model resolution.
!  (bmy, 8/16/06, 9/5/06)
!
!  NOTES:
!  (1 ) Overwrite 2000 SE Asia CO with 2001 CO over China (bmy, 9/5/06)
!******************************************************************************
!
      ! References to F90 modules
      USE BPCH2_MOD,      ONLY : GET_TAU0,      READ_BPCH2
      USE DIRECTORY_MOD,  ONLY : DATA_DIR_1x1 
      USE LOGICAL_MOD,    ONLY : LFUTURE
      USE REGRID_1x1_MOD, ONLY : DO_REGRID_1x1, DO_REGRID_G2G_1x1
      USE TRACER_MOD,     ONLY : ITS_A_CO2_SIM, ITS_A_CH4_SIM

#     include "CMN_SIZE"       ! Size parameters

      ! Local variables
      LOGICAL, SAVE           :: FIRST = .TRUE.
      INTEGER                 :: I, J
      REAL*4                  :: ARRAY(I1x1,J1x1-1,1)
      REAL*8                  :: GEN_1x1(I1x1,J1x1-1)
      REAL*8                  :: GEOS_1x1(I1x1,J1x1,1)
      REAL*8                  :: TMP(I1x1,J1x1-1)
      REAL*8                  :: TAU2000, TAU2001
      CHARACTER(LEN=255)      :: FILENAME

      !=================================================================
      ! EMISS_STREETS_ANTHRO begins here!
      !=================================================================

      ! First-time initialization
      IF ( FIRST ) THEN
         CALL INIT_STREETS_ANTHRO
         FIRST = .FALSE.
      ENDIF

      ! TAU0 values for 2000 and 2001
      TAU2000 = GET_TAU0( 1, 1, 2000 )
      TAU2001 = GET_TAU0( 1, 1, 2001 )

      ! Test for simulation type
      IF ( ITS_A_CH4_SIM() ) THEN

         !--------------------------
         ! Read CH4 and regrid
         ! (CH4 simulations only)
         !--------------------------

         ! File name
         FILENAME  = TRIM( DATA_DIR_1x1 ) // 
     &               'Streets_200607/Streets_CH4_FF_2000.generic.1x1'

         ! Echo info
         WRITE( 6, 100 ) TRIM( FILENAME )
 100     FORMAT( '     - EMISS_STREETS_ANTHRO: Reading ', a )

         ! Read data [unitless]
         CALL READ_BPCH2( FILENAME, 'CH4-EMIS', 1, 
     &                    TAU2000,   I1x1,      J1x1-1,     
     &                    1,         ARRAY,     QUIET=.TRUE. ) 

         ! Cast to REAL*8 before regridding
         GEN_1x1(:,:) = ARRAY(:,:,1)

         ! Regrid from GENERIC 1x1 --> GEOS 1x1 
         CALL DO_REGRID_G2G_1x1( 'kg/yr', GEN_1x1, GEOS_1x1(:,:,1) )

         ! Regrid from GEOS 1x1 --> current model resolution
         CALL DO_REGRID_1x1( 'kg/yr', GEOS_1x1, CH4 )

      ELSE IF ( ITS_A_CO2_SIM() ) THEN

         !--------------------------
         ! Read CO2 and regrid
         ! (CO2 simulations only)
         !--------------------------

         ! File name
         FILENAME  = TRIM( DATA_DIR_1x1 ) // 
     &               'Streets_200607/Streets_CO2_FF_2000.generic.1x1'

         ! Echo info
         WRITE( 6, 100 ) TRIM( FILENAME )

         ! Read data [unitless]
         CALL READ_BPCH2( FILENAME, 'CO2-SRCE', 1, 
     &                    TAU2000,   I1x1,      J1x1-1,     
     &                    1,         ARRAY,     QUIET=.TRUE. ) 

         ! Cast to REAL*8 before regridding
         GEN_1x1(:,:) = ARRAY(:,:,1)

         ! Regrid from GENERIC 1x1 --> GEOS 1x1 
         CALL DO_REGRID_G2G_1x1( 'kg/yr', GEN_1x1, GEOS_1x1(:,:,1) )

         ! Regrid from GEOS 1x1 --> current model resolution
         CALL DO_REGRID_1x1( 'kg/yr', GEOS_1x1, CO2 )

      ELSE

         !--------------------------
         ! Read NOx and regrid
         !--------------------------

         ! File name
         FILENAME  = TRIM( DATA_DIR_1x1 ) // 
     &               'Streets_200607/Streets_NOx_FF_2000.generic.1x1'

         ! Echo info
         WRITE( 6, 100 ) TRIM( FILENAME )

         ! Read data [unitless]
         CALL READ_BPCH2( FILENAME, 'ANTHSRCE', 1, 
     &                    TAU2000,   I1x1,      J1x1-1,     
     &                    1,         ARRAY,     QUIET=.TRUE. ) 

         ! Cast to REAL*8 before regridding
         GEN_1x1(:,:) = ARRAY(:,:,1)

         ! Regrid from GENERIC 1x1 --> GEOS 1x1 
         CALL DO_REGRID_G2G_1x1( 'kg/yr', GEN_1x1, GEOS_1x1(:,:,1) )

         ! Regrid from GEOS 1x1 --> current model resolution
         CALL DO_REGRID_1x1( 'kg/yr', GEOS_1x1, NOx )

         !--------------------------
         ! Read 2000 CO (SE Asia)
         !--------------------------

         ! File name for 2000 CO over SE Asia
         FILENAME  = TRIM( DATA_DIR_1x1 ) // 
     &               'Streets_200607/Streets_CO_FF_2000.generic.1x1'

         ! Echo info
         WRITE( 6, 100 ) TRIM( FILENAME )

         ! Read data [unitless]
         CALL READ_BPCH2( FILENAME, 'ANTHSRCE', 4, 
     &                    TAU2000,   I1x1,      J1x1-1,     
     &                    1,         ARRAY,     QUIET=.TRUE. ) 

         ! Cast to REAL*8 before regridding
         GEN_1x1(:,:) = ARRAY(:,:,1)

         !--------------------------
         ! Read 2001 CO (China)
         !--------------------------

         ! File name for 2001 CO over China only
         FILENAME  = TRIM( DATA_DIR_1x1 ) // 
     &               'Streets_200607/Streets_CO_FF_2001.generic.1x1'

         ! Echo info
         WRITE( 6, 100 ) TRIM( FILENAME )

         ! Read data [unitless]
         CALL READ_BPCH2( FILENAME, 'ANTHSRCE', 4, 
     &                    TAU2001,   I1x1,      J1x1-1,     
     &                    1,         ARRAY,     QUIET=.TRUE. ) 

         ! Cast to REAL*8 before regridding
         TMP(:,:) = ARRAY(:,:,1)

         !--------------------------
         ! Overwrite China & regrid
         !--------------------------

         ! Replace SE Asia CO for 2000 with China CO for 2001
         DO J = 1, J1x1-1
         DO I = 1, I1x1
            IF ( MASK_CHINA_1x1(I,J) > 0 ) THEN
               GEN_1x1(I,J) = TMP(I,J)
            ENDIF
         ENDDO
         ENDDO

         ! Regrid from GENERIC 1x1 GRID to GEOS 1x1 GRID
         CALL DO_REGRID_G2G_1x1( 'kg/yr', GEN_1x1, GEOS_1x1(:,:,1) )

         ! Regrid from GEOS 1x1 GRID to current model resolution
         CALL DO_REGRID_1x1( 'kg/yr', GEOS_1x1, CO )

         !--------------------------
         ! Read SO2 and regrid
         !--------------------------

         ! File name
         FILENAME  = TRIM( DATA_DIR_1x1 ) // 
     &               'Streets_200607/Streets_SO2_FF_2000.generic.1x1'

         ! Echo info
         WRITE( 6, 100 ) TRIM( FILENAME )

         ! Read data [unitless]
         CALL READ_BPCH2( FILENAME, 'ANTHSRCE', 26, 
     &                    TAU2000,   I1x1,      J1x1-1,     
     &                    1,         ARRAY,     QUIET=.TRUE. ) 

         ! Cast to REAL*8 before regridding
         GEN_1x1(:,:) = ARRAY(:,:,1)

         ! Regrid from GENERIC 1x1 GRID to GEOS 1x1 GRID
         CALL DO_REGRID_G2G_1x1( 'kg/yr', GEN_1x1, GEOS_1x1(:,:,1) )

         ! Regrid from GEOS 1x1 GRID to current model resolution
         CALL DO_REGRID_1x1( 'kg/yr', GEOS_1x1, SO2 )

         !--------------------------
         ! Read NH3 and regrid
         !--------------------------

         ! File name
         FILENAME  = TRIM( DATA_DIR_1x1 ) // 
     &               'Streets_200607/Streets_NH3_FF_2000.generic.1x1'

         ! Echo info
         WRITE( 6, 100 ) TRIM( FILENAME )

         ! Read data [unitless]
         CALL READ_BPCH2( FILENAME, 'ANTHSRCE', 30, 
     &                    TAU2000,   I1x1,      J1x1-1,     
     &                    1,         ARRAY,     QUIET=.TRUE. ) 

         ! Cast to REAL*8 before regridding
         GEN_1x1(:,:) = ARRAY(:,:,1)

         ! Regrid from GENERIC 1x1 GRID to GEOS 1x1 GRID
         CALL DO_REGRID_G2G_1x1( 'kg/yr', GEN_1x1, GEOS_1x1(:,:,1) )

         ! Regrid from GEOS 1x1 GRID to current model resolution
         CALL DO_REGRID_1x1( 'kg/yr', GEOS_1x1, NH3 )

      ENDIF

      !--------------------------
      ! Compute future emissions
      !--------------------------
      IF ( LFUTURE ) THEN 
         CALL STREETS_SCALE_FUTURE
      ENDIF

      !--------------------------
      ! Print emission totals
      !--------------------------
      CALL TOTAL_ANTHRO_Tg

      ! Return to calling program
      END SUBROUTINE EMISS_STREETS_ANTHRO

!------------------------------------------------------------------------------


      SUBROUTINE STREETS_SCALE_FUTURE 1,8
!
!******************************************************************************
!  Subroutine STREETS_SCALE_FUTURE applies the IPCC future scale factors to 
!  the David Streets' anthropogenic emissions. (swu, bmy, 8/16/06)
!
!  NOTES:
!******************************************************************************
!
      ! References to F90 modules
      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

#     include "CMN_SIZE"             ! Size parameters

      ! Local variables
      INTEGER                       :: I, J

      !=================================================================
      ! STREETS_SCALE_FUTURE begins here!
      !=================================================================

!$OMP PARALLEL DO
!$OMP+DEFAULT( SHARED )
!$OMP+PRIVATE( I, J )
      DO J = 1, JJPAR
      DO I = 1, IIPAR

         ! Future NOx [kg NO2/yr]
         NOx(I,J)  = NOx(I,J) * GET_FUTURE_SCALE_NOxff( I, J )

         ! Future CO  [kg CO /yr]
         CO(I,J)   = CO(I,J)  * GET_FUTURE_SCALE_COff(  I, J )

         ! Future SO2 [kg SO2/yr] 
         SO2(I,J)  = SO2(I,J) * GET_FUTURE_SCALE_SO2ff( I, J )

         ! Future SO2 [kg SO2/yr] 
         NH3(I,J)  = NH3(I,J) * GET_FUTURE_SCALE_NH3an( I, J )

      ENDDO
      ENDDO
!$OMP END PARALLEL DO

      ! Return to calling program
      END SUBROUTINE STREETS_SCALE_FUTURE

!------------------------------------------------------------------------------


      SUBROUTINE TOTAL_ANTHRO_TG 4,17
!
!******************************************************************************
!  Subroutine TOTAL_ANTHRO_TG prints the totals for the anthropogenic
!  emissions of NOx and CO. (bmy, 8/16/06)
!
!  NOTES:
!******************************************************************************
!
      ! References to F90 modules
      USE TRACER_MOD, ONLY : ITS_A_CH4_SIM, ITS_A_CO2_SIM 

#     include "CMN_SIZE"   ! Size parameters

      ! Local variables
      INTEGER             :: I,     J
      REAL*8              :: T_NOX, T_CO,  T_SO2
      REAL*8              :: T_NH3, T_CH4, T_CO2
      CHARACTER(LEN=3)    :: UNIT

      !=================================================================
      ! TOTAL_ANTHRO_TG begins here!
      !=================================================================

      ! Fancy output
      WRITE( 6, '(a)' ) REPEAT( '=', 79 )
      WRITE( 6, 100  )
 100  FORMAT( 'S T R E E T S   A S I A N   E M I S S I O N S', / )

      ! Test for simulation type
      IF ( ITS_A_CH4_SIM() ) THEN

         !-----------------------
         ! CH4 simulation
         !-----------------------

         ! Total CH4 [Tg CH4]
         T_CH4 = SUM( CH4 ) * 1d-9

         ! Print totals
         WRITE( 6, 110 ) 'CH4 ', 2000, T_NOx,  ' CH4'

      ELSE IF ( ITS_A_CO2_SIM() ) THEN

         !-----------------------
         ! CO2 simulation
         !-----------------------

         ! Total CO2 [Tg CO2]
         T_CH4 = SUM( CO2 ) * 1d-9

         ! Print totals
         WRITE( 6, 110 ) 'CO2 ', 2000, T_NOx,  ' CO2'

      ELSE

         !-----------------------
         ! Other simulations
         !-----------------------

         ! Total NOx [Tg N]
         T_NOX = SUM( NOx ) * 1d-9 * ( 14d0 / 46d0 )
 
         ! Total CO  [Tg CO]
         T_CO  = SUM( CO  ) * 1d-9

         ! Total SO2 [Tg S]
         T_SO2 = SUM( SO2 ) * 1d-9 * ( 32d0 / 64d0 )

         ! Total NH3 [Tg NH3]
         T_NH3 = SUM( NH3 ) * 1d-9

         ! Print totals in [kg]
         WRITE( 6, 110 ) 'NOx ', 2000, T_NOx, '[Tg N  ]'
         WRITE( 6, 110 ) 'CO  ', 2001, T_CO,  '[Tg CO ]'
         WRITE( 6, 110 ) 'SO2 ', 2000, T_SO2, '[Tg S  ]'
         WRITE( 6, 110 ) 'NH3 ', 2000, T_NH3, '[Tg NH3]'

      ENDIF

      ! Format statement
 110  FORMAT( 'David Streets anthro ', a4, 
     &        'for base year ', i4, ': ', f11.4, 1x, a8 )

      ! Fancy output
      WRITE( 6, '(a)' ) REPEAT( '=', 79 )
      
      ! Return to calling program
      END SUBROUTINE TOTAL_ANTHRO_Tg

!------------------------------------------------------------------------------


      SUBROUTINE READ_STREETS_MASKS 1,9
!
!******************************************************************************
!  Subroutine READ_STREETS_MASKS reads and regrids the China and SE Asia masks
!  that define the David Streets' emission regions (bmy, 8/16/06, 9/5/06)
!
!  NOTES:
!  (1 ) Now also save 1x1 CHINA MASK for use in other routines. (bmy, 9/5/06)
!******************************************************************************
!
      ! References to F90 modules
      USE BPCH2_MOD,      ONLY : READ_BPCH2
      USE DIRECTORY_MOD,  ONLY : DATA_DIR_1x1
      USE REGRID_1x1_MOD, ONLY : DO_REGRID_G2G_1x1, DO_REGRID_1x1

#     include "CMN_SIZE"       ! Size parameters

      ! Local variables
      REAL*4                  :: ARRAY(I1x1,J1x1-1,1)
      REAL*8                  :: GEN_1x1(I1x1,J1x1-1)
      REAL*8                  :: GEOS_1x1(I1x1,J1x1,1)
      CHARACTER(LEN=255)      :: FILENAME

      !=================================================================
      ! READ_STREETS_MASKS begins here!
      !=================================================================

      !------------------------------------
      ! China Mask (for 2001 CO emisisons)
      !------------------------------------

      ! File name
      FILENAME  = TRIM( DATA_DIR_1x1 ) // 
     &            'Streets_200607/China_mask.generic.1x1'

      ! Echo info
      WRITE( 6, 100 ) TRIM( FILENAME )
 100  FORMAT( '     - READ_STREETS_MASKS: Reading ', a )

      ! Read data [unitless]
      CALL READ_BPCH2( FILENAME, 'LANDMAP', 2, 
     &                 0d0,       I1x1,     J1x1-1,     
     &                 1,         ARRAY,    QUIET=.TRUE. ) 

      ! Cast to REAL*8 before regridding
      GEN_1x1(:,:) = ARRAY(:,:,1)

      ! Save the 1x1 China mask for future use
      MASK_CHINA_1x1(:,:) = GEN_1x1(:,:)

      ! Regrid from GENERIC 1x1 GRID to GEOS 1x1 GRID
      CALL DO_REGRID_G2G_1x1( 'unitless', GEN_1x1, GEOS_1x1(:,:,1) )

      ! Regrid from GEOS 1x1 GRID to current model resolution
      CALL DO_REGRID_1x1( 'unitless', GEOS_1x1, MASK_CHINA )

      !------------------------------------
      ! SE Asia Mask (for 2000 emissions)
      !------------------------------------

      ! File name
      FILENAME  = TRIM( DATA_DIR_1x1 ) // 
     &            'Streets_200607/SE_Asia_mask.generic.1x1'

      ! Echo info
      WRITE( 6, 100 ) TRIM( FILENAME )

      ! Read data [unitless]
      CALL READ_BPCH2( FILENAME, 'LANDMAP', 2, 
     &                 0d0,       I1x1,     J1x1-1,     
     &                 1,         ARRAY,    QUIET=.TRUE. ) 

      ! Cast to REAL*8 before regridding
      GEN_1x1(:,:) = ARRAY(:,:,1)

      ! Regrid from GENERIC 1x1 GRID to GEOS 1x1 GRID
      CALL DO_REGRID_G2G_1x1( 'unitless', GEN_1x1, GEOS_1x1(:,:,1) )

      ! Regrid from GEOS 1x1 GRID to current model resolution
      CALL DO_REGRID_1x1( 'unitless', GEOS_1x1, MASK_SE_ASIA )

      ! Return to calling program
      END SUBROUTINE READ_STREETS_MASKS

!------------------------------------------------------------------------------


      SUBROUTINE INIT_STREETS_ANTHRO 1,15
!
!******************************************************************************
!  Subroutine INIT_STREETS_ANTHRO allocates and zeroes all module arrays.
!  (bmy, 8/16/06, 9/5/06) 
!
!  NOTES:
!  (1 ) Now allocate MASK_CHINA_1x1 (bmy, 9/5/06)
!******************************************************************************
!
      ! References to F90 modules
      USE ERROR_MOD,   ONLY : ALLOC_ERR
      USE GRID_MOD,    ONLY : GET_AREA_CM2
      USE LOGICAL_MOD, ONLY : LSTREETS

#     include "CMN_SIZE"    ! Size parameters

      ! Local variables
      INTEGER              :: AS, J

      !=================================================================
      ! INIT_STREETS begins here!
      !=================================================================

      ! Return if LSTREETS is false
      IF ( .not. LSTREETS ) RETURN
      
      !--------------------------------------------------
      ! Allocate and zero arrays for emissions
      !--------------------------------------------------

      ALLOCATE( NOx( IIPAR, JJPAR ), STAT=AS )
      IF ( AS /= 0 ) CALL ALLOC_ERR( 'NOx' )
      NOx = 0d0

      ALLOCATE( CO( IIPAR, JJPAR ), STAT=AS )
      IF ( AS /= 0 ) CALL ALLOC_ERR( 'CO' )
      CO = 0d0

      ALLOCATE( SO2( IIPAR, JJPAR ), STAT=AS )
      IF ( AS /= 0 ) CALL ALLOC_ERR( 'SO2' )
      SO2 = 0d0

      ALLOCATE( NH3( IIPAR, JJPAR ), STAT=AS )
      IF ( AS /= 0 ) CALL ALLOC_ERR( 'NH3' )
      NH3 = 0d0

      ALLOCATE( CO2( IIPAR, JJPAR ), STAT=AS )
      IF ( AS /= 0 ) CALL ALLOC_ERR( 'CO2' )
      CO2 = 0d0

      ALLOCATE( CH4( IIPAR, JJPAR ), STAT=AS )
      IF ( AS /= 0 ) CALL ALLOC_ERR( 'CH4' )
      CH4 = 0d0

      !---------------------------------------------------
      ! Pre-store array for grid box surface area in cm2
      !---------------------------------------------------

      ! Allocate array
      ALLOCATE( A_CM2( JJPAR ), STAT=AS )
      IF ( AS /= 0 ) CALL ALLOC_ERR( 'A_CM2' )

      ! Fill array
      DO J = 1, JJPAR
         A_CM2(J) = GET_AREA_CM2( J )
      ENDDO

      !---------------------------------------------------
      ! Read & Regrid masks for Streets' emissions
      !---------------------------------------------------

      ALLOCATE( MASK_CHINA_1x1( I1x1, J1x1-1 ), STAT=AS )
      IF ( AS /= 0 ) CALL ALLOC_ERR( 'MASK_CHINA_1x1' )
      MASK_CHINA_1x1 = 0

      ALLOCATE( MASK_CHINA( IIPAR, JJPAR ), STAT=AS )
      IF ( AS /= 0 ) CALL ALLOC_ERR( 'MASK_CHINA' )
      MASK_CHINA = 0d0

      ALLOCATE( MASK_SE_ASIA( IIPAR, JJPAR ), STAT=AS )
      IF ( AS /= 0 ) CALL ALLOC_ERR( 'MASK_SE_ASIA' )
      MASK_SE_ASIA = 0d0

      ! Read China & SE Asia masks from disk
      CALL READ_STREETS_MASKS

      ! Return to calling program
      END SUBROUTINE INIT_STREETS_ANTHRO

!------------------------------------------------------------------------------


      SUBROUTINE CLEANUP_STREETS_ANTHRO
!
!******************************************************************************
!  Subroutine CLEANUP_STREETS deallocates all module arrays 
!  (bmy, 8/16/06, 9/5/06)
!
!  NOTES:
!  (1 ) Now deallocate MASK_CHINA_1x1 (bmy, 9/5/06)
!******************************************************************************
!
      !=================================================================
      ! CLEANUP_STREETS begins here!
      !=================================================================
      IF ( ALLOCATED( A_CM2          ) ) DEALLOCATE( A_CM2          )
      IF ( ALLOCATED( MASK_CHINA_1x1 ) ) DEALLOCATE( MASK_CHINA_1x1 ) 
      IF ( ALLOCATED( MASK_CHINA     ) ) DEALLOCATE( MASK_CHINA     ) 
      IF ( ALLOCATED( MASK_SE_ASIA   ) ) DEALLOCATE( MASK_SE_ASIA   )
      IF ( ALLOCATED( NOx            ) ) DEALLOCATE( NOx            )
      IF ( ALLOCATED( CO             ) ) DEALLOCATE( CO             )
      IF ( ALLOCATED( SO2            ) ) DEALLOCATE( SO2            )
      IF ( ALLOCATED( NH3            ) ) DEALLOCATE( NH3            )
      IF ( ALLOCATED( CH4            ) ) DEALLOCATE( CH4            )
      IF ( ALLOCATED( CO2            ) ) DEALLOCATE( CO2            )

      ! Return to calling program
      END SUBROUTINE CLEANUP_STREETS_ANTHRO

!------------------------------------------------------------------------------

      ! End of module
      END MODULE STREETS_ANTHRO_MOD