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

1378 lines
44 KiB
Fortran

!------------------------------------------------------------------------------
! CU Boulder Adjoint Modeling Group (Henze Group) !
!------------------------------------------------------------------------------
!
! !MODULE: htap_mod
!
! !DESCRIPTION: Module HTAP\_MOD contains variables and routines to
! read the HTAP V2 anthropogenic emissions.
!\\
!\\
! !INTERFACE:
!
MODULE HTAP_MOD
!
! !USES:
!
IMPLICIT NONE
# include "define.h"
# include "netcdf.inc"
PRIVATE
!
! !PUBLIC MEMBER FUNCTIONS:
!
PUBLIC :: CLEANUP_HTAP
PUBLIC :: EMISS_HTAP
PUBLIC :: GET_HTAP
PUBLIC :: SC_AIR, SC_SHIPS, SC_ENERGY, SC_INDUSTRY
PUBLIC :: SC_TRANSPORT, SC_RESIDENTIAL, SC_AGRICULTURE
PUBLIC :: SC_BC, SC_CO, SC_OC, SC_NH3, SC_NOX, SC_SO2
PUBLIC :: SC_CH2O, SC_PM25, htap_rcptr_mask
PUBLIC :: LOCN, LNAM, LEUR, LSAS, LEAS
PUBLIC :: LSEA, LPAN, LNAF, LSAF, LMDE, LMCA
PUBLIC :: LSAM, LRBU, LCAS, LNPO, LSPO
PUBLIC :: LOCN20, LOCN21, LOCN22, LOCN23, LOCN24
PUBLIC :: LOCN25, LOCN26, LOCN27, LOCN28
PUBLIC :: LNAM31, LNAM32, LNAM33, LNAM34, LNAM35
PUBLIC :: LNAM36, LEUR41, LEUR42, LEUR43, LEUR44
PUBLIC :: LSAS51, LSAS52, LSAS53, LEAS61, LEAS62
PUBLIC :: LEAS63, LEAS64, LEAS65, LEAS66, LSEA71
PUBLIC :: LSEA72, LPAN81, LPAN82, LPAN83, LNAF91
PUBLIC :: LNAF92, LNAF93
PUBLIC :: LSAF101, LSAF102, LSAF103, LMDE111, LMDE112
PUBLIC :: LMDE113, LMCA121, LMCA122, LMCA123, LMCA124
PUBLIC :: LSAM131, LSAM132, LSAM133, LSAM134, LRBU141
PUBLIC :: LRBU142, LRBU143, LCAS151, LNPO150, LSPO160
PUBLIC :: LSPO161
!
! !PRIVATE MEMBER FUNCTIONS:
!
PRIVATE :: INIT_HTAP
PRIVATE :: TOTAL_HTAP_TG
!
! !REMARKS:
! (1)
!
! !REVISION HISTORY:
! Sep 2013 - Yanko Davila - initial version
!------------------------------------------------------------------------------
!
! !PRIVATE TYPES:
!
! Arrays for emissions (lat/lon)
REAL*8, ALLOCATABLE, TARGET :: BC(:,:)
REAL*8, ALLOCATABLE, TARGET :: CO(:,:)
REAL*8, ALLOCATABLE, TARGET :: NH3(:,:)
REAL*8, ALLOCATABLE, TARGET :: NOX(:,:)
REAL*8, ALLOCATABLE, TARGET :: OC(:,:)
REAL*8, ALLOCATABLE, TARGET :: SO2(:,:)
REAL*8, ALLOCATABLE, TARGET :: PM25(:,:)
REAL*8, ALLOCATABLE, TARGET :: ALK4_HTAP(:,:)
REAL*8, ALLOCATABLE, TARGET :: ACET_HTAP(:,:)
REAL*8, ALLOCATABLE, TARGET :: MEK_HTAP (:,:)
REAL*8, ALLOCATABLE, TARGET :: ALD2_HTAP(:,:)
REAL*8, ALLOCATABLE, TARGET :: PRPE_HTAP(:,:)
REAL*8, ALLOCATABLE, TARGET :: C3H8_HTAP(:,:)
REAL*8, ALLOCATABLE, TARGET :: CH2O_HTAP(:,:)
REAL*8, ALLOCATABLE, TARGET :: C2H6_HTAP(:,:)
! Scaling Factors
REAL*8 :: SC_AIR, SC_SHIPS, SC_ENERGY, SC_INDUSTRY
REAL*8 :: SC_TRANSPORT, SC_RESIDENTIAL, SC_AGRICULTURE
REAL*8 :: SC_BC, SC_CO, SC_OC, SC_NH3, SC_NOX, SC_SO2
REAL*8 :: SC_CH2O, SC_PM25
LOGICAL :: LOCN, LNAM, LEUR, LSAS, LEAS
LOGICAL :: LSEA, LPAN, LNAF, LSAF, LMDE, LMCA
LOGICAL :: LSAM, LRBU, LCAS, LNPO, LSPO
LOGICAL :: LOCN20, LOCN21, LOCN22, LOCN23, LOCN24
LOGICAL :: LOCN25, LOCN26, LOCN27, LOCN28
LOGICAL :: LNAM31, LNAM32, LNAM33, LNAM34, LNAM35
LOGICAL :: LNAM36, LEUR41, LEUR42, LEUR43, LEUR44
LOGICAL :: LSAS51, LSAS52, LSAS53, LEAS61, LEAS62
LOGICAL :: LEAS63, LEAS64, LEAS65, LEAS66, LSEA71
LOGICAL :: LSEA72, LPAN81, LPAN82, LPAN83, LNAF91
LOGICAL :: LNAF92, LNAF93
LOGICAL :: LSAF101, LSAF102, LSAF103, LMDE111, LMDE112
LOGICAL :: LMDE113, LMCA121, LMCA122, LMCA123, LMCA124
LOGICAL :: LSAM131, LSAM132, LSAM133, LSAM134, LRBU141
LOGICAL :: LRBU142, LRBU143, LCAS151, LNPO150, LSPO160
LOGICAL :: LSPO161
CHARACTER(LEN=255) :: htap_rcptr_mask, htap_src_mask
!
! !DEFINED PARAMETERS:
!
REAL*8, PARAMETER :: SEC_IN_YEAR = 86400d0 * 365.25d0
CONTAINS
!
! !IROUTINE: get_htap
!
! !DESCRIPTION: Function GET\_HTAP returns the HTAP V2
! emission for GEOS-Chem grid box (I,J) and tracer N.
! Emissions ARE returned in units of [kg/cm2/s].
!\\
! !INTERFACE:
!
FUNCTION GET_HTAP( I, J, N ) &
RESULT( VALUE )
!
! !USES:
!
USE TRACERID_MOD, ONLY : IDECO, IDENOX
USE TRACERID_MOD, ONLY : IDTSO2, IDTNH3
USE TRACERID_MOD, ONLY : IDTOCPO, IDTBCPO
USE TRACERID_MOD, ONLY : IDEALK4, IDEACET
USE TRACERID_MOD, ONLY : IDEALD2, IDEPRPE
USE TRACERID_MOD, ONLY : IDEC3H8, IDECH2O
USE TRACERID_MOD, ONLY : IDEC2H6, IDEMEK
USE ERROR_MOD, ONLY : ERROR_STOP
!
! !INPUT PARAMETERS:
!
! Longitude, latitude, hour, and tracer indices
INTEGER, INTENT(IN) :: I, J, N
!
! !RETURN VALUE:
!
! Emissions output
REAL*8 :: VALUE
!
! !REVISION HISTORY:
! Sep 2013 - Yanko Davila - initial version
!
!------------------------------------------------------------------------------
!=================================================================
! GET_HTAP begins here!
!=================================================================
IF ( N==IDTBCPO ) THEN
! BC [kg/m2/s]
VALUE = BC(I,J)
ELSE IF ( N==IDECO ) THEN
! CO[kg/m2/s]
VALUE = CO(I,J)
ELSE IF ( N==IDTNH3 ) THEN
! NH3[kg/m2/s]
VALUE = NH3(I,J)
ELSE IF ( N==IDENOX ) THEN
! NOX[kg/m2/s]
VALUE = NOX(I,J)
ELSE IF ( N==IDTOCPO ) THEN
! OC [kg/m2/s]
VALUE = OC(I,J)
ELSE IF ( N==IDTSO2 ) THEN
! SO2 [kg/m2/s]
VALUE = SO2(I,J)
ELSE IF ( N==IDEALK4 ) THEN
! NMVOC[kg/m2/s]
VALUE = ALK4_HTAP(I,J)
ELSE IF ( N==IDEACET ) THEN
! NMVOC[kg/m2/s]
VALUE = ACET_HTAP(I,J)
ELSE IF ( N==IDEMEK ) THEN
! NMVOC[kg/m2/s]
VALUE = MEK_HTAP(I,J)
ELSE IF ( N==IDEALD2 ) THEN
! NMVOC[kg/m2/s]
VALUE = ALD2_HTAP(I,J)
ELSE IF ( N==IDEPRPE ) THEN
! NMVOC[kg/m2/s]
VALUE = PRPE_HTAP(I,J)
ELSE IF ( N==IDEC3H8 ) THEN
! NMVOC[kg/m2/s]
VALUE = C3H8_HTAP(I,J)
ELSE IF ( N==IDECH2O ) THEN
! NMVOC[kg/m2/s]
VALUE = CH2O_HTAP(I,J)
ELSE IF ( N==IDEC2H6 ) THEN
! NMVOC[kg/m2/s]
VALUE = C2H6_HTAP(I,J)
ELSE
! Otherwise stop simulation to indicate
! that there are no HTAP emissions for tracer N
!VALUE = -1d0
!RETURN
CALL ERROR_STOP('HTAP emission missing for tracer' , 'GET_HTAP, htap_mod.f90' )
ENDIF
! Return to calling program
END FUNCTION GET_HTAP
!
! !IROUTINE: emiss_htap
!
! !DESCRIPTION: Subroutine EMISS\_HTAP reads the HTAP v2
! emission fields at 0.1x0.1 resolution and regrids them to the
! current model resolution.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE EMISS_HTAP
!
! !USES:
!
USE DIRECTORY_MOD, ONLY : DATA_DIR_1x1
USE REGRID_A2A_MOD, ONLY : DO_REGRID_A2A, DO_REGRID_DKH
USE TIME_MOD, ONLY : GET_YEAR, GET_MONTH, GET_DAY
USE TIME_MOD, ONLY : GET_DAY_OF_WEEK, GET_HOUR
USE TRACER_MOD, ONLY : ITS_A_FULLCHEM_SIM
USE TRACERID_MOD, ONLY : IDTCO
USE TRACERID_MOD, ONLY : IDTNOX, IDTOX
USE TRACERID_MOD, ONLY : IDTSO2, IDTNH3
USE TRACERID_MOD, ONLY : IDTOCPO, IDTBCPO
USE TRACERID_MOD, ONLY : IDEALK4, IDEACET
USE TRACERID_MOD, ONLY : IDEALD2, IDEPRPE
USE TRACERID_MOD, ONLY : IDEC3H8, IDECH2O
USE TRACERID_MOD, ONLY : IDEC2H6, IDEMEK
USE TRACERID_MOD, ONLY : NEMANTHRO
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
! debug
USE GRID_MOD, ONLY : GET_AREA_M2
# include "CMN_SIZE" ! Size parameters
!
! !REVISION HISTORY:
! Sep 2013 - Yanko Davila - initial version
! --------------------------------------------------------
!
! !LOCAL VARIABLES:
!
LOGICAL, SAVE :: FIRST = .TRUE.
LOGICAL :: netCDF
INTEGER, PARAMETER :: I01x01 = 3600, J01x01 = 1800
INTEGER :: I, J, IH, THISMONTH, THISYEAR
INTEGER :: SNo, DAY_NUM, DOYT
INTEGER :: HH, KLM, ID, MN, N
INTEGER :: OFFLINE_ID(15)
INTEGER :: fId1, fId2
INTEGER :: CAT
INTEGER :: II, JJ, ALK
REAL*8 :: ARRAY(I01x01,J01x01), MASK(I01x01,J01x01)
REAL*8 :: TMP_MASK(I01x01,J01x01), VOC_DATA(I01x01,J01x01,1)
REAL*8 :: ALK4_TMP(I01x01,J01x01)
REAL*8 :: C2H6_TMP (I01x01,J01x01)
REAL*8 :: C3H8_TMP (I01x01,J01x01)
REAL*8 :: PRPE_TMP (I01x01,J01x01)
REAL*8 :: CH2O_TMP (I01x01,J01x01)
REAL*8 :: ALD2_TMP (I01x01,J01x01)
REAL*8 :: ACET_TMP (I01x01,J01x01)
REAL*8 :: MEK_TMP (I01x01,J01x01)
REAL*8, TARGET :: GEOS_01x01(I01x01,J01x01)
CHARACTER(LEN=244) :: DATA_DIR_HTAP
CHARACTER(LEN=244) :: FILENAME, VOC_FILE, ALK_MASK
CHARACTER(LEN=4) :: SYEAR
CHARACTER(LEN=5) :: SNAME, HTAP_YEAR_2,SId
CHARACTER(LEN=6) :: HTAP_YEAR
CHARACTER(LEN=9) :: VId
CHARACTER(LEN=255) :: LLFILENAME
CHARACTER(LEN=24) :: SPCLIST(8), EMIS_TYPE(7), VAR_NAME(8)
CHARACTER(LEN=2) :: MONTH
CHARACTER(LEN=50) :: ALK_NUM(3)
REAL*8, POINTER :: OUTGRID(:,:) => NULL()
REAL*8, POINTER :: INGRID(:,:) => NULL()
! Days per month
REAL*8 :: DAYS_IN_MONTH
REAL*8 :: DMON(12)
!=================================================================
! HTAP_ANTHRO begins here!
!=================================================================
! First-time initialization
IF ( FIRST ) THEN
CALL INIT_HTAP
FIRST = .FALSE.
ENDIF
! Get emissions year
THISYEAR = GET_YEAR()
! Get month
THISMONTH = GET_MONTH()
#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_57 )
SNAME = 'GEOS5'
#elif defined( GCAP )
SNAME = 'GEOS4'
#elif defined( GEOS_4 )
SNAME = 'GEOS4'
#endif
SPCLIST = (/ 'BC','CO', 'NH3', 'NMVOC','NOx', 'OC', 'SO2', 'PM2.5' /)
VAR_NAME = (/ 'emi_bc','emi_co', 'emi_nh3', 'emi_nmvoc','emi_nox', 'emi_oc', 'emi_so2', 'emi_pm2.5' /)
ALK_NUM = (/ '_butanes','_pentanes', '_hexanes_and_higher_alkanes' /)
IF ( THISYEAR .eq. 2008 ) DMON = (/ 31d0, 29d0, 31d0, 30d0, &
31d0, 30d0, 31d0, 31d0, &
30d0, 31d0, 30d0, 31d0 /)
IF ( THISYEAR .eq. 2010 ) DMON = (/ 31d0, 28d0, 31d0, 30d0, &
31d0, 30d0, 31d0, 31d0, &
30d0, 31d0, 30d0, 31d0 /)
! Get days per month
DAYS_IN_MONTH = DMON( GET_MONTH() )
! File with lat/lon edges for regridding
LLFILENAME = TRIM( DATA_DIR_1x1) // &
'MAP_A2A_Regrid_201203/MAP_HTAP.nc'
DATA_DIR_HTAP = TRIM( DATA_DIR_1x1 ) // &
'HTAP/edgar_HTAP_'
htap_src_mask = TRIM( DATA_DIR_1x1 ) // &
'HTAP/MASKS/HTAP_Phase2_tier1NC01x01_v2.nc'
ALK4_TMP = 0d0
C2H6_TMP = 0d0
C3H8_TMP = 0d0
PRPE_TMP = 0d0
CH2O_TMP = 0d0
ALD2_TMP = 0d0
ACET_TMP = 0d0
MEK_TMP = 0d0
! Loop over species
DO KLM = 1, SIZE( SPCLIST )
! Set GEOS_01x01
GEOS_01x01 = 0d0
IF ( ITS_A_FULLCHEM_SIM() ) THEN
SId = SPCLIST( KLM )
VId = VAR_NAME( KLM )
ELSE
SNo = OFFLINE_ID( KLM )
ENDIF
! DataName for year
IF (THISYEAR .le. 2009) THEN
HTAP_YEAR = '_2008_'
HTAP_YEAR_2 = '_2008'
ELSE
HTAP_YEAR = '_2010_'
HTAP_YEAR_2 = '_2010'
ENDIF
SELECT CASE ( THISMONTH )
CASE ( 1 )
MONTH = '1'
CASE ( 2 )
MONTH = '2'
CASE ( 3 )
MONTH = '3'
CASE ( 4 )
MONTH = '4'
CASE ( 5 )
MONTH = '5'
CASE ( 6 )
MONTH = '6'
CASE ( 7 )
MONTH = '7'
CASE ( 8 )
MONTH = '8'
CASE ( 9 )
MONTH = '9'
CASE ( 10 )
MONTH = '10'
CASE ( 11 )
MONTH = '11'
CASE ( 12 )
MONTH = '12'
END SELECT
EMIS_TYPE = (/ 'AIR', 'ENERGY', 'INDUSTRY', 'RESIDENTIAL', &
'SHIPS', 'TRANSPORT', 'AGRICULTURE' /)
DO CAT = 1, SIZE( EMIS_TYPE )
! Set Mask
MASK = 0d0
! Open model_ready mask from netCDF file
CALL Ncop_Rd(fId1, TRIM( htap_src_mask ))
! Read model_ready data from netCDF file
CALL NcRd(TMP_MASK, fId1, 'region_code', &
(/ 1, 1 /), & !Start
(/ I01x01, J01x01/) ) !Count lon/lat
! Close netCDF file
CALL NcCl( fId1 )
! Apply Source Mask Scaling
DO I = 1, I01x01
! J on mask is N->S, but I on GEOS_01x01 is S->N
JJ = J01x01
DO J = 1, J01x01
IF ( LOCN ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 2d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LNAM ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 3d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LEUR ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 4d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LSAS ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 5d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LEAS ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 6d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LSEA ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 7d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LPAN ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 8d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LNAF ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 9d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LSAF ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 10d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LMDE ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 11d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LMCA ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 12d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LSAM ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 13d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LRBU ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 14d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LCAS ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 15d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LNPO ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 16d0 ) MASK(I,J) = 1d0
ENDIF
IF ( LSPO ) THEN
IF ( TMP_MASK(I,JJ) .EQ. 17d0 ) MASK(I,J) = 1d0
ENDIF
JJ = JJ - 1
ENDDO
ENDDO
IF (.not. LOCN .and. .not. LNAM .and. .not. LEUR .and. &
.not. LSAS .and. .not. LEAS .and. .not. LSEA .and. &
.not. LPAN .and. .not. LNAF .and. .not. LSAF .and. &
.not. LMDE .and. .not. LMCA .and. .not. LSAM .and. &
.not. LRBU .and. .not. LCAS .and. .not. LNPO .and. &
.not. LSPO ) MASK = 1d0
! Apply Sector Scaling Factor
IF ( TRIM( EMIS_TYPE(CAT) ) == 'AIR' ) &
MASK = MASK * SC_AIR
IF ( TRIM( EMIS_TYPE(CAT) ) == 'SHIPS' ) &
MASK = MASK * SC_SHIPS
IF ( TRIM( EMIS_TYPE(CAT) ) == 'ENERGY' ) &
MASK = MASK * SC_ENERGY
IF ( TRIM( EMIS_TYPE(CAT) ) == 'INDUSTRY' ) &
MASK = MASK * SC_INDUSTRY
IF ( TRIM( EMIS_TYPE(CAT) ) == 'TRANSPORT' ) &
MASK = MASK * SC_TRANSPORT
IF ( TRIM( EMIS_TYPE(CAT) ) == 'RESIDENTIAL' ) &
MASK = MASK * SC_RESIDENTIAL
IF ( TRIM( EMIS_TYPE(CAT) ) == 'AGRICULTURE' ) &
MASK = MASK * SC_AGRICULTURE
! Apply Species Scaling Factor
IF ( TRIM( SPCLIST(KLM) ) == 'BC' ) MASK = MASK * SC_BC
IF ( TRIM( SPCLIST(KLM) ) == 'CO' ) MASK = MASK * SC_CO
IF ( TRIM( SPCLIST(KLM) ) == 'OC' ) MASK = MASK * SC_OC
IF ( TRIM( SPCLIST(KLM) ) == 'NH3' ) MASK = MASK * SC_NH3
IF ( TRIM( SPCLIST(KLM) ) == 'NOx' ) MASK = MASK * SC_NOX
IF ( TRIM( SPCLIST(KLM) ) == 'SO2' ) MASK = MASK * SC_SO2
IF ( TRIM( SPCLIST(KLM) ) == 'NMVOC' ) MASK = MASK * SC_CH2O
SELECT CASE ( EMIS_TYPE(CAT) )
CASE ( 'AIR' )
IF ( SPCLIST(KLM) == 'NH3' ) CYCLE
FILENAME = TRIM(DATA_DIR_HTAP) // TRIM(SPCLIST( KLM )) &
// '_emi_' // TRIM(EMIS_TYPE( CAT )) &
// TRIM(HTAP_YEAR_2) &
// '.0.1x0.1.nc'
CASE ( 'SHIPS' )
IF ( SPCLIST(KLM) == 'NH3' ) CYCLE
FILENAME = TRIM(DATA_DIR_HTAP) // TRIM(SPCLIST( KLM )) &
// '_emi_' // TRIM(EMIS_TYPE( CAT )) &
// TRIM(HTAP_YEAR_2) &
// '.0.1x0.1.nc'
CASE ( 'AGRICULTURE' )
IF ( SPCLIST(KLM) .NE. 'NH3' ) CYCLE
IF ( SPCLIST(KLM) == 'NH3' ) &
FILENAME = TRIM(DATA_DIR_HTAP) // TRIM(SPCLIST( KLM )) &
// '_emi_' // TRIM(EMIS_TYPE( CAT )) &
// TRIM(HTAP_YEAR) // TRIM( MONTH ) &
// '.0.1x0.1.nc'
CASE DEFAULT
FILENAME = TRIM(DATA_DIR_HTAP) // TRIM(SPCLIST( KLM )) &
// '_emi_' // TRIM(EMIS_TYPE( CAT )) &
// TRIM(HTAP_YEAR) // TRIM( MONTH ) &
// '.0.1x0.1.nc'
END SELECT
IF ( TRIM( SId ) .NE. 'NMVOC') THEN
! Echo info
WRITE( 6, 100 ) TRIM( FILENAME )
! Open model_ready data from netCDF file
CALL Ncop_Rd(fId1, TRIM(FILENAME))
! Read model_ready data from netCDF file
CALL NcRd(ARRAY, fId1, TRIM(VId), &
(/ 1, 1 /), & !Start
(/ I01x01, J01x01/) ) !Count lat/lon
! Close netCDF file
CALL NcCl( fId1 )
ENDIF
IF ( TRIM( SId ) == 'NMVOC' .and. &
.not. TRIM( EMIS_TYPE(CAT) ) == 'AIR' .and. &
.not. TRIM( EMIS_TYPE(CAT) ) == 'SHIPS' ) THEN
DO N = 1, NEMANTHRO
IF ( N == IDEC2H6 ) VOC_FILE = TRIM( DATA_DIR_1x1 ) // &
'HTAP/HTAPv2_' // TRIM( EMIS_TYPE(CAT) ) // &
'_ethane' // TRIM(HTAP_YEAR) // '0.1x0.1.nc'
IF ( N == IDEC3H8 ) VOC_FILE = TRIM( DATA_DIR_1x1 ) // &
'HTAP/HTAPv2_' // TRIM( EMIS_TYPE(CAT) ) // &
'_propane' // TRIM(HTAP_YEAR) // '0.1x0.1.nc'
IF ( N == IDEPRPE ) VOC_FILE = TRIM( DATA_DIR_1x1 ) // &
'HTAP/HTAPv2_' // TRIM( EMIS_TYPE(CAT) ) // &
'_propene' // TRIM(HTAP_YEAR) // '0.1x0.1.nc'
IF ( N == IDECH2O ) VOC_FILE = TRIM( DATA_DIR_1x1 ) // &
'HTAP/HTAPv2_' // TRIM( EMIS_TYPE(CAT) ) // &
'_formaldehyde' // TRIM(HTAP_YEAR) // '0.1x0.1.nc'
IF ( N == IDEALD2 ) VOC_FILE = TRIM( DATA_DIR_1x1 ) // &
'HTAP/HTAPv2_' // TRIM( EMIS_TYPE(CAT) ) // &
'_other_alkanals' // TRIM(HTAP_YEAR) // '0.1x0.1.nc'
IF ( N == IDEACET ) VOC_FILE = TRIM( DATA_DIR_1x1 ) // &
'HTAP/HTAPv2_' // TRIM( EMIS_TYPE(CAT) ) // &
'_ketones' // TRIM(HTAP_YEAR) // '0.1x0.1.nc'
IF ( N == IDEMEK ) VOC_FILE = TRIM( DATA_DIR_1x1 ) // &
'HTAP/HTAPv2_' // TRIM( EMIS_TYPE(CAT) ) // &
'_ketones' // TRIM(HTAP_YEAR) // '0.1x0.1.nc'
IF ( N == IDEALK4 .or. N == IDEACET .or. &
N == IDEMEK .or. N == IDEPRPE .or. &
N == IDEC3H8 .or. N == IDECH2O .or. &
N == IDEC2H6 .or. N == IDEALD2 ) THEN
! Echo info
IF ( N .NE. IDEALK4 ) WRITE( 6, 100 ) TRIM( VOC_FILE )
! Open model_ready data from netCDF file
CALL Ncop_Rd(fId1, TRIM(VOC_FILE))
SELECT CASE ( EMIS_TYPE(CAT) )
CASE ( 'ENERGY' )
! Read model_ready data from netCDF file
CALL NcRd(VOC_DATA, fId1, 'emiss_ene', &
(/ 1, 1, 1 /), & !Start
(/ I01x01, J01x01, 1/) ) !Count lat/lon
IF ( N == IDEALK4 ) THEN
DO ALK = 1, SIZE( ALK_NUM )
ALK_MASK = TRIM( DATA_DIR_1x1 ) // &
'HTAP/HTAPv2_' // &
TRIM( EMIS_TYPE(CAT) ) // &
TRIM( ALK_NUM( ALK ) ) // &
TRIM(HTAP_YEAR) // '0.1x0.1.nc'
! Echo info
WRITE( 6, 100 ) TRIM( ALK_MASK )
! Open model_ready data from netCDF file
CALL Ncop_Rd(fId2, TRIM(ALK_MASK))
! Read model_ready data from netCDF file
CALL NcRd(VOC_DATA, fId2, 'emiss_ene', &
(/ 1, 1, 1 /), & !Start
(/ I01x01, J01x01, 1/) ) !Count lat/lon
DO I = 1, I01x01
DO J = 1, J01x01
IF (MASK(I,J) .GT. 0d0 ) THEN
VOC_DATA(I,J,1) = VOC_DATA(I,J,1) * MASK(I,J)
ENDIF
ENDDO
ENDDO
ALK4_TMP = ALK4_TMP + VOC_DATA(:,:,1)
! Close netCDF file
CALL NcCl( fId2 )
ENDDO
ENDIF
CASE ( 'TRANSPORT' )
! Read model_ready data from netCDF file
CALL NcRd(VOC_DATA, fId1, 'emiss_tra', &
(/ 1, 1, 1 /), & !Start
(/ I01x01, J01x01, 1/) ) !Count lat/lon
IF ( N == IDEALK4 ) THEN
DO ALK = 1, SIZE( ALK_NUM )
ALK_MASK = TRIM( DATA_DIR_1x1 ) // &
'HTAP/HTAPv2_' // &
TRIM( EMIS_TYPE(CAT) ) // &
TRIM( ALK_NUM( ALK ) ) // &
TRIM(HTAP_YEAR) // '0.1x0.1.nc'
! Echo info
IF ( N == IDEALK4 ) WRITE( 6, 100 ) TRIM( ALK_MASK )
! Open model_ready data from netCDF file
CALL Ncop_Rd(fId2, TRIM(ALK_MASK))
! Read model_ready data from netCDF file
CALL NcRd(VOC_DATA, fId2, 'emiss_tra', &
(/ 1, 1, 1 /), & !Start
(/ I01x01, J01x01, 1/) ) !Count lat/lon
DO I = 1, I01x01
DO J = 1, J01x01
IF (MASK(I,J) .GT. 0d0 ) THEN
VOC_DATA(I,J,1) = VOC_DATA(I,J,1) * MASK(I,J)
ENDIF
ENDDO
ENDDO
ALK4_TMP = ALK4_TMP + VOC_DATA(:,:,1)
! Close netCDF file
CALL NcCl( fId2 )
ENDDO
ENDIF
CASE ( 'RESIDENTIAL' )
! Read model_ready data from netCDF file
CALL NcRd(VOC_DATA, fId1, 'emiss_dom', &
(/ 1, 1, 1 /), & !Start
(/ I01x01, J01x01, 1/) ) !Count lat/lon
IF ( N == IDEALK4 ) THEN
DO ALK = 1, SIZE( ALK_NUM )
ALK_MASK = TRIM( DATA_DIR_1x1 ) // &
'HTAP/HTAPv2_' // &
TRIM( EMIS_TYPE(CAT) ) // &
TRIM( ALK_NUM( ALK ) ) // &
TRIM(HTAP_YEAR) // '0.1x0.1.nc'
! Echo info
IF ( N == IDEALK4 ) WRITE( 6, 100 ) TRIM( ALK_MASK )
! Open model_ready data from netCDF file
CALL Ncop_Rd(fId2, TRIM(ALK_MASK))
! Read model_ready data from netCDF file
CALL NcRd(VOC_DATA, fId2, 'emiss_dom', &
(/ 1, 1, 1 /), & !Start
(/ I01x01, J01x01, 1/) ) !Count lat/lon
DO I = 1, I01x01
DO J = 1, J01x01
IF (MASK(I,J) .GT. 0d0 ) THEN
VOC_DATA(I,J,1) = VOC_DATA(I,J,1) * MASK(I,J)
ENDIF
ENDDO
ENDDO
ALK4_TMP = ALK4_TMP + VOC_DATA(:,:,1)
! Close netCDF file
CALL NcCl( fId2 )
ENDDO
ENDIF
CASE ( 'INDUSTRY' )
! Read model_ready data from netCDF file
CALL NcRd(VOC_DATA, fId1, 'emiss_ind', &
(/ 1, 1, 1 /), & !Start
(/ I01x01, J01x01, 1/) ) !Count lat/lon
IF ( N == IDEALK4 ) THEN
DO ALK = 1, SIZE( ALK_NUM )
ALK_MASK = TRIM( DATA_DIR_1x1 ) // &
'HTAP/HTAPv2_' // &
TRIM( EMIS_TYPE(CAT) ) // &
TRIM( ALK_NUM( ALK ) ) // &
TRIM(HTAP_YEAR) // '0.1x0.1.nc'
! Echo info
IF ( N == IDEALK4 ) WRITE( 6, 100 ) TRIM( ALK_MASK )
! Open model_ready data from netCDF file
CALL Ncop_Rd(fId2, TRIM(ALK_MASK))
! Read model_ready data from netCDF file
CALL NcRd(VOC_DATA, fId2, 'emiss_ind', &
(/ 1, 1, 1 /), & !Start
(/ I01x01, J01x01, 1/) ) !Count lat/lon
DO I = 1, I01x01
DO J = 1, J01x01
IF (MASK(I,J) .GT. 0d0 ) THEN
VOC_DATA(I,J,1) = VOC_DATA(I,J,1) * MASK(I,J)
ENDIF
ENDDO
ENDDO
ALK4_TMP = ALK4_TMP + VOC_DATA(:,:,1)
! Close netCDF file
CALL NcCl( fId2 )
ENDDO
ENDIF
CASE DEFAULT
!Do nothing
END SELECT
! Close netCDF file
CALL NcCl( fId1 )
ENDIF
DO I = 1, I01x01
DO J = 1, J01x01
IF (MASK(I,J) .GT. 0d0 ) THEN
VOC_DATA(I,J,1) = VOC_DATA(I,J,1) * MASK(I,J)
ENDIF
ENDDO
ENDDO
!Apply VOCs Speciation
IF ( N == IDEC2H6 ) C2H6_TMP = C2H6_TMP + VOC_DATA(:,:,1)
IF ( N == IDEC3H8 ) C3H8_TMP = C3H8_TMP + VOC_DATA(:,:,1)
IF ( N == IDEPRPE ) PRPE_TMP = PRPE_TMP + VOC_DATA(:,:,1)
IF ( N == IDECH2O ) CH2O_TMP = CH2O_TMP + VOC_DATA(:,:,1)
IF ( N == IDEALD2 ) ALD2_TMP = ALD2_TMP + VOC_DATA(:,:,1)
IF ( N == IDEACET ) ACET_TMP = ACET_TMP + VOC_DATA(:,:,1)
IF ( N == IDEMEK ) MEK_TMP = MEK_TMP + VOC_DATA(:,:,1)
ENDDO
ENDIF
! Apply Regional Mask if defined
DO I = 1, I01x01
DO J = 1, J01x01
IF (MASK(I,J) .GT. 0d0 ) THEN
ARRAY(I,J) = ARRAY(I,J) * MASK(I,J)
ENDIF
ENDDO
ENDDO
! Add sectors before regridding
GEOS_01x01(:,:) = GEOS_01x01(:,:) + ARRAY(:,:)
ENDDO
100 FORMAT( ' - EMISS_HTAP_0.1x0.1: &
Reading : ', a )
! Regrid from GEOS 0.1x0.1 --> current model resolution
SELECT CASE ( SId )
CASE ( 'BC' )
!-----------------
! BCPO
!-----------------
INGRID => GEOS_01x01(:,:)
OUTGRID => BC(:,:)
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
CASE ( 'CO' )
!-----------------
! CO
!-----------------
! Point to array slices
INGRID => GEOS_01x01(:,:)
OUTGRID => CO(:,:)
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
CASE ( 'NH3' )
!-----------------
! NH3
!-----------------
! Point to array slices
INGRID => GEOS_01x01(:,:)
OUTGRID => NH3(:,:)
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
CASE ( 'NMVOC' )
!-----------------
! VOC
!-----------------
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
ALK4_TMP, ALK4_HTAP, IS_MASS=0, &
netCDF=.TRUE. )
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
ACET_TMP, ACET_HTAP, IS_MASS=0, &
netCDF=.TRUE. )
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
MEK_TMP, MEK_HTAP, IS_MASS=0, &
netCDF=.TRUE. )
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
ALD2_TMP, ALD2_HTAP, IS_MASS=0, &
netCDF=.TRUE. )
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
PRPE_TMP, PRPE_HTAP, IS_MASS=0, &
netCDF=.TRUE. )
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
C3H8_TMP, C3H8_HTAP, IS_MASS=0, &
netCDF=.TRUE. )
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
CH2O_TMP, CH2O_HTAP, IS_MASS=0, &
netCDF=.TRUE. )
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
C2H6_TMP, C2H6_HTAP, IS_MASS=0, &
netCDF=.TRUE. )
CASE ( 'NOx' )
!-----------------
! NOX
!-----------------
! Point to array slices
INGRID => GEOS_01x01(:,:)
OUTGRID => NOX(:,:)
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
CASE ( 'OC' )
!-----------------
! OCPO
!-----------------
INGRID => GEOS_01x01(:,:)
OUTGRID => OC(:,:)
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
! Reset GEOS_01x01
GEOS_01x01 = 0d0
CASE ( 'SO2' )
!-----------------
! SO2
!-----------------
! Point to array slices
INGRID => GEOS_01x01(:,:)
OUTGRID => SO2(:,:)
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
CASE ( 'PM2.5' )
!-----------------
! PM2.5
!-----------------
! Point to array slices
INGRID => GEOS_01x01(:,:)
OUTGRID => PM25(:,:)
! Regrid
CALL DO_REGRID_DKH( LLFILENAME, I01x01, J01x01, &
INGRID, OUTGRID, IS_MASS=0, &
netCDF=.TRUE. )
! Free pointers
NULLIFY( INGRID, OUTGRID )
END SELECT
ENDDO
!--------------------------
! Print emission totals for the day
!--------------------------
CALL TOTAL_HTAP_Tg( DOYT )
! Return to calling program
END SUBROUTINE EMISS_HTAP
!
! !IROUTINE: total_htap_Tg
!
! !DESCRIPTION: Subroutine TOTAL\_ANTHRO\_TG prints the totals for the
! anthropogenic emissions of NOx, CO, SO2 and NH3.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE TOTAL_HTAP_TG( DAY )
!
! !USES:
!
USE GRID_MOD, ONLY : GET_AREA_M2
USE TIME_MOD, ONLY : GET_YEAR, GET_MONTH
USE TRACER_MOD, ONLY : XNUMOL
USE TRACERID_MOD, ONLY : IDTCO, IDTCH2O
USE TRACERID_MOD, ONLY : IDTSO2, IDTNH3, IDTNOx
USE TRACERID_MOD, ONLY : IDTOCPO, IDTBCPO
# include "CMN_SIZE" ! Size parameters
! !INPUT PARAMETERS:
!
INTEGER, INTENT(IN) :: DAY ! Day of data to compute totals
!
! !REVISION HISTORY:
! Sept 2013 - Yanko Davila - initial version
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
INTEGER :: II, JJ, IH, LL
REAL*8 :: T_CO, T_NOx, T_SO2, T_NH3
REAL*8 :: T_BC, T_OC
REAL*8 :: T_PM25
REAL*8 :: T_ALK4, T_ACET, T_MEK, T_ALD2
REAL*8 :: T_PRPE, T_C3H8, T_CH2O, T_C2H6
REAL*8 :: tmpArea(IIPAR, JJPAR)
CHARACTER(LEN=3) :: UNIT
REAL*8, PARAMETER :: SEC_IN_DAY = 86400d0
! Days per month
REAL*8 :: DAYS_IN_MONTH
REAL*8 :: DMON(12)
!=================================================================
! TOTAL_HTAP_TG begins here!
!=================================================================
! Fancy output
WRITE( 6, '(a)' ) REPEAT( '=', 79 )
WRITE( 6, 100 )
100 FORMAT( 'H. T. A. P. E M I S S I O N S', / )
DO II = 1, IIPAR
DO JJ = 1, JJPAR
tmpArea(II,JJ) = GET_AREA_M2(JJ)
ENDDO
ENDDO
IF ( GET_YEAR() .le. 2009 ) DMON = (/ 31d0, 29d0, 31d0, 30d0, &
31d0, 30d0, 31d0, 31d0, &
30d0, 31d0, 30d0, 31d0 /)
IF ( GET_YEAR() .ge. 2010 ) DMON = (/ 31d0, 28d0, 31d0, 30d0, &
31d0, 30d0, 31d0, 31d0, &
30d0, 31d0, 30d0, 31d0 /)
! Get days per month
DAYS_IN_MONTH = DMON( GET_MONTH() )
! Total CO [Tg CO]
T_CO = SUM( CO * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Total NOX [Tg NO2]
T_NOx = SUM( NOX * tmpArea) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Total SO2 [Tg SO2]
T_SO2 = SUM( SO2 * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Total NH3 [Tg NH3]
T_NH3 = SUM( NH3 * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Total BC [Tg C]
T_BC = SUM( BC * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Total OC [Tg C]
T_OC = SUM( OC * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Total VOC [Tg C]
T_ALK4 = SUM( ALK4_HTAP * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Total VOC [Tg C]
T_ACET = SUM( ACET_HTAP * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9 * 0.75d0
! Total VOC [Tg C]
T_MEK = SUM( MEK_HTAP * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9 * 0.25d0
! Total VOC [Tg C]
T_ALD2 = SUM( ALD2_HTAP * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Total VOC [Tg C]
T_PRPE = SUM( PRPE_HTAP * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Total VOC [Tg C]
T_C3H8 = SUM( C3H8_HTAP * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Total VOC [Tg C]
T_CH2O = SUM( CH2O_HTAP * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Total VOC [Tg C]
T_C2H6 = SUM( C2H6_HTAP * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Total PM25 [Tg C]
T_PM25 = SUM( PM25 * tmpArea ) * &
SEC_IN_DAY * DAYS_IN_MONTH * 1d-9
! Print totals in [Tg]
WRITE( 6, 110 ) 'CO ', T_CO, '[Tg CO]'
WRITE( 6, 110 ) 'NOx ', T_NOx, '[Tg NO2]'
WRITE( 6, 110 ) 'SO2 ', T_SO2, '[Tg SO2]'
WRITE( 6, 110 ) 'NH3 ', T_NH3, '[Tg NH3]'
WRITE( 6, 110 ) 'BC ', T_BC, '[Tg C]'
WRITE( 6, 110 ) 'OC ', T_OC, '[Tg C]'
WRITE( 6, 110 ) 'PM2.5 ', T_PM25, '[Tg C]'
WRITE( 6, 110 ) 'ALK4 ', T_ALK4, '[Tg Molec]'
WRITE( 6, 110 ) 'ACET ', T_ACET, '[Tg Molec]'
WRITE( 6, 110 ) 'MEK ', T_MEK , '[Tg Molec]'
WRITE( 6, 110 ) 'ALD2 ', T_ALD2, '[Tg Molec]'
WRITE( 6, 110 ) 'PRPE ', T_PRPE, '[Tg Molec]'
WRITE( 6, 110 ) 'C3H8 ', T_C3H8, '[Tg Molec]'
WRITE( 6, 110 ) 'CH2O ', T_CH2O, '[Tg Molec]'
WRITE( 6, 110 ) 'C2H6 ', T_C2H6, '[Tg Molec]'
! Format statement
110 FORMAT( 'HTAP Emissions ', a6, &
': ', f20.8, 1x, a10 )
! Fancy output
WRITE( 6, '(a)' ) REPEAT( '=', 79 )
! Return to calling program
END SUBROUTINE TOTAL_HTAP_Tg
!
! !IROUTINE: init_htap
!
! !DESCRIPTION: Subroutine INIT\_HTAP allocates and zeroes all
! module arrays.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE INIT_HTAP
!
! !USES:
!
USE ERROR_MOD, ONLY : ALLOC_ERR
USE LOGICAL_MOD, ONLY : LHTAP
# include "CMN_SIZE" ! Size parameters!
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
INTEGER :: AS, J
!=================================================================
! INIT_NEI2008_ANTHRO begins here!
!=================================================================
! Return if LHTAP is false
IF ( .not. LHTAP ) RETURN
!--------------------------------------------------
! Allocate and zero arrays for emissions
!--------------------------------------------------
ALLOCATE( BC( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'BC' )
BC = 0d0
ALLOCATE( CO( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'CO' )
CO = 0d0
ALLOCATE( NH3( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'NH3' )
NH3 = 0d0
ALLOCATE( NOX( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'NOX' )
NOX = 0d0
ALLOCATE( OC( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'OC' )
OC = 0d0
ALLOCATE( SO2( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'SO2' )
SO2 = 0d0
ALLOCATE( PM25( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'PM25' )
PM25 = 0d0
ALLOCATE( ALK4_HTAP( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'ALK4' )
ALK4_HTAP = 0d0
ALLOCATE( ACET_HTAP( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'ACET' )
ACET_HTAP = 0d0
ALLOCATE( MEK_HTAP ( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'MEK' )
MEK_HTAP = 0d0
ALLOCATE( ALD2_HTAP( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'ALD2' )
ALD2_HTAP = 0d0
ALLOCATE( PRPE_HTAP( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'PRPE' )
PRPE_HTAP = 0d0
ALLOCATE( C3H8_HTAP( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'C3H8' )
C3H8_HTAP = 0d0
ALLOCATE( CH2O_HTAP( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'CH2O' )
CH2O_HTAP = 0d0
ALLOCATE( C2H6_HTAP( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'C2H6' )
C2H6_HTAP = 0d0
! Return to calling program
END SUBROUTINE INIT_HTAP
!
! !IROUTINE: cleanup_htap
!
! !DESCRIPTION: Subroutine CLEANUP\_HTAP deallocates all module
! arrays.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE CLEANUP_HTAP
!
! !REVISION HISTORY:
! Sept 2013 - Yanko Davila - Initial revision
!EOP
!------------------------------------------------------------------------------
!BOC
!=================================================================
! CLEANUP_NEIO2008_ANTHRO begins here!
!=================================================================
IF ( ALLOCATED( BC ) ) DEALLOCATE( BC )
IF ( ALLOCATED( CO ) ) DEALLOCATE( CO )
IF ( ALLOCATED( NH3 ) ) DEALLOCATE( NH3 )
IF ( ALLOCATED( NOX ) ) DEALLOCATE( NOX )
IF ( ALLOCATED( OC ) ) DEALLOCATE( OC )
IF ( ALLOCATED( SO2 ) ) DEALLOCATE( SO2 )
IF ( ALLOCATED( PM25 ) ) DEALLOCATE( PM25 )
IF ( ALLOCATED( ALK4_HTAP ) ) DEALLOCATE( ALK4_HTAP )
IF ( ALLOCATED( ACET_HTAP ) ) DEALLOCATE( ACET_HTAP )
IF ( ALLOCATED( MEK_HTAP ) ) DEALLOCATE( MEK_HTAP )
IF ( ALLOCATED( ALD2_HTAP ) ) DEALLOCATE( ALD2_HTAP )
IF ( ALLOCATED( PRPE_HTAP ) ) DEALLOCATE( PRPE_HTAP )
IF ( ALLOCATED( C3H8_HTAP ) ) DEALLOCATE( C3H8_HTAP )
IF ( ALLOCATED( CH2O_HTAP ) ) DEALLOCATE( CH2O_HTAP )
IF ( ALLOCATED( C2H6_HTAP ) ) DEALLOCATE( C2H6_HTAP )
END SUBROUTINE CLEANUP_HTAP
!EOC
END MODULE HTAP_MOD