LCOV - code coverage report
Current view: | top level - hemco/HEMCO/src/Extensions - hcox_megan_mod.F90 (source / functions) |  |  | Hit | Total | Coverage
Test: | coverage.info |  | Lines: | 0 | 1651 | 0.0 %
Date: | 2024-12-17 22:39:59 |  | Functions: | 0 | 22 | 0.0 %

              Line data    Source code
           1             : !------------------------------------------------------------------------------
           2             : !                   Harmonized Emissions Component (HEMCO)                    !
           3             : !------------------------------------------------------------------------------
           4             : !BOP
           5             : !
           6             : ! !MODULE: hcox_megan_mod.F90
           7             : !
           8             : ! !DESCRIPTION: Module HCOX\_Megan\_Mod contains variables and routines
           9             : !  specifying the algorithms that control the MEGAN inventory of biogenic
          10             : !  emissions (as implemented into the GEOS-Chem model).
          11             : !\\
          12             : !\\
          13             : ! This is a HEMCO extension module that uses many of the HEMCO core
          14             : ! utilities.
          15             : !\\
          16             : !\\
          17             : ! MEGAN calculates gamma activity factor based upon temperature and
          18             : ! radiation information from the past. In the original GEOS-Chem
          19             : ! code, the initial 10-d averages were explicitly calculated during
          20             : ! initialization of MEGAN. This is not feasible in an ESMF environment,
          21             : ! and the following restart variables can now be provided through the
          22             : ! HEMCO configuration file:
          23             : ! \begin{itemize}
          24             : ! \item T\_DAVG: long-term historical temperature
          25             : ! \item PARDR\_DAVG: long-term historical direct radiation
          26             : ! \item PARDF\_DAVG: long-term historical diffuse radiation
          27             : ! \item T\_PREVDAY: short-term historical temperature
          28             : ! \end{itemize}
          29             : ! These variables are automatically searched for on the first call of
          30             : ! the run call. If not defined, default values will be used. The values
          31             : ! of T\_DAVG, T\_PREVDAY, PARDR\_DAVG, and PARDF\_DAVG are continuously
          32             : ! updated at the end of the run sequence, e.g. they represent the
          33             : ! instantaneous running average. The e-folding times to be used when
          34             : ! calculating the short=term and long-term running averages are defined
          35             : ! as module parameter below (parameter TAU\_HOURS and TAU\_DAYS).
          36             : !\\
          37             : !\\
          38             : ! A similar procedure is also applied to the leaf area index variables.
          39             : ! The original GEOS-Chem MEGAN code used three LAI variables: current month
          40             : ! LAI (LAI\_CM), previous month LAI (LAI\_PM), and instantaneous LAI (LAI),
          41             : ! which was a daily interpolation of LAI\_CM and next month' LAI, (LAI\_NM).
          42             : ! The HEMCO implementation uses only the instantaneous LAI, assuming it is
          43             : ! updated every day. The short term historical LAI is kept in memory and
          44             : ! used to determine the LAI change over time (used to calculate the gamma
          45             : ! leaf age). It is also updated on every time step.
          46             : ! For the first simulation day, the previous' day LAI is taken from the
          47             : ! restart file (field LAI\_PREVDAY). If no restart variable is defined, a
          48             : ! LAI change of zero is assumed (ckeller, 10/9/2014).
          49             : !\\
          50             : !\\
          51             : ! !References:
          52             : !
          53             : !  \begin{itemize}
          54             : !  \item Guenther, A., et al., \emph{The Model of Emissions of Gases and
          55             : !        Aerosols from Nature version 2.1 (MEGAN2.1): an extended and updated
          56             : !        framework for modeling biogenic emissions}, \underline{Geosci. Model
          57             : !        Dev.}, \textbf{5}, 1471-1792, 2012.
          58             : !  \item Guenther, A., et al., \emph{A global model of natural volatile
          59             : !        organic compound emissions}, \underline{J.Geophys. Res.},
          60             : !        \textbf{100}, 8873-8892, 1995.
          61             : !  \item Wang, Y., D. J. Jacob, and J. A. Logan, \emph{Global simulation of
          62             : !        tropospheric O3-Nox-hydrocarbon chemistry: 1. Model formulation},
          63             : !        \underline{J. Geophys. Res.}, \textbf{103}, D9, 10713-10726, 1998.
          64             : !  \item Guenther, A., B. Baugh, G. Brasseur, J. Greenberg, P. Harley, L.
          65             : !        Klinger, D. Serca, and L. Vierling, \emph{Isoprene emission estimates
          66             : !        and uncertanties for the Central African EXPRESSO study domain},
          67             : !        \underline{J. Geophys. Res.}, \textbf{104}, 30,625-30,639, 1999.
          68             : !  \item Guenther, A. C., T. Pierce, B. Lamb, P. Harley, and R. Fall,
          69             : !        \emph{Natural emissions of non-methane volatile organic compounds,
          70             : !        carbon monoxide, and oxides of nitrogen from North America},
          71             : !        \underline{Atmos. Environ.}, \textbf{34}, 2205-2230, 2000.
          72             : !  \item Guenther, A., and C. Wiedinmyer, \emph{User's guide to Model of
          73             : !        Emissions of Gases and Aerosols from Nature}. http://cdp.ucar.edu.
          74             : !        (Nov. 3, 2004)
          75             : !  \item Guenther, A., \emph{AEF for methyl butenol}, personal commucation.
          76             : !        (Nov, 2004)
          77             : !  \item Sakulyanontvittaya, T., T. Duhl, C. Wiedinmyer, D. Helmig, S.
          78             : !        Matsunaga, M. Potosnak, J. Milford, and A. Guenther, \emph{Monoterpene
          79             : !        and sesquiterpene emission estimates for the United States},
          80             : !        \underline{Environ. Sci. Technol}, \textbf{42}, 1623-1629, 2008.
          81             : !  \end{itemize}
          82             : !
          83             : ! !INTERFACE:
          84             : !
          85             : MODULE HCOX_MEGAN_MOD
          86             : !
          87             : ! !USES:
          88             : !
          89             :   USE HCO_ERROR_MOD
          90             :   USE HCO_DIAGN_MOD
          91             :   USE HCOX_State_MOD,    ONLY : Ext_State
          92             :   USE HCO_STATE_MOD,     ONLY : HCO_STATE
          93             :
          94             :   IMPLICIT NONE
          95             :   PRIVATE
          96             : !
          97             : ! !PUBLIC MEMBER FUNCTIONS:
          98             : !
          99             :   PUBLIC  :: HCOX_Megan_Init
         100             :   PUBLIC  :: HCOX_Megan_Run
         101             :   PUBLIC  :: HCOX_Megan_Final
         102             : !
         103             : ! !PRIVATE MEMBER FUNCTIONS:
         104             : !
         105             :   PRIVATE :: GET_MEGAN_EMISSIONS  ! dbm, new MEGAN driver routine
         106             :                                   ! for all compounds (6/21/2012)
         107             :   PRIVATE :: GET_MEGAN_PARAMS
         108             :   PRIVATE :: GET_MEGAN_AEF
         109             :   PRIVATE :: GET_GAMMA_PAR_PCEEA
         110             :   PRIVATE :: GET_GAMMA_T_LI
         111             :   PRIVATE :: GET_GAMMA_T_LD
         112             :   PRIVATE :: GET_GAMMA_LAI
         113             :   PRIVATE :: GET_GAMMA_AGE
         114             :   PRIVATE :: GET_GAMMA_SM
         115             :   PRIVATE :: CALC_NORM_FAC
         116             :   PRIVATE :: SOLAR_ANGLE
         117             :   PRIVATE :: FILL_RESTART_VARS
         118             :   PRIVATE :: CALC_AEF
         119             :   PRIVATE :: GET_GAMMA_CO2  ! (Tai, Jan 2013)
         120             : !
         121             : ! !REVISION HISTORY:
         122             : !  (1 ) Original code (biogen_em_mod.f) by Dorian Abbot (6/2003).  Updated to
         123             : !        latest algorithm and modified for the standard code by May Fu
         124             : !        (11/2004).
         125             : !  See https://github.com/geoschem/hemco for complete history
         126             : !EOP
         127             : !------------------------------------------------------------------------------
         128             : !BOC
         129             : !
         130             : ! !MODULE VARIABLES:
         131             : !
         132             :   TYPE :: MyInst
         133             :      INTEGER                 :: Instance
         134             :      INTEGER                 :: ExtNr        ! Extension number for MEGAN
         135             :      REAL(hp)                :: ISOP_SCALING ! Isoprene emissions scaling
         136             :      REAL(hp)                :: GLOBCO2      ! Global CO2 conc (ppmv)
         137             :      REAL(hp)                :: ISOPTOSOAP   ! SOAP Emission factor
         138             :      REAL(hp)                :: MONOTOSOAP   ! SOAP Emission factor
         139             :      REAL(hp)                :: OTHRTOSOAP   ! SOAP Emission factor
         140             :      REAL(hp)                :: ISOPTOSOAS   ! Direct SOA Emission factor
         141             :      REAL(hp)                :: MONOTOSOAS   ! Direct SOA Emission factor
         142             :      REAL(hp)                :: OTHRTOSOAS   ! Direct SOA Emission factor
         143             :      LOGICAL                 :: LISOPCO2     ! Include CO2 inhibition of ISOP?
         144             :      LOGICAL                 :: NORMLAI      ! Normalize LAI by PFT?
         145             :      LOGICAL                 :: OFFLINE_BIOGENICVOC ! Use offline emiss?
         146             :
         147             :      ! Physical parameter
         148             :      REAL(hp)                :: D2RAD  ! Degrees to radians
         149             :      REAL(hp)                :: RAD2D  ! Radians to degrees
         150             :
         151             :      ! HEMCO species IDs
         152             :      INTEGER                 :: IDTISOP
         153             :      INTEGER                 :: IDTACET
         154             :      INTEGER                 :: IDTPRPE
         155             :      INTEGER                 :: IDTC2H4
         156             :      INTEGER                 :: IDTALD2
         157             :      INTEGER                 :: IDTMOH
         158             :      INTEGER                 :: IDTEOH
         159             :      INTEGER                 :: IDTLIMO
         160             :      INTEGER                 :: IDTMTPA
         161             :      INTEGER                 :: IDTMTPO
         162             :      INTEGER                 :: IDTSESQ
         163             :      INTEGER                 :: IDTSOAP
         164             :      INTEGER                 :: IDTSOAS
         165             :
         166             :      ! Pointers to annual emission factor arrays.
         167             :      ! These fields are obtained from ext. data (from config file)
         168             :      ! These arrays represent the base emission values in kg/m2/s
         169             :      ! that will be scaled based upon meteorological conditions.
         170             :      REAL(hp), POINTER       :: AEF_ISOP(:,:)
         171             :      REAL(hp), POINTER       :: AEF_MBOX(:,:)
         172             :      REAL(hp), POINTER       :: AEF_BPIN(:,:)
         173             :      REAL(hp), POINTER       :: AEF_CARE(:,:)
         174             :      REAL(hp), POINTER       :: AEF_LIMO(:,:)
         175             :      REAL(hp), POINTER       :: AEF_OCIM(:,:)
         176             :      REAL(hp), POINTER       :: AEF_SABI(:,:)
         177             :
         178             :      ! Annual emission factors arrays
         179             :      ! These fields are not read from file, but are computed in CALC_AEF
         180             :      REAL(hp), POINTER       :: AEF_APIN(:,:)              ! Alpha-pinene
         181             :      REAL(hp), POINTER       :: AEF_MYRC(:,:)              ! Myrcene
         182             :      REAL(hp), POINTER       :: AEF_OMON(:,:)              ! Other monoterpenes
         183             :      REAL(hp), POINTER       :: AEF_ACET(:,:)              ! Acetone
         184             :      REAL(hp), POINTER       :: AEF_MOH(:,:)               ! Methanol
         185             :      REAL(hp), POINTER       :: AEF_EOH(:,:)               ! Ethanol
         186             :      REAL(hp), POINTER       :: AEF_CH2O(:,:)              ! Formaldehyde
         187             :      REAL(hp), POINTER       :: AEF_ALD2(:,:)              ! Acetaldehyde
         188             :      REAL(hp), POINTER       :: AEF_FAXX(:,:)              ! Formic acid
         189             :      REAL(hp), POINTER       :: AEF_AAXX(:,:)              ! Acetic acid
         190             :      REAL(hp), POINTER       :: AEF_C2H4(:,:)              ! Ethene
         191             :      REAL(hp), POINTER       :: AEF_TOLU(:,:)              ! Toluene
         192             :      REAL(hp), POINTER       :: AEF_HCNX(:,:)              ! HCN
         193             :      REAL(hp), POINTER       :: AEF_PRPE(:,:)              ! >= C3 alkenes
         194             :      REAL(hp), POINTER       :: AEF_FARN(:,:)              ! a-Farnesene
         195             :      REAL(hp), POINTER       :: AEF_BCAR(:,:)              ! b-Caryophyllene
         196             :      REAL(hp), POINTER       :: AEF_OSQT(:,:)              ! Other sesquiterp.
         197             :
         198             :      ! Emission arrays (kg/m2/s)
         199             :      REAL(hp), POINTER       :: FLUXISOP(:,:)
         200             :      REAL(hp), POINTER       :: FLUXMONO(:,:)
         201             :      REAL(hp), POINTER       :: FLUXACET(:,:)
         202             :      REAL(hp), POINTER       :: FLUXPRPE(:,:)
         203             :      REAL(hp), POINTER       :: FLUXC2H4(:,:)
         204             :      REAL(hp), POINTER       :: FLUXLIMO(:,:)
         205             :      REAL(hp), POINTER       :: FLUXMTPA(:,:)
         206             :      REAL(hp), POINTER       :: FLUXMTPO(:,:)
         207             :      REAL(hp), POINTER       :: FLUXSESQ(:,:)
         208             :      REAL(hp), POINTER       :: FLUXSOAP(:,:)
         209             :      REAL(hp), POINTER       :: FLUXSOAS(:,:)
         210             :      REAL(hp), POINTER       :: FLUXALD2(:,:)
         211             :      REAL(hp), POINTER       :: FLUXMOH(:,:)
         212             :      REAL(hp), POINTER       :: FLUXEOH(:,:)
         213             :
         214             :      ! Emission arrays for use in diagnostics (kg/m2/s)
         215             :      REAL(sp), POINTER       :: FLUXACETmb(:,:)
         216             :      REAL(sp), POINTER       :: FLUXACETbg(:,:)
         217             :      REAL(sp), POINTER       :: FLUXAPIN(:,:)
         218             :      REAL(sp), POINTER       :: FLUXBPIN(:,:)
         219             :      REAL(sp), POINTER       :: FLUXSABI(:,:)
         220             :      REAL(sp), POINTER       :: FLUXMYRC(:,:)
         221             :      REAL(sp), POINTER       :: FLUXCARE(:,:)
         222             :      REAL(sp), POINTER       :: FLUXOCIM(:,:)
         223             :      REAL(sp), POINTER       :: FLUXOMON(:,:)
         224             :      REAL(sp), POINTER       :: FLUXFARN(:,:)
         225             :      REAL(sp), POINTER       :: FLUXBCAR(:,:)
         226             :      REAL(sp), POINTER       :: FLUXOSQT(:,:)
         227             :      REAL(sp), POINTER       :: FLUXMBOX(:,:)
         228             :      REAL(sp), POINTER       :: FLUXFAXX(:,:)
         229             :      REAL(sp), POINTER       :: FLUXAAXX(:,:)
         230             :
         231             :      ! Normalization factor
         232             :      REAL(hp), POINTER       :: NORM_FAC(:)
         233             :
         234             :      ! Restart variables
         235             :      REAL(sp), POINTER       :: T_LASTXDAYS    (:,:) ! Avg. temp  of last X days
         236             :      REAL(sp), POINTER       :: T_LAST24H      (:,:) ! Avg. temp  of last 24 hrs
         237             :      REAL(sp), POINTER       :: PARDF_LASTXDAYS(:,:) ! Avg. PARDF of last X days
         238             :      REAL(sp), POINTER       :: PARDR_LASTXDAYS(:,:) ! Avg. PARDR of last X days
         239             :      REAL(sp), POINTER       :: LAI_PREVDAY(:,:)     ! LAI of prev. day
         240             :
         241             :      ! Array for PFT
         242             :      REAL(hp), POINTER       :: ARRAY_16(:,:,:)
         243             :
         244             :      ! Days between mid-months (updated by HEMCO clock)
         245             :      INTEGER                 :: DAYS_BTW_M
         246             :
         247             :      ! Input data suffix
         248             :      CHARACTER(LEN=255)      :: SUFFIX
         249             :
         250             :      TYPE(MyInst), POINTER   :: NextInst => NULL()
         251             :   END TYPE MyInst
         252             :
         253             :   ! Pointer to all instances
         254             :   TYPE(MyInst), POINTER      :: AllInst => NULL()
         255             :
         256             :   ! Scalars
         257             :   ! e-folding time to be applied to long-term past conditions (in days)
         258             :   REAL(hp), PARAMETER  :: TAU_DAYS  = 5.0_hp
         259             :
         260             :   ! e-folding time to be applied to short-term past conditions (in hours)
         261             :   REAL(hp), PARAMETER  :: TAU_HOURS = 12.0_hp
         262             :
         263             :   ! W/m2 -> umol/m2/s
         264             :   REAL(hp), PARAMETER  :: WM2_TO_UMOLM2S = 4.766_hp
         265             :
         266             :   ! Maximum LAI value [cm2/cm2]
         267             :   REAL(hp), PARAMETER  :: LAI_MAX = 6.0_hp
         268             :
         269             : CONTAINS
         270             : !EOC
         271             : !------------------------------------------------------------------------------
         272             : !                   Harmonized Emissions Component (HEMCO)                    !
         273             : !------------------------------------------------------------------------------
         274             : !BOP
         275             : !
         276             : ! !IROUTINE: HCOX_Megan_Run
         277             : !
         278             : ! !DESCRIPTION: Subroutine HCOX\_MEGAN\_Run is the driver routine for
         279             : ! the MEGAN model within the new emissions structure.
         280             : ! Note that all diagnostics are commented since those are still written
         281             : ! as part of the old emission structure.
         282             : !\\
         283             : !\\
         284             : ! !INTERFACE:
         285             : !
         286           0 :   SUBROUTINE HCOX_Megan_Run( ExtState, HcoState, RC )
         287             : !
         288             : ! !USES:
         289             : !
         290             :     USE HCO_FLUXARR_MOD,     ONLY : HCO_EmisAdd
         291             :     USE HCO_CLOCK_MOD,       ONLY : HcoClock_First
         292             :     USE HCO_CLOCK_MOD,       ONLY : HcoClock_Rewind
         293             :     USE HCO_CLOCK_MOD,       ONLY : HcoClock_NewHour
         294             :     USE HCO_CLOCK_MOD,       ONLY : HcoClock_NewDay
         295             :     USE HCO_Restart_Mod,     ONLY : HCO_RestartWrite
         296             : !
         297             : ! !INPUT PARAMETERS:
         298             : !
         299             :     TYPE(Ext_State), POINTER       :: ExtState
         300             :     TYPE(HCO_State), POINTER       :: HcoState
         301             : !
         302             : ! !INPUT/OUTPUT PARAMETERS:
         303             : !
         304             :     INTEGER,         INTENT(INOUT) :: RC
         305             : !
         306             : ! !REVISION HISTORY:
         307             : !  05 Aug 2013 - C. Keller   - Initial version
         308             : !  See https://github.com/geoschem/hemco for complete history
         309             : !EOP
         310             : !------------------------------------------------------------------------------
         311             : !BOC
         312             : !
         313             : ! !LOCAL VARIABLES:
         314             : !
         315             :     INTEGER             :: I, J
         316             :     REAL(hp)            :: EMIS_ISOP, EMIS_MBOX, EMIS_APIN, EMIS_BPIN
         317             :     REAL(hp)            :: EMIS_LIMO, EMIS_SABI, EMIS_MYRC, EMIS_CARE
         318             :     REAL(hp)            :: EMIS_OCIM, EMIS_OMON, EMIS_MONO, EMIS_ALD2
         319             :     REAL(hp)            :: EMIS_MOH,  EMIS_EOH,  EMIS_FAXX, EMIS_AAXX
         320             :     REAL(hp)            :: EMIS_ACET, EMIS_PRPE, EMIS_C2H4
         321             :     REAL(hp)            :: EMIS_FARN, EMIS_BCAR, EMIS_OSQT
         322             :     REAL(hp)            :: EMIS_OTHR
         323             :     REAL(hp)            :: X, Y, TMP
         324             :     REAL(hp)            :: TS_EMIS
         325             :     REAL(hp)            :: DNEWFRAC
         326             :     REAL(hp)            :: DOLDFRAC
         327             :     REAL(hp)            :: HNEWFRAC
         328             :     REAL(hp)            :: HOLDFRAC
         329             :     LOGICAL             :: ERR
         330             :     LOGICAL             :: FIRST, IsNewHour, IsNewDay
         331             :
         332             :     ! For diagnostics
         333           0 :     REAL(hp), POINTER   :: Arr2D(:,:)
         334             :     CHARACTER(LEN=63)   :: DiagnName
         335             :     CHARACTER(LEN=255)  :: MSG, LOC
         336             :
         337             :     ! Conversion factors for acetone calculations
         338             :     REAL(hp), PARAMETER   :: YIELD_MO   = 0.116_hp
         339             :     REAL(hp), PARAMETER   :: MONO_SCALE = 0.89_hp
         340             :     REAL(hp), PARAMETER   :: MB_SCALE1  = 0.6_hp
         341             :     REAL(hp), PARAMETER   :: MB_SCALE2  = 0.76_hp
         342             :     REAL(hp), PARAMETER   :: MBOX_MW_g  = 86.13_hp
         343             :
         344             :     ! Conversion facor for SOAP/SOAS calculations
         345             :     REAL(hp), PARAMETER   :: MONOtoC    = ( 12.0 * 10 ) / 136.26
         346             :
         347             :     TYPE(MyInst), POINTER :: Inst
         348             :
         349             :     !=================================================================
         350             :     ! HCOX_Megan_Run begins here!
         351             :     !=================================================================
         352           0 :     LOC = 'HCOX_Megan_Run (HCOX_MEGAN_MOD.F90)'
         353             :
         354             :     ! Enter
         355           0 :     CALL HCO_ENTER( HcoState%Config%Err, LOC, RC )
         356           0 :     IF ( RC /= HCO_SUCCESS ) THEN
         357           0 :         CALL HCO_ERROR( 'ERROR 0', RC, THISLOC=LOC )
         358           0 :         RETURN
         359             :     ENDIF
         360           0 :     ERR = .FALSE.
         361             :
         362             :     ! Nullify
         363           0 :     Arr2d => NULL()
         364           0 :     Inst  => NULL()
         365             :
         366             :     ! Get instance
         367           0 :     CALL InstGet ( ExtState%Megan, Inst, RC )
         368           0 :     IF ( RC /= HCO_SUCCESS ) THEN
         369           0 :        WRITE(MSG,*) 'Cannot find Megan instance Nr. ', ExtState%Megan
         370           0 :        CALL HCO_ERROR(MSG,RC)
         371           0 :        RETURN
         372             :     ENDIF
         373             :
         374             :     ! Time information
         375           0 :     FIRST     = HcoClock_First  ( HcoState%Clock, .TRUE. )
         376             :     IsNewHour = HcoClock_NewHour( HcoState%Clock, .TRUE. )
         377             :     IsNewDay  = HcoClock_NewDay ( HcoState%Clock, .TRUE. )
         378             :
         379             :     ! Initialize flux arrays
         380           0 :     Inst%FLUXISOP   = 0.0_hp
         381           0 :     Inst%FLUXMBOX   = 0.0_hp
         382           0 :     Inst%FLUXAPIN   = 0.0_hp
         383           0 :     Inst%FLUXBPIN   = 0.0_hp
         384           0 :     Inst%FLUXSABI   = 0.0_hp
         385           0 :     Inst%FLUXMYRC   = 0.0_hp
         386           0 :     Inst%FLUXCARE   = 0.0_hp
         387           0 :     Inst%FLUXOCIM   = 0.0_hp
         388           0 :     Inst%FLUXOMON   = 0.0_hp
         389           0 :     Inst%FLUXMONO   = 0.0_hp
         390           0 :     Inst%FLUXACET   = 0.0_hp
         391           0 :     Inst%FLUXALD2   = 0.0_hp
         392           0 :     Inst%FLUXMOH    = 0.0_hp
         393           0 :     Inst%FLUXEOH    = 0.0_hp
         394           0 :     Inst%FLUXFAXX   = 0.0_hp
         395           0 :     Inst%FLUXAAXX   = 0.0_hp
         396           0 :     Inst%FLUXACETmb = 0.0_sp
         397           0 :     Inst%FLUXACETbg = 0.0_sp
         398           0 :     Inst%FLUXPRPE   = 0.0_sp
         399           0 :     Inst%FLUXC2H4   = 0.0_sp
         400           0 :     Inst%FLUXLIMO   = 0.0_sp
         401           0 :     Inst%FLUXMTPA   = 0.0_sp
         402           0 :     Inst%FLUXMTPO   = 0.0_sp
         403           0 :     Inst%FLUXFARN   = 0.0_sp
         404           0 :     Inst%FLUXBCAR   = 0.0_sp
         405           0 :     Inst%FLUXOSQT   = 0.0_sp
         406           0 :     Inst%FLUXSESQ   = 0.0_sp
         407           0 :     Inst%FLUXSOAP   = 0.0_sp
         408           0 :     Inst%FLUXSOAS   = 0.0_sp
         409             :
         410             : #if defined( ESMF_ ) || defined( MODEL_GEOS )
         411             :
         412             :     !----------------------------------------------------------------
         413             :     ! %%%%% ESMF environment: execute these on every call  %%%%%
         414             :     ! %%%%% because this will fill from the External State %%%%%
         415             :     !----------------------------------------------------------------
         416             :
         417             :     ! Generate annual emission factors for MEGAN inventory
         418             :     CALL CALC_AEF( HcoState, ExtState, Inst, RC )
         419             :     IF ( RC /= HCO_SUCCESS ) THEN
         420             :        MSG = 'Error encountered in MEGAN routine CALC_AEF!'
         421             :        CALL HCO_ERROR( MSG, RC )
         422             :        RETURN
         423             :     ENDIF
         424             :
         425             :     ! Calculate normalization factor (dbm, 11/2012)
         426             :     CALL CALC_NORM_FAC( Inst, RC )
         427             :     IF ( RC /= HCO_SUCCESS ) THEN
         428             :        MSG = 'Error encountered in MEGAN routine CALC_NORM_FAC!'
         429             :        CALL HCO_ERROR( MSG, RC )
         430             :        RETURN
         431             :     ENDIF
         432             :
         433             :     ! Fill restart variables.
         434             :     CALL FILL_RESTART_VARS( HcoState, ExtState, Inst, RC )
         435             :     IF ( RC /= HCO_SUCCESS ) THEN
         436             :        MSG = 'Error encountered in MEGAN routine FILL_RESTART_VARS!'
         437             :        CALL HCO_ERROR( MSG, RC )
         438             :        RETURN
         439             :     ENDIF
         440             :
         441             : #else
         442             :
         443             :     !----------------------------------------------------------------
         444             :     ! %%%%% Standard environment: Execute these only once     %%%%%
         445             :     ! %%%%% to avoid constantly overwriting restart variables %%%%%
         446             :     !----------------------------------------------------------------
         447           0 :     IF ( FIRST ) THEN
         448             :
         449             :        ! Generate annual emission factors for MEGAN inventory
         450           0 :        CALL CALC_AEF( HcoState, ExtState, Inst, RC )
         451           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         452           0 :           MSG = 'Error encountered in MEGAN routine CALC_AEF!'
         453           0 :           CALL HCO_ERROR( MSG, RC )
         454           0 :           RETURN
         455             :        ENDIF
         456             :
         457             :        ! Calculate normalization factor (dbm, 11/2012)
         458           0 :        CALL CALC_NORM_FAC( Inst, RC )
         459           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         460           0 :           MSG = 'Error encountered in MEGAN routine CALC_NORM_FAC!'
         461           0 :           CALL HCO_ERROR( MSG, RC )
         462           0 :           RETURN
         463             :        ENDIF
         464             :
         465             :        ! Fill restart variables
         466           0 :        CALL FILL_RESTART_VARS( HcoState, ExtState, Inst, RC )
         467           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         468           0 :           MSG = 'Error encountered in MEGAN routine FILL_RESTART_VARS!'
         469           0 :           CALL HCO_ERROR( MSG, RC )
         470           0 :           RETURN
         471             :        ENDIF
         472             :     ENDIF
         473             :
         474             : #endif
         475             :
         476             :     ! Set to 1 day since we know that LAI is updated every day.
         477           0 :     Inst%DAYS_BTW_M = 1
         478             :
         479             :     ! Calculate weights for running means of historic variables
         480             :     ! DNEWFRAC and DOLDFRAC are the weights given to the current
         481             :     ! and existing value, respectively, when updating running means
         482             :     ! over the last X days. HNEWFRAC and HOLDFRAC are the same but
         483             :     ! for the 24H means. (ckeller, 11/05/2015)
         484           0 :     TS_EMIS  = HcoState%TS_EMIS
         485           0 :     DNEWFRAC = TS_EMIS / ( TAU_DAYS * 24.0_hp * 3600.0_hp )
         486           0 :     DOLDFRAC = 1.0_hp - DNEWFRAC
         487           0 :     HNEWFRAC = TS_EMIS / ( TAU_HOURS * 3600.0_hp )
         488           0 :     HOLDFRAC = 1.0_hp - HNEWFRAC
         489             :
         490             :     !$OMP PARALLEL DO       &
         491             :     !$OMP DEFAULT( SHARED ) &
         492             :     !$OMP PRIVATE( I, J,      EMIS_ISOP, EMIS_MBOX, EMIS_APIN, EMIS_BPIN   ) &
         493             :     !$OMP PRIVATE( EMIS_LIMO, EMIS_SABI, EMIS_MYRC, EMIS_CARE, EMIS_OCIM   ) &
         494             :     !$OMP PRIVATE( EMIS_OMON, EMIS_MONO, EMIS_MOH,  EMIS_EOH,  EMIS_FAXX   ) &
         495             :     !$OMP PRIVATE( EMIS_AAXX, EMIS_ACET, EMIS_PRPE, EMIS_C2H4, TMP         ) &
         496             :     !$OMP PRIVATE( EMIS_FARN, EMIS_BCAR, EMIS_OSQT, EMIS_ALD2, EMIS_OTHR   ) &
         497             :     !$OMP PRIVATE( X, Y, RC )
         498             :
         499             :     !-----------------------------------------------------------------
         500             :     ! Loop over all grid boxes
         501             :     !-----------------------------------------------------------------
         502           0 :     DO J = 1, HcoState%NY
         503           0 :     DO I = 1, HcoState%NX
         504             :
         505             :        ! Zero biogenic species
         506           0 :        EMIS_ISOP  = 0.0_hp
         507           0 :        EMIS_MBOX  = 0.0_hp
         508           0 :        EMIS_APIN  = 0.0_hp
         509           0 :        EMIS_BPIN  = 0.0_hp
         510           0 :        EMIS_LIMO  = 0.0_hp
         511           0 :        EMIS_SABI  = 0.0_hp
         512           0 :        EMIS_MYRC  = 0.0_hp
         513           0 :        EMIS_CARE  = 0.0_hp
         514           0 :        EMIS_OCIM  = 0.0_hp
         515           0 :        EMIS_OMON  = 0.0_hp
         516           0 :        EMIS_MONO  = 0.0_hp
         517           0 :        EMIS_OTHR  = 0.0_hp
         518           0 :        EMIS_ALD2  = 0.0_hp
         519           0 :        EMIS_MOH   = 0.0_hp
         520           0 :        EMIS_EOH   = 0.0_hp
         521           0 :        EMIS_FAXX  = 0.0_hp
         522           0 :        EMIS_AAXX  = 0.0_hp
         523           0 :        EMIS_ACET  = 0.0_hp
         524           0 :        EMIS_PRPE  = 0.0_hp
         525           0 :        EMIS_C2H4  = 0.0_hp
         526           0 :        EMIS_FARN  = 0.0_hp
         527           0 :        EMIS_BCAR  = 0.0_hp
         528           0 :        EMIS_OSQT  = 0.0_hp
         529             :
         530             :        !--------------------------------------------------------------
         531             :        ! Calculate VOC emissions
         532             :        !
         533             :        ! The GET_EMIS*_MEGAN calls now use the annual scale factors
         534             :        ! imported through the HEMCO list, which are already in units
         535             :        ! of kg/m2/s. ckeller, 14/01/25.
         536             :        !
         537             :        ! Updated to new MEGAN routine (dbm, 12/2012)
         538             :        !--------------------------------------------------------------
         539             :
         540             :        !--------------------------------------------------------------------
         541             :        ! MEGAN Isoprene
         542             :        !--------------------------------------------------------------------
         543             :
         544             :        ! Isoprene [kg/m2/s]
         545             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, Inst, &
         546           0 :                                  I, J, 'ISOP', EMIS_ISOP, RC )
         547           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         548             :           CALL HCO_ERROR( &
         549           0 :                           'GET_MEGAN_EMISSIONS_ISOP', RC )
         550           0 :           ERR = .TRUE.
         551           0 :           EXIT
         552             :        ENDIF
         553             :
         554             :        !FP_ISOP (6/2009)
         555           0 :        EMIS_ISOP = Inst%ISOP_SCALING * EMIS_ISOP
         556             :
         557             :        ! Write isoprene emissions into tracer tendency array
         558           0 :        IF ( Inst%IDTISOP > 0 ) THEN
         559           0 :           Inst%FLUXISOP(I,J) = EMIS_ISOP
         560             :        ENDIF
         561             :
         562             :        ! Biogenic emissions of SOA and SOA-Precursor from isopene
         563             :        ! NOTE: These emission factors appear to be based on emissions
         564             :        !  in kgC/m2/s. Convert from kg/m2/s to kgC/m2/s.
         565           0 :        IF ( (Inst%IDTISOP>0) .AND. (Inst%IDTSOAP>0) ) THEN
         566           0 :           Inst%FLUXSOAP(I,J) = Inst%FLUXSOAP(I,J) + &
         567           0 :                ( EMIS_ISOP * MONOtoC ) * Inst%ISOPTOSOAP
         568             :        ENDIF
         569           0 :        IF ( (Inst%IDTISOP>0) .AND. (Inst%IDTSOAS>0) ) THEN
         570           0 :           Inst%FLUXSOAS(I,J) = Inst%FLUXSOAS(I,J) + &
         571           0 :                ( EMIS_ISOP * MONOtoC ) * Inst%ISOPTOSOAS
         572             :        ENDIF
         573             :
         574             :        !--------------------------------------------------------------------
         575             :        ! MEGAN monoterpenes
         576             :        !--------------------------------------------------------------------
         577             :
         578             :        ! ---------------------------------------------------
         579             :        ! Alpha Pinene emissions
         580             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         581           0 :                                  Inst, I, J, 'APIN', EMIS_APIN, RC)
         582           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         583             :           CALL HCO_ERROR( &
         584           0 :                           'GET_MEGAN_EMISSIONS_APIN', RC )
         585           0 :           ERR = .TRUE.
         586           0 :           EXIT
         587             :        ENDIF
         588           0 :        Inst%FLUXAPIN(I,J) = EMIS_APIN
         589             :
         590             :        ! ---------------------------------------------------
         591             :        ! Beta Pinene emissions
         592             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         593           0 :                                  Inst, I, J, 'BPIN', EMIS_BPIN, RC)
         594           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         595             :           CALL HCO_ERROR( &
         596           0 :                           'GET_MEGAN_EMISSIONS_BPIN', RC )
         597           0 :           ERR = .TRUE.
         598           0 :           EXIT
         599             :        ENDIF
         600           0 :        Inst%FLUXBPIN(I,J) = EMIS_BPIN
         601             :
         602             :        ! ---------------------------------------------------
         603             :        ! Limonene emissions
         604             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         605           0 :                                  Inst, I, J, 'LIMO', EMIS_LIMO, RC)
         606           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         607             :           CALL HCO_ERROR( &
         608           0 :                           'GET_MEGAN_EMISSIONS_LIMO', RC )
         609           0 :           ERR = .TRUE.
         610           0 :           EXIT
         611             :        ENDIF
         612           0 :        Inst%FLUXLIMO(I,J) = EMIS_LIMO
         613             :
         614             :        ! ---------------------------------------------------
         615             :        ! Sabinene emissions
         616             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         617           0 :                                  Inst, I, J, 'SABI', EMIS_SABI, RC)
         618           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         619             :           CALL HCO_ERROR( &
         620           0 :                           'GET_MEGAN_EMISSIONS_SABI', RC )
         621           0 :           ERR = .TRUE.
         622           0 :           EXIT
         623             :        ENDIF
         624           0 :        Inst%FLUXSABI(I,J) = EMIS_SABI
         625             :
         626             :        ! ---------------------------------------------------
         627             :        ! Mycrene emissions
         628             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         629           0 :                                  Inst, I, J, 'MYRC', EMIS_MYRC, RC)
         630           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         631             :           CALL HCO_ERROR( &
         632           0 :                           'GET_MEGAN_EMISSIONS_MYRC', RC )
         633           0 :           ERR = .TRUE.
         634           0 :           EXIT
         635             :        ENDIF
         636           0 :        Inst%FLUXMYRC(I,J) = EMIS_MYRC
         637             :
         638             :        ! ---------------------------------------------------
         639             :        ! 3-Carene emissions
         640             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         641           0 :                                  Inst, I, J, 'CARE', EMIS_CARE, RC)
         642           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         643             :           CALL HCO_ERROR( &
         644           0 :                           'GET_MEGAN_EMISSIONS_CARE', RC )
         645           0 :           ERR = .TRUE.
         646           0 :           EXIT
         647             :        ENDIF
         648           0 :        Inst%FLUXCARE(I,J) = EMIS_CARE
         649             :
         650             :        ! ---------------------------------------------------
         651             :        ! Ocimene emissions
         652             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         653           0 :                                  Inst, I, J, 'OCIM', EMIS_OCIM, RC)
         654           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         655             :           CALL HCO_ERROR( &
         656           0 :                           'GET_MEGAN_EMISSIONS_OCIM', RC )
         657           0 :           ERR = .TRUE.
         658           0 :           EXIT
         659             :        ENDIF
         660           0 :        Inst%FLUXOCIM(I,J) = EMIS_OCIM
         661             :
         662             :        ! ---------------------------------------------------
         663             :        ! Other monoterpenes
         664             :        ! (added 12/2012; dbm)
         665             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         666           0 :                                  Inst, I, J, 'OMON', EMIS_OMON, RC)
         667           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         668             :           CALL HCO_ERROR( &
         669           0 :                           'GET_MEGAN_EMISSIONS_OMON', RC )
         670           0 :           ERR = .TRUE.
         671           0 :           EXIT
         672             :        ENDIF
         673           0 :        Inst%FLUXOMON(I,J) = EMIS_OMON
         674             :
         675             :        ! ---------------------------------------------------
         676             :        ! Total monoterpenes = sum of individual
         677             :        ! dbm, now add other lumped monoterpenes (11/2012)
         678             :        EMIS_MONO = EMIS_APIN + EMIS_BPIN + EMIS_LIMO + EMIS_SABI + &
         679           0 :                    EMIS_MYRC + EMIS_CARE + EMIS_OCIM + EMIS_OMON
         680             :
         681             :        ! Add to tracer tendency array [kg/m2/s]
         682           0 :        Inst%FLUXMONO(I,J) = EMIS_MONO
         683             :
         684             :        !--------------------------------------------------------------------
         685             :        ! MEGAN Acetaldehyde
         686             :        !--------------------------------------------------------------------
         687           0 :        IF ( Inst%IDTALD2 > 0 ) THEN
         688             :           CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         689           0 :                                     Inst, I, J, 'ALD2', EMIS_ALD2, RC)
         690           0 :           IF ( RC /= HCO_SUCCESS ) THEN
         691             :              CALL HCO_ERROR( &
         692           0 :                              'GET_MEGAN_EMISSIONS_ALD2', RC )
         693           0 :              ERR = .TRUE.
         694           0 :              EXIT
         695             :           ENDIF
         696             :
         697             :           ! Add to tracer tendency array [kg/m2/s]
         698           0 :           Inst%FLUXALD2(I,J) = EMIS_ALD2
         699             :        ENDIF
         700             :
         701             :        ! ---------------------------------------------------
         702             :        ! MEGAN Methanol
         703           0 :        IF ( Inst%IDTMOH > 0 ) THEN
         704             :           CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         705           0 :                                     Inst, I, J, 'MOH', EMIS_MOH, RC)
         706           0 :           IF ( RC /= HCO_SUCCESS ) THEN
         707             :              CALL HCO_ERROR(  &
         708           0 :                              'GET_MEGAN_EMISSIONS_MOH', RC )
         709           0 :              ERR = .TRUE.
         710           0 :              EXIT
         711             :           ENDIF
         712             :
         713             :           ! Add to tracer tendency array [kg/m2/s]
         714           0 :           Inst%FLUXMOH(I,J) = EMIS_MOH
         715             :        ENDIF
         716             :
         717             :        ! ---------------------------------------------------
         718             :        ! MEGAN Ethanol
         719           0 :        IF ( Inst%IDTEOH > 0 ) THEN
         720             :           CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         721           0 :                                     Inst, I, J, 'EOH', EMIS_EOH, RC)
         722           0 :           IF ( RC /= HCO_SUCCESS ) THEN
         723             :              CALL HCO_ERROR( &
         724           0 :                              'GET_MEGAN_EMISSIONS_EOH', RC )
         725           0 :              ERR = .TRUE.
         726           0 :              EXIT
         727             :           ENDIF
         728             :
         729             :           ! Add to tracer tendency array [kg/m2/s]
         730           0 :           Inst%FLUXEOH(I,J) = EMIS_EOH
         731             :        ENDIF
         732             :
         733             :        !--------------------------------------------------------------------
         734             :        ! Other MEGAN biogenics
         735             :        ! Calls included here for future incorporation or
         736             :        ! specialized simulations. (dbm, 12/2012)
         737             :        !--------------------------------------------------------------------
         738             :
         739             :        ! ---------------------------------------------------
         740             :        ! Methyl butenol
         741             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         742           0 :                                  Inst, I, J, 'MBOX', EMIS_MBOX, RC)
         743           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         744             :           CALL HCO_ERROR( &
         745           0 :                           'GET_MEGAN_EMISSIONS_MBOX', RC )
         746           0 :           ERR = .TRUE.
         747           0 :           EXIT
         748             :        ENDIF
         749           0 :        Inst%FLUXMBOX(I,J) = EMIS_MBOX
         750             :
         751             :        ! ---------------------------------------------------
         752             :        ! MEGAN Formic acid
         753             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         754           0 :                                  Inst, I, J, 'FAXX', EMIS_FAXX, RC )
         755           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         756             :           CALL HCO_ERROR( &
         757           0 :                           'GET_MEGAN_EMISSIONS_FAXX', RC )
         758           0 :           ERR = .TRUE.
         759           0 :           EXIT
         760             :        ENDIF
         761           0 :        Inst%FLUXFAXX(I,J) = EMIS_FAXX
         762             :
         763             :        ! ---------------------------------------------------
         764             :        ! MEGAN Acetic acid
         765             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         766           0 :                                  Inst, I, J, 'AAXX', EMIS_AAXX, RC )
         767           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         768             :           CALL HCO_ERROR( &
         769           0 :                           'GET_MEGAN_EMISSIONS_AAXX', RC )
         770           0 :           ERR = .TRUE.
         771           0 :           EXIT
         772             :        ENDIF
         773           0 :        Inst%FLUXAAXX(I,J) = EMIS_AAXX
         774             :
         775             :        !--------------------------------------------------------------------
         776             :        ! Biogenic acetone emissions
         777             :        !--------------------------------------------------------------------
         778           0 :        IF ( Inst%IDTACET > 0 ) THEN
         779             :
         780             :           !-----------------------------------------------------------------
         781             :           ! (1) BIOGENIC ACETONE FROM METHYL BUTENOL -- NORTH AMERICA
         782             :           !
         783             :           ! Methyl Butenol (a.k.a. MBO) produces acetone with a molar yield
         784             :           ! of 0.6 [Alvarado (1999)].  The biogenic source of MBO is thought
         785             :           ! to be restricted to North America.  According to Guenther (1999)
         786             :           ! North america emits 3.2Tg-C of MBO, producing 1.15 Tg-C of
         787             :           ! Acetone in North America.
         788             :           !
         789             :           !
         790             :           ! Lon and lat of grid box (I,J) in degrees
         791           0 :           X = HcoState%Grid%XMID%Val( I, J )
         792           0 :           IF ( X >= 180.0_hp ) X = X - 360.0_hp
         793           0 :           Y = HcoState%Grid%YMID%Val( I, J )
         794             :
         795             :           ! Methyl butenol is emitted only in North America, where
         796             :           ! ( -167.5 <= lon <= -52.5 ) and ( 16.0 <= lat <= 72.0 )
         797           0 :           IF ( ( X >= -167.5_hp .and. X <= -52.5_hp ) .AND. &
         798             :                ( Y >=   16.0_hp .and. Y <=  72.0_hp ) ) THEN
         799             :              !  Apply yield from MBO to get [kg ACET/m2/s]
         800           0 :              TMP = EMIS_MBOX * MB_SCALE1
         801           0 :              TMP = TMP * HcoState%Spc(Inst%IDTACET)%MW_g / MBOX_MW_g
         802             :
         803             :              ! Scale to a posteriori source from Jacob et al 2001 (bdf, 9/5/01)
         804           0 :              Inst%FLUXACETmb(I,J) = TMP * MB_SCALE2
         805             :           ENDIF
         806             :
         807             :           !-----------------------------------------------------------------
         808             :           ! (3) BIOGENIC ACETONE -- DIRECT EMISSION
         809             :           !
         810             :           ! Direct Emission now includes emission
         811             :           ! from grasses and emission from dry leaf matter
         812             :           CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         813           0 :                                     Inst, I, J, 'ACET', EMIS_ACET, RC)
         814           0 :           IF ( RC /= HCO_SUCCESS ) THEN
         815             :              CALL HCO_ERROR( &
         816           0 :                              'GET_MEGAN_EMISSIONS_ACET', RC )
         817           0 :              ERR = .TRUE.
         818           0 :              EXIT
         819             :           ENDIF
         820             :
         821             :           ! Write to array
         822           0 :           Inst%FLUXACETbg(I,J) = EMIS_ACET
         823             :
         824             :        ENDIF
         825             :
         826             :        !--------------------------------------------------------------------
         827             :        ! Biogenic emissions of SOA and SOA-Precursor from monoterpenes
         828             :        !
         829             :        ! NOTE: These emission factors appear to be based on emissions
         830             :        !  in kgC/m2/s. Convert from kg/m2/s to kgC/m2/s.
         831             :        !--------------------------------------------------------------------
         832           0 :        IF ( Inst%IDTSOAP>0 ) THEN
         833           0 :           Inst%FLUXSOAP(I,J) = Inst%FLUXSOAP(I,J) + &
         834           0 :                ( EMIS_MONO * MONOtoC ) * Inst%MONOTOSOAP
         835             :        ENDIF
         836           0 :        IF ( Inst%IDTSOAS>0 ) THEN
         837           0 :           Inst%FLUXSOAS(I,J) = Inst%FLUXSOAS(I,J) + &
         838           0 :                ( EMIS_MONO * MONOtoC ) * Inst%MONOTOSOAS
         839             :        ENDIF
         840             :
         841             :        !--------------------------------------------------------------------
         842             :        ! Biogenic emissions of PRPE
         843             :        !
         844             :        ! Now uses MEGAN2.1 (dbm, 12/2012)
         845             :        !--------------------------------------------------------------------
         846           0 :        IF ( Inst%IDTPRPE > 0 ) THEN
         847             :           CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         848           0 :                                     Inst, I, J, 'PRPE', EMIS_PRPE, RC)
         849           0 :           IF ( RC /= HCO_SUCCESS ) THEN
         850             :              CALL HCO_ERROR( &
         851           0 :                              'GET_MEGAN_EMISSIONS_PRPE', RC )
         852           0 :              ERR = .TRUE.
         853           0 :              EXIT
         854             :           ENDIF
         855             :
         856             :           ! Add to tracer tendency array [kg/m2/s]
         857           0 :           Inst%FLUXPRPE(I,J) = EMIS_PRPE
         858             :
         859             :        ENDIF
         860             :
         861             :        !--------------------------------------------------------------------
         862             :        ! Biogenic emissions of ethene (C2H4)
         863             :        !
         864             :        ! Now uses MEGAN2.1 (dbm, 12/2012)
         865             :        !--------------------------------------------------------------------
         866           0 :        IF ( Inst%IDTC2H4 > 0 ) THEN
         867             :           CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         868           0 :                                     Inst, I, J, 'C2H4', EMIS_C2H4, RC)
         869           0 :           IF ( RC /= HCO_SUCCESS ) THEN
         870             :              CALL HCO_ERROR( &
         871           0 :                              'GET_MEGAN_EMISSIONS_C2H4', RC )
         872           0 :              ERR = .TRUE.
         873           0 :              EXIT
         874             :           ENDIF
         875             :
         876             :           ! Add to tracer tendency array [kg/m2/s]
         877           0 :           Inst%FLUXC2H4(I,J) = EMIS_C2H4
         878             :        ENDIF
         879             :
         880             :        ! ----------------------------------------------------------------
         881             :        ! The new MEGAN implementation has speciated information
         882             :        ! (hotp 3/7/10)
         883             :        ! as of 7/28/10 for year 2000 GEOS4 2x2.5 in Tg/yr:
         884             :        ! ------------------------------
         885             :        ! HC Class  New MEGAN  Old MEGAN
         886             :        ! --------  ---------  ---------
         887             :        ! MTPA        73         86
         888             :        ! LIMO        10         25
         889             :        ! MTPO        33          3.2+38
         890             :        ! SESQ        13         15
         891             :        !           -----      --------
         892             :        ! TOTAL      129        167.2
         893             :        ! see Pye et al. 2010 ACP
         894             :        !
         895             :        ! Monoterpene lumping:
         896             :        ! GEOS-Chem   MEGAN
         897             :        ! =========   ==========================================
         898             :        ! MTPA        a-pinene   (APIN), b-pinene  (BPIN),
         899             :        !             sabinene   (SABI), carene    (CARE)
         900             :        ! LIMO        limonene   (LIMO)
         901             :        ! MTPO        myrcene    (MYRC), ocimene   (OCIM),
         902             :        !             other mono (OMON)
         903             :        ! SESQ        farnesene  (FARN), b-caryoph (BCAR),
         904             :        !             other sesq (OSQT)
         905             :        ! =========   ==========================================
         906             :
         907             :        !--------------------------------------------------------------
         908             :        ! MEGAN MTPA
         909             :        !--------------------------------------------------------------
         910             :        ! MTPA=a-,b-pinene,sabinene,carene (hotp 5/20/10)
         911           0 :        IF ( Inst%IDTMTPA > 0 ) THEN
         912           0 :           Inst%FLUXMTPA(I,J) = EMIS_APIN + EMIS_BPIN + EMIS_SABI + EMIS_CARE
         913             :        ENDIF
         914             :
         915             :        !--------------------------------------------------------------
         916             :        ! MEGAN Limonene
         917             :        !--------------------------------------------------------------
         918             :        ! [kg/m2/s]
         919           0 :        IF ( Inst%IDTLIMO > 0 ) THEN
         920           0 :           Inst%FLUXLIMO(I,J) = EMIS_LIMO
         921             :        ENDIF
         922             :
         923             :        !--------------------------------------------------------------
         924             :        ! MEGAN MTPO
         925             :        !--------------------------------------------------------------
         926             :        ! MTPO is all other monoterpenes (MEGAN categories:
         927             :        ! myrcene, ocimene, OMON) (hotp 5/20/10)
         928             :        ! All other monoterpenes (mostly camphene, linalool,
         929             :        ! terpinolene, terpinolene, phellandrene) (hotp 3/10/10)
         930             :        ! 14-18% of OMTP is terpinene and terpinolene
         931           0 :        IF ( Inst%IDTMTPO > 0 ) THEN
         932           0 :           Inst%FLUXMTPO(I,J) = EMIS_MYRC + EMIS_OCIM + EMIS_OMON
         933             :        ENDIF
         934             :
         935             :        !--------------------------------------------------------------
         936             :        ! MEGAN sesquiterpenes
         937             :        !--------------------------------------------------------------
         938             :
         939             :        ! ---------------------------------------------------
         940             :        ! a-Farnesene
         941             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         942           0 :                                  Inst, I, J, 'FARN', EMIS_FARN, RC )
         943           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         944             :           CALL HCO_ERROR( &
         945           0 :                           'GET_MEGAN_EMISSIONS_FARN', RC )
         946           0 :           ERR = .TRUE.
         947           0 :           EXIT
         948             :        ENDIF
         949           0 :        Inst%FLUXFARN(I,J) = EMIS_FARN
         950             :
         951             :        ! ---------------------------------------------------
         952             :        ! b_Caryophyllene
         953             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         954           0 :                                  Inst, I, J, 'BCAR', EMIS_BCAR, RC )
         955           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         956             :           CALL HCO_ERROR( &
         957           0 :                           'GET_MEGAN_EMISSIONS_BCAR', RC )
         958           0 :           ERR = .TRUE.
         959           0 :           EXIT
         960             :        ENDIF
         961           0 :        Inst%FLUXBCAR(I,J) = EMIS_BCAR
         962             :
         963             :        ! ---------------------------------------------------
         964             :        ! Other sesquiterpene
         965             :        CALL GET_MEGAN_EMISSIONS( HcoState, ExtState, &
         966           0 :                                  Inst, I, J, 'OSQT', EMIS_OSQT, RC )
         967           0 :        IF ( RC /= HCO_SUCCESS ) THEN
         968             :           CALL HCO_ERROR( &
         969           0 :                           'GET_MEGAN_EMISSIONS_OSQT', RC )
         970           0 :           ERR = .TRUE.
         971           0 :           EXIT
         972             :        ENDIF
         973           0 :        Inst%FLUXOSQT(I,J) = EMIS_OSQT
         974             :
         975             :        ! ---------------------------------------------------
         976             :        ! Total sesquiterpenes from MEGAN (hotp 3/10/10)
         977           0 :        IF ( Inst%IDTSESQ > 0 ) THEN
         978           0 :           Inst%FLUXSESQ(I,J) = EMIS_FARN + EMIS_BCAR + EMIS_OSQT
         979             :        ENDIF
         980             :
         981             :        ! Other terpenes
         982           0 :        EMIS_OTHR = EMIS_FARN + EMIS_BCAR + EMIS_OSQT
         983             :
         984             :        !--------------------------------------------------------------------
         985             :        ! Biogenic emissions of SOA and SOA-Precursor from Other terpenes
         986             :        !
         987             :        ! NOTE: These emission factors appear to be based on emissions
         988             :        !  in kgC/m2/s. Convert from kg/m2/s to kgC/m2/s.
         989             :        !--------------------------------------------------------------------
         990           0 :        IF ( Inst%IDTSOAP>0 ) THEN
         991           0 :           Inst%FLUXSOAP(I,J) = Inst%FLUXSOAP(I,J) + &
         992           0 :                ( EMIS_OTHR * MONOtoC ) * Inst%OTHRTOSOAP
         993             :        ENDIF
         994           0 :        IF ( Inst%IDTSOAS>0 ) THEN
         995           0 :           Inst%FLUXSOAS(I,J) = Inst%FLUXSOAS(I,J) + &
         996           0 :                ( EMIS_OTHR * MONOtoC ) * Inst%OTHRTOSOAS
         997             :        ENDIF
         998             :
         999             :        !-----------------------------------------------------------------
        1000             :        ! Update historical temperature / radiation values
        1001             :        !-----------------------------------------------------------------
        1002             :        ! Do this now on every time step. The arrays are simply the
        1003             :        ! the running means over the intentend time window (24 hours
        1004             :        ! and NUM_DAYS, respectively). This hugely faciliates warm
        1005             :        ! model restarts, irrespective of simulation start/end dates
        1006             :        ! and times. It also makes sure that all environmental
        1007             :        ! variables are incorporated into the time averages (e.g. if
        1008             :        ! emission time step is less than 60 minutes, all values will
        1009             :        ! be used to calculate the daily mean).
        1010             :        ! (ckeller, 11/05/2015)
        1011             :
        1012             :        ! Updated LAI of last 24 hours
        1013           0 :        Inst%LAI_PREVDAY(I,J) = ( HOLDFRAC * Inst%LAI_PREVDAY(I,J) ) + &
        1014           0 :                                ( HNEWFRAC * ExtState%LAI%Arr%Val(I,J) )
        1015             :
        1016             :        ! Updated temperature of last 24 hours
        1017           0 :        Inst%T_LAST24H(I,J) = ( HOLDFRAC * Inst%T_LAST24H(I,J) ) + &
        1018           0 :                              ( HNEWFRAC * ExtState%T2M%Arr%Val(I,J) )
        1019             :
        1020             :        ! Updated temperature of last NUM_DAYS
        1021           0 :        Inst%T_LASTXDAYS(I,J) = ( DOLDFRAC * Inst%T_LASTXDAYS(I,J) ) + &
        1022           0 :                                ( DNEWFRAC * ExtState%T2M%Arr%Val(I,J) )
        1023             :
        1024             :        ! Updated direct radiation of last NUM_DAYS
        1025           0 :        Inst%PARDR_LASTXDAYS(I,J) = ( DOLDFRAC * Inst%PARDR_LASTXDAYS(I,J) ) + &
        1026           0 :                                    ( DNEWFRAC * ExtState%PARDR%Arr%Val(I,J) )
        1027             :
        1028             :        ! Updated diffuse radiation of last NUM_DAYS
        1029           0 :        Inst%PARDF_LASTXDAYS(I,J) = ( DOLDFRAC * Inst%PARDF_LASTXDAYS(I,J) ) + &
        1030           0 :                                    ( DNEWFRAC * ExtState%PARDF%Arr%Val(I,J) )
        1031             :
        1032             :     ENDDO !I
        1033             :     ENDDO !J
        1034             :     !$OMP END PARALLEL DO
        1035             :
        1036           0 :     IF ( ERR ) THEN
        1037           0 :        RC = HCO_FAIL
        1038           0 :        RETURN
        1039             :     ENDIF
        1040             :
        1041             :     !=================================================================
        1042             :     ! PASS TO HEMCO STATE AND UPDATE DIAGNOSTICS
        1043             :     !=================================================================
        1044             :
        1045             :     ! ----------------------------------------------------------------
        1046             :     ! ISOPRENE
        1047           0 :     IF ( Inst%IDTISOP > 0 ) THEN
        1048             :
        1049             :        ! Add flux to emission array
        1050             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXISOP, Inst%IDTISOP, &
        1051           0 :                          RC, ExtNr=Inst%ExtNr )
        1052           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1053             :           CALL HCO_ERROR( &
        1054           0 :                           'HCO_EmisAdd error: FLUXISOP', RC )
        1055           0 :           RETURN
        1056             :        ENDIF
        1057             :     ENDIF
        1058             :
        1059             :     ! ----------------------------------------------------------------
        1060             :     ! ACETALDEHYDE
        1061           0 :     IF ( Inst%IDTALD2 > 0 ) THEN
        1062             :
        1063             :        ! Add flux to emission array
        1064             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXALD2, Inst%IDTALD2, &
        1065           0 :                          RC, ExtNr=Inst%ExtNr )
        1066           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1067             :           CALL HCO_ERROR( &
        1068           0 :                           'HCO_EmisAdd error: FLUXALD2', RC )
        1069           0 :           RETURN
        1070             :        ENDIF
        1071             :     ENDIF
        1072             :
        1073             :     ! ----------------------------------------------------------------
        1074             :     ! METHANOL
        1075           0 :     IF ( Inst%IDTMOH > 0 ) THEN
        1076             :
        1077             :        ! Add flux to emission array
        1078             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXMOH, Inst%IDTMOH, &
        1079           0 :                          RC, ExtNr=Inst%ExtNr )
        1080           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1081             :           CALL HCO_ERROR( &
        1082           0 :                           'HCO_EmisAdd error: FLUXMOH', RC )
        1083           0 :           RETURN
        1084             :        ENDIF
        1085             :     ENDIF
        1086             :
        1087             :     ! ----------------------------------------------------------------
        1088             :     ! ETHANOL
        1089           0 :     IF ( Inst%IDTEOH > 0 ) THEN
        1090             :
        1091             :        ! Add flux to emission array
        1092             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXEOH, Inst%IDTEOH, &
        1093           0 :                          RC, ExtNr=Inst%ExtNr )
        1094           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1095             :           CALL HCO_ERROR( &
        1096           0 :                           'HCO_EmisAdd error: FLUXEOH', RC )
        1097           0 :           RETURN
        1098             :        ENDIF
        1099             :     ENDIF
        1100             :
        1101             :     ! ----------------------------------------------------------------
        1102             :     ! ACETONE
        1103           0 :     IF ( Inst%IDTACET > 0 ) THEN
        1104             :
        1105             :        ! Add flux to emission array
        1106           0 :        Inst%FLUXACET = Inst%FLUXACETbg + Inst%FLUXACETmb
        1107             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXACET, Inst%IDTACET, &
        1108           0 :                          RC, ExtNr=Inst%ExtNr )
        1109           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1110             :           CALL HCO_ERROR( &
        1111           0 :                           'HCO_EmisAdd error: FLUXACET', RC )
        1112           0 :           RETURN
        1113             :        ENDIF
        1114             :     ENDIF
        1115             :
        1116             :     ! ----------------------------------------------------------------
        1117             :     ! SOA-Precursor (SOAP)
        1118           0 :     IF (  Inst%IDTSOAP > 0 ) THEN
        1119             :
        1120             :        ! Add flux to emission array
        1121             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXSOAP, Inst%IDTSOAP, &
        1122           0 :                          RC, ExtNr=Inst%ExtNr )
        1123           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1124             :           CALL HCO_ERROR( &
        1125           0 :                           'HCO_EmisAdd error: FLUXSOAP', RC )
        1126           0 :           RETURN
        1127             :        ENDIF
        1128             :
        1129             :     ENDIF
        1130             :
        1131             :     ! ----------------------------------------------------------------
        1132             :     ! SOA-Simplified (SOAS)
        1133           0 :     IF (  Inst%IDTSOAS > 0 ) THEN
        1134             :
        1135             :        ! Add flux to emission array
        1136             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXSOAS, Inst%IDTSOAS, &
        1137           0 :                          RC, ExtNr=Inst%ExtNr )
        1138           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1139             :           CALL HCO_ERROR( &
        1140           0 :                           'HCO_EmisAdd error: FLUXSOAS', RC )
        1141           0 :           RETURN
        1142             :        ENDIF
        1143             :
        1144             :     ENDIF
        1145             :
        1146             :     ! ----------------------------------------------------------------
        1147             :     ! ALKENES
        1148           0 :     IF ( Inst%IDTPRPE > 0 ) THEN
        1149             :
        1150             :        ! Add flux to emission array
        1151             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXPRPE, Inst%IDTPRPE, &
        1152           0 :                          RC, ExtNr=Inst%ExtNr )
        1153           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1154             :           CALL HCO_ERROR( &
        1155           0 :                           'HCO_EmisAdd error: FLUXPRPE', RC )
        1156           0 :           RETURN
        1157             :        ENDIF
        1158             :
        1159             :     ENDIF
        1160             :
        1161             :     ! ----------------------------------------------------------------
        1162             :     ! ETHENE
        1163           0 :     IF ( Inst%IDTC2H4 > 0 ) THEN
        1164             :
        1165             :        ! Add flux to emission array
        1166             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXC2H4, Inst%IDTC2H4, &
        1167           0 :                          RC, ExtNr=Inst%ExtNr )
        1168           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1169             :           CALL HCO_ERROR( &
        1170           0 :                           'HCO_EmisAdd error: FLUXC2H4', RC )
        1171           0 :           RETURN
        1172             :        ENDIF
        1173             :
        1174             :     ENDIF
        1175             :
        1176             :     ! ----------------------------------------------------------------
        1177             :     ! MTPA
        1178           0 :     IF ( Inst%IDTMTPA > 0 ) THEN
        1179             :
        1180             :        ! Add flux to emission array
        1181             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXMTPA, Inst%IDTMTPA, &
        1182           0 :                          RC, ExtNr=Inst%ExtNr )
        1183           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1184             :           CALL HCO_ERROR( &
        1185           0 :                           'HCO_EmisAdd error: FLUXMTPA', RC )
        1186           0 :           RETURN
        1187             :        ENDIF
        1188             :
        1189             :     ENDIF
        1190             :
        1191             :     ! ----------------------------------------------------------------
        1192             :     ! MTPO
        1193           0 :     IF ( Inst%IDTMTPO > 0 ) THEN
        1194             :
        1195             :        ! Add flux to emission array
        1196             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXMTPO, Inst%IDTMTPO, &
        1197           0 :                          RC, ExtNr=Inst%ExtNr )
        1198           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1199             :           CALL HCO_ERROR( &
        1200           0 :                           'HCO_EmisAdd error: FLUXMTPO', RC )
        1201           0 :           RETURN
        1202             :        ENDIF
        1203             :
        1204             :     ENDIF
        1205             :
        1206             :     ! ----------------------------------------------------------------
        1207             :     ! LIMONENE
        1208           0 :     IF ( Inst%IDTLIMO > 0 ) THEN
        1209             :
        1210             :        ! Add flux to emission array
        1211             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXLIMO, Inst%IDTLIMO, &
        1212           0 :                          RC, ExtNr=Inst%ExtNr )
        1213           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1214             :           CALL HCO_ERROR( &
        1215           0 :                           'HCO_EmisAdd error: FLUXLIMO', RC )
        1216           0 :           RETURN
        1217             :        ENDIF
        1218             :
        1219             :     ENDIF
        1220             :
        1221             :     ! ----------------------------------------------------------------
        1222             :     ! SESQ
        1223           0 :     IF ( Inst%IDTSESQ > 0 ) THEN
        1224             :
        1225             :        ! Add flux to emission array
        1226             :        CALL HCO_EmisAdd( HcoState, Inst%FLUXSESQ, Inst%IDTSESQ, &
        1227           0 :                          RC, ExtNr=Inst%ExtNr )
        1228           0 :        IF ( RC /= HCO_SUCCESS ) THEN
        1229             :           CALL HCO_ERROR( &
        1230           0 :                           'HCO_EmisAdd error: FLUXSESQ', RC )
        1231           0 :           RETURN
        1232             :        ENDIF
        1233             :
        1234             :     ENDIF
        1235             :
        1236             :     ! ----------------------------------------------------------------
        1237             :     ! Eventually copy internal values to ESMF internal state object
        1238             :     ! ----------------------------------------------------------------
        1239             :
        1240             :     ! LAI_PREVDAY
        1241             :     CALL HCO_RestartWrite( HcoState, &
        1242           0 :                            'LAI_PREVDAY', Inst%LAI_PREVDAY, RC )
        1243           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        1244           0 :         CALL HCO_ERROR( 'ERROR 1', RC, THISLOC=LOC )
        1245           0 :         RETURN
        1246             :     ENDIF
        1247             :
        1248             :     ! T_LAST24H
        1249             :     CALL HCO_RestartWrite( HcoState, &
        1250           0 :                            'T_PREVDAY',  Inst%T_LAST24H, RC )
        1251           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        1252           0 :         CALL HCO_ERROR( 'ERROR 2', RC, THISLOC=LOC )
        1253           0 :         RETURN
        1254             :     ENDIF
        1255             :
        1256             :     ! T_LASTXDAYS
        1257             :     CALL HCO_RestartWrite( HcoState, &
        1258           0 :                            'T_DAVG',     Inst%T_LASTXDAYS, RC )
        1259           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        1260           0 :         CALL HCO_ERROR( 'ERROR 3', RC, THISLOC=LOC )
        1261           0 :         RETURN
        1262             :     ENDIF
        1263             :
        1264             :     ! PARDR_LASTXDAYS
        1265             :     CALL HCO_RestartWrite( HcoState, &
        1266           0 :                            'PARDR_DAVG', Inst%PARDR_LASTXDAYS, RC )
        1267           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        1268           0 :         CALL HCO_ERROR( 'ERROR 4', RC, THISLOC=LOC )
        1269           0 :         RETURN
        1270             :     ENDIF
        1271             :
        1272             :     ! PARDF_LASTXDAYS
        1273             :     CALL HCO_RestartWrite( HcoState, &
        1274           0 :                            'PARDF_DAVG', Inst%PARDF_LASTXDAYS, RC )
        1275           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        1276           0 :         CALL HCO_ERROR( 'ERROR 5', RC, THISLOC=LOC )
        1277           0 :         RETURN
        1278             :     ENDIF
        1279             :
        1280             :     !=================================================================
        1281             :     ! ALL DONE!
        1282             :     !=================================================================
        1283             :
        1284             :     ! Cleanup
        1285           0 :     Inst => NULL()
        1286             :
        1287             :     ! Reset first-time flag
        1288           0 :     FIRST = .FALSE.
        1289             :
        1290             :     ! Return w/ success
        1291           0 :     CALL HCO_LEAVE( HcoState%Config%Err,RC )
        1292             :
        1293           0 :   END SUBROUTINE HCOX_Megan_Run
        1294             : !EOC
        1295             : !------------------------------------------------------------------------------
        1296             : !                   Harmonized Emissions Component (HEMCO)                    !
        1297             : !------------------------------------------------------------------------------
        1298             : !BOP
        1299             : !
        1300             : ! !IROUTINE: Get_Megan_Emissions
        1301             : !
        1302             : ! !DESCRIPTION: Subroutine Get\_Megan\_Emissions computes biogenic emissions in
        1303             : !  units of kg/m2/s using the MEGAN inventory. (dbm, 12/2012)
        1304             : !\\
        1305             : !\\
        1306             : ! !INTERFACE:
        1307             : !
        1308           0 :   SUBROUTINE GET_MEGAN_EMISSIONS( HcoState, ExtState, &
        1309             :                                   Inst, I, J, CMPD, MEGAN_EMIS, RC )
        1310             : !
        1311             : ! !INPUT PARAMETERS:
        1312             : !
        1313             :     TYPE(HCO_STATE),  POINTER     :: HcoState
        1314             :     TYPE(Ext_State),  POINTER     :: ExtState
        1315             :     TYPE(MyInst),     POINTER     :: Inst
        1316             :     INTEGER,          INTENT(IN)  :: I, J      ! GEOS-Chem lon & lat indices
        1317             :     CHARACTER(LEN=*), INTENT(IN)  :: CMPD      ! Compound name (dbm,6/21/2012)
        1318             : !
        1319             : ! !OUTPUT PARAMETERS:
        1320             : !
        1321             :     REAL(hp),         INTENT(OUT) :: MEGAN_EMIS ! kg/m2/s
        1322             : !
        1323             : ! !INPUT/OUTPUT PARAMETERS:
        1324             : !
        1325             :     INTEGER,          INTENT(INOUT) :: RC
        1326             : !
        1327             : ! !REMARKS:
        1328             : !  References (see above for full citations):
        1329             : !  ============================================================================
        1330             : !  (1 ) Guenther et al, 1995, 1999, 2000, 2004, 2006
        1331             : !  (2 ) Wang,    et al, 1998
        1332             : !  (3 ) Guenther et al, 2007, MEGAN v2.1 User mannual
        1333             : !  (4 ) Guenther et al, 2012 GMD MEGANv2.1 description and associated code at
        1334             : !                                http://acd.ucar.edu/~guenther/MEGAN/
        1335             : !
        1336             : ! !REVISION HISTORY:
        1337             : !  (1 ) Original code by Dorian Abbot (9/2003).  Updated to the latest
        1338             : !        algorithm and modified for the standard code by May Fu (11/20/04)
        1339             : !  See https://github.com/geoschem/hemco for complete history
        1340             : !EOP
        1341             : !------------------------------------------------------------------------------
        1342             : !BOC
        1343             : !
        1344             : ! !LOCAL VARIABLES:
        1345             : !
        1346             :     REAL(hp)            :: GAMMA_LAI
        1347             :     REAL(hp)            :: GAMMA_AGE
        1348             :     REAL(hp)            :: GAMMA_PAR
        1349             :     REAL(hp)            :: GAMMA_T_LD
        1350             :     REAL(hp)            :: GAMMA_T_LI
        1351             :     REAL(hp)            :: GAMMA_SM
        1352             :     REAL(hp)            :: GAMMA_CO2  ! (Tai, Jan 2013)
        1353             :     REAL(hp)            :: AEF
        1354             :     REAL(hp)            :: D_BTW_M
        1355             :     REAL(hp)            :: TS, SUNCOS
        1356             :     REAL(hp)            :: Q_DIR_2, Q_DIFF_2
        1357             :     REAL(hp)            :: BETA, LDF, CT1, CEO
        1358             :     REAL(hp)            :: ANEW, AGRO, AMAT, AOLD
        1359             :     REAL(hp)            :: ISOLAI, PMISOLAI, MISOLAI
        1360             :     REAL(hp)            :: PFTSUM
        1361             :     LOGICAL             :: BIDIR
        1362             :     CHARACTER(LEN=255)  :: LOC
        1363             :
        1364             :     !=================================================================
        1365             :     ! GET_MEGAN_EMISSIONS begins here!
        1366             :     !=================================================================
        1367           0 :     LOC = 'GET_MEGAN_EMISSIONS (HCOX_MEGAN_MOD.F90)'
        1368             :
        1369             :     ! Initialize parameters, gamma values, and return value
        1370           0 :     MEGAN_EMIS = 0.0_hp
        1371           0 :     GAMMA_LAI  = 0.0_hp
        1372           0 :     GAMMA_AGE  = 0.0_hp
        1373           0 :     GAMMA_T_LD = 0.0_hp
        1374           0 :     GAMMA_T_LI = 0.0_hp
        1375           0 :     GAMMA_PAR  = 0.0_hp
        1376           0 :     GAMMA_SM   = 0.0_hp
        1377           0 :     GAMMA_CO2  = 0.0_hp
        1378           0 :     BETA       = 0.0_hp
        1379           0 :     AEF        = 0.0_hp
        1380           0 :     LDF        = 0.0_hp
        1381           0 :     CT1        = 0.0_hp
        1382           0 :     CEO        = 0.0_hp
        1383           0 :     ANEW       = 0.0_hp
        1384           0 :     AGRO       = 0.0_hp
        1385           0 :     AMAT       = 0.0_hp
        1386           0 :     AOLD       = 0.0_hp
        1387           0 :     BIDIR      = .FALSE.
        1388             :
        1389             :     ! Number of days between MISOLAI and PMISOLAI
        1390           0 :     D_BTW_M  = DBLE( Inst%DAYS_BTW_M )
        1391             :
        1392             :     ! Pass met variables. Now use only LAI (ckeller, 10/9/2014)
        1393           0 :     ISOLAI   = ExtState%LAI%Arr%Val(I,J)
        1394           0 :     PMISOLAI = Inst%LAI_PREVDAY(I,J)
        1395           0 :     MISOLAI  = ISOLAI
        1396           0 :     TS       = ExtState%T2M%Arr%Val(I,J)
        1397           0 :     SUNCOS   = ExtState%SUNCOS%Arr%Val(I,J)
        1398             :
        1399             :     ! Convert Q_DIR and Q_DIFF from (W/m2) to (micromol/m2/s)
        1400           0 :     Q_DIR_2  = ExtState%PARDR%Arr%Val(I,J) * WM2_TO_UMOLM2S
        1401           0 :     Q_DIFF_2 = ExtState%PARDF%Arr%Val(I,J) * WM2_TO_UMOLM2S
        1402             :
        1403             :     ! Eventually normalize LAI by PFT (if setting is set
        1404             :     ! accordingly). ckeller, 7/17/17.
        1405           0 :     IF ( Inst%NORMLAI ) THEN
        1406           0 :        PFTSUM = SUM( Inst%ARRAY_16(I,J,2:16) )
        1407           0 :        IF ( PFTSUM > 0.0_hp ) THEN
        1408           0 :           MISOLAI  = MIN( MISOLAI  / PFTSUM, LAI_MAX )
        1409           0 :           PMISOLAI = MIN( PMISOLAI / PFTSUM, LAI_MAX )
        1410             :        ENDIF
        1411             :     ENDIF
        1412             :
        1413             :     ! --------------------------------------------
        1414             :     ! Get MEGAN parameters for this compound
        1415             :     ! --------------------------------------------
        1416             :     CALL GET_MEGAN_PARAMS ( HcoState,                         &
        1417             :                             CMPD, BETA, LDF,  CT1,  CEO,      &
        1418           0 :                             ANEW, AGRO, AMAT, AOLD, BIDIR, RC )
        1419           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        1420           0 :         CALL HCO_ERROR( 'ERROR 6', RC, THISLOC=LOC )
        1421           0 :         RETURN
        1422             :     ENDIF
        1423             :
        1424             :     ! --------------------------------------------
        1425             :     ! Get base emission factor for this compound and grid square
        1426             :     ! Units: kg/m2/s
        1427             :     ! --------------------------------------------
        1428           0 :     CALL GET_MEGAN_AEF ( HcoState, Inst, I, J, CMPD, AEF, RC )
        1429           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        1430           0 :         CALL HCO_ERROR( 'ERROR 7', RC, THISLOC=LOC )
        1431           0 :         RETURN
        1432             :     ENDIF
        1433             :
        1434             :     !-----------------------------------------------------
        1435             :     ! Only interested in terrestrial biosphere
        1436             :     ! If (local LAI != 0 .AND. baseline emission !=0 )
        1437             :     !-----------------------------------------------------
        1438           0 :     IF ( ISOLAI * AEF > 0.0_hp ) THEN
        1439             :
        1440             :        ! --------------------------------------------------
        1441             :        ! GAMMA_par (light activity factor)
        1442             :        ! --------------------------------------------------
        1443             :
        1444             :        ! Calculate GAMMA PAR only during day
        1445           0 :        IF ( SUNCOS > 0.0_hp ) THEN
        1446             :
        1447             :           GAMMA_PAR = GET_GAMMA_PAR_PCEEA( HcoState,                  &
        1448             :                                            ExtState, Inst, I, J,      &
        1449             :                                            Q_DIR_2,  Q_DIFF_2,        &
        1450           0 :                                            Inst%PARDR_LASTXDAYS(I,J), &
        1451           0 :                                            Inst%PARDF_LASTXDAYS(I,J) )
        1452             :        ELSE
        1453             :
        1454             :           ! If night
        1455             :           GAMMA_PAR = 0.0_hp
        1456             :        ENDIF
        1457             :
        1458             :        ! --------------------------------------------------
        1459             :        ! GAMMA_T_LI (temperature activity factor for
        1460             :        ! light-independent fraction)
        1461             :        ! --------------------------------------------------
        1462           0 :        GAMMA_T_LI = GET_GAMMA_T_LI( TS, BETA )
        1463             :
        1464             :        ! --------------------------------------------------
        1465             :        ! GAMMA_T_LD (temperature activity factor for
        1466             :        ! light-dependent fraction)
        1467             :        ! --------------------------------------------------
        1468           0 :        GAMMA_T_LD = GET_GAMMA_T_LD( TS, Inst%T_LASTXDAYS(I,J), &
        1469           0 :                                     Inst%T_LAST24H(I,J), CT1, CEO )
        1470             :
        1471             :        ! --------------------------------------------------
        1472             :        ! GAMMA_LAI (leaf area index activity factor)
        1473             :        ! --------------------------------------------------
        1474           0 :        GAMMA_LAI = GET_GAMMA_LAI( MISOLAI, BIDIR )
        1475             :
        1476             :        ! --------------------------------------------------
        1477             :        ! GAMMA_AGE (leaf age activity factor)
        1478             :        ! --------------------------------------------------
        1479             :        GAMMA_AGE = GET_GAMMA_AGE( MISOLAI, PMISOLAI, D_BTW_M, &
        1480             :                                   Inst%T_LASTXDAYS(I,J),      &
        1481           0 :                                   ANEW, AGRO, AMAT, AOLD )
        1482             :
        1483             :        ! --------------------------------------------------
        1484             :        ! GAMMA_SM (soil moisture activity factor)
        1485             :        ! --------------------------------------------------
        1486           0 :        GAMMA_SM = GET_GAMMA_SM( ExtState, I, J, CMPD )
        1487             :
        1488             :        ! CO2 inhibition of isoprene (Tai, Jan 2013)
        1489           0 :        IF ( Inst%LISOPCO2 ) THEN
        1490           0 :           GAMMA_CO2 = GET_GAMMA_CO2( Inst%GLOBCO2 )
        1491             :        ELSE
        1492             :           GAMMA_CO2 = 1.0_hp
        1493             :        ENDIF
        1494             :
        1495             :     ELSE
        1496             :
        1497             :        ! set activity factors to zero
        1498             :        GAMMA_PAR  = 0.0_hp
        1499             :        GAMMA_T_LI = 0.0_hp
        1500             :        GAMMA_T_LD = 0.0_hp
        1501             :        GAMMA_LAI  = 0.0_hp
        1502             :        GAMMA_AGE  = 0.0_hp
        1503             :        GAMMA_SM   = 0.0_hp
        1504             :        GAMMA_CO2  = 0.0_hp
        1505             :
        1506             :     END IF
        1507             :
        1508             :     ! Emission is the product of all of these.
        1509             :     ! Units here are kg/m2/s.
        1510             :     ! Normalization factor ensures product of GAMMA values is 1.0 under
        1511             :     !  standard conditions.
        1512           0 :     IF ( CMPD == 'ISOP' ) THEN
        1513             :        ! Only apply CO2 inhibition to isoprene (mps, 9/15/15)
        1514             :        ! Amos Tai wrote:
        1515             :        !  In my opinion, we should not apply the CO2 inhibition factor on
        1516             :        !  other monoterpene species yet, because the empirical data I've used
        1517             :        !  are for isoprene emissions only. But we generally agree that CO2
        1518             :        !  inhibition should affect monoterpenes too, so we'll leave room for
        1519             :        !  future incorporation when new data arise.
        1520           0 :        MEGAN_EMIS = Inst%NORM_FAC(1) * AEF * GAMMA_AGE * GAMMA_SM * &
        1521             :                     GAMMA_LAI * ((1.0_hp - LDF) * GAMMA_T_LI +      &
        1522           0 :                     (LDF * GAMMA_PAR * GAMMA_T_LD)) * GAMMA_CO2
        1523             :     ELSE
        1524           0 :        MEGAN_EMIS = Inst%NORM_FAC(1) * AEF * GAMMA_AGE * GAMMA_SM * &
        1525             :                     GAMMA_LAI * ((1.0_hp - LDF) * GAMMA_T_LI +      &
        1526           0 :                     (LDF * GAMMA_PAR * GAMMA_T_LD))
        1527             :     ENDIF
        1528             :
        1529             :     ! Leave w/ success
        1530           0 :     RC = HCO_SUCCESS
        1531             :
        1532             :   END SUBROUTINE GET_MEGAN_EMISSIONS
        1533             : !EOC
        1534             : !------------------------------------------------------------------------------
        1535             : !                   Harmonized Emissions Component (HEMCO)                    !
        1536             : !------------------------------------------------------------------------------
        1537             : !BOP
        1538             : !
        1539             : ! !IROUTINE: Get_Megan_Params
        1540             : !
        1541             : ! !DESCRIPTION: Subroutine Get\_Megan\_Params returns the emission parameters
        1542             : !  for each MEGAN compound needed to compute emissions. Called from
        1543             : !  GET\_MEGAN\_EMISSIONS.
        1544             : !\\
        1545             : !\\
        1546             : ! !INTERFACE:
        1547             : !
        1548           0 :   SUBROUTINE GET_MEGAN_PARAMS( HcoState,                           &
        1549             :                                CPD,   BTA,   LIDF,  C_T1,  C_EO,   &
        1550             :                                A_NEW, A_GRO, A_MAT, A_OLD, BI_DIR, &
        1551             :                                RC )
        1552             : !
        1553             : ! !INPUT PARAMETERS:
        1554             : !
        1555             :     TYPE(HCO_State),  POINTER    :: HcoState
        1556             :     CHARACTER(LEN=*), INTENT(IN) :: CPD       ! Compound name
        1557             : !
        1558             : ! !INPUT/OUTPUT PARAMETERS:
        1559             : !
        1560             :     REAL(hp), INTENT(INOUT) :: BTA    ! Beta coefficient for temperature activity
        1561             :                                       ! factor for light-independent fraction
        1562             :     REAL(hp), INTENT(INOUT) :: LIDF   ! Light-dependent fraction of emissions
        1563             :     REAL(hp), INTENT(INOUT) :: C_T1   ! CT1 parameter for temperature activity
        1564             :                                       ! factor for light-dependent fraction
        1565             :     REAL(hp), INTENT(INOUT) :: C_EO   ! Ceo parameter for temperature activity
        1566             :                                       ! factor for light-dependent fraction
        1567             :     REAL(hp), INTENT(INOUT) :: A_NEW  ! Relative emission factor (new leaves)
        1568             :     REAL(hp), INTENT(INOUT) :: A_GRO  ! Relative emission factor (growing leaves)
        1569             :     REAL(hp), INTENT(INOUT) :: A_MAT  ! Relative emission factor (mature leaves)
        1570             :     REAL(hp), INTENT(INOUT) :: A_OLD  ! Relative emission factor (old leaves)
        1571             :     LOGICAL,  INTENT(INOUT) :: BI_DIR ! Logical flag to indicate bidirectional exchange
        1572             :     INTEGER,  INTENT(INOUT) :: RC
        1573             : !
        1574             : ! !REMARKS:
        1575             : !  References (see above for full citations):
        1576             : !  ============================================================================
        1577             : !  (1 ) Guenther et al, (GMD 2012) and associated MEGANv2.1 source code
        1578             : !
        1579             : ! !REVISION HISTORY:
        1580             : !  (1 ) Created by dbm 07/2012
        1581             : !  See https://github.com/geoschem/hemco for complete history
        1582             : !EOP
        1583             : !------------------------------------------------------------------------------
        1584             : !BOC
        1585             : !
        1586             : ! !LOCAL VARIABLES:
        1587             : !
        1588             :     CHARACTER(LEN=255):: MSG
        1589             :
        1590             :     !=================================================================
        1591             :     ! GET_MEGAN_PARAMS begins here!
        1592             :     !=================================================================
        1593             :
        1594             :     ! Initialize values
        1595           0 :     BTA    = 0.0_hp
        1596           0 :     LIDF   = 0.0_hp
        1597           0 :     C_T1   = 0.0_hp
        1598           0 :     C_EO   = 0.0_hp
        1599           0 :     A_NEW  = 0.0_hp
        1600           0 :     A_GRO  = 0.0_hp
        1601           0 :     A_MAT  = 0.0_hp
        1602           0 :     A_OLD  = 0.0_hp
        1603           0 :     BI_DIR = .FALSE.
        1604             :
        1605             :     ! ----------------------------------------------------------------
        1606             :     ! Note that not all the above compounds are used in standard chemistry
        1607             :     ! simulations, but they are provided here for future incorporation or
        1608             :     ! specialized applications. More compounds can be added as needed
        1609             :     ! by adding the corresponding CPD name and the appropriate paramaters.
        1610             :     ! (dbm, 01/2013)
        1611             :     !
        1612             :     ! Values are from Table 4 in Guenther et al., 2012
        1613             :     ! ----------------------------------------------------------------
        1614             :
        1615             :     ! Isoprene, MBO
        1616           0 :     IF ( TRIM(CPD) == 'ISOP' .OR. &
        1617             :          TRIM(CPD) == 'MBOX' ) THEN
        1618           0 :        BTA    = 0.13_hp  ! Not actually used for ISOP, MBO
        1619           0 :        LIDF   = 1.0_hp
        1620           0 :        C_T1   = 95.0_hp
        1621           0 :        C_EO   = 2.0_hp
        1622           0 :        A_NEW  = 0.05_hp
        1623           0 :        A_GRO  = 0.6_hp
        1624           0 :        A_MAT  = 1.0_hp
        1625           0 :        A_OLD  = 0.9_hp
        1626           0 :        BI_DIR = .FALSE.
        1627             :
        1628             :     ! Myrcene, sabinene, alpha-pinene
        1629             :     ELSE IF ( TRIM(CPD) == 'MYRC' .OR. &
        1630           0 :               TRIM(CPD) == 'SABI' .OR. &
        1631             :               TRIM(CPD) == 'APIN' ) THEN
        1632           0 :        BTA    = 0.10_hp
        1633           0 :        LIDF   = 0.6_hp
        1634           0 :        C_T1   = 80.0_hp
        1635           0 :        C_EO   = 1.83_hp
        1636           0 :        A_NEW  = 2.0_hp
        1637           0 :        A_GRO  = 1.8_hp
        1638           0 :        A_MAT  = 1.0_hp
        1639           0 :        A_OLD  = 1.05_hp
        1640           0 :        BI_DIR = .FALSE.
        1641             :
        1642             :     ! Limonene, 3-carene, beta-pinene
        1643             :     ELSE IF ( TRIM(CPD) == 'LIMO' .OR. &
        1644           0 :               TRIM(CPD) == 'CARE' .OR. &
        1645             :               TRIM(CPD) == 'BPIN' ) THEN
        1646           0 :        BTA    = 0.10_hp
        1647           0 :        LIDF   = 0.2_hp
        1648           0 :        C_T1   = 80.0_hp
        1649           0 :        C_EO   = 1.83_hp
        1650           0 :        A_NEW  = 2.0_hp
        1651           0 :        A_GRO  = 1.8_hp
        1652           0 :        A_MAT  = 1.0_hp
        1653           0 :        A_OLD  = 1.05_hp
        1654           0 :        BI_DIR = .FALSE.
        1655             :
        1656             :     ! t-beta-ocimene
        1657           0 :     ELSE IF ( TRIM(CPD) == 'OCIM' ) THEN
        1658           0 :        BTA    = 0.10_hp
        1659           0 :        LIDF   = 0.8_hp
        1660           0 :        C_T1   = 80.0_hp
        1661           0 :        C_EO   = 1.83_hp
        1662           0 :        A_NEW  = 2.0_hp
        1663           0 :        A_GRO  = 1.8_hp
        1664           0 :        A_MAT  = 1.0_hp
        1665           0 :        A_OLD  = 1.05_hp
        1666           0 :        BI_DIR = .FALSE.
        1667             :
        1668             :     ! Other monoterpenes (lumped)
        1669           0 :     ELSE IF ( TRIM(CPD) == 'OMON' ) THEN
        1670           0 :        BTA    = 0.10_hp
        1671           0 :        LIDF   = 0.4_hp
        1672           0 :        C_T1   = 80.0_hp
        1673           0 :        C_EO   = 1.83_hp
        1674           0 :        A_NEW  = 2.0_hp
        1675           0 :        A_GRO  = 1.8_hp
        1676           0 :        A_MAT  = 1.0_hp
        1677           0 :        A_OLD  = 1.05_hp
        1678           0 :        BI_DIR = .FALSE.
        1679             :
        1680             :     ! Methanol
        1681           0 :     ELSE IF ( TRIM(CPD) == 'MOH' ) THEN
        1682           0 :        BTA    = 0.08_hp
        1683           0 :        LIDF   = 0.8_hp
        1684           0 :        C_T1   = 60.0_hp
        1685           0 :        C_EO   = 1.6_hp
        1686           0 :        A_NEW  = 3.5_hp
        1687           0 :        A_GRO  = 3.0_hp
        1688           0 :        A_MAT  = 1.0_hp
        1689           0 :        A_OLD  = 1.2_hp
        1690           0 :        BI_DIR = .FALSE.
        1691             :
        1692             :     ! Acetone
        1693           0 :     ELSE IF ( TRIM(CPD) == 'ACET' ) THEN
        1694           0 :        BTA    = 0.1_hp
        1695           0 :        LIDF   = 0.2_hp
        1696           0 :        C_T1   = 80.0_hp
        1697           0 :        C_EO   = 1.83_hp
        1698           0 :        A_NEW  = 1.0_hp
        1699           0 :        A_GRO  = 1.0_hp
        1700           0 :        A_MAT  = 1.0_hp
        1701           0 :        A_OLD  = 1.0_hp
        1702           0 :        BI_DIR = .FALSE.
        1703             :
        1704             :     ! Bidirectional VOC: Ethanol, formaldehyde, acetaldehyde, formic acid,
        1705             :     ! acetic acid
        1706             :     ELSE IF ( TRIM(CPD) == 'EOH'  .OR. &
        1707             :               TRIM(CPD) == 'CH2O' .OR. &
        1708             :               TRIM(CPD) == 'ALD2' .OR. &
        1709           0 :               TRIM(CPD) == 'FAXX' .OR. &
        1710             :               TRIM(CPD) == 'AAXX' ) THEN
        1711           0 :        BTA    = 0.13_hp
        1712           0 :        LIDF   = 0.8_hp
        1713           0 :        C_T1   = 95.0_hp
        1714           0 :        C_EO   = 2.0_hp
        1715           0 :        A_NEW  = 1.0_hp
        1716           0 :        A_GRO  = 1.0_hp
        1717           0 :        A_MAT  = 1.0_hp
        1718           0 :        A_OLD  = 1.0_hp
        1719           0 :        BI_DIR = .TRUE.
        1720             :
        1721             :     ! Stress VOCs: ethene, toluene, HCN
        1722             :     ! There are others species in this category but none are currently
        1723             :     ! used in GEOS-Chem
        1724             :     ELSE IF ( TRIM(CPD) == 'C2H4' .OR. &
        1725           0 :               TRIM(CPD) == 'TOLU' .OR. &
        1726             :               TRIM(CPD) == 'HCNX' ) THEN
        1727           0 :        BTA    = 0.1_hp
        1728           0 :        LIDF   = 0.8_hp
        1729           0 :        C_T1   = 80.0_hp
        1730           0 :        C_EO   = 1.83_hp
        1731           0 :        A_NEW  = 1.0_hp
        1732           0 :        A_GRO  = 1.0_hp
        1733           0 :        A_MAT  = 1.0_hp
        1734           0 :        A_OLD  = 1.0_hp
        1735           0 :        BI_DIR = .FALSE.
        1736             :
        1737             :     ! Other VOCs: >C2 alkenes
        1738             :     ! This includes propene, butene and very minor contribution from
        1739             :     ! larger alkenes
        1740           0 :     ELSE IF ( TRIM(CPD) == 'PRPE' ) THEN
        1741           0 :        BTA    = 0.1_hp
        1742           0 :        LIDF   = 0.2_hp
        1743           0 :        C_T1   = 80.0_hp
        1744           0 :        C_EO   = 1.83_hp
        1745           0 :        A_NEW  = 1.0_hp
        1746           0 :        A_GRO  = 1.0_hp
        1747           0 :        A_MAT  = 1.0_hp
        1748           0 :        A_OLD  = 1.0_hp
        1749           0 :        BI_DIR = .FALSE.
        1750             :
        1751             :     ! SOAupdate: Sesquiterpenes hotp 3/2/10
        1752             :     ! alpha-Farnesene, beta-Caryophyllene, other sesquiterpenes
        1753             :     ELSE IF ( TRIM(CPD) == 'FARN' .OR. &
        1754           0 :               TRIM(CPD) == 'BCAR' .OR. &
        1755             :               TRIM(CPD) == 'OSQT' ) THEN
        1756           0 :        BTA    = 0.17_hp
        1757           0 :        LIDF   = 0.5_hp
        1758           0 :        C_T1   = 130.0_hp
        1759           0 :        C_EO   = 2.37_hp
        1760           0 :        A_NEW  = 0.4_hp
        1761           0 :        A_GRO  = 0.6_hp
        1762           0 :        A_MAT  = 1.0_hp
        1763           0 :        A_OLD  = 0.95_hp
        1764           0 :        BI_DIR = .FALSE.
        1765             :
        1766             :     ! Calls for any other MEGAN compounds (e.g. sesquiterpenes, etc.) can
        1767             :     ! be added following the above format based on the parameters in
        1768             :     ! Guenther 2012 or the MEGAN source code (dbm, 6/21/2012).
        1769             :     ELSE
        1770             :
        1771           0 :        MSG = 'Invalid compound name'
        1772             :        CALL HCO_ERROR(MSG, RC, &
        1773           0 :                       THISLOC='GET_MEGAN_PARAMS' )
        1774           0 :        RETURN
        1775             :
        1776             :     ENDIF
        1777             :
        1778             :     ! Leave w/ success
        1779           0 :     RC = HCO_SUCCESS
        1780             :
        1781             :   END SUBROUTINE GET_MEGAN_PARAMS
        1782             : !EOC
        1783             : !------------------------------------------------------------------------------
        1784             : !                   Harmonized Emissions Component (HEMCO)                    !
        1785             : !------------------------------------------------------------------------------
        1786             : !BOP
        1787             : !
        1788             : ! !IROUTINE: Get_Megan_AEF
        1789             : !
        1790             : ! !DESCRIPTION: Function Get\_Megan\_AEF returns the appropriate AEF value
        1791             : !  for a given compound and grid square.
        1792             : !\\
        1793             : !\\
        1794             : ! !INTERFACE:
        1795             : !
        1796           0 :   SUBROUTINE GET_MEGAN_AEF( HcoState, Inst, I, J, CPD, EMFAC, RC )
        1797             : !
        1798             : ! !INPUT PARAMETERS:
        1799             : !
        1800             :     TYPE(HCO_State),   POINTER     :: HcoState
        1801             :     TYPE(MyInst),      POINTER     :: Inst
        1802             :     INTEGER,           INTENT(IN)  :: I, J        ! Lon & lat indices
        1803             :     CHARACTER(LEN=*),  INTENT(IN)  :: CPD         ! Compound name
        1804             : !
        1805             : ! !OUTPUT PARAMETERS:
        1806             : !
        1807             :     REAL(hp),          INTENT(OUT) :: EMFAC       ! MEGAN base emission factor
        1808             :                                                   ! (kg/m2/s) for grid cell I,J
        1809             : !
        1810             : ! !INPUT/OUTPUT PARAMETERS:
        1811             : !
        1812             :     INTEGER,           INTENT(INOUT) :: RC        ! Return code
        1813             : !
        1814             : ! !REMARKS:
        1815             : !  References (see above for full citations):
        1816             : !  ============================================================================
        1817             : !  (1 ) Guenther et al, 2012, MEGANv2.1 source code
        1818             : !
        1819             : ! !REVISION HISTORY:
        1820             : !  (1 ) Created 11/2012 by dbm
        1821             : !  See https://github.com/geoschem/hemco for complete history
        1822             : !EOP
        1823             : !------------------------------------------------------------------------------
        1824             : !BOC
        1825             : !
        1826             : ! !LOCAL VARIABLES:
        1827             : !
        1828             :     CHARACTER(LEN=255):: MSG
        1829             :
        1830             :     !=================================================================
        1831             :     ! GET_MEGAN_AEF begins here!
        1832             :     !=================================================================
        1833             :
        1834             :     ! Find appropriate tracer
        1835           0 :     SELECT CASE ( TRIM( CPD ) )
        1836             :     CASE ( 'ISOP' )
        1837           0 :        EMFAC = Inst%AEF_ISOP(I,J)
        1838             :     CASE ( 'MBOX' )
        1839           0 :        EMFAC = Inst%AEF_MBOX(I,J)
        1840             :     CASE ( 'MYRC' )
        1841           0 :        EMFAC = Inst%AEF_MYRC(I,J)
        1842             :     CASE ( 'SABI' )
        1843           0 :        EMFAC = Inst%AEF_SABI(I,J)
        1844             :     CASE ( 'APIN' )
        1845           0 :        EMFAC = Inst%AEF_APIN(I,J)
        1846             :     CASE ( 'LIMO' )
        1847           0 :        EMFAC = Inst%AEF_LIMO(I,J)
        1848             :     CASE ( 'CARE' )
        1849           0 :        EMFAC = Inst%AEF_CARE(I,J)
        1850             :     CASE ( 'BPIN' )
        1851           0 :        EMFAC = Inst%AEF_BPIN(I,J)
        1852             :     CASE ( 'OCIM' )
        1853           0 :        EMFAC = Inst%AEF_OCIM(I,J)
        1854             :     CASE ( 'OMON' )
        1855           0 :        EMFAC = Inst%AEF_OMON(I,J)
        1856             :     CASE ( 'MOH' )
        1857           0 :        EMFAC = Inst%AEF_MOH(I,J)
        1858             :     CASE ( 'ACET' )
        1859           0 :        EMFAC = Inst%AEF_ACET(I,J)
        1860             :     CASE ( 'EOH' )
        1861           0 :        EMFAC = Inst%AEF_EOH(I,J)
        1862             :     CASE ( 'CH2O' )
        1863           0 :        EMFAC = Inst%AEF_CH2O(I,J)
        1864             :     CASE ( 'ALD2' )
        1865           0 :        EMFAC = Inst%AEF_ALD2(I,J)
        1866             :     CASE ( 'FAXX' )
        1867           0 :        EMFAC = Inst%AEF_FAXX(I,J)
        1868             :     CASE ( 'AAXX' )
        1869           0 :        EMFAC = Inst%AEF_AAXX(I,J)
        1870             :     CASE ( 'C2H4' )
        1871           0 :        EMFAC = Inst%AEF_C2H4(I,J)
        1872             :     CASE ( 'TOLU' )
        1873           0 :        EMFAC = Inst%AEF_TOLU(I,J)
        1874             :     CASE ( 'HCNX' )
        1875           0 :        EMFAC = Inst%AEF_HCNX(I,J)
        1876             :     CASE ( 'PRPE' )
        1877           0 :        EMFAC = Inst%AEF_PRPE(I,J)
        1878             :     CASE ( 'FARN' )
        1879           0 :        EMFAC = Inst%AEF_FARN(I,J)
        1880             :     CASE ( 'BCAR' )
        1881           0 :        EMFAC = Inst%AEF_BCAR(I,J)
        1882             :     CASE ( 'OSQT' )
        1883           0 :        EMFAC = Inst%AEF_OSQT(I,J)
        1884             :     CASE DEFAULT
        1885           0 :        MSG = 'Invalid compound name'
        1886             :        CALL HCO_ERROR(MSG, &
        1887           0 :                       RC, THISLOC='GET_MEGAN_AEF' )
        1888           0 :        RETURN
        1889             :     END SELECT
        1890             :
        1891             :     ! Return w/ success
        1892           0 :     RC = HCO_SUCCESS
        1893             :
        1894             :   END SUBROUTINE GET_MEGAN_AEF
        1895             : !EOC
        1896             : !------------------------------------------------------------------------------
        1897             : !                   Harmonized Emissions Component (HEMCO)                    !
        1898             : !------------------------------------------------------------------------------
        1899             : !BOP
        1900             : !
        1901             : ! !IROUTINE: Get_Gamma_PAR_PCEEA
        1902             : !
        1903             : ! !DESCRIPTION: Computes the PCEEA gamma activity factor with sensitivity
        1904             : !  to LIGHT.
        1905             : !\\
        1906             : !\\
        1907             : ! !INTERFACE:
        1908             : !
        1909           0 :   FUNCTION GET_GAMMA_PAR_PCEEA( HcoState, ExtState,            &
        1910             :                                 Inst, I, J, Q_DIR_2, Q_DIFF_2, &
        1911             :                                 PARDR_AVG_SIM, PARDF_AVG_SIM ) &
        1912             :     RESULT( GAMMA_P_PCEEA )
        1913             : !
        1914             : ! !USES:
        1915             : !
        1916             :     USE HCO_CLOCK_MOD, ONLY : HcoClock_Get, HcoClock_GetLocal
        1917             : !
        1918             : ! !INPUT PARAMETERS:
        1919             : !
        1920             :     TYPE(HCO_State), POINTER    :: HcoState
        1921             :     TYPE(Ext_State), POINTER    :: ExtState
        1922             :     TYPE(MyInst),    POINTER    :: Inst
        1923             :     INTEGER,         INTENT(IN) :: I,  J             ! Lon & lat indices
        1924             :     REAL(sp),        INTENT(IN) :: PARDR_AVG_SIM     ! Avg direct PAR [W/m2]
        1925             :     REAL(sp),        INTENT(IN) :: PARDF_AVG_SIM     ! Avg diffuse PAR [W/m2]
        1926             :     REAL(hp),        INTENT(IN) :: Q_DIR_2           ! Direct PAR [umol/m2/s]
        1927             :     REAL(hp),        INTENT(IN) :: Q_DIFF_2          ! Diffuse PAR [umol/m2/s]
        1928             : !
        1929             : ! !RETURN VALUE:
        1930             : !
        1931             :     REAL(hp)                    :: GAMMA_P_PCEEA     ! GAMMA factor for light
        1932             : !
        1933             : ! !REMARKS:
        1934             : !  References (see above for full citations):
        1935             : !  ============================================================================
        1936             : !  (1 ) Guenther et al, 2006
        1937             : !  (2 ) Guenther et al, 2007, MEGAN v2.1 user guide
        1938             : !
        1939             : ! !REVISION HISTORY:
        1940             : !  (1 ) Code was taken & adapted directly from the MEGAN v2.1 source code.
        1941             : !      (mpb,2009)
        1942             : !  See https://github.com/geoschem/hemco for complete history
        1943             : !EOP
        1944             : !------------------------------------------------------------------------------
        1945             : !BOC
        1946             : !
        1947             : ! !LOCAL VARIABLES:
        1948             : !
        1949             :     REAL(hp)   :: mmPARDR_DAILY
        1950             :     REAL(hp)   :: mmPARDF_DAILY
        1951             :     REAL(hp)   :: PAC_DAILY, PAC_INSTANT, C_PPFD
        1952             :     REAL(hp)   :: PTOA, PHI
        1953             :     REAL(hp)   :: BETA,   SINbeta
        1954             :     INTEGER    :: DOY, RC
        1955             :     REAL(hp)   :: AAA, BBB
        1956             :     REAL(hp)   :: LocalHour
        1957             :     REAL(hp)   :: LAT
        1958             :
        1959             :     !-----------------------------------------------------------------
        1960             :     ! Compute GAMMA_PAR_PCEEA
        1961             :     !-----------------------------------------------------------------
        1962             :
        1963             :     ! Initialize
        1964           0 :     C_PPFD = 0.0_hp
        1965           0 :     PTOA   = 0.0_hp
        1966             :
        1967             :     ! Convert past light conditions to micromol/m2/s
        1968           0 :     mmPARDR_DAILY = PARDR_AVG_SIM  * WM2_TO_UMOLM2S
        1969           0 :     mmPARDF_DAILY = PARDF_AVG_SIM  * WM2_TO_UMOLM2S
        1970             :
        1971             :     ! Work out the light at the top of the canopy.
        1972           0 :     PAC_DAILY    = mmPARDR_DAILY + mmPARDF_DAILY
        1973           0 :     PAC_INSTANT  = Q_DIR_2       +  Q_DIFF_2
        1974             :
        1975             :     ! Get latitude
        1976           0 :     LAT = HcoState%Grid%YMID%Val(I,J)
        1977             :
        1978             :     ! Get day of year, local-time and latitude
        1979             :     ! TODO: Evaluate RC?
        1980           0 :     CALL HcoClock_Get( HcoState%Clock, cDOY = DOY, RC=RC )
        1981           0 :     CALL HcoClock_GetLocal( HcoState, I, J, cH = LocalHour, RC=RC )
        1982             :
        1983             :     ! Get solar elevation angle
        1984           0 :     SINbeta =  SOLAR_ANGLE( HcoState, Inst, DOY, LocalHour, LAT )
        1985           0 :     BETA    =  ASIN( SINbeta ) * Inst%RAD2D
        1986             :
        1987           0 :     IF ( SINbeta < 0.0_hp ) THEN
        1988             :
        1989             :        GAMMA_P_PCEEA = 0.0_hp
        1990             :
        1991           0 :     ELSEIF ( SINbeta > 0.0_hp ) THEN
        1992             :
        1993             :        ! PPFD at top of atmosphere
        1994             :        PTOA    = 3000.0_hp + 99.0_hp * &
        1995             :                  COS( 2._hp * 3.14159265358979323_hp * &
        1996           0 :                  ( DOY - 10.0_hp ) / 365.0_hp )
        1997             :
        1998             :        ! Above canopy transmission
        1999           0 :        PHI     = PAC_INSTANT / ( SINbeta * PTOA )
        2000             :
        2001             :        ! Work out gamma P
        2002           0 :        BBB     = 1.0_hp + 0.0005_hp *( PAC_DAILY - 400.0_hp )
        2003           0 :        AAA     = ( 2.46_hp * BBB * PHI ) - ( 0.9_hp * PHI**2 )
        2004             :
        2005           0 :        GAMMA_P_PCEEA = SINbeta * AAA
        2006             :
        2007             :     ENDIF
        2008             :
        2009             :     ! Screen unforced errors. IF solar elevation angle is
        2010             :     ! less than 1 THEN gamma_p can not be greater than 0.1.
        2011           0 :     IF ( BETA < 1.0_hp .AND. GAMMA_P_PCEEA > 0.1_hp ) THEN
        2012           0 :        GAMMA_P_PCEEA  = 0.0_hp
        2013             :     ENDIF
        2014             :
        2015             :     ! Prevent negative values
        2016           0 :     GAMMA_P_PCEEA = MAX( GAMMA_P_PCEEA , 0.0_hp )
        2017             :
        2018           0 :   END FUNCTION GET_GAMMA_PAR_PCEEA
        2019             : !EOC
        2020             : !------------------------------------------------------------------------------
        2021             : !                   Harmonized Emissions Component (HEMCO)                    !
        2022             : !------------------------------------------------------------------------------
        2023             : !BOP
        2024             : !
        2025             : ! !IROUTINE: Solar_Angle
        2026             : !
        2027             : ! !DESCRIPTION: Function SOLAR\_ANGLE computes the local solar angle for a
        2028             : !  given day of year, latitude and longitude (or local time).  Called from
        2029             : !  routine Get\_Gamma\_P\_Pecca.
        2030             : !\\
        2031             : !\\
        2032             : ! !INTERFACE:
        2033             : !
        2034           0 :   FUNCTION SOLAR_ANGLE( HcoState, Inst, DOY, SHOUR, LAT ) &
        2035             :        RESULT(SINbeta)
        2036             : !
        2037             : ! !INPUT PARAMETERS:
        2038             : !
        2039             :     TYPE(HCO_State),   POINTER    :: HcoState
        2040             :     TYPE(MyInst),      POINTER    :: Inst
        2041             :     INTEGER,           INTENT(IN) :: DOY       ! Day of year
        2042             :     REAL(hp),          INTENT(IN) :: SHOUR     ! Local time
        2043             :     REAL(hp),          INTENT(IN) :: LAT       ! Latitude
        2044             : !
        2045             : ! !RETURN VALUE:
        2046             : !
        2047             :     REAL(hp)                      :: SINbeta   ! Sin of the local solar angle
        2048             : !
        2049             : ! !REMARKS:
        2050             : !  References (see above for full citations):
        2051             : !  (1 ) Guenther et al, 2006
        2052             : !  (2 ) Guenther et al, MEGAN v2.1 user mannual 2007-09
        2053             : !
        2054             : ! !REVISION HISTORY:
        2055             : !  (1 ) This code was taken directly from the MEGAN v2.1 source code.(mpb,2009)
        2056             : !  See https://github.com/geoschem/hemco for complete history
        2057             : !EOP
        2058             : !------------------------------------------------------------------------------
        2059             : !BOC
        2060             : !
        2061             : ! !LOCAL VARIABLES:
        2062             : !
        2063             :     REAL(hp) :: BETA                        ! solar elevation angle
        2064             :     REAL(hp) :: sindelta, cosdelta, A, B
        2065             :
        2066             :     ! Calculation of sin beta
        2067           0 :     sindelta = -SIN( 0.40907_hp ) * COS( 6.28_hp * ( DOY + 10_dp ) / 365_dp )
        2068             :
        2069           0 :     cosdelta = (1-sindelta**2.0_hp)**0.5_hp
        2070             :
        2071           0 :     A = SIN( LAT * Inst%D2RAD ) * sindelta
        2072           0 :     B = COS( LAT * Inst%D2RAD ) * cosdelta
        2073             :
        2074           0 :     SINbeta = A + B * COS( 2.0_hp * HcoState%Phys%PI * ( SHOUR-12_dp )/24_dp )
        2075             :
        2076           0 :   END FUNCTION SOLAR_ANGLE
        2077             : !EOC
        2078             : !------------------------------------------------------------------------------
        2079             : !                   Harmonized Emissions Component (HEMCO)                    !
        2080             : !------------------------------------------------------------------------------
        2081             : !BOP
        2082             : !
        2083             : ! !IROUTINE: Get_Gamma_T_LI
        2084             : !
        2085             : ! !DESCRIPTION: Function Get\_Gamma\_T\_LI computes the temperature activity
        2086             : !  factor (GAMMA\_T\_LI) for the light-independent fraction of emissions
        2087             : !\\
        2088             : !\\
        2089             : ! !INTERFACE:
        2090             : !
        2091           0 :   FUNCTION GET_GAMMA_T_LI( T, BETA ) &
        2092             :        RESULT( GAMMA_T_LI )
        2093             : !
        2094             : ! !INPUT PARAMETERS:
        2095             : !
        2096             :     ! Current leaf temperature, the surface air temperature field (TS)
        2097             :     ! is assumed equivalent to the leaf temperature over forests.
        2098             :     REAL(hp),  INTENT(IN) :: T
        2099             :
        2100             :     ! Temperature factor per species
        2101             :     REAL(hp),  INTENT(IN) :: BETA
        2102             : !
        2103             : ! !RETURN VALUE:
        2104             : !
        2105             :     ! Activity factor for the light-independent fraction of emissions
        2106             :     REAL(hp)              :: GAMMA_T_LI
        2107             : !
        2108             : ! !REMARKS:
        2109             : !  GAMMA_T =  exp[Beta*(T - T_Standard)]
        2110             : !                                                                             .
        2111             : !             where Beta   = temperature dependent parameter
        2112             : !                   Ts     = standard temperature (normally 303K, 30C)
        2113             : !                                                                             .
        2114             : !  Note: If T = Ts  (i.e. standard conditions) then GAMMA_T = 1
        2115             : !
        2116             : !  References (see above for full citations):
        2117             : !  ============================================================================
        2118             : !  (1 ) Guenther et al, 2006
        2119             : !  (2 ) Guenther et al, MEGAN user mannual 2007-08
        2120             : !  (3 ) Guenther et al., GMD 2012 and MEGANv2.1 source code.
        2121             : !
        2122             : ! !REVISION HISTORY:
        2123             : !  (1 ) Original code by Michael Barkley (2009).
        2124             : !  See https://github.com/geoschem/hemco for complete history
        2125             : !EOP
        2126             : !------------------------------------------------------------------------------
        2127             : !BOC
        2128             : !
        2129             : ! !DEFINED PARAMETERS:
        2130             : !
        2131             :     ! Standard reference temperature [K]
        2132             :     REAL*8, PARAMETER   :: T_STANDARD = 303.d0
        2133             :
        2134             :     !=================================================================
        2135             :     ! GET_GAMMAT_T_LI begins here!
        2136             :     !=================================================================
        2137             :
        2138           0 :     GAMMA_T_LI = EXP( BETA * ( T - T_STANDARD ) )
        2139             :
        2140           0 :   END FUNCTION GET_GAMMA_T_LI
        2141             : !EOC
        2142             : !------------------------------------------------------------------------------
        2143             : !                   Harmonized Emissions Component (HEMCO)                    !
        2144             : !------------------------------------------------------------------------------
        2145             : !BOP
        2146             : !
        2147             : ! !IROUTINE: Get_Gamma_T_LD
        2148             : !
        2149             : ! !DESCRIPTION: Function Get\_Gamma\_T\_LD computes the temperature
        2150             : !  sensitivity for the light-dependent fraction of emissions.
        2151             : !\\
        2152             : !\\
        2153             : ! !INTERFACE:
        2154             : !
        2155           0 :   FUNCTION GET_GAMMA_T_LD( T, PT_15, PT_1, CT1, CEO ) &
        2156             :        RESULT( GAMMA_T_LD )
        2157             : !
        2158             : ! !INPUT PARAMETERS:
        2159             : !
        2160             :     ! Current leaf temperature [K], the surface air temperature field (TS)
        2161             :     ! is assumed equivalent to the leaf temperature over forests.
        2162             :     REAL(hp), INTENT(IN) :: T
        2163             :
        2164             :     ! Average leaf temperature over the past 15 days
        2165             :     REAL(sp), INTENT(IN) :: PT_15
        2166             :
        2167             :     ! Average leaf temperature over the past arbitray day(s).
        2168             :     ! This is not used at present
        2169             :     REAL(sp), INTENT(IN) :: PT_1
        2170             :
        2171             :     ! Compound-specific parameters for light-dependent temperature activity
        2172             :     ! factor (dbm, 6/21/2012)
        2173             :     REAL(hp), INTENT(IN) :: CT1, CEO
        2174             : !
        2175             : ! !RETURN VALUE:
        2176             : !
        2177             :     ! Temperature activity factor for the light-dependent fraction of
        2178             :     ! emissions
        2179             :     REAL(hp)             :: GAMMA_T_LD
        2180             : !
        2181             : ! !REMARKS:
        2182             : !  References (see above for full citations):
        2183             : !  (1 ) Guenther et al, 1995
        2184             : !  (2 ) Guenther et al, 2006
        2185             : !  (3 ) Guenther et al, MEGAN v2.1 user mannual 2007-08
        2186             : !  (4 ) Guenther et al., GMD 2012 and MEGANv2.1 source code.
        2187             : !
        2188             : ! !REVISION HISTORY:
        2189             : !  (1 ) Includes the latest MEGAN v2.1 temperature algorithm (mpb, 2009).
        2190             : !       Note, this temp-dependence is the same for the PCEEA & hybrid models.
        2191             : !  See https://github.com/geoschem/hemco for complete history
        2192             : !EOP
        2193             : !------------------------------------------------------------------------------
        2194             : !BOC
        2195             : !
        2196             : ! !LOCAL VARIABLES:
        2197             : !
        2198             :     REAL(hp)              :: C_T,   CT2
        2199             :     REAL(hp)              :: E_OPT, T_OPT, X
        2200             : !
        2201             : ! !DEFINED PARAMETERS:
        2202             : !
        2203             :     ! Ideal gas constant [J/mol/K]
        2204             :     REAL(hp), PARAMETER   :: R   = 8.3144598e-3_hp
        2205             :
        2206             :     !=================================================================
        2207             :     ! GET_GAMMA_T_LD begins here!
        2208             :     !=================================================================
        2209           0 :     E_OPT = CEO * EXP( 0.08_hp * ( PT_15  - 2.97e2_hp ) )
        2210           0 :     T_OPT = 3.13e2_hp + ( 6.0e-1_hp * ( PT_15 - 2.97e2_hp ) )
        2211           0 :     CT2   = 200.0_hp
        2212             :
        2213             :     ! Variable related to temperature
        2214           0 :     X     = ( 1.0_hp/T_OPT - 1.0_hp/T ) / R
        2215             :
        2216             :     ! C_T: Effect of temperature on leaf BVOC emission, including
        2217             :     ! effect of average temperature over previous 15 days, based on
        2218             :     ! Eq 5a, 5b, 5c from Guenther et al, 1999.
        2219             :     C_T   = E_OPT * CT2 * EXP( CT1 * X ) / &
        2220           0 :             ( CT2 - CT1 * ( 1.0_hp - EXP( CT2 * X ) ) )
        2221             :
        2222             :     ! Hourly emission activity = C_T
        2223             :     ! Prevent negative values
        2224           0 :     GAMMA_T_LD = MAX( C_T, 0.0_hp )
        2225             :
        2226           0 :   END FUNCTION GET_GAMMA_T_LD
        2227             : !EOC
        2228             : !------------------------------------------------------------------------------
        2229             : !                   Harmonized Emissions Component (HEMCO)                    !
        2230             : !------------------------------------------------------------------------------
        2231             : !BOP
        2232             : !
        2233             : ! !IROUTINE: Get_Gamma_Lai
        2234             : !
        2235             : ! !DESCRIPTION: Function Get\_Gamma\_Lai computes the gamma exchange activity
        2236             : !  factor which is sensitive to leaf area (= GAMMA\_LAI).
        2237             : !\\
        2238             : !\\
        2239             : ! !INTERFACE:
        2240             : !
        2241           0 :   FUNCTION GET_GAMMA_LAI( CMLAI, BIDIREXCH ) &
        2242             :        RESULT( GAMMA_LAI )
        2243             : !
        2244             : ! !INPUT PARAMETERS:
        2245             : !
        2246             :     REAL(hp),     INTENT(IN) :: CMLAI       ! Current month's LAI [cm2/cm2]
        2247             :     LOGICAL,      INTENT(IN) :: BIDIREXCH   ! Logical flag indicating whether
        2248             :                                             ! the compound undergoes bidirectional
        2249             :                                             ! exchange
        2250             : !
        2251             : ! !RETURN VALUE:
        2252             : !
        2253             :     REAL(hp)             :: GAMMA_LAI
        2254             : !
        2255             : ! !REMARKS:
        2256             : !  References (see above for full citations):
        2257             : !  ============================================================================
        2258             : !  (1 ) Guenther et al, 2006
        2259             : !  (2 ) Guenther et al, MEGAN user mannual 2007-08
        2260             : !  (3 ) Guenther et al., GMD 2012 and MEGANv2.1 source code.
        2261             : !
        2262             : ! !REVISION HISTORY:
        2263             : !  (1 ) Original code by Dorian Abbot (9/2003).  Modified for the standard
        2264             : !        code by May Fu (11/2004)
        2265             : !  See https://github.com/geoschem/hemco for complete history
        2266             : !EOP
        2267             : !------------------------------------------------------------------------------
        2268             : !BOC
        2269             :
        2270             :     ! Formulation for birectional compounds is as described for
        2271             :     ! ALD2 in Millet et al., ACP 2010
        2272           0 :     IF ( BIDIREXCH ) THEN
        2273             :
        2274           0 :        IF ( CMLAI <= 6.0_hp) THEN
        2275             :
        2276             :           ! if lai less than 2:
        2277           0 :           IF ( CMLAI <= 2.0_hp ) THEN
        2278           0 :              GAMMA_LAI = 0.5_hp * CMLAI
        2279             :
        2280             :           ! if between 2 and 6:
        2281             :           ELSE
        2282           0 :              GAMMA_LAI = 1.0_hp - 0.0625_hp * ( CMLAI - 2.0_hp )
        2283             :           END IF
        2284             :
        2285             :        ELSE
        2286             :           ! keep at 0.75 for LAI > 6
        2287             :           GAMMA_LAI = 0.75_hp
        2288             :        END IF
        2289             :
        2290             :     ! For all other compounds use the standard gamma_lai formulation
        2291             :     ELSE
        2292           0 :        GAMMA_LAI = 0.49_hp * CMLAI / SQRT( 1.0_hp + 0.2_hp * CMLAI*CMLAI)
        2293             :     ENDIF
        2294             :
        2295           0 :   END FUNCTION GET_GAMMA_LAI
        2296             : !EOC
        2297             : !------------------------------------------------------------------------------
        2298             : !                   Harmonized Emissions Component (HEMCO)                    !
        2299             : !------------------------------------------------------------------------------
        2300             : !BOP
        2301             : !
        2302             : ! !IROUTINE: Get_Gamma_Age
        2303             : !
        2304             : ! !DESCRIPTION: Function Get\_Gamma\_Age computes the gamma exchange
        2305             : !  activity factor which is sensitive to leaf age (= Gamma\_Age).
        2306             : !\\
        2307             : !\\
        2308             : ! !INTERFACE:
        2309             : !
        2310           0 :   FUNCTION GET_GAMMA_AGE( CMLAI, PMLAI, DBTWN, TT, AN, AG, AM, AO ) &
        2311             :        RESULT( GAMMA_AGE )
        2312             : !
        2313             : ! !INPUT PARAMETERS:
        2314             : !
        2315             :     REAL(hp), INTENT(IN) :: CMLAI     ! Current month's LAI [cm2/cm2]
        2316             :     REAL(hp), INTENT(IN) :: PMLAI     ! Previous months LAI [cm2/cm2]
        2317             :     REAL(hp), INTENT(IN) :: DBTWN     ! Number of days between
        2318             :     REAL(sp), INTENT(IN) :: TT        ! Daily average temperature [K]
        2319             :     REAL(hp), INTENT(IN) :: AN        ! Relative emiss factor (new leaves)
        2320             :     REAL(hp), INTENT(IN) :: AG        ! Relative emiss factor (growing leaves)
        2321             :     REAL(hp), INTENT(IN) :: AM        ! Relative emiss factor (mature leaves)
        2322             :     REAL(hp), INTENT(IN) :: AO        ! Relative emiss factor (old leaves)
        2323             : !
        2324             : ! !RETURN VALUE:
        2325             : !
        2326             :     REAL(hp)             :: GAMMA_AGE ! Activity factor
        2327             : !
        2328             : ! !REMARKS:
        2329             : !  References (see above for full citations):
        2330             : !  ============================================================================
        2331             : !  (1 ) Guenther et al, 2006
        2332             : !  (2 ) Guenther et al, MEGAN user mannual 2007-08
        2333             : !  (3 ) Guenther et al., GMD 2012 and MEGANv2.1 source code
        2334             : !
        2335             : ! !REVISION HISTORY:
        2336             : !  (1 ) Original code by Dorian Abbot (9/2003). Modified for the standard
        2337             : !        code by May Fu (11/2004)
        2338             : !  See https://github.com/geoschem/hemco for complete history
        2339             : !EOP
        2340             : !------------------------------------------------------------------------------
        2341             : !BOC
        2342             : !
        2343             : ! !LOCAL VARIABLES:
        2344             : !
        2345             :     REAL(hp)             :: FNEW  ! Fraction of new leaves in canopy
        2346             :     REAL(hp)             :: FGRO  ! Fraction of growing leaves
        2347             :     REAL(hp)             :: FMAT  ! Fraction of mature leaves
        2348             :     REAL(hp)             :: FOLD  ! Fraction of old leaves
        2349             :
        2350             :     ! TI: number of days after budbreak required to induce emissions
        2351             :     REAL(hp)             :: TI
        2352             :
        2353             :     ! TM: number of days after budbreak required to reach peak emissions
        2354             :     REAL(hp)             :: TM
        2355             :
        2356             :     !=================================================================
        2357             :     ! GET_GAMMA_AGE begins here!
        2358             :     !=================================================================
        2359             :
        2360             :     !-----------------------
        2361             :     ! Compute TI and TM
        2362             :     ! (mpb,2009)
        2363             :     !-----------------------
        2364             :
        2365           0 :     IF ( TT <= 303.0_hp ) THEN
        2366           0 :        TI = 5.0_hp + 0.7_hp * ( 300.0_hp - TT )
        2367           0 :     ELSEIF ( TT >  303.0_hp ) THEN
        2368           0 :        TI = 2.9_hp
        2369             :     ENDIF
        2370           0 :     TM = 2.3_hp * TI
        2371             :
        2372             :     !-----------------------
        2373             :     ! Compute GAMMA_AGE
        2374             :     !-----------------------
        2375             :
        2376           0 :     IF ( CMLAI == PMLAI ) THEN !(i.e. LAI stays the same)
        2377             :
        2378             :        FNEW = 0.0_hp
        2379             :        FGRO = 0.1_hp
        2380             :        FMAT = 0.8_hp
        2381             :        FOLD = 0.1_hp
        2382             :
        2383           0 :     ELSE IF ( CMLAI > PMLAI ) THEN !(i.e. LAI has INcreased)
        2384             :
        2385             :        ! Calculate Fnew
        2386           0 :        IF ( DBTWN > TI ) THEN
        2387           0 :           FNEW = ( TI / DBTWN ) * ( 1.0_hp -  PMLAI / CMLAI )
        2388             :        ELSE
        2389           0 :           FNEW = 1.0_hp - ( PMLAI / CMLAI )
        2390             :        ENDIF
        2391             :
        2392             :        ! Calculate FMAT
        2393           0 :        IF ( DBTWN > TM ) THEN
        2394             :           FMAT = ( PMLAI / CMLAI ) + &
        2395           0 :                  (( DBTWN - TM ) / DBTWN )*( 1.0_hp -  PMLAI / CMLAI )
        2396             :        ELSE
        2397           0 :           FMAT = ( PMLAI / CMLAI )
        2398             :        ENDIF
        2399             :
        2400             :        ! Calculate Fgro and Fold
        2401           0 :        FGRO = 1.0_hp - FNEW - FMAT
        2402           0 :        FOLD = 0.0_hp
        2403             :
        2404             :     ELSE ! This is the case if  PMLAI > CMLAI (i.e. LAI has DEcreased)
        2405             :
        2406           0 :        FNEW = 0.0_hp
        2407           0 :        FGRO = 0.0_hp
        2408           0 :        FOLD = ( PMLAI - CMLAI ) / PMLAI
        2409           0 :        FMAT = 1.0_hp - FOLD
        2410             :
        2411             :     ENDIF
        2412             :
        2413             :     ! Age factor
        2414           0 :     GAMMA_AGE = FNEW * AN + FGRO * AG + FMAT * AM + FOLD * AO
        2415             :
        2416             :     ! Prevent negative values
        2417           0 :     GAMMA_AGE = MAX( GAMMA_AGE , 0.0_hp )
        2418             :
        2419           0 :   END FUNCTION GET_GAMMA_AGE
        2420             : !EOC
        2421             : !------------------------------------------------------------------------------
        2422             : !                   Harmonized Emissions Component (HEMCO)                    !
        2423             : !------------------------------------------------------------------------------
        2424             : !BOP
        2425             : !
        2426             : ! !IROUTINE: get_gamma_sm
        2427             : !
        2428             : ! !DESCRIPTION: Function GET\_GAMMA\_SM computes activity factor for soil
        2429             : !  moisture
        2430             : !\\
        2431             : !\\
        2432             : ! !INTERFACE:
        2433             : !
        2434           0 :   FUNCTION GET_GAMMA_SM( ExtState, I, J, CMPD ) &
        2435             :        RESULT( GAMMA_SM )
        2436             : !
        2437             : ! !INPUT PARAMETERS:
        2438             : !
        2439             :     TYPE(Ext_State),  POINTER     :: ExtState
        2440             :     INTEGER,          INTENT(IN)  :: I, J     ! GEOS-Chem lon & lat indices
        2441             :     CHARACTER(LEN=*), INTENT(IN)  :: CMPD     ! Compound name (dbm, 6/21/2012)
        2442             :
        2443             : ! !RETURN VALUE:
        2444             : !
        2445             :     REAL(hp)                      :: GAMMA_SM ! Activity factor
        2446             : !
        2447             : ! !REMARKS:
        2448             : !  References (see above for full citations):
        2449             : !  ============================================================================
        2450             : !  (1 ) Guenther et al, ACP 2006
        2451             : !  (2 ) Guenther et al., GMD 2012 and MEGANv2.1 source code
        2452             : !
        2453             : ! !REVISION HISTORY:
        2454             : !  (1 ) Created by dbm (6/2012). We are not currently using a soil moisture
        2455             : !       effect for isoprene. For all compounds other than acetaldehyde and
        2456             : !       ethanol, gamma_sm =1 presently.
        2457             : !  See https://github.com/geoschem/hemco for complete history
        2458             : !EOP
        2459             : !------------------------------------------------------------------------------
        2460             : !BOC
        2461             : !
        2462             : ! !LOCAL VARIABLES:
        2463             : !
        2464             :     REAL(hp)  :: GWETROOT
        2465             :
        2466             :     !=================================================================
        2467             :     ! GET_GAMMA_SM begins here!
        2468             :     !=================================================================
        2469             :
        2470             :     ! By default gamma_sm is 1.0
        2471           0 :     GAMMA_SM = 1.0_hp
        2472             :
        2473             :     ! Error trap: GWETROOT must be between 0.0 and 1.0 (ckeller, 4/16/15)
        2474           0 :     GWETROOT = MIN(MAX(ExtState%GWETROOT%Arr%Val(I,J),0.0_hp),1.0_hp)
        2475             :
        2476           0 :     IF ( TRIM( CMPD ) == 'ALD2' .OR. TRIM ( CMPD ) == 'EOH' ) THEN
        2477             :
        2478             :        ! GWETROOT = degree of saturation or wetness in the root-zone
        2479             :        ! (top meter of soil). This is defined as the ratio of the volumetric
        2480             :        ! soil moisture to the porosity. We use a soil moisture activity factor
        2481             :        ! for ALD2 to account for stimulation of emission by flooding.
        2482             :        ! (Millet et al., ACP 2010)
        2483             :        ! Constant value of 1.0 for GWETROOT = 0-0.9, increasing linearly to
        2484             :        ! 3.0 at GWETROOT =1.
        2485           0 :        GAMMA_SM = MAX( 20.0_hp * GWETROOT - 17.0_hp, 1.0_hp)
        2486             :
        2487             :     ENDIF
        2488             :
        2489           0 :   END FUNCTION GET_GAMMA_SM
        2490             : !EOC
        2491             : !------------------------------------------------------------------------------
        2492             : !                   Harmonized Emissions Component (HEMCO)                    !
        2493             : !------------------------------------------------------------------------------
        2494             : !BOP
        2495             : !
        2496             : ! !IROUTINE: get_gamma_co2
        2497             : !
        2498             : ! !DESCRIPTION: Function GET\_GAMMA\_CO2 computes the CO2 activity factor
        2499             : !  associated with CO2 inhibition of isoprene emission. Called from
        2500             : !  GET\_MEGAN\_EMISSIONS only.
        2501             : !\\
        2502             : !\\
        2503             : ! !INTERFACE:
        2504             : !
        2505           0 :   FUNCTION GET_GAMMA_CO2( CO2a ) &
        2506             :        RESULT( GAMMA_CO2 )
        2507             : !
        2508             : ! !INPUT PARAMETERS:
        2509             :     REAL(hp), INTENT(IN) :: CO2a       ! Atmospheric CO2 conc [ppmv]
        2510             : !
        2511             : ! !RETURN VALUE:
        2512             :     REAL(hp)             :: GAMMA_CO2  ! CO2 activity factor [unitless]
        2513             : !
        2514             : ! !LOCAL VARIABLES:
        2515             :     REAL(hp)             :: CO2i       ! Intercellular CO2 conc [ppmv]
        2516             :     REAL(hp)             :: ISMAXi     ! Asymptote for intercellular CO2
        2517             :     REAL(hp)             :: HEXPi      ! Exponent for intercellular CO2
        2518             :     REAL(hp)             :: CSTARi     ! Scaling coef for intercellular CO2
        2519             :     REAL(hp)             :: ISMAXa     ! Asymptote for atmospheric CO2
        2520             :     REAL(hp)             :: HEXPa      ! Exponent for atmospheric CO2
        2521             :     REAL(hp)             :: CSTARa     ! Scaling coef for atmospheric CO2
        2522             :     LOGICAL              :: LPOSSELL   ! Use Possell & Hewitt (2011)?
        2523             :     LOGICAL              :: LWILKINSON ! Use Wilkinson et al. (2009)?
        2524             : !
        2525             : ! !REMARKS:
        2526             : !  References:
        2527             : !  ============================================================================
        2528             : !  (1 ) Heald, C. L., Wilkinson, M. J., Monson, R. K., Alo, C. A.,
        2529             : !       Wang, G. L., and Guenther, A.: Response of isoprene emission
        2530             : !       to ambient co(2) changes and implications for global budgets,
        2531             : !       Global Change Biology, 15, 1127-1140, 2009.
        2532             : !  (2 ) Wilkinson, M. J., Monson, R. K., Trahan, N., Lee, S., Brown, E.,
        2533             : !       Jackson, R. B., Polley, H. W., Fay, P. A., and Fall, R.: Leaf
        2534             : !       isoprene emission rate as a function of atmospheric CO2
        2535             : !       concentration, Global Change Biology, 15, 1189-1200, 2009.
        2536             : !  (3 ) Possell, M., and Hewitt, C. N.: Isoprene emissions from plants
        2537             : !       are mediated by atmospheric co2 concentrations, Global Change
        2538             : !       Biology, 17, 1595-1610, 2011.
        2539             : !
        2540             : ! !REVISION HISTORY:
        2541             : !  (1 ) Implemented in the standard code by A. Tai (Jun 2012).
        2542             : !  See https://github.com/geoschem/hemco for complete history
        2543             : !EOP
        2544             : !------------------------------------------------------------------------------
        2545             : !BOC
        2546             :
        2547             :     !----------------------------------------------------------
        2548             :     ! Choose between two alternative CO2 inhibition schemes
        2549             :     !----------------------------------------------------------
        2550             :
        2551             :     ! Empirical relationship of Possell & Hewitt (2011) based on nine
        2552             :     ! experimental studies including Wilkinson et al. (2009). This is
        2553             :     ! especially recommended for sub-ambient CO2 concentrations:
        2554           0 :     LPOSSELL    = .TRUE.   ! Default option
        2555             :
        2556             :     ! Semi-process-based parameterization of Wilkinson et al. (2009),
        2557             :     ! taking into account of sensitivity to intercellular CO2
        2558             :     ! fluctuation, which is here set as a constant fraction of
        2559             :     ! atmospheric CO2:
        2560           0 :     LWILKINSON  = .FALSE.   ! Set .TRUE. only if LPOSSELL = .FALSE.
        2561             :
        2562             :     !-----------------------
        2563             :     ! Compute GAMMA_CO2
        2564             :     !-----------------------
        2565             :
        2566             :     IF ( LPOSSELL ) THEN
        2567             :
        2568             :        ! Use empirical relationship of Possell & Hewitt (2011):
        2569           0 :        GAMMA_CO2 = 8.9406_hp / ( 1.0_hp + 8.9406_hp * 0.0024_hp * CO2a )
        2570             :
        2571             :     ELSEIF ( LWILKINSON ) THEN
        2572             :
        2573             :        ! Use parameterization of Wilkinson et al. (2009):
        2574             :
        2575             :        ! Parameters for intercellular CO2 using linear interpolation:
        2576             :        IF ( CO2a <= 600.0_hp ) THEN
        2577             :           ISMAXi = 1.036_hp  - (1.036_hp - 1.072_hp) / &
        2578             :                    (600.0_hp - 400.0_hp) * (600.0_hp - CO2a)
        2579             :           HEXPi  = 2.0125_hp - (2.0125_hp - 1.7000_hp) / &
        2580             :                    (600.0_hp - 400.0_hp) * (600.0_hp - CO2a)
        2581             :           CSTARi = 1150.0_hp - (1150.0_hp - 1218.0_hp) / &
        2582             :                    (600.0_hp - 400.0_hp) * (600.0_hp - CO2a)
        2583             :        ELSEIF ( CO2a > 600.0_hp .AND. CO2a < 800.0_hp ) THEN
        2584             :           ISMAXi = 1.046_hp  - (1.046_hp - 1.036_hp) / &
        2585             :                    (800.0_hp - 600.0_hp) * (800.0_hp - CO2a)
        2586             :           HEXPi  = 1.5380_hp - (1.5380_hp - 2.0125_hp) / &
        2587             :                    (800.0_hp - 600.0_hp) * (800.0_hp - CO2a)
        2588             :           CSTARi = 2025.0_hp - (2025.0_hp - 1150.0_hp) / &
        2589             :                    (800.0_hp - 600.0_hp) * (800.0_hp - CO2a)
        2590             :        ELSE
        2591             :           ISMAXi = 1.014_hp - (1.014_hp - 1.046_hp) / &
        2592             :                    (1200.0_hp - 800.0_hp) * (1200.0_hp - CO2a)
        2593             :           HEXPi  = 2.8610_hp - (2.8610_hp - 1.5380_hp) / &
        2594             :                    (1200.0_hp - 800.0_hp) * (1200.0_hp - CO2a)
        2595             :           CSTARi = 1525.0_hp - (1525.0_hp - 2025.0_hp) / &
        2596             :                    (1200.0_hp - 800.0_hp) * (1200.0_hp - CO2a)
        2597             :        ENDIF
        2598             :
        2599             :        ! Parameters for atmospheric CO2:
        2600             :        ISMAXa    = 1.344_hp
        2601             :        HEXPa     = 1.4614_hp
        2602             :        CSTARa    = 585.0_hp
        2603             :
        2604             :        ! For now, set CO2_Ci = 0.7d0 * CO2_Ca as recommended by Heald
        2605             :        ! et al. (2009):
        2606             :        CO2i      = 0.7_hp * CO2a
        2607             :
        2608             :        ! Compute GAMMA_CO2:
        2609             :        GAMMA_CO2 = ( ISMAXi -  ISMAXi * CO2i**HEXPi / &
        2610             :                    ( CSTARi**HEXPi + CO2i**HEXPi ) )  &
        2611             :                    * ( ISMAXa - ISMAXa * ( 0.7_hp * CO2a )**HEXPa / &
        2612             :                    ( CSTARa**HEXPa + ( 0.7_hp * CO2a )**HEXPa ) )
        2613             :
        2614             :     ELSE
        2615             :
        2616             :        ! No CO2 inhibition scheme is used; GAMMA_CO2 set to unity:
        2617             :        GAMMA_CO2 = 1.0_hp
        2618             :
        2619             :     ENDIF
        2620             :
        2621           0 :   END FUNCTION GET_GAMMA_CO2
        2622             : !EOC
        2623             : !------------------------------------------------------------------------------
        2624             : !                   Harmonized Emissions Component (HEMCO)                    !
        2625             : !------------------------------------------------------------------------------
        2626             : !BOP
        2627             : !
        2628             : ! !IROUTINE: CALC_NORM_FAC
        2629             : !
        2630             : ! !DESCRIPTION: Function CALC\_NORM\_FAC calculates the normalization factor
        2631             : !  needed to compute emissions. Called from GET\_MEGAN\_EMISSIONS.
        2632             : !\\
        2633             : !\\
        2634             : ! !INTERFACE:
        2635             : !
        2636           0 :   SUBROUTINE CALC_NORM_FAC( Inst, RC )
        2637             : !
        2638             : ! !INPUT PARAMETERS:
        2639             : !
        2640             :     TYPE(MyInst),    POINTER        :: Inst
        2641             : !
        2642             : ! !INPUT/OUTPUT PARAMETERS
        2643             : !
        2644             :     INTEGER,         INTENT(INOUT)  :: RC
        2645             : !
        2646             : ! !REMARKS:
        2647             : !  References (see above for full citations):
        2648             : !  ============================================================================
        2649             : !  (1 ) Guenther et al, (GMD 2012) and associated MEGANv2.1 source code
        2650             : !
        2651             : ! !REVISION HISTORY:
        2652             : !  (1 ) Created by dbm 11/2012. We calculate only 1 normalization factor for all
        2653             : !       compounds based on the isoprene gamma values. Formally there should be a
        2654             : !       different normalization factor for each compound, but we are following
        2655             : !       Alex Guenther's approach here and the MEGAN source code.
        2656             : !       "Hi Dylan, sorry for being so slow to get back to you.
        2657             : !        Since the change is only a few percent or less, I didn't
        2658             : !        bother to assign a different normalization factor to each
        2659             : !        compound.  Since the MEGAN canopy environment model also
        2660             : !        has 8 different canopy types (tropical broadleaf tree,
        2661             : !        conifer tree, etc.) then to be correct we should have a
        2662             : !        different CCE for each canopy type for each compound class
        2663             : !        (which would be 160 slightly different values of CCE)."
        2664             : !  See https://github.com/geoschem/hemco for complete history
        2665             : !EOP
        2666             : !------------------------------------------------------------------------------
        2667             : !BOC
        2668             : !
        2669             : ! !LOCAL VARIABLES:
        2670             : !
        2671             :     REAL(hp) :: PAC_DAILY, PHI, BBB, AAA, GAMMA_P_STANDARD
        2672             :     REAL(hp) :: GAMMA_T_LI_STANDARD
        2673             :     REAL(hp) :: GAMMA_SM_STANDARD
        2674             :     REAL(hp) :: CMLAI, GAMMA_LAI_STANDARD
        2675             :     REAL(hp) :: GAMMA_AGE_STANDARD
        2676             :     REAL(hp) :: PT_15, T, R, CEO, CT1, E_OPT, T_OPT, CT2, X
        2677             :     REAL(hp) :: GAMMA_T_LD_STANDARD
        2678             :     REAL(hp) :: LDF, GAMMA_STANDARD
        2679             :
        2680             :     !-----------------------------------------------------------------
        2681             :     ! CALC_NORM_FAC
        2682             :     !-----------------------------------------------------------------
        2683             :
        2684             :     ! -----------------
        2685             :     ! GAMMA_P for standard conditions
        2686             :     ! -----------------
        2687             :     ! Based on Eq. 11b from Guenther et al., 2006
        2688             :     ! Using standard conditions of phi = 0.6, solar angle of 60 deg,
        2689             :     ! and P_daily = 400
        2690             :     ! Note corrigendum for Eq. 11b in that paper, should be a
        2691             :     ! minus sign before the 0.9.
        2692           0 :     PAC_DAILY = 400.0_hp
        2693           0 :     PHI       = 0.6_hp
        2694           0 :     BBB       = 1.0_hp + 0.0005_hp *( PAC_DAILY - 400.0_hp )
        2695           0 :     AAA       = ( 2.46_hp * BBB * PHI ) - ( 0.9_hp * PHI**2 )
        2696             :     ! sin(60) = 0.866
        2697           0 :     GAMMA_P_STANDARD = 0.866_hp * AAA
        2698             :
        2699             :     ! -----------------
        2700             :     ! GAMMA_T_LI for standard conditions
        2701             :     ! -----------------
        2702             :     ! gamma_t_li = EXP( Beta * ( T - T_Standard ) )
        2703             :     ! This is 1.0 for T = T_Standard
        2704           0 :     GAMMA_T_LI_STANDARD = 1.0_hp
        2705             :
        2706             :     ! -----------------
        2707             :     ! GAMMA_SM for standard conditions
        2708             :     ! -----------------
        2709             :     ! Standard condition is soil moisture = 0.3 m^3/m^3
        2710             :     ! GAMMA_SM = 1.0 for all compounds under this condition
        2711           0 :     GAMMA_SM_STANDARD = 1.0_hp
        2712             :
        2713             :     ! -----------------
        2714             :     ! GAMMA_LAI for standard conditions
        2715             :     ! -----------------
        2716             :     ! Standard condition is LAI = 5
        2717           0 :     CMLAI = 5.0_hp
        2718           0 :     GAMMA_LAI_STANDARD = 0.49_hp * CMLAI / SQRT( 1.0_hp + 0.2_hp * CMLAI*CMLAI )
        2719             :
        2720             :     ! -----------------
        2721             :     ! GAMMA_AGE for standard conditions
        2722             :     ! -----------------
        2723             :     ! Standard condition is 0% new, 10% growing, 80% mature, 10% old foliage
        2724             :     ! Isoprene uses A_NEW = 0.05d0, A_GRO = 0.6d0, A_MAT = 1.d0, A_OLD = 0.9d0
        2725           0 :     GAMMA_AGE_STANDARD = 0.1_hp*0.6_hp + 0.8_hp*1.0_hp + 0.1_hp*0.9_hp
        2726             :
        2727             :     ! -----------------
        2728             :     ! GAMMA_T_LD for standard conditions
        2729             :     ! -----------------
        2730             :     ! Standard condition is
        2731             :     ! PT_15 = average leaf temp over past 24-240 hours = 297K
        2732             :     ! T = air temperature = 303K
        2733           0 :     PT_15 = 297.0_hp
        2734           0 :     T     = 303.0_hp
        2735           0 :     R     = 8.3144598e-3_hp
        2736             :     ! parameters for isoprene
        2737           0 :     CEO = 2.0_hp
        2738           0 :     CT1 = 95.0_hp
        2739             :
        2740           0 :     E_OPT = CEO * EXP( 0.08_hp * ( PT_15  - 2.97e2_hp ) )
        2741           0 :     T_OPT = 3.13e2_hp + ( 6.0e-1_hp * ( PT_15 - 2.97e2_hp ) )
        2742           0 :     CT2   = 200.0_hp
        2743             :
        2744             :     ! Variable related to temperature
        2745           0 :     X     = ( 1.0_hp/T_OPT - 1.0_hp/T ) / R
        2746             :
        2747             :     GAMMA_T_LD_STANDARD = E_OPT * CT2 * EXP( CT1 * X ) / &
        2748           0 :                           ( CT2 - CT1 * ( 1.0_hp - EXP( CT2 * X ) ) )
        2749             :
        2750             :     ! -----------------
        2751             :     ! Overall GAMMA_STANDARD
        2752             :     ! -----------------
        2753             :     ! LDF = 1d0 for isoprene
        2754           0 :     LDF = 1.0_hp
        2755             :     GAMMA_STANDARD = &
        2756             :          GAMMA_AGE_STANDARD * GAMMA_SM_STANDARD * GAMMA_LAI_STANDARD &
        2757             :          * ((1.0_hp - LDF) * GAMMA_T_LI_STANDARD &
        2758           0 :          + (LDF * GAMMA_P_STANDARD * GAMMA_T_LD_STANDARD))
        2759             :     ! This ends up being 1.0101081.
        2760             :
        2761           0 :     Inst%NORM_FAC = 1.0_hp / GAMMA_STANDARD
        2762             :
        2763             :     ! Return w/ success
        2764           0 :     RC = HCO_SUCCESS
        2765             :
        2766           0 :   END SUBROUTINE CALC_NORM_FAC
        2767             : !EOC
        2768             :
        2769             : !------------------------------------------------------------------------------
        2770             : !                   Harmonized Emissions Component (HEMCO)                    !
        2771             : !------------------------------------------------------------------------------
        2772             : !BOP
        2773             : !
        2774             : ! !IROUTINE: Fill_Restart_Vars
        2775             : !
        2776             : ! !DESCRIPTION: Subroutine FILL\_RESTART\_VARS fills the megan restart
        2777             : !  variables.
        2778             : !\\
        2779             : !\\
        2780             : ! !INTERFACE:
        2781             : !
        2782           0 :   SUBROUTINE FILL_RESTART_VARS( HcoState, ExtState, Inst, RC )
        2783             : !
        2784             : ! !USES:
        2785             : !
        2786             :     USE HCO_Restart_Mod,    ONLY : HCO_RestartGet
        2787             : !
        2788             : ! !INPUT PARAMETERS:
        2789             : !
        2790             :     TYPE(HCO_State), POINTER        :: HcoState
        2791             :     TYPE(Ext_State), POINTER        :: ExtState
        2792             :     TYPE(MyInst),    POINTER        :: Inst
        2793             : !
        2794             : ! !INPUT/OUTPUT PARAMETERS:
        2795             : !
        2796             :     INTEGER,         INTENT(INOUT)  :: RC
        2797             : !
        2798             : ! !REVISION HISTORY:
        2799             : !  19 Dec 2014 - C. Keller    - Initial version
        2800             : !  See https://github.com/geoschem/hemco for complete history
        2801             : !EOP
        2802             : !------------------------------------------------------------------------------
        2803             : !BOC
        2804             : !
        2805             : ! !LOCAL VARIABLES:
        2806             : !
        2807             :     INTEGER           :: I
        2808             :     LOGICAL           :: FND
        2809             :
        2810             :     !=================================================================
        2811             :     ! FILL_RESTART_VARS begins here!
        2812             :     !=================================================================
        2813             :
        2814             :     ! On first call, see if there are restart variables available for
        2815             :     ! historic values of temperature and irradiation. If so, fill the
        2816             :     ! daily arrays with those average values to start with. If not,
        2817             :     ! simply use the current values.
        2818             :     ! The same procedure is applied to the 15 day average values. For
        2819             :     ! temperature, we also restart previous day temperature so that
        2820             :     ! we can determine a trend in the daily average temperatures
        2821             :     ! (between the long term daily averages and the most recent daily
        2822             :     ! average).
        2823             :     ! We now first call HCO_CopyFromInt_ESMF to check if the variable
        2824             :     ! is found in the (ESMF) internal state object. In an non-ESMF
        2825             :     ! environment, this call will always return FND=.FALSE.
        2826             :     ! (ckeller, 3/9/15).
        2827             :
        2828             :     !-----------------------------------------------------------------
        2829             :     ! LAI
        2830             :     !-----------------------------------------------------------------
        2831             :     CALL HCO_RestartGet( HcoState, 'LAI_PREVDAY', &
        2832           0 :                          Inst%LAI_PREVDAY, RC, FILLED=FND )
        2833             :
        2834             :     ! Default value
        2835           0 :     IF ( .NOT. FND ) THEN
        2836           0 :        Inst%LAI_PREVDAY = ExtState%LAI%Arr%Val
        2837             :     ENDIF
        2838             :
        2839             :     !-----------------------------------------------------------------
        2840             :     ! DIFFUSE RADIATION ( PARDF )
        2841             :     !-----------------------------------------------------------------
        2842             :
        2843             :     ! Temperature over last 24 hours
        2844             :     CALL HCO_RestartGet( HcoState, 'T_PREVDAY', &
        2845           0 :                          Inst%T_LAST24H, RC, DefVal = 288.15_sp )
        2846             :
        2847             :     ! Temperature over last X days
        2848             :     CALL HCO_RestartGet( HcoState, 'T_DAVG', &
        2849           0 :                          Inst%T_LASTXDAYS, RC, DefVal = 288.15_sp )
        2850             :
        2851             :     ! Direct radiation (PARDR) over last X days
        2852             :     CALL HCO_RestartGet( HcoState, 'PARDR_DAVG', &
        2853           0 :                          Inst%PARDR_LASTXDAYS, RC, DefVal = 30.0_sp )
        2854             :
        2855             :     ! Diffuse radiation (PARDF) over last X days
        2856             :     CALL HCO_RestartGet( HcoState, 'PARDF_DAVG', &
        2857           0 :                          Inst%PARDF_LASTXDAYS, RC, DefVal = 48.0_sp )
        2858             :
        2859             :     ! Return w/ success
        2860           0 :     RC = HCO_SUCCESS
        2861             :
        2862           0 :   END SUBROUTINE FILL_RESTART_VARS
        2863             : !EOC
        2864             : !------------------------------------------------------------------------------
        2865             : !                   Harmonized Emissions Component (HEMCO)                    !
        2866             : !------------------------------------------------------------------------------
        2867             : !BOP
        2868             : !
        2869             : ! !IROUTINE: CALC_AEF
        2870             : !
        2871             : ! !DESCRIPTION: Subroutine CALC\_AEF reads Emission Factors for all
        2872             : !  biogenic VOC species from disk.
        2873             : !\\
        2874             : !\\
        2875             : ! !INTERFACE:
        2876             : !
        2877           0 :   SUBROUTINE CALC_AEF( HcoState, ExtState, Inst, RC )
        2878             : !
        2879             : ! !USES:
        2880             : !
        2881             :     USE HCO_EMISLIST_MOD,    ONLY : HCO_GetPtr
        2882             :     USE HCO_CALC_MOD,        ONLY : HCO_EvalFld
        2883             : !
        2884             : ! !INPUT PARAMETERS:
        2885             : !
        2886             :     TYPE(Ext_State), POINTER       :: ExtState
        2887             :     TYPE(HCO_State), POINTER       :: HcoState
        2888             :     TYPE(MyInst),    POINTER       :: Inst
        2889             : !
        2890             : ! !INPUT/OUTPUT PARAMETERS:
        2891             : !
        2892             :     INTEGER,         INTENT(INOUT) :: RC
        2893             : !
        2894             : ! !REMARKS:
        2895             : !  Reference: (5 ) Guenther et al, 2004
        2896             : !
        2897             : ! !REVISION HISTORY:
        2898             : !  (1 ) Original code by Dorian Abbot (9/2003).  Modified for the standard
        2899             : !        code by May Fu (11/2004)
        2900             : !  See https://github.com/geoschem/hemco for complete history
        2901             : !EOP
        2902             : !------------------------------------------------------------------------------
        2903             : !BOC
        2904             : !
        2905             : ! !LOCAL VARIABLES:
        2906             : !
        2907             :     INTEGER                 :: I, J, P, ARR_IND
        2908             :     REAL(hp)                :: FACTOR
        2909             :     REAL(hp)                :: PFT_EF_OMON(15), PFT_EF_MOH(15)
        2910             :     REAL(hp)                :: PFT_EF_ACET(15), PFT_EF_BIDR(15)
        2911             :     REAL(hp)                :: PFT_EF_STRS(15), PFT_EF_OTHR(15)
        2912             :     ! --->
        2913             :     ! dbm, compute EF maps for a-pinene and myrcene as well since there seems to
        2914             :     ! be an issue with the EF maps for these species provided on the MEGAN
        2915             :     ! data portal
        2916             :     REAL(hp)                :: PFT_EF_APIN(15), PFT_EF_MYRC(15)
        2917             :     ! <---
        2918             :     REAL(hp)                :: PFT_EF_FARN(15), PFT_EF_BCAR(15)
        2919             :     REAL(hp)                :: PFT_EF_OSQT(15)
        2920             :     REAL(hp)                :: EM_FRAC_ALD2(15), EM_FRAC_EOH(15)
        2921             :     REAL(hp)                :: EM_FRAC_FAXX(15), EM_FRAC_AAXX(15)
        2922             :     REAL(hp)                :: EM_FRAC_CH2O(15)
        2923             :
        2924             :     ! Pointers to CLM4 plant functional types
        2925           0 :     REAL(hp)  :: PFT_BARE(HcoState%NX,HcoState%NY)
        2926           0 :     REAL(hp)  :: PFT_NDLF_EVGN_TMPT_TREE(HcoState%NX,HcoState%NY)
        2927           0 :     REAL(hp)  :: PFT_NDLF_EVGN_BORL_TREE(HcoState%NX,HcoState%NY)
        2928           0 :     REAL(hp)  :: PFT_NDLF_DECD_BORL_TREE(HcoState%NX,HcoState%NY)
        2929           0 :     REAL(hp)  :: PFT_BDLF_EVGN_TROP_TREE(HcoState%NX,HcoState%NY)
        2930           0 :     REAL(hp)  :: PFT_BDLF_EVGN_TMPT_TREE(HcoState%NX,HcoState%NY)
        2931           0 :     REAL(hp)  :: PFT_BDLF_DECD_TROP_TREE(HcoState%NX,HcoState%NY)
        2932           0 :     REAL(hp)  :: PFT_BDLF_DECD_TMPT_TREE(HcoState%NX,HcoState%NY)
        2933           0 :     REAL(hp)  :: PFT_BDLF_DECD_BORL_TREE(HcoState%NX,HcoState%NY)
        2934           0 :     REAL(hp)  :: PFT_BDLF_EVGN_SHRB(HcoState%NX,HcoState%NY)
        2935           0 :     REAL(hp)  :: PFT_BDLF_DECD_TMPT_SHRB(HcoState%NX,HcoState%NY)
        2936           0 :     REAL(hp)  :: PFT_BDLF_DECD_BORL_SHRB(HcoState%NX,HcoState%NY)
        2937           0 :     REAL(hp)  :: PFT_C3_ARCT_GRSS(HcoState%NX,HcoState%NY)
        2938           0 :     REAL(hp)  :: PFT_C3_NARC_GRSS(HcoState%NX,HcoState%NY)
        2939           0 :     REAL(hp)  :: PFT_C4_GRSS(HcoState%NX,HcoState%NY)
        2940           0 :     REAL(hp)  :: PFT_CROP(HcoState%NX,HcoState%NY)
        2941             :
        2942             :     CHARACTER(LEN=255)      :: LOC
        2943             :
        2944             :     ! Suffix
        2945             :     CHARACTER(LEN=255)      :: SFX
        2946             :
        2947             :     !=================================================================
        2948             :     ! CALC_AEF begins here!
        2949             :     !=================================================================
        2950           0 :     LOC = 'CALC_AEF (HCOX_MEGAN_MOD.F90)'
        2951             :
        2952             :     ! Suffix
        2953           0 :     SFX = Inst%SUFFIX
        2954             :
        2955             :     ! ----------------------------------------------------------------
        2956             :     ! Note that not all these compounds are used in standard chemistry
        2957             :     ! simulations, but they are provided here for future incorporation or
        2958             :     ! specialized applications. More compounds can be added as needed
        2959             :     ! by adding the corresponding PFT-specific emission factors and
        2960             :     ! emission category fraction.
        2961             :     ! (dbm, 01/2013)
        2962             :     ! ----------------------------------------------------------------
        2963             :
        2964             :     !-----------------------------------------------------------------
        2965             :     ! Point to external data
        2966             :     !-----------------------------------------------------------------
        2967             :     CALL HCO_EvalFld( HcoState, 'MEGAN_AEF_ISOP'//TRIM(SFX), &
        2968           0 :                       Inst%AEF_ISOP, RC )
        2969           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        2970           0 :         CALL HCO_ERROR( 'ERROR 8', RC, THISLOC=LOC )
        2971           0 :         RETURN
        2972             :     ENDIF
        2973             :
        2974             :     CALL HCO_EvalFld( HcoState, 'MEGAN_AEF_MBOX'//TRIM(SFX), &
        2975           0 :                       Inst%AEF_MBOX, RC )
        2976           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        2977           0 :         CALL HCO_ERROR( 'ERROR 9', RC, THISLOC=LOC )
        2978           0 :         RETURN
        2979             :     ENDIF
        2980             :
        2981             :     CALL HCO_EvalFld( HcoState, 'MEGAN_AEF_BPIN'//TRIM(SFX), &
        2982           0 :                       Inst%AEF_BPIN, RC )
        2983           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        2984           0 :         CALL HCO_ERROR( 'ERROR 10', RC, THISLOC=LOC )
        2985           0 :         RETURN
        2986             :     ENDIF
        2987             :
        2988             :     CALL HCO_EvalFld( HcoState, 'MEGAN_AEF_CARE'//TRIM(SFX), &
        2989           0 :                       Inst%AEF_CARE, RC )
        2990           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        2991           0 :         CALL HCO_ERROR( 'ERROR 11', RC, THISLOC=LOC )
        2992           0 :         RETURN
        2993             :     ENDIF
        2994             :
        2995             :     CALL HCO_EvalFld( HcoState, 'MEGAN_AEF_LIMO'//TRIM(SFX), &
        2996           0 :                       Inst%AEF_LIMO, RC )
        2997           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        2998           0 :         CALL HCO_ERROR( 'ERROR 12', RC, THISLOC=LOC )
        2999           0 :         RETURN
        3000             :     ENDIF
        3001             :
        3002             :     CALL HCO_EvalFld( HcoState, 'MEGAN_AEF_OCIM'//TRIM(SFX), &
        3003           0 :                       Inst%AEF_OCIM, RC )
        3004           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3005           0 :         CALL HCO_ERROR( 'ERROR 13', RC, THISLOC=LOC )
        3006           0 :         RETURN
        3007             :     ENDIF
        3008             :
        3009             :     CALL HCO_EvalFld( HcoState, 'MEGAN_AEF_SABI'//TRIM(SFX), &
        3010           0 :                       Inst%AEF_SABI, RC )
        3011           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3012           0 :         CALL HCO_ERROR( 'ERROR 14', RC, THISLOC=LOC )
        3013           0 :         RETURN
        3014             :     ENDIF
        3015             :
        3016             :     !-----------------------------------------------------------------
        3017             :     ! Point to PFT fractions
        3018             :     !-----------------------------------------------------------------
        3019             :
        3020             :     ! CLM4 PFT coverage (unitless)
        3021             :     ! From Table 3 in Guenther et al., 2012
        3022             :     ! PFT_BARE                : Bare
        3023             :     ! PFT_NDLF_EVGN_TMPT_TREE : Needleleaf evergreen temperate tree
        3024             :     ! PFT_NDLF_EVGN_BORL_TREE : Needleleaf evergreen boreal tree
        3025             :     ! PFT_NDLF_DECD_BORL_TREE : Needleleaf deciduous boreal tree
        3026             :     ! PFT_BDLF_EVGN_TROP_TREE : Broadleaf evergreen tropical tree
        3027             :     ! PFT_BDLF_EVGN_TMPT_TREE : Broadleaf evergreen temperate tree
        3028             :     ! PFT_BDLF_DECD_TROP_TREE : Broadleaf deciduous tropical tree
        3029             :     ! PFT_BDLF_DECD_TMPT_TREE : Broadleaf deciduous temperate tree
        3030             :     ! PFT_BDLF_DECD_BORL_TREE : Broadleaf deciduous boreal tree
        3031             :     ! PFT_BDLF_EVGN_SHRB      : Broadleaf evergreen temperate shrub
        3032             :     ! PFT_BDLF_DECD_TMPT_SHRB : Broadleaf deciduous temperate shrub
        3033             :     ! PFT_BDLF_DECD_BORL_SHRB : Broadleaf deciduous boreal shrub
        3034             :     ! PFT_C3_ARCT_GRSS        : Arctic C3 grass
        3035             :     ! PFT_C3_NARC_GRSS        : Cool C3 grass
        3036             :     ! PFT_C4_GRSS             : Warm C4 grass
        3037             :     ! PFT_CROP                : Crop
        3038             :
        3039             :     CALL HCO_EvalFld( HcoState, &
        3040             :                       'CLM4_PFT_BARE'//TRIM(SFX), &
        3041           0 :                       PFT_BARE, RC )
        3042           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3043           0 :         CALL HCO_ERROR( 'ERROR 15', RC, THISLOC=LOC )
        3044           0 :         RETURN
        3045             :     ENDIF
        3046             :
        3047             :     CALL HCO_EvalFld( HcoState, &
        3048             :                       'CLM4_PFT_NDLF_EVGN_TMPT_TREE'//TRIM(SFX), &
        3049           0 :                       PFT_NDLF_EVGN_TMPT_TREE, RC )
        3050           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3051           0 :         CALL HCO_ERROR( 'ERROR 16', RC, THISLOC=LOC )
        3052           0 :         RETURN
        3053             :     ENDIF
        3054             :
        3055             :     CALL HCO_EvalFld( HcoState, &
        3056             :                       'CLM4_PFT_NDLF_EVGN_BORL_TREE'//TRIM(SFX), &
        3057           0 :                       PFT_NDLF_EVGN_BORL_TREE, RC )
        3058           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3059           0 :         CALL HCO_ERROR( 'ERROR 17', RC, THISLOC=LOC )
        3060           0 :         RETURN
        3061             :     ENDIF
        3062             :
        3063             :     CALL HCO_EvalFld( HcoState, &
        3064             :                       'CLM4_PFT_NDLF_DECD_BORL_TREE'//TRIM(SFX), &
        3065           0 :                       PFT_NDLF_DECD_BORL_TREE, RC )
        3066           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3067           0 :         CALL HCO_ERROR( 'ERROR 18', RC, THISLOC=LOC )
        3068           0 :         RETURN
        3069             :     ENDIF
        3070             :
        3071             :     CALL HCO_EvalFld( HcoState, &
        3072             :                       'CLM4_PFT_BDLF_EVGN_TROP_TREE'//TRIM(SFX), &
        3073           0 :                       PFT_BDLF_EVGN_TROP_TREE, RC )
        3074           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3075           0 :         CALL HCO_ERROR( 'ERROR 19', RC, THISLOC=LOC )
        3076           0 :         RETURN
        3077             :     ENDIF
        3078             :
        3079             :     CALL HCO_EvalFld( HcoState, &
        3080             :                       'CLM4_PFT_BDLF_EVGN_TMPT_TREE'//TRIM(SFX), &
        3081           0 :                       PFT_BDLF_EVGN_TMPT_TREE, RC )
        3082           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3083           0 :         CALL HCO_ERROR( 'ERROR 20', RC, THISLOC=LOC )
        3084           0 :         RETURN
        3085             :     ENDIF
        3086             :
        3087             :     CALL HCO_EvalFld( HcoState, &
        3088             :                       'CLM4_PFT_BDLF_DECD_TROP_TREE'//TRIM(SFX), &
        3089           0 :                       PFT_BDLF_DECD_TROP_TREE, RC )
        3090           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3091           0 :         CALL HCO_ERROR( 'ERROR 21', RC, THISLOC=LOC )
        3092           0 :         RETURN
        3093             :     ENDIF
        3094             :
        3095             :     CALL HCO_EvalFld( HcoState, &
        3096             :                       'CLM4_PFT_BDLF_DECD_TMPT_TREE'//TRIM(SFX), &
        3097           0 :                       PFT_BDLF_DECD_TMPT_TREE, RC )
        3098           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3099           0 :         CALL HCO_ERROR( 'ERROR 22', RC, THISLOC=LOC )
        3100           0 :         RETURN
        3101             :     ENDIF
        3102             :
        3103             :     CALL HCO_EvalFld( HcoState, &
        3104             :                       'CLM4_PFT_BDLF_DECD_BORL_TREE'//TRIM(SFX), &
        3105           0 :                       PFT_BDLF_DECD_BORL_TREE, RC )
        3106           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3107           0 :         CALL HCO_ERROR( 'ERROR 23', RC, THISLOC=LOC )
        3108           0 :         RETURN
        3109             :     ENDIF
        3110             :
        3111             :     CALL HCO_EvalFld( HcoState, &
        3112             :                       'CLM4_PFT_BDLF_EVGN_SHRB'//TRIM(SFX), &
        3113           0 :                       PFT_BDLF_EVGN_SHRB, RC )
        3114           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3115           0 :         CALL HCO_ERROR( 'ERROR 24', RC, THISLOC=LOC )
        3116           0 :         RETURN
        3117             :     ENDIF
        3118             :
        3119             :     CALL HCO_EvalFld( HcoState, &
        3120             :                       'CLM4_PFT_BDLF_DECD_TMPT_SHRB'//TRIM(SFX), &
        3121           0 :                       PFT_BDLF_DECD_TMPT_SHRB, RC )
        3122           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3123           0 :         CALL HCO_ERROR( 'ERROR 25', RC, THISLOC=LOC )
        3124           0 :         RETURN
        3125             :     ENDIF
        3126             :
        3127             :     CALL HCO_EvalFld( HcoState, &
        3128             :                       'CLM4_PFT_BDLF_DECD_BORL_SHRB'//TRIM(SFX), &
        3129           0 :                       PFT_BDLF_DECD_BORL_SHRB, RC )
        3130           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3131           0 :         CALL HCO_ERROR( 'ERROR 26', RC, THISLOC=LOC )
        3132           0 :         RETURN
        3133             :     ENDIF
        3134             :
        3135             :     CALL HCO_EvalFld( HcoState, &
        3136             :                       'CLM4_PFT_C3_ARCT_GRSS'//TRIM(SFX), &
        3137           0 :                       PFT_C3_ARCT_GRSS, RC )
        3138           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3139           0 :         CALL HCO_ERROR( 'ERROR 27', RC, THISLOC=LOC )
        3140           0 :         RETURN
        3141             :     ENDIF
        3142             :
        3143             :     CALL HCO_EvalFld( HcoState, &
        3144             :                       'CLM4_PFT_C3_NARC_GRSS'//TRIM(SFX), &
        3145           0 :                       PFT_C3_NARC_GRSS, RC )
        3146           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3147           0 :         CALL HCO_ERROR( 'ERROR 28', RC, THISLOC=LOC )
        3148           0 :         RETURN
        3149             :     ENDIF
        3150             :
        3151             :     CALL HCO_EvalFld( HcoState, &
        3152             :                       'CLM4_PFT_C4_GRSS'//TRIM(SFX), &
        3153           0 :                       PFT_C4_GRSS, RC )
        3154           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3155           0 :         CALL HCO_ERROR( 'ERROR 29', RC, THISLOC=LOC )
        3156           0 :         RETURN
        3157             :     ENDIF
        3158             :
        3159             :     CALL HCO_EvalFld( HcoState, &
        3160             :                       'CLM4_PFT_CROP'//TRIM(SFX), &
        3161           0 :                       PFT_CROP, RC )
        3162           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3163           0 :         CALL HCO_ERROR( 'ERROR 30', RC, THISLOC=LOC )
        3164           0 :         RETURN
        3165             :     ENDIF
        3166             :
        3167             :     ! Copy PFTs into ARRAY_16
        3168           0 :     Inst%ARRAY_16(:,:, 1) = PFT_BARE
        3169           0 :     Inst%ARRAY_16(:,:, 2) = PFT_NDLF_EVGN_TMPT_TREE
        3170           0 :     Inst%ARRAY_16(:,:, 3) = PFT_NDLF_EVGN_BORL_TREE
        3171           0 :     Inst%ARRAY_16(:,:, 4) = PFT_NDLF_DECD_BORL_TREE
        3172           0 :     Inst%ARRAY_16(:,:, 5) = PFT_BDLF_EVGN_TROP_TREE
        3173           0 :     Inst%ARRAY_16(:,:, 6) = PFT_BDLF_EVGN_TMPT_TREE
        3174           0 :     Inst%ARRAY_16(:,:, 7) = PFT_BDLF_DECD_TROP_TREE
        3175           0 :     Inst%ARRAY_16(:,:, 8) = PFT_BDLF_DECD_TMPT_TREE
        3176           0 :     Inst%ARRAY_16(:,:, 9) = PFT_BDLF_DECD_BORL_TREE
        3177           0 :     Inst%ARRAY_16(:,:,10) = PFT_BDLF_EVGN_SHRB
        3178           0 :     Inst%ARRAY_16(:,:,11) = PFT_BDLF_DECD_TMPT_SHRB
        3179           0 :     Inst%ARRAY_16(:,:,12) = PFT_BDLF_DECD_BORL_SHRB
        3180           0 :     Inst%ARRAY_16(:,:,13) = PFT_C3_ARCT_GRSS
        3181           0 :     Inst%ARRAY_16(:,:,14) = PFT_C3_NARC_GRSS
        3182           0 :     Inst%ARRAY_16(:,:,15) = PFT_C4_GRSS
        3183           0 :     Inst%ARRAY_16(:,:,16) = PFT_CROP
        3184             :
        3185             :     ! --------------------------------------------------------------------------------
        3186             :     ! PFT-specific EFs from Table 2 in Guenther et al., 2012
        3187             :     ! in ug compound/m2/h
        3188             :     ! PFTs 1-15 in the table correspond to #2-16
        3189             :     ! (i.e., excluding bare ground #1) in the above array.
        3190             :     ! --------------------------------------------------------------------------------
        3191             :     ! Compound Class EF1 EF2 EF3 EF4 EF5 EF6 EF7 EF8 EF9 EF10 EF11 EF12 EF13 EF14 EF15
        3192             :     ! --------------------------------------------------------------------------------
        3193             :     ! Other Monoterp 180 180 170 150 150 150 150 150 110 200  110  5    5    5    5
        3194             :     ! Methanol       900 900 900 500 900 500 900 900 900 900  900  500  500  500  900
        3195             :     ! Acetone        240 240 240 240 240 240 240 240 240 240  240  80   80   80   80
        3196             :     ! Bidirect VOC   500 500 500 500 500 500 500 500 500 500  500  80   80   80   80
        3197             :     ! Stress VOC     300 300 300 300 300 300 300 300 300 300  300  300  300  300  300
        3198             :     ! Other VOC      140 140 140 140 140 140 140 140 140 140  140  140  140  140  140
        3199             :     ! a-Pinene       500 500 510 600 400 600 400 400 200 300  200    2    2    2    2
        3200             :     ! Myrcene         70  70  60  80  30  80  30  30  30  50   30  0.3  0.3  0.3  0.3
        3201             :     ! a-Farnesene     40  40  40  60  40  60  40  40  40  40   40    3    3    3    4
        3202             :     ! b-Carophyllene  80  80  80  60  40  60  40  40  50  50   50    1    1    1    4
        3203             :     ! Other sesqt.   120 120 120 120 100 120 100 100 100 100  100    2    2    2    2
        3204             :     ! --------------------------------------------------------------------------------
        3205             :
        3206             :     ! One thing to note is these are net emissions to the canopy atmosphere
        3207             :     ! but not net emissions to the above canopy atmosphere since they don't
        3208             :     !  account for within-canopy deposition. Only an issue for OVOCs.
        3209             :
        3210             :     !               EF1       EF2       EF3       EF4       EF5
        3211             :     PFT_EF_OMON = (/180.0_hp, 180.0_hp, 170.0_hp, 150.0_hp, 150.0_hp, &
        3212             :     !               EF6       EF7       EF8       EF9       EF10
        3213             :                     150.0_hp, 150.0_hp, 150.0_hp, 110.0_hp, 200.0_hp, &
        3214             :     !               EF11      EF12      EF13      EF14      EF15
        3215           0 :                     110.0_hp, 5.0_hp  , 5.0_hp  , 5.0_hp  , 5.0_hp/)
        3216             :
        3217             :     !               EF1       EF2       EF3       EF4       EF5
        3218             :     PFT_EF_MOH  = (/900.0_hp, 900.0_hp, 900.0_hp, 500.0_hp, 900.0_hp, &
        3219             :     !               EF6       EF7       EF8       EF9       EF10
        3220             :                     500.0_hp, 900.0_hp, 900.0_hp, 900.0_hp, 900.0_hp, &
        3221             :     !               EF11      EF12      EF13      EF14      EF15
        3222           0 :                     900.0_hp, 500.0_hp, 500.0_hp, 500.0_hp, 900.0_hp/)
        3223             :
        3224             :     !               EF1       EF2       EF3       EF4       EF5
        3225             :     PFT_EF_ACET = (/240.0_hp, 240.0_hp, 240.0_hp, 240.0_hp, 240.0_hp, &
        3226             :     !               EF6       EF7       EF8       EF9       EF10
        3227             :                     240.0_hp, 240.0_hp, 240.0_hp, 240.0_hp, 240.0_hp, &
        3228             :     !               EF11      EF12      EF13      EF14      EF15
        3229           0 :                     240.0_hp, 80.0_hp , 80.0_hp , 80.0_hp , 80.0_hp/)
        3230             :
        3231             :     !               EF1       EF2       EF3       EF4       EF5
        3232             :     PFT_EF_BIDR = (/500.0_hp, 500.0_hp, 500.0_hp, 500.0_hp, 500.0_hp, &
        3233             :     !               EF6       EF7       EF8       EF9       EF10
        3234             :                     500.0_hp, 500.0_hp, 500.0_hp, 500.0_hp, 500.0_hp, &
        3235             :     !               EF11      EF12      EF13      EF14      EF15
        3236           0 :                     500.0_hp, 80.0_hp , 80.0_hp , 80.0_hp , 80.0_hp/)
        3237             :
        3238             :     !               EF1       EF2       EF3       EF4       EF5
        3239             :     PFT_EF_STRS = (/300.0_hp, 300.0_hp, 300.0_hp, 300.0_hp, 300.0_hp, &
        3240             :     !               EF6       EF7       EF8       EF9       EF10
        3241             :                     300.0_hp, 300.0_hp, 300.0_hp, 300.0_hp, 300.0_hp, &
        3242             :     !               EF11      EF12      EF13      EF14      EF15
        3243           0 :                     300.0_hp, 300.0_hp, 300.0_hp, 300.0_hp, 300.0_hp/)
        3244             :
        3245             :     !               EF1       EF2       EF3       EF4       EF5
        3246             :     PFT_EF_OTHR = (/140.0_hp, 140.0_hp, 140.0_hp, 140.0_hp, 140.0_hp, &
        3247             :     !               EF6       EF7       EF8       EF9       EF10
        3248             :                     140.0_hp, 140.0_hp, 140.0_hp, 140.0_hp, 140.0_hp, &
        3249             :     !               EF11      EF12      EF13      EF14      EF15
        3250           0 :                     140.0_hp, 140.0_hp, 140.0_hp, 140.0_hp, 140.0_hp/)
        3251             :
        3252             :     ! ---> Now compute EFs for a-pinene and myrcene as well (dbm, 12/2012)
        3253             :     !               EF1       EF2       EF3       EF4       EF5
        3254             :     PFT_EF_APIN = (/500.0_hp, 500.0_hp, 510.0_hp, 600.0_hp, 400.0_hp, &
        3255             :     !               EF6       EF7       EF8       EF9       EF10
        3256             :                     600.0_hp, 400.0_hp, 400.0_hp, 200.0_hp, 300.0_hp, &
        3257             :     !               EF11      EF12      EF13      EF14      EF15
        3258           0 :                     200.0_hp, 2.0_hp,   2.0_hp,   2.0_hp,   2.0_hp/)
        3259             :
        3260             :     !               EF1       EF2       EF3       EF4       EF5
        3261             :     PFT_EF_MYRC = (/70.0_hp,  70.0_hp,  60.0_hp,  80.0_hp,  30.0_hp, &
        3262             :     !               EF6       EF7       EF8       EF9       EF10
        3263             :                     80.0_hp,  30.0_hp,  30.0_hp,  30.0_hp,  50.0_hp, &
        3264             :     !               EF11      EF12      EF13      EF14      EF15
        3265           0 :                     30.0_hp,  0.3_hp,   0.3_hp,   0.3_hp,   0.3_hp/)
        3266             :     ! <---
        3267             :
        3268             :     !               EF1       EF2       EF3       EF4       EF5
        3269             :     PFT_EF_FARN = (/40.0_hp,  40.0_hp,  40.0_hp,  60.0_hp,  40.0_hp, &
        3270             :     !               EF6       EF7       EF8       EF9       EF10
        3271             :                     60.0_hp,  40.0_hp,  40.0_hp,  40.0_hp,  40.0_hp, &
        3272             :     !               EF11      EF12      EF13      EF14      EF15
        3273           0 :                     40.0_hp,  3.0_hp,   3.0_hp,   3.0_hp,   4.0_hp/)
        3274             :
        3275             :     !               EF1       EF2       EF3       EF4       EF5
        3276             :     PFT_EF_BCAR = (/80.0_hp,  80.0_hp,  80.0_hp,  60.0_hp,  40.0_hp, &
        3277             :     !               EF6       EF7       EF8       EF9       EF10
        3278             :                     60.0_hp,  40.0_hp,  40.0_hp,  50.0_hp,  50.0_hp, &
        3279             :     !               EF11      EF12      EF13      EF14      EF15
        3280           0 :                     50.0_hp,  1.0_hp,   1.0_hp,   1.0_hp,   4.0_hp/)
        3281             :
        3282             :     !               EF1       EF2       EF3       EF4       EF5
        3283             :     PFT_EF_OSQT = (/120.0_hp, 120.0_hp, 120.0_hp, 120.0_hp, 100.0_hp, &
        3284             :     !               EF6       EF7       EF8       EF9       EF10
        3285             :                     120.0_hp, 100.0_hp, 100.0_hp, 100.0_hp, 100.0_hp, &
        3286             :     !               EF11      EF12      EF13      EF14      EF15
        3287           0 :                     100.0_hp, 2.0_hp,   2.0_hp,   2.0_hp,   2.0_hp/)
        3288             :
        3289             :
        3290             :     ! Other monoterpenes, methanol, acetone, MBO are each 100% of thier
        3291             :     ! respective categories. The VOCs within the stress category each
        3292             :     ! account for a specific fraction of emissions across all PFTs
        3293             :     ! (ethene 58%, toluene 3%, HCN 1.5%). The VOCs within the
        3294             :     ! other category also account for a given fraction of emissions
        3295             :     ! across all PFTs (propene 48%, butene 24%, other alkenes 0.2%). But
        3296             :     ! VOCs in the bidirectional category account for a different amount of
        3297             :     ! the total flux for the different PFTs. So in this case we define a
        3298             :     ! vector containing these fractions.
        3299             :
        3300             :     ! Acetaldehyde: 40% of bidirectional category flux, except 25%
        3301             :     ! for grasses and crops
        3302             :     EM_FRAC_ALD2 = (/0.40_hp, 0.40_hp, 0.40_hp, 0.40_hp, 0.40_hp, &
        3303             :                      0.40_hp, 0.40_hp, 0.40_hp, 0.40_hp, 0.40_hp, &
        3304           0 :                      0.40_hp, 0.25_hp, 0.25_hp, 0.25_hp, 0.25_hp/)
        3305             :
        3306             :     ! Ethanol: 40% of bidirectional category flux, except 25%
        3307             :     ! for grasses and crops
        3308             :     EM_FRAC_EOH  = (/0.40_hp, 0.40_hp, 0.40_hp, 0.40_hp, 0.40_hp, &
        3309             :                      0.40_hp, 0.40_hp, 0.40_hp, 0.40_hp, 0.40_hp, &
        3310           0 :                      0.40_hp, 0.25_hp, 0.25_hp, 0.25_hp, 0.25_hp/)
        3311             :
        3312             :     ! Formic acid: 6% of bidirectional category flux, except 15%
        3313             :     ! for grasses and crops
        3314             :     EM_FRAC_FAXX = (/0.06_hp, 0.06_hp, 0.06_hp, 0.06_hp, 0.06_hp, &
        3315             :                      0.06_hp, 0.06_hp, 0.06_hp, 0.06_hp, 0.06_hp, &
        3316           0 :                      0.06_hp, 0.15_hp, 0.15_hp, 0.15_hp, 0.15_hp/)
        3317             :
        3318             :     ! Acetic acid: 6% of bidirectional category flux, except 15%
        3319             :     ! for grasses and crops
        3320             :     EM_FRAC_AAXX = (/0.06_hp, 0.06_hp, 0.06_hp, 0.06_hp, 0.06_hp, &
        3321             :                      0.06_hp, 0.06_hp, 0.06_hp, 0.06_hp, 0.06_hp, &
        3322           0 :                      0.06_hp, 0.15_hp, 0.15_hp, 0.15_hp, 0.15_hp/)
        3323             :
        3324             :     ! Formaldehyde: 8% of bidirectional category flux, except 20%
        3325             :     ! for grasses and crops
        3326             :     EM_FRAC_CH2O = (/0.08_hp, 0.08_hp, 0.08_hp, 0.08_hp, 0.08_hp, &
        3327             :                      0.08_hp, 0.08_hp, 0.08_hp, 0.08_hp, 0.08_hp, &
        3328           0 :                      0.08_hp, 0.20_hp, 0.20_hp, 0.20_hp, 0.20_hp/)
        3329             :
        3330             :     ! Set AEF arrays to zero
        3331           0 :     Inst%AEF_APIN(:,:) = 0.0_hp
        3332           0 :     Inst%AEF_MYRC(:,:) = 0.0_hp
        3333           0 :     Inst%AEF_OMON(:,:) = 0.0_hp
        3334           0 :     Inst%AEF_FARN(:,:) = 0.0_hp
        3335           0 :     Inst%AEF_BCAR(:,:) = 0.0_hp
        3336           0 :     Inst%AEF_OSQT(:,:) = 0.0_hp
        3337           0 :     Inst%AEF_MOH (:,:) = 0.0_hp
        3338           0 :     Inst%AEF_ACET(:,:) = 0.0_hp
        3339           0 :     Inst%AEF_EOH (:,:) = 0.0_hp
        3340           0 :     Inst%AEF_CH2O(:,:) = 0.0_hp
        3341           0 :     Inst%AEF_ALD2(:,:) = 0.0_hp
        3342           0 :     Inst%AEF_FAXX(:,:) = 0.0_hp
        3343           0 :     Inst%AEF_AAXX(:,:) = 0.0_hp
        3344           0 :     Inst%AEF_C2H4(:,:) = 0.0_hp
        3345           0 :     Inst%AEF_TOLU(:,:) = 0.0_hp
        3346           0 :     Inst%AEF_HCNX(:,:) = 0.0_hp
        3347           0 :     Inst%AEF_PRPE(:,:) = 0.0_hp
        3348             :
        3349             :     ! Loop through plant types
        3350           0 :     DO P = 1, 15
        3351             :
        3352             :        ! Add 1 to Array_16 index to skip bare ground
        3353           0 :        ARR_IND = P + 1
        3354             :
        3355             :        ! Don't need to divide ARRAY_16 by 100 since data from netCDF
        3356             :        ! file has already been converted to fraction (mps, 2/12/15)
        3357             :
        3358             :        ! ---> Now compute EFs for a-pinene and myrcene as well (dbm, 12/2012)
        3359             :        ! a-pinene: 100% of category
        3360             :        Inst%AEF_APIN(:,:) = Inst%AEF_APIN(:,:) + &
        3361           0 :             Inst%ARRAY_16(:,:,ARR_IND) * PFT_EF_APIN(P)
        3362             :
        3363             :        ! Myrcene: 100% of category
        3364             :        Inst%AEF_MYRC(:,:) = Inst%AEF_MYRC(:,:) + &
        3365           0 :             Inst%ARRAY_16(:,:,ARR_IND) * PFT_EF_MYRC(P)
        3366             :        ! <---
        3367             :
        3368             :        ! Other monoterpenes: 100% of category
        3369             :        Inst%AEF_OMON(:,:) = Inst%AEF_OMON(:,:) + &
        3370           0 :             Inst%ARRAY_16(:,:,ARR_IND) * PFT_EF_OMON(P)
        3371             :
        3372             :        ! a-Farnesene: 100% of category
        3373             :        Inst%AEF_FARN(:,:) = Inst%AEF_FARN(:,:) + &
        3374           0 :             Inst%ARRAY_16(:,:,ARR_IND) * PFT_EF_FARN(P)
        3375             :
        3376             :        ! b-Caryophyllene: 100% of category
        3377             :        Inst%AEF_BCAR(:,:) = Inst%AEF_BCAR(:,:) + &
        3378           0 :             Inst%ARRAY_16(:,:,ARR_IND) * PFT_EF_BCAR(P)
        3379             :
        3380             :        ! Other sesquiterpenes: 100% of category
        3381             :        Inst%AEF_OSQT(:,:) = Inst%AEF_OSQT(:,:) + &
        3382           0 :             Inst%ARRAY_16(:,:,ARR_IND) * PFT_EF_OSQT(P)
        3383             :
        3384             :        ! Methanol: 100% of category
        3385             :        Inst%AEF_MOH(:,:) = Inst%AEF_MOH(:,:) + &
        3386           0 :             Inst%ARRAY_16(:,:,ARR_IND) * PFT_EF_MOH(P)
        3387             :
        3388             :        ! Acetone: 100% of category
        3389             :        Inst%AEF_ACET(:,:) = Inst%AEF_ACET(:,:) + &
        3390           0 :             Inst%ARRAY_16(:,:,ARR_IND) * PFT_EF_ACET(P)
        3391             :
        3392             :        ! Ethanol: variable fraction of category
        3393             :        Inst%AEF_EOH(:,:) = Inst%AEF_EOH(:,:) + &
        3394           0 :             Inst%ARRAY_16(:,:,ARR_IND)*PFT_EF_BIDR(P)*EM_FRAC_EOH(P)
        3395             :
        3396             :        ! Formaldehyde: variable fraction of category
        3397             :        Inst%AEF_CH2O(:,:) = Inst%AEF_CH2O(:,:) + &
        3398           0 :             Inst%ARRAY_16(:,:,ARR_IND)*PFT_EF_BIDR(P)*EM_FRAC_CH2O(P)
        3399             :
        3400             :        ! Acetaldehyde: variable fraction of category
        3401             :        Inst%AEF_ALD2(:,:) = Inst%AEF_ALD2(:,:) + &
        3402           0 :             Inst%ARRAY_16(:,:,ARR_IND)*PFT_EF_BIDR(P)*EM_FRAC_ALD2(P)
        3403             :
        3404             :        ! Formic acid: variable fraction of category
        3405             :        Inst%AEF_FAXX(:,:) = Inst%AEF_FAXX(:,:) + &
        3406           0 :             Inst%ARRAY_16(:,:,ARR_IND)*PFT_EF_BIDR(P)*EM_FRAC_FAXX(P)
        3407             :
        3408             :        ! Acetic acid: variable fraction of category
        3409             :        Inst%AEF_AAXX(:,:) = Inst%AEF_AAXX(:,:) + &
        3410           0 :             Inst%ARRAY_16(:,:,ARR_IND)*PFT_EF_BIDR(P)*EM_FRAC_AAXX(P)
        3411             :
        3412             :        ! Ethene: 58% of "stress" category for all PFTs
        3413             :        Inst%AEF_C2H4(:,:) = Inst%AEF_C2H4(:,:) + &
        3414           0 :             Inst%ARRAY_16(:,:,ARR_IND) * PFT_EF_STRS(P) * 0.58_hp
        3415             :
        3416             :        ! Toluene: 3% of "stress" category for all PFTs
        3417             :        Inst%AEF_TOLU(:,:) = Inst%AEF_TOLU(:,:) + &
        3418           0 :             Inst%ARRAY_16(:,:,ARR_IND) * PFT_EF_STRS(P) * 0.03_hp
        3419             :
        3420             :        ! HCN: 1.5% of "stress" category for all PFTs
        3421             :        Inst%AEF_HCNX(:,:) = Inst%AEF_HCNX(:,:) + &
        3422           0 :             Inst%ARRAY_16(:,:,ARR_IND) * PFT_EF_STRS(P) * 0.015_hp
        3423             :
        3424             :        ! Propene: 48% of "other" category for all PFTs
        3425             :        ! Butene:  24% of "other" category for all PFTs
        3426             :        ! Larger alkenes: 0.2% of "other" category for all PFTs
        3427             :        ! Total: 72.2%
        3428             :        Inst%AEF_PRPE(:,:) = Inst%AEF_PRPE(:,:) + &
        3429           0 :             Inst%ARRAY_16(:,:,ARR_IND) * PFT_EF_OTHR(P) * 0.722_hp
        3430             :
        3431             :     ENDDO
        3432             :
        3433             :     ! Convert AEF arrays from [ug/m2/hr] to [kg/m2/s]
        3434           0 :     FACTOR = 1.0e-9_hp / 3600.0_hp
        3435           0 :     Inst%AEF_APIN = Inst%AEF_APIN * FACTOR
        3436           0 :     Inst%AEF_MYRC = Inst%AEF_MYRC * FACTOR
        3437           0 :     Inst%AEF_OMON = Inst%AEF_OMON * FACTOR
        3438           0 :     Inst%AEF_FARN = Inst%AEF_FARN * FACTOR
        3439           0 :     Inst%AEF_BCAR = Inst%AEF_BCAR * FACTOR
        3440           0 :     Inst%AEF_OSQT = Inst%AEF_OSQT * FACTOR
        3441           0 :     Inst%AEF_ACET = Inst%AEF_ACET * FACTOR
        3442           0 :     Inst%AEF_EOH  = Inst%AEF_EOH  * FACTOR
        3443           0 :     Inst%AEF_ALD2 = Inst%AEF_ALD2 * FACTOR
        3444           0 :     Inst%AEF_C2H4 = Inst%AEF_C2H4 * FACTOR
        3445           0 :     Inst%AEF_TOLU = Inst%AEF_TOLU * FACTOR
        3446           0 :     Inst%AEF_PRPE = Inst%AEF_PRPE * FACTOR
        3447           0 :     Inst%AEF_MOH  = Inst%AEF_MOH  * FACTOR
        3448           0 :     Inst%AEF_CH2O = Inst%AEF_CH2O * FACTOR
        3449           0 :     Inst%AEF_FAXX = Inst%AEF_FAXX * FACTOR
        3450           0 :     Inst%AEF_AAXX = Inst%AEF_AAXX * FACTOR
        3451           0 :     Inst%AEF_HCNX = Inst%AEF_HCNX * FACTOR
        3452             :
        3453             :     ! Return w/ success
        3454           0 :     RC = HCO_SUCCESS
        3455             :
        3456             :   END SUBROUTINE CALC_AEF
        3457             : !EOC
        3458             : !------------------------------------------------------------------------------
        3459             : !                   Harmonized Emissions Component (HEMCO)                    !
        3460             : !------------------------------------------------------------------------------
        3461             : !BOP
        3462             : !
        3463             : ! !IROUTINE: HCOX_Megan_Init
        3464             : !
        3465             : ! !DESCRIPTION: Subroutine HCOX\_Megan\_Init allocates and initializes all
        3466             : !  module arrays.
        3467             : !\\
        3468             : !\\
        3469             : ! !INTERFACE:
        3470             : !
        3471           0 :   SUBROUTINE HCOX_Megan_Init( HcoState, ExtName, ExtState, RC )
        3472             : !
        3473             : ! !USES:
        3474             : !
        3475             :     USE HCO_STATE_MOD,    ONLY : Hco_GetHcoID
        3476             :     USE HCO_STATE_MOD,    ONLY : HCO_GetExtHcoID
        3477             :     USE HCO_ExtList_Mod,  ONLY : GetExtNr, GetExtOpt
        3478             :     USE HCO_Restart_Mod,  ONLY : HCO_RestartDefine
        3479             : !
        3480             : ! !INPUT PARAMETERS:
        3481             : !
        3482             :     TYPE(HCO_State),  POINTER        :: HcoState
        3483             :     CHARACTER(LEN=*), INTENT(IN   )  :: ExtName
        3484             :     TYPE(Ext_State),  POINTER        :: ExtState
        3485             : !
        3486             : ! !INPUT/OUTPUT PARAMETERS:
        3487             : !
        3488             :     INTEGER, INTENT(INOUT)           :: RC
        3489             : !
        3490             : ! !REVISION HISTORY:
        3491             : !  05 Aug 2013 - C. Keller   - Initial version
        3492             : !  See https://github.com/geoschem/hemco for complete history
        3493             : !EOP
        3494             : !------------------------------------------------------------------------------
        3495             : !BOC
        3496             : !
        3497             : ! !LOCAL VARIABLES:
        3498             : !
        3499             :     INTEGER                        :: ExtNr, iExtNr
        3500             :     INTEGER                        :: I, nSpc, AS, NX, NY
        3501           0 :     INTEGER, ALLOCATABLE           :: HcoIDs(:)
        3502             :     LOGICAL                        :: FOUND
        3503             :     REAL*8                         :: PI_180
        3504           0 :     REAL(hp), POINTER              :: Ptr2D(:,:)
        3505             :     TYPE(MyInst), POINTER          :: Inst
        3506             :     CHARACTER(LEN=255)             :: MSG, LOC
        3507           0 :     CHARACTER(LEN=31), ALLOCATABLE :: SpcNames(:)
        3508             :     LOGICAL                        :: Optfound
        3509             :
        3510             :     !=================================================================
        3511             :     ! HCOX_MEGAN_INIT begins here!
        3512             :     !=================================================================
        3513           0 :     LOC = 'HCOX_MEGAN_INIT (HCOX_MEGAN_MOD.F90)'
        3514             :
        3515             :     ! Extension Nr.
        3516           0 :     ExtNr = GetExtNr( HcoState%Config%ExtList, TRIM(ExtName) )
        3517           0 :     IF ( ExtNr <= 0 ) RETURN
        3518             :
        3519             :     ! Enter
        3520           0 :     CALL HCO_ENTER( HcoState%Config%Err, LOC, RC )
        3521           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3522           0 :         CALL HCO_ERROR( 'ERROR 31', RC, THISLOC=LOC )
        3523           0 :         RETURN
        3524             :     ENDIF
        3525             :
        3526             :     ! Nullify
        3527           0 :     Ptr2D => NULL()
        3528           0 :     Inst  => NULL()
        3529             :
        3530             :     ! Create an instance for this extension
        3531           0 :     CALL InstCreate ( ExtNr, ExtState%Megan, Inst, RC )
        3532           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3533             :        CALL HCO_ERROR ( &
        3534           0 :                        'Cannot create MEGAN instance', RC )
        3535           0 :        RETURN
        3536             :     ENDIF
        3537             :
        3538             :     ! Check to see if offline biogenic VOCs are used. If so, those
        3539             :     ! will be used in place of online MEGAN emissions (mps, 12/17/19).
        3540           0 :     Inst%OFFLINE_BIOGENICVOC = .FALSE.
        3541             :     CALL GetExtOpt( HcoState%Config, 0, 'OFFLINE_BIOGENICVOC', &
        3542           0 :                     OptValBool=OptFound, Found=FOUND, RC=RC )
        3543           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3544           0 :         CALL HCO_ERROR( 'ERROR 32', RC, THISLOC=LOC )
        3545           0 :         RETURN
        3546             :     ENDIF
        3547           0 :     IF ( FOUND ) Inst%OFFLINE_BIOGENICVOC = OptFound
        3548             :
        3549             :     ! Verbose mode
        3550           0 :     IF ( HcoState%amIRoot) THEN
        3551             :
        3552             :        ! Write the name of the extension regardless of the verbose setting
        3553           0 :        msg = 'Using HEMCO extension: MEGAN (biogenic emissions)'
        3554           0 :        IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN
        3555           0 :           CALL HCO_Msg( HcoState%Config%Err, msg, sep1='-' ) ! with separator
        3556             :        ELSE
        3557           0 :           CALL HCO_Msg( msg, verb=.TRUE.                   ) ! w/o separator
        3558             :        ENDIF
        3559             :
        3560             :        ! Write all other messages as debug printout only
        3561           0 :        WRITE(MSG,*) '- Use offline biogenic VOCs? ', Inst%OFFLINE_BIOGENICVOC
        3562           0 :        CALL HCO_MSG( HcoState%Config%Err, MSG )
        3563             :     ENDIF
        3564             :
        3565             :     !-----------------------------------------------------------------
        3566             :     ! Read settings
        3567             :     !-----------------------------------------------------------------
        3568             :
        3569             :     ! Read settings specified in configuration file
        3570             :     ! Note: the specified strings have to match those in
        3571             :     !       the config. file!
        3572             :     CALL GetExtOpt( HcoState%Config, ExtNr, 'Isoprene scaling', &
        3573           0 :                     OptValHp=Inst%ISOP_SCALING, RC=RC )
        3574           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3575           0 :         CALL HCO_ERROR( 'ERROR 33', RC, THISLOC=LOC )
        3576           0 :         RETURN
        3577             :     ENDIF
        3578             :     CALL GetExtOpt( HcoState%Config, ExtNr, 'CO2 inhibition', &
        3579           0 :                     OptValBool=Inst%LISOPCO2, RC=RC )
        3580           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3581           0 :         CALL HCO_ERROR( 'ERROR 34', RC, THISLOC=LOC )
        3582           0 :         RETURN
        3583             :     ENDIF
        3584             :     CALL GetExtOpt( HcoState%Config, ExtNr, 'CO2 conc (ppmv)', &
        3585           0 :                     OptValHp=Inst%GLOBCO2, RC=RC )
        3586           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3587           0 :         CALL HCO_ERROR( 'ERROR 35', RC, THISLOC=LOC )
        3588           0 :         RETURN
        3589             :     ENDIF
        3590             :
        3591             :     ! Normalize LAI by PFT? Default setting is 'yes'
        3592             :     ! ckeller, 7/17/17.
        3593           0 :     Inst%NORMLAI = .TRUE.
        3594             :     CALL GetExtOpt( HcoState%Config, ExtNr, 'Normalize LAI', &
        3595           0 :                     OptValBool=OptFound, Found=FOUND, RC=RC )
        3596           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3597           0 :         CALL HCO_ERROR( 'ERROR 36', RC, THISLOC=LOC )
        3598           0 :         RETURN
        3599             :     ENDIF
        3600           0 :     IF ( FOUND ) Inst%NORMLAI = OptFound
        3601             :
        3602             :     ! Check GLOBCO2 if CO2 inhibition is turned on (LISOPCO2 = .TRUE.)
        3603             :     ! GLOBCO2 should be between 150-1250 ppmv. Isoprene response to
        3604             :     ! CO2 outside this range has no empirical basis. (Tai, Jan 2013)
        3605           0 :     IF ( Inst%LISOPCO2 ) THEN
        3606           0 :        IF ( Inst%GLOBCO2 <  150.0_hp .OR. &
        3607             :             Inst%GLOBCO2 > 1250.0_hp     ) THEN
        3608           0 :           MSG = 'Global CO2 outside valid range of 150-1250 ppmv!'
        3609           0 :           CALL HCO_ERROR(MSG, RC )
        3610           0 :           RETURN
        3611             :        ENDIF
        3612             :     ENDIF
        3613             :
        3614           0 :     Optfound = .FALSE.
        3615             :     !optional arguments for SOAP
        3616             :     CALL GetExtOpt ( HcoState%Config, ExtNr, 'Isoprene to SOAP', &
        3617           0 :                      OptValHp=Inst%ISOPTOSOAP, FOUND=Optfound, RC=RC )
        3618           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3619           0 :         CALL HCO_ERROR( 'ERROR 37', RC, THISLOC=LOC )
        3620           0 :         RETURN
        3621             :     ENDIF
        3622           0 :     IF ( Optfound ) THEN
        3623             :        !convert from carbon basis to mass basis
        3624           0 :        Inst%ISOPTOSOAP = Inst%ISOPTOSOAP * 1.134
        3625             :     ELSE
        3626             :        !set to zero if not specified
        3627           0 :        Inst%ISOPTOSOAP = 0.0
        3628             :     ENDIF
        3629             :
        3630           0 :     Optfound = .FALSE.
        3631             :     !optional arguments for SOAS
        3632             :     CALL GetExtOpt ( HcoState%Config, ExtNr, 'Isoprene to SOAS', &
        3633           0 :                      OptValHp=Inst%ISOPTOSOAS, FOUND=Optfound, RC=RC )
        3634           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3635           0 :         CALL HCO_ERROR( 'ERROR 38', RC, THISLOC=LOC )
        3636           0 :         RETURN
        3637             :     ENDIF
        3638           0 :     IF ( Optfound ) THEN
        3639             :        !convert from carbon basis to mass basis
        3640           0 :        Inst%ISOPTOSOAS = Inst%ISOPTOSOAS * 1.134
        3641             :     ELSE
        3642             :        !set to zero if not specified
        3643           0 :        Inst%ISOPTOSOAS = 0.0
        3644             :     ENDIF
        3645             :
        3646           0 :     Optfound = .FALSE.
        3647             :     CALL GetExtOpt ( HcoState%Config, Inst%ExtNr, 'Monoterp to SOAP', &
        3648           0 :                      OptValHp=Inst%MONOTOSOAP, FOUND=Optfound, RC=RC )
        3649           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3650           0 :         CALL HCO_ERROR( 'ERROR 39', RC, THISLOC=LOC )
        3651           0 :         RETURN
        3652             :     ENDIF
        3653           0 :     IF ( Optfound ) THEN
        3654             :        !convert from carbon basis to mass basis
        3655             :        Inst%MONOTOSOAP = Inst%MONOTOSOAP ! * 1.134
        3656             :     ELSE
        3657             :        !set to zero if not specified
        3658           0 :        Inst%MONOTOSOAP = 0.0
        3659             :     ENDIF
        3660             :
        3661           0 :     Optfound = .FALSE.
        3662             :     CALL GetExtOpt ( HcoState%Config, Inst%ExtNr, 'Monoterp to SOAS', &
        3663           0 :                      OptValHp=Inst%MONOTOSOAS, FOUND=Optfound, RC=RC )
        3664           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3665           0 :         CALL HCO_ERROR( 'ERROR 40', RC, THISLOC=LOC )
        3666           0 :         RETURN
        3667             :     ENDIF
        3668           0 :     IF ( Optfound ) THEN
        3669             :        !convert from carbon basis to mass basis
        3670             :        Inst%MONOTOSOAS = Inst%MONOTOSOAS ! * 1.134
        3671             :     ELSE
        3672             :        !set to zero if not specified
        3673           0 :        Inst%MONOTOSOAS = 0.0
        3674             :     ENDIF
        3675             :
        3676           0 :     Optfound = .FALSE.
        3677             :     CALL GetExtOpt ( HcoState%Config, Inst%ExtNr, 'Othrterp to SOAP', &
        3678           0 :                      OptValHp=Inst%OTHRTOSOAP, FOUND=Optfound, RC=RC )
        3679           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3680           0 :         CALL HCO_ERROR( 'ERROR 41', RC, THISLOC=LOC )
        3681           0 :         RETURN
        3682             :     ENDIF
        3683           0 :     IF ( Optfound ) THEN
        3684             :        !convert from carbon basis to mass basis
        3685           0 :        Inst%OTHRTOSOAP = Inst%OTHRTOSOAP * 1.134
        3686             :     ELSE
        3687             :        !set to zero if not specified
        3688           0 :        Inst%OTHRTOSOAP = 0.0
        3689             :     ENDIF
        3690             :
        3691           0 :     Optfound = .FALSE.
        3692             :     CALL GetExtOpt ( HcoState%Config, Inst%ExtNr, 'Othrterp to SOAS', &
        3693           0 :                      OptValHp=Inst%OTHRTOSOAS, FOUND=Optfound, RC=RC )
        3694           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3695           0 :         CALL HCO_ERROR( 'ERROR 42', RC, THISLOC=LOC )
        3696           0 :         RETURN
        3697             :     ENDIF
        3698           0 :     IF ( Optfound ) THEN
        3699             :        !convert from carbon basis to mass basis
        3700           0 :        Inst%OTHRTOSOAS = Inst%OTHRTOSOAS * 1.134
        3701             :     ELSE
        3702             :        !set to zero if not specified
        3703           0 :        Inst%OTHRTOSOAS = 0.0
        3704             :     ENDIF
        3705             :
        3706             :     !-----------------------------------------------------------------
        3707             :     ! Set species IDs
        3708             :     !-----------------------------------------------------------------
        3709             :
        3710             :     ! Verbose mode
        3711           0 :     IF ( HcoState%amIRoot ) THEN
        3712           0 :        MSG = ' - Use the following species:'
        3713           0 :        CALL HCO_MSG( HcoState%Config%Err, MSG )
        3714             :     ENDIF
        3715             :
        3716             :     ! Get species IDs
        3717             :     ! --> Assume that species are ordered ISOP, ACET, PRPE, C2H4 in
        3718             :     !     config. file!
        3719           0 :     CALL HCO_GetExtHcoID( HcoState, ExtNr, HcoIDs, SpcNames, nSpc, RC)
        3720           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3721           0 :         CALL HCO_ERROR( 'ERROR 43', RC, THISLOC=LOC )
        3722           0 :         RETURN
        3723             :     ENDIF
        3724             :
        3725             :     ! Assign species IDs
        3726           0 :     Inst%IDTISOP = -1
        3727           0 :     Inst%IDTACET = -1
        3728           0 :     Inst%IDTPRPE = -1
        3729           0 :     Inst%IDTC2H4 = -1
        3730           0 :     Inst%IDTALD2 = -1
        3731           0 :     Inst%IDTMOH  = -1
        3732           0 :     Inst%IDTEOH  = -1
        3733           0 :     Inst%IDTSOAP = -1
        3734           0 :     Inst%IDTSOAS = -1
        3735           0 :     Inst%IDTMTPA = -1
        3736           0 :     Inst%IDTMTPO = -1
        3737           0 :     Inst%IDTLIMO = -1
        3738           0 :     Inst%IDTSESQ = -1
        3739           0 :     DO I = 1, nSpc
        3740           0 :        SELECT CASE ( TRIM(SpcNames(I)) )
        3741             :        CASE( 'ISOP' )
        3742           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3743           0 :              Inst%IDTISOP = HcoIDs(I)
        3744           0 :              WRITE(MSG,*) '   Isoprene   = ',TRIM(SpcNames(I)),Inst%IDTISOP
        3745             :           ELSE
        3746             :              WRITE(MSG,*) '   Isoprene will be obtained from ' // &
        3747           0 :                           'offline biogenic VOC emissions'
        3748             :           ENDIF
        3749             :        CASE( 'ACET' )
        3750           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3751           0 :              Inst%IDTACET = HcoIDs(I)
        3752           0 :              WRITE(MSG,*) '   Acetone    = ',TRIM(SpcNames(I)),Inst%IDTACET
        3753             :           ELSE
        3754             :              WRITE(MSG,*) '   Acetone will be obtained from ' // &
        3755           0 :                           'offline biogenic VOC emissions'
        3756             :           ENDIF
        3757             :        CASE( 'PRPE' )
        3758           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3759           0 :              Inst%IDTPRPE = HcoIDs(I)
        3760           0 :              WRITE(MSG,*) '   PRPE       = ',TRIM(SpcNames(I)),Inst%IDTPRPE
        3761             :           ELSE
        3762             :              WRITE(MSG,*) '   PRPE will be obtained from ' // &
        3763           0 :                           'offline biogenic VOC emissions'
        3764             :           ENDIF
        3765             :        CASE( 'ALD2' )
        3766           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3767           0 :              Inst%IDTALD2 = HcoIDs(I)
        3768           0 :              WRITE(MSG,*) '   ALD2       = ',TRIM(SpcNames(I)),Inst%IDTALD2
        3769             :           ELSE
        3770             :              WRITE(MSG,*) '   ALD2 will be obtained from ' // &
        3771           0 :                           'offline biogenic VOC emissions'
        3772             :           ENDIF
        3773             :        CASE( 'MOH' )
        3774           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3775           0 :              Inst%IDTMOH  = HcoIDs(I)
        3776           0 :              WRITE(MSG,*) '   MOH        = ',TRIM(SpcNames(I)),Inst%IDTMOH
        3777             :           ELSE
        3778             :              WRITE(MSG,*) '   MOH will be obtained from ' // &
        3779           0 :                           'offline biogenic VOC emissions'
        3780             :           ENDIF
        3781             :        CASE( 'EOH' )
        3782           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3783           0 :              Inst%IDTEOH  = HcoIDs(I)
        3784           0 :              WRITE(MSG,*) '   EOH        = ',TRIM(SpcNames(I)),Inst%IDTEOH
        3785             :           ELSE
        3786             :              WRITE(MSG,*) '   EOH will be obtained from ' // &
        3787           0 :                           'offline biogenic VOC emissions'
        3788             :           ENDIF
        3789             :        CASE( 'C2H4' )
        3790           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3791           0 :              Inst%IDTC2H4 = HcoIDs(I)
        3792           0 :              WRITE(MSG,*) '   C2H4       = ',TRIM(SpcNames(I)),Inst%IDTC2H4
        3793             :           ELSE
        3794             :              WRITE(MSG,*) '   C2H4 will be obtained from ' // &
        3795           0 :                           'offline biogenic VOC emissions'
        3796             :           ENDIF
        3797             :        CASE( 'SOAP' )
        3798           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3799           0 :              Inst%IDTSOAP = HcoIDs(I)
        3800           0 :              WRITE(MSG,*) '   SOAP       = ',TRIM(SpcNames(I)),Inst%IDTSOAP
        3801             :           ELSE
        3802             :              WRITE(MSG,*) '   SOAP will be obtained from ' // &
        3803           0 :                           'offline biogenic VOC emissions'
        3804             :           ENDIF
        3805             :        CASE( 'SOAS' )
        3806           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3807           0 :              Inst%IDTSOAS = HcoIDs(I)
        3808           0 :              WRITE(MSG,*) '   SOAS       = ',TRIM(SpcNames(I)),Inst%IDTSOAS
        3809             :           ELSE
        3810             :              WRITE(MSG,*) '   SOAS will be obtained from ' // &
        3811           0 :                           'offline biogenic VOC emissions'
        3812             :           ENDIF
        3813             :        CASE( 'MTPA' )
        3814           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3815           0 :              Inst%IDTMTPA = HcoIDs(I)
        3816           0 :              WRITE(MSG,*) '   MTPA       = ',TRIM(SpcNames(I)),Inst%IDTMTPA
        3817             :           ELSE
        3818             :              WRITE(MSG,*) '   MTPA will be obtained from ' // &
        3819           0 :                           'offline biogenic VOC emissions'
        3820             :           ENDIF
        3821             :        CASE( 'MTPO' )
        3822           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3823           0 :              Inst%IDTMTPO = HcoIDs(I)
        3824           0 :              WRITE(MSG,*) '   MTPO       = ',TRIM(SpcNames(I)),Inst%IDTMTPO
        3825             :           ELSE
        3826             :              WRITE(MSG,*) '   MTPO will be obtained from ' // &
        3827           0 :                           'offline biogenic VOC emissions'
        3828             :           ENDIF
        3829             :        CASE( 'LIMO' )
        3830           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3831           0 :              Inst%IDTLIMO = HcoIDs(I)
        3832           0 :              WRITE(MSG,*) '   LIMO       = ',TRIM(SpcNames(I)),Inst%IDTLIMO
        3833             :           ELSE
        3834             :              WRITE(MSG,*) '   LIMO will be obtained from ' // &
        3835           0 :                           'offline biogenic VOC emissions'
        3836             :           ENDIF
        3837             :        CASE( 'SESQ' )
        3838           0 :           IF ( .not. Inst%OFFLINE_BIOGENICVOC ) THEN
        3839           0 :              Inst%IDTSESQ = HcoIDs(I)
        3840           0 :              WRITE(MSG,*) '   SESQ       = ',TRIM(SpcNames(I)),Inst%IDTSESQ
        3841             :           ELSE
        3842             :              WRITE(MSG,*) '   SESQ will be obtained from ' // &
        3843           0 :                           'offline biogenic VOC emissions'
        3844             :           ENDIF
        3845             :        CASE DEFAULT
        3846           0 :           MSG = 'Invalid species names: ' // TRIM(SpcNames(I))
        3847           0 :           CALL HCO_ERROR(MSG, RC )
        3848           0 :           RETURN
        3849             :        END SELECT
        3850             :
        3851             :        ! Verbose
        3852           0 :        IF ( HcoState%amIRoot ) CALL HCO_MSG( HcoState%Config%Err, MSG )
        3853             :     ENDDO
        3854             :
        3855             :     ! Verbose mode
        3856           0 :     IF ( HcoState%amIRoot ) THEN
        3857           0 :        WRITE(MSG,*) ' --> Isoprene scale factor is ',Inst%ISOP_SCALING
        3858           0 :        CALL HCO_MSG( HcoState%Config%Err, MSG )
        3859           0 :        WRITE(MSG,*) ' --> Use CO2 inhibition on isoprene option ', &
        3860           0 :                     Inst%LISOPCO2
        3861           0 :        CALL HCO_MSG( HcoState%Config%Err, MSG )
        3862           0 :        WRITE(MSG,*) ' --> Global atmospheric CO2 concentration : ', &
        3863           0 :                     Inst%GLOBCO2, ' ppmv'
        3864           0 :        CALL HCO_MSG( HcoState%Config%Err, MSG )
        3865           0 :        WRITE(MSG,*) ' --> Normalize LAI by PFT: ', &
        3866           0 :                     Inst%NORMLAI
        3867           0 :        CALL HCO_MSG( HcoState%Config%Err, MSG )
        3868           0 :        WRITE(MSG,*) ' --> Isoprene to SOA-Precursor', &
        3869             :                     !convert back to direct mass basis just for show
        3870           0 :                     Inst%ISOPTOSOAP / 1.134
        3871           0 :        CALL HCO_MSG( HcoState%Config%Err, MSG )
        3872           0 :        WRITE(MSG,*) ' --> Isoprene direct to SOA (Simple)', &
        3873             :                     !convert back to direct mass basis just for show
        3874           0 :                     Inst%ISOPTOSOAS / 1.134
        3875           0 :        CALL HCO_MSG( HcoState%Config%Err, MSG )
        3876           0 :        WRITE(MSG,*) ' --> Monoterpene to SOA-Precursor', &
        3877             :                     !convert back to direct mass basis just for show
        3878           0 :                     Inst%MONOTOSOAP / 1.134
        3879           0 :        CALL HCO_MSG( HcoState%Config%Err, MSG )
        3880           0 :        WRITE(MSG,*) ' --> Monoterpene direct to SOA (Simple)', &
        3881             :                     !convert back to direct mass basis just for show
        3882           0 :                     Inst%MONOTOSOAS / 1.134
        3883           0 :        CALL HCO_MSG( HcoState%Config%Err, MSG )
        3884           0 :        WRITE(MSG,*) ' --> Othrterpene to SOA-Precursor', &
        3885             :                     !convert back to direct mass basis just for show
        3886           0 :                     Inst%OTHRTOSOAP / 1.134
        3887           0 :        CALL HCO_MSG( HcoState%Config%Err, MSG )
        3888           0 :        WRITE(MSG,*) ' --> Othrterpene direct to SOA (Simple)', &
        3889             :                     !convert back to direct mass basis just for show
        3890           0 :                     Inst%OTHRTOSOAS / 1.134
        3891           0 :        CALL HCO_MSG( HcoState%Config%Err, MSG )
        3892             :     ENDIF
        3893             :
        3894             :     CALL GetExtOpt( HcoState%Config, ExtNr, 'MEGAN_SUFFIX', &
        3895           0 :                     OptValChar=Inst%SUFFIX, FOUND=FOUND, RC=RC )
        3896           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        3897           0 :         CALL HCO_ERROR( 'ERROR 44', RC, THISLOC=LOC )
        3898           0 :         RETURN
        3899             :     ENDIF
        3900           0 :     IF ( .NOT. FOUND ) Inst%SUFFIX = ''
        3901             :
        3902             :     !-----------------------------------------------------------------
        3903             :     ! Allocate module variables
        3904             :     !-----------------------------------------------------------------
        3905             :
        3906             :     ! Get horizontal grid extensions on this CPU
        3907           0 :     NX = HcoState%NX
        3908           0 :     NY = HcoState%NY
        3909             :
        3910           0 :     ALLOCATE( Inst%T_LAST24H( NX, NY ), STAT=AS )
        3911           0 :     IF ( AS /= 0 ) THEN
        3912           0 :        CALL HCO_ERROR( 'T_LAST24H', RC )
        3913           0 :        RETURN
        3914             :     ENDIF
        3915           0 :     Inst%T_LAST24H = 0.0_sp
        3916             :
        3917           0 :     ALLOCATE( Inst%T_LASTXDAYS( NX, NY ), STAT=AS )
        3918             :     IF ( AS /= 0 ) THEN
        3919           0 :        CALL HCO_ERROR( 'T_LASTXDAYS', RC )
        3920           0 :        RETURN
        3921             :     ENDIF
        3922           0 :     Inst%T_LASTXDAYS = 0.0_sp
        3923             :
        3924           0 :     ALLOCATE( Inst%PARDR_LASTXDAYS( NX, NY ), STAT=AS )
        3925             :     IF ( AS /= 0 ) THEN
        3926           0 :        CALL HCO_ERROR( 'PARDR_LASTXDAYS', RC )
        3927           0 :        RETURN
        3928             :     ENDIF
        3929           0 :     Inst%PARDR_LASTXDAYS = 0.0_sp
        3930             :
        3931           0 :     ALLOCATE( Inst%PARDF_LASTXDAYS( NX, NY ), STAT=AS )
        3932             :     IF ( AS /= 0 ) THEN
        3933           0 :        CALL HCO_ERROR( 'PARDF_LASTXDAYS', RC )
        3934           0 :        RETURN
        3935             :     ENDIF
        3936           0 :     Inst%PARDF_LASTXDAYS = 0.0_sp
        3937             :
        3938           0 :     ALLOCATE( Inst%LAI_PREVDAY( NX, NY ), STAT=AS )
        3939             :     IF ( AS /= 0 ) THEN
        3940           0 :       CALL HCO_ERROR( 'LAI_PREVDAY', RC )
        3941           0 :       RETURN
        3942             :     ENDIF
        3943           0 :     Inst%LAI_PREVDAY = 0.0_sp
        3944             :
        3945             :     ! Normalization factor
        3946             :     ! There should be a different normalization factor for each compound, but
        3947             :     ! we calculate only 1 normalization factor for all compounds (dbm 11/2012)
        3948           0 :     ALLOCATE( Inst%NORM_FAC( 1 ), STAT=AS )
        3949             :     IF ( AS /= 0 ) THEN
        3950           0 :       CALL HCO_ERROR( 'NORM_FAC', RC )
        3951           0 :       RETURN
        3952             :     ENDIF
        3953           0 :     Inst%NORM_FAC = -99d0
        3954             :
        3955           0 :     ALLOCATE( Inst%AEF_APIN( NX, NY ), STAT=AS )
        3956             :     IF ( AS /= 0 ) THEN
        3957           0 :        CALL HCO_ERROR( 'AEF_APIN', RC )
        3958           0 :        RETURN
        3959             :     ENDIF
        3960           0 :     Inst%AEF_APIN = 0.0_hp
        3961             :
        3962           0 :     ALLOCATE( Inst%AEF_MYRC( NX, NY ), STAT=AS )
        3963             :     IF ( AS /= 0 ) THEN
        3964           0 :        CALL HCO_ERROR( 'AEF_MYRC', RC )
        3965           0 :        RETURN
        3966             :     ENDIF
        3967           0 :     Inst%AEF_MYRC = 0.0_hp
        3968             :
        3969           0 :     ALLOCATE( Inst%AEF_OMON( NX, NY ), STAT=AS )
        3970             :     IF ( AS /= 0 ) THEN
        3971           0 :        CALL HCO_ERROR( 'AEF_OMON', RC )
        3972           0 :        RETURN
        3973             :     ENDIF
        3974           0 :     Inst%AEF_OMON = 0.0_hp
        3975             :
        3976           0 :     ALLOCATE( Inst%AEF_FARN( NX, NY ), STAT=AS )
        3977             :     IF ( AS /= 0 ) THEN
        3978           0 :        CALL HCO_ERROR( 'AEF_FARN', RC )
        3979           0 :        RETURN
        3980             :     ENDIF
        3981           0 :     Inst%AEF_FARN = 0.0_hp
        3982             :
        3983           0 :     ALLOCATE( Inst%AEF_BCAR( NX, NY ), STAT=AS )
        3984             :     IF ( AS /= 0 ) THEN
        3985           0 :        CALL HCO_ERROR( 'AEF_BCAR', RC )
        3986           0 :        RETURN
        3987             :     ENDIF
        3988           0 :     Inst%AEF_BCAR = 0.0_hp
        3989             :
        3990           0 :     ALLOCATE( Inst%AEF_OSQT( NX, NY ), STAT=AS )
        3991             :     IF ( AS /= 0 ) THEN
        3992           0 :        CALL HCO_ERROR( 'AEF_OSQT', RC )
        3993           0 :        RETURN
        3994             :     ENDIF
        3995           0 :     Inst%AEF_OSQT = 0.0_hp
        3996             :
        3997           0 :     ALLOCATE( Inst%AEF_MOH( NX, NY ), STAT=AS )
        3998             :     IF ( AS /= 0 ) THEN
        3999           0 :        CALL HCO_ERROR( 'AEF_MOH', RC )
        4000           0 :        RETURN
        4001             :     ENDIF
        4002           0 :     Inst%AEF_MOH = 0.0_hp
        4003             :
        4004           0 :     ALLOCATE( Inst%AEF_ACET( NX, NY ), STAT=AS )
        4005             :     IF ( AS /= 0 ) THEN
        4006           0 :        CALL HCO_ERROR( 'AEF_ACET', RC )
        4007           0 :        RETURN
        4008             :     ENDIF
        4009           0 :     Inst%AEF_ACET = 0.0_hp
        4010             :
        4011           0 :     ALLOCATE( Inst%AEF_EOH( NX, NY ), STAT=AS )
        4012             :     IF ( AS /= 0 ) THEN
        4013           0 :        CALL HCO_ERROR( 'AEF_EOH', RC )
        4014           0 :        RETURN
        4015             :     ENDIF
        4016           0 :     Inst%AEF_EOH = 0.0_hp
        4017             :
        4018           0 :     ALLOCATE( Inst%AEF_CH2O( NX, NY ), STAT=AS )
        4019             :     IF ( AS /= 0 ) THEN
        4020           0 :        CALL HCO_ERROR( 'AEF_CH2O', RC )
        4021           0 :        RETURN
        4022             :     ENDIF
        4023           0 :     Inst%AEF_CH2O = 0.0_hp
        4024             :
        4025           0 :     ALLOCATE( Inst%AEF_ALD2( NX, NY ), STAT=AS )
        4026             :     IF ( AS /= 0 ) THEN
        4027           0 :        CALL HCO_ERROR( 'AEF_ALD2', RC )
        4028           0 :        RETURN
        4029             :     ENDIF
        4030           0 :     Inst%AEF_ALD2 = 0.0_hp
        4031             :
        4032           0 :     ALLOCATE( Inst%AEF_FAXX( NX, NY ), STAT=AS )
        4033             :     IF ( AS /= 0 ) THEN
        4034           0 :        CALL HCO_ERROR( 'AEF_FAXX', RC )
        4035           0 :        RETURN
        4036             :     ENDIF
        4037           0 :     Inst%AEF_FAXX = 0.0_hp
        4038             :
        4039           0 :     ALLOCATE( Inst%AEF_AAXX( NX, NY ), STAT=AS )
        4040             :     IF ( AS /= 0 ) THEN
        4041           0 :        CALL HCO_ERROR( 'AEF_AAXX', RC )
        4042           0 :        RETURN
        4043             :     ENDIF
        4044           0 :     Inst%AEF_AAXX = 0.0_hp
        4045             :
        4046           0 :     ALLOCATE( Inst%AEF_C2H4( NX, NY ), STAT=AS )
        4047             :     IF ( AS /= 0 ) THEN
        4048           0 :        CALL HCO_ERROR( 'AEF_C2H4', RC )
        4049           0 :        RETURN
        4050             :     ENDIF
        4051           0 :     Inst%AEF_C2H4 = 0.0_hp
        4052             :
        4053           0 :     ALLOCATE( Inst%AEF_TOLU( NX, NY ), STAT=AS )
        4054             :     IF ( AS /= 0 ) THEN
        4055           0 :        CALL HCO_ERROR( 'AEF_TOLU', RC )
        4056           0 :        RETURN
        4057             :     ENDIF
        4058           0 :     Inst%AEF_TOLU = 0.0_hp
        4059             :
        4060           0 :     ALLOCATE( Inst%AEF_HCNX( NX, NY ), STAT=AS )
        4061             :     IF ( AS /= 0 ) THEN
        4062           0 :        CALL HCO_ERROR( 'AEF_HCNX', RC )
        4063           0 :        RETURN
        4064             :     ENDIF
        4065           0 :     Inst%AEF_HCNX = 0.0_hp
        4066             :
        4067           0 :     ALLOCATE( Inst%AEF_PRPE( NX, NY ), STAT=AS )
        4068             :     IF ( AS /= 0 ) THEN
        4069           0 :        CALL HCO_ERROR( 'AEF_PRPE', RC )
        4070           0 :        RETURN
        4071             :     ENDIF
        4072           0 :     Inst%AEF_PRPE = 0.0_hp
        4073             :
        4074           0 :     ALLOCATE( Inst%FLUXISOP( NX, NY ), STAT=AS )
        4075             :     IF ( AS /= 0 ) THEN
        4076           0 :        CALL HCO_ERROR( 'FLUXISOP', RC )
        4077           0 :        RETURN
        4078             :     ENDIF
        4079           0 :     Inst%FLUXISOP = 0.0_hp
        4080             :
        4081           0 :     ALLOCATE( Inst%FLUXMONO( NX, NY ), STAT=AS )
        4082             :     IF ( AS /= 0 ) THEN
        4083           0 :        CALL HCO_ERROR( 'FLUXMONO', RC )
        4084           0 :        RETURN
        4085             :     ENDIF
        4086           0 :     Inst%FLUXMONO = 0.0_hp
        4087             :
        4088           0 :     ALLOCATE( Inst%FLUXACET( NX, NY ), STAT=AS )
        4089             :     IF ( AS /= 0 ) THEN
        4090           0 :        CALL HCO_ERROR( 'FLUXACET', RC )
        4091           0 :        RETURN
        4092             :     ENDIF
        4093           0 :     Inst%FLUXACET = 0.0_hp
        4094             :
        4095           0 :     ALLOCATE( Inst%FLUXACETmb( NX, NY ), STAT=AS )
        4096             :     IF ( AS /= 0 ) THEN
        4097           0 :        CALL HCO_ERROR( 'FLUXACETmb', RC )
        4098           0 :        RETURN
        4099             :     ENDIF
        4100           0 :     Inst%FLUXACETmb = 0.0_sp
        4101             :
        4102           0 :     ALLOCATE( Inst%FLUXACETbg( NX, NY ), STAT=AS )
        4103             :     IF ( AS /= 0 ) THEN
        4104           0 :        CALL HCO_ERROR( 'FLUXACETbg', RC )
        4105           0 :        RETURN
        4106             :     ENDIF
        4107           0 :     Inst%FLUXACETbg = 0.0_sp
        4108             :
        4109           0 :     ALLOCATE( Inst%FLUXPRPE( NX, NY ), STAT=AS )
        4110             :     IF ( AS /= 0 ) THEN
        4111           0 :        CALL HCO_ERROR( 'FLUXPRPE', RC )
        4112           0 :        RETURN
        4113             :     ENDIF
        4114           0 :     Inst%FLUXPRPE = 0.0_hp
        4115             :
        4116           0 :     ALLOCATE( Inst%FLUXC2H4( NX, NY ), STAT=AS )
        4117             :     IF ( AS /= 0 ) THEN
        4118           0 :        CALL HCO_ERROR( 'FLUXC2H4', RC )
        4119           0 :        RETURN
        4120             :     ENDIF
        4121           0 :     Inst%FLUXC2H4 = 0.0_hp
        4122             :
        4123           0 :     ALLOCATE( Inst%FLUXLIMO( NX, NY ), STAT=AS )
        4124             :     IF ( AS /= 0 ) THEN
        4125           0 :        CALL HCO_ERROR( 'FLUXLIMO', RC )
        4126           0 :        RETURN
        4127             :     ENDIF
        4128           0 :     Inst%FLUXLIMO = 0.0_hp
        4129             :
        4130           0 :     ALLOCATE( Inst%FLUXMTPA( NX, NY ), STAT=AS )
        4131             :     IF ( AS /= 0 ) THEN
        4132           0 :        CALL HCO_ERROR( 'FLUXMTPA', RC )
        4133           0 :        RETURN
        4134             :     ENDIF
        4135           0 :     Inst%FLUXMTPA = 0.0_hp
        4136             :
        4137           0 :     ALLOCATE( Inst%FLUXMTPO( NX, NY ), STAT=AS )
        4138             :     IF ( AS /= 0 ) THEN
        4139           0 :        CALL HCO_ERROR( 'FLUXMTPO', RC )
        4140           0 :        RETURN
        4141             :     ENDIF
        4142           0 :     Inst%FLUXMTPO = 0.0_hp
        4143             :
        4144           0 :     ALLOCATE( Inst%FLUXSESQ( NX, NY ), STAT=AS )
        4145             :     IF ( AS /= 0 ) THEN
        4146           0 :        CALL HCO_ERROR( 'FLUXSESQ', RC )
        4147           0 :        RETURN
        4148             :     ENDIF
        4149           0 :     Inst%FLUXSESQ = 0.0_hp
        4150             :
        4151           0 :     ALLOCATE( Inst%FLUXSOAP( NX, NY ), STAT=AS )
        4152             :     IF ( AS /= 0 ) THEN
        4153           0 :        CALL HCO_ERROR( 'FLUXSOAP', RC )
        4154           0 :        RETURN
        4155             :     ENDIF
        4156           0 :     Inst%FLUXSOAP = 0.0_hp
        4157             :
        4158           0 :     ALLOCATE( Inst%FLUXSOAS( NX, NY ), STAT=AS )
        4159             :     IF ( AS /= 0 ) THEN
        4160           0 :        CALL HCO_ERROR( 'FLUXSOAS', RC )
        4161           0 :        RETURN
        4162             :     ENDIF
        4163           0 :     Inst%FLUXSOAS = 0.0_hp
        4164             :
        4165           0 :     ALLOCATE( Inst%FLUXALD2( NX, NY ), STAT=AS )
        4166             :     IF ( AS /= 0 ) THEN
        4167           0 :        CALL HCO_ERROR( 'FLUXALD2', RC )
        4168           0 :        RETURN
        4169             :     ENDIF
        4170           0 :     Inst%FLUXALD2 = 0.0_hp
        4171             :
        4172           0 :     ALLOCATE( Inst%FLUXMOH( NX, NY ), STAT=AS )
        4173             :     IF ( AS /= 0 ) THEN
        4174           0 :        CALL HCO_ERROR( 'FLUXMOH', RC )
        4175           0 :        RETURN
        4176             :     ENDIF
        4177           0 :     Inst%FLUXMOH = 0.0_hp
        4178             :
        4179           0 :     ALLOCATE( Inst%FLUXEOH( NX, NY ), STAT=AS )
        4180             :     IF ( AS /= 0 ) THEN
        4181           0 :        CALL HCO_ERROR( 'FLUXEOH', RC )
        4182           0 :        RETURN
        4183             :     ENDIF
        4184           0 :     Inst%FLUXEOH = 0.0_hp
        4185             :
        4186           0 :     ALLOCATE( Inst%FLUXAPIN( NX, NY ), STAT=AS )
        4187             :     IF ( AS /= 0 ) THEN
        4188           0 :        CALL HCO_ERROR( 'FLUXAPIN', RC )
        4189           0 :        RETURN
        4190             :     ENDIF
        4191           0 :     Inst%FLUXAPIN = 0.0_sp
        4192             :
        4193           0 :     ALLOCATE( Inst%FLUXBPIN( NX, NY ), STAT=AS )
        4194             :     IF ( AS /= 0 ) THEN
        4195           0 :        CALL HCO_ERROR( 'FLUXBPIN', RC )
        4196           0 :        RETURN
        4197             :     ENDIF
        4198           0 :     Inst%FLUXBPIN = 0.0_sp
        4199             :
        4200           0 :     ALLOCATE( Inst%FLUXSABI( NX, NY ), STAT=AS )
        4201             :     IF ( AS /= 0 ) THEN
        4202           0 :        CALL HCO_ERROR( 'FLUXSABI', RC )
        4203           0 :        RETURN
        4204             :     ENDIF
        4205           0 :     Inst%FLUXSABI = 0.0_sp
        4206             :
        4207           0 :     ALLOCATE( Inst%FLUXMYRC( NX, NY ), STAT=AS )
        4208             :     IF ( AS /= 0 ) THEN
        4209           0 :        CALL HCO_ERROR( 'FLUXMYRC', RC )
        4210           0 :        RETURN
        4211             :     ENDIF
        4212           0 :     Inst%FLUXMYRC = 0.0_sp
        4213             :
        4214           0 :     ALLOCATE( Inst%FLUXCARE( NX, NY ), STAT=AS )
        4215             :     IF ( AS /= 0 ) THEN
        4216           0 :        CALL HCO_ERROR( 'FLUXCARE', RC )
        4217           0 :        RETURN
        4218             :     ENDIF
        4219           0 :     Inst%FLUXCARE = 0.0_sp
        4220             :
        4221           0 :     ALLOCATE( Inst%FLUXOCIM( NX, NY ), STAT=AS )
        4222             :     IF ( AS /= 0 ) THEN
        4223           0 :        CALL HCO_ERROR( 'FLUXOCIM', RC )
        4224           0 :        RETURN
        4225             :     ENDIF
        4226           0 :     Inst%FLUXOCIM = 0.0_sp
        4227             :
        4228           0 :     ALLOCATE( Inst%FLUXOMON( NX, NY ), STAT=AS )
        4229             :     IF ( AS /= 0 ) THEN
        4230           0 :        CALL HCO_ERROR(  'FLUXOMON', RC )
        4231           0 :        RETURN
        4232             :     ENDIF
        4233           0 :     Inst%FLUXOMON = 0.0_sp
        4234             :
        4235           0 :     ALLOCATE( Inst%FLUXFARN( NX, NY ), STAT=AS )
        4236             :     IF ( AS /= 0 ) THEN
        4237           0 :        CALL HCO_ERROR( 'FLUXFARN', RC )
        4238           0 :        RETURN
        4239             :     ENDIF
        4240           0 :     Inst%FLUXFARN = 0.0_sp
        4241             :
        4242           0 :     ALLOCATE( Inst%FLUXBCAR( NX, NY ), STAT=AS )
        4243             :     IF ( AS /= 0 ) THEN
        4244           0 :        CALL HCO_ERROR( 'FLUXBCAR', RC )
        4245           0 :        RETURN
        4246             :     ENDIF
        4247           0 :     Inst%FLUXBCAR = 0.0_sp
        4248             :
        4249           0 :     ALLOCATE( Inst%FLUXOSQT( NX, NY ), STAT=AS )
        4250             :     IF ( AS /= 0 ) THEN
        4251           0 :        CALL HCO_ERROR( 'FLUXOSQT', RC )
        4252           0 :        RETURN
        4253             :     ENDIF
        4254           0 :     Inst%FLUXOSQT = 0.0_sp
        4255             :
        4256           0 :     ALLOCATE( Inst%FLUXMBOX( NX, NY ), STAT=AS )
        4257             :     IF ( AS /= 0 ) THEN
        4258           0 :        CALL HCO_ERROR( 'FLUXMBOX', RC )
        4259           0 :        RETURN
        4260             :     ENDIF
        4261           0 :     Inst%FLUXMBOX = 0.0_sp
        4262             :
        4263           0 :     ALLOCATE( Inst%FLUXFAXX( NX, NY ), STAT=AS )
        4264             :     IF ( AS /= 0 ) THEN
        4265           0 :        CALL HCO_ERROR( 'FLUXFAXX', RC )
        4266           0 :        RETURN
        4267             :     ENDIF
        4268           0 :     Inst%FLUXFAXX = 0.0_sp
        4269             :
        4270           0 :     ALLOCATE( Inst%FLUXAAXX( NX, NY ), STAT=AS )
        4271             :     IF ( AS /= 0 ) THEN
        4272           0 :        CALL HCO_ERROR( 'FLUXAAXX', RC )
        4273           0 :        RETURN
        4274             :     ENDIF
        4275           0 :     Inst%FLUXAAXX = 0.0_sp
        4276             :
        4277           0 :     ALLOCATE( Inst%ARRAY_16( NX, NY, 16 ), STAT=AS )
        4278             :     IF ( AS /= 0 ) THEN
        4279           0 :        CALL HCO_ERROR( 'ARRAY_16', RC )
        4280           0 :        RETURN
        4281             :     ENDIF
        4282           0 :     Inst%ARRAY_16 = 0.0_hp
        4283             :
        4284             :     ALLOCATE ( Inst%AEF_ISOP ( NX, NY ), &
        4285             :                Inst%AEF_MBOX ( NX, NY ), &
        4286             :                Inst%AEF_BPIN ( NX, NY ), &
        4287             :                Inst%AEF_CARE ( NX, NY ), &
        4288             :                Inst%AEF_LIMO ( NX, NY ), &
        4289             :                Inst%AEF_OCIM ( NX, NY ), &
        4290           0 :                Inst%AEF_SABI ( NX, NY ), STAT=AS )
        4291           0 :     IF ( AS /= 0 ) THEN
        4292           0 :        CALL HCO_ERROR( 'AEF allocation error', RC )
        4293           0 :        RETURN
        4294             :     ENDIF
        4295           0 :     Inst%AEF_ISOP  = 0.0_hp
        4296           0 :     Inst%AEF_MBOX  = 0.0_hp
        4297           0 :     Inst%AEF_BPIN  = 0.0_hp
        4298           0 :     Inst%AEF_CARE  = 0.0_hp
        4299           0 :     Inst%AEF_LIMO  = 0.0_hp
        4300           0 :     Inst%AEF_OCIM  = 0.0_hp
        4301           0 :     Inst%AEF_SABI  = 0.0_hp
        4302             :
        4303             :     !=================================================================
        4304             :     ! Create manual diagnostics
        4305             :     !=================================================================
        4306             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4307             :                        cName     = 'InvMEGAN_ACET_MBOX',  &
        4308             :                        ExtNr     = ExtNr,                 &
        4309             :                        Cat       = -1,                    &
        4310             :                        Hier      = -1,                    &
        4311             :                        HcoID     = -1,                    &
        4312             :                        SpaceDim  = 2,                     &
        4313             :                        OutUnit   = 'kg/m2/s',             &
        4314             :                        AutoFill  = 0,                     &
        4315             :                        Trgt2D    = Inst%FLUXACETmb,       &
        4316           0 :                        RC        = RC )
        4317           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4318           0 :         CALL HCO_ERROR( 'ERROR 45', RC, THISLOC=LOC )
        4319           0 :         RETURN
        4320             :     ENDIF
        4321             :
        4322             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4323             :                        cName     = 'InvMEGAN_ACET_DIRECT',&
        4324             :                        ExtNr     = ExtNr,                 &
        4325             :                        Cat       = -1,                    &
        4326             :                        Hier      = -1,                    &
        4327             :                        HcoID     = -1,                    &
        4328             :                        SpaceDim  = 2,                     &
        4329             :                        OutUnit   = 'kg/m2/s',             &
        4330             :                        AutoFill  = 0,                     &
        4331             :                        Trgt2D    = Inst%FLUXACETbg,       &
        4332           0 :                        RC        = RC )
        4333           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4334           0 :         CALL HCO_ERROR( 'ERROR 46', RC, THISLOC=LOC )
        4335           0 :         RETURN
        4336             :     ENDIF
        4337             :
        4338             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4339             :                        cName     = 'InvMEGAN_APIN',       &
        4340             :                        ExtNr     = ExtNr,                 &
        4341             :                        Cat       = -1,                    &
        4342             :                        Hier      = -1,                    &
        4343             :                        HcoID     = -1,                    &
        4344             :                        SpaceDim  = 2,                     &
        4345             :                        OutUnit   = 'kg/m2/s',             &
        4346             :                        AutoFill  = 0,                     &
        4347             :                        Trgt2D    = Inst%FLUXAPIN,         &
        4348           0 :                        RC        = RC )
        4349           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4350           0 :         CALL HCO_ERROR( 'ERROR 47', RC, THISLOC=LOC )
        4351           0 :         RETURN
        4352             :     ENDIF
        4353             :
        4354             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4355             :                        cName     = 'InvMEGAN_BPIN',       &
        4356             :                        ExtNr     = ExtNr,                 &
        4357             :                        Cat       = -1,                    &
        4358             :                        Hier      = -1,                    &
        4359             :                        HcoID     = -1,                    &
        4360             :                        SpaceDim  = 2,                     &
        4361             :                        OutUnit   = 'kg/m2/s',             &
        4362             :                        AutoFill  = 0,                     &
        4363             :                        Trgt2D    = Inst%FLUXBPIN,         &
        4364           0 :                        RC        = RC )
        4365           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4366           0 :         CALL HCO_ERROR( 'ERROR 48', RC, THISLOC=LOC )
        4367           0 :         RETURN
        4368             :     ENDIF
        4369             :
        4370             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4371             :                        cName     = 'InvMEGAN_SABI',       &
        4372             :                        ExtNr     = ExtNr,                 &
        4373             :                        Cat       = -1,                    &
        4374             :                        Hier      = -1,                    &
        4375             :                        HcoID     = -1,                    &
        4376             :                        SpaceDim  = 2,                     &
        4377             :                        OutUnit   = 'kg/m2/s',             &
        4378             :                        AutoFill  = 0,                     &
        4379             :                        Trgt2D    = Inst%FLUXSABI,         &
        4380           0 :                        RC        = RC )
        4381           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4382           0 :         CALL HCO_ERROR( 'ERROR 49', RC, THISLOC=LOC )
        4383           0 :         RETURN
        4384             :     ENDIF
        4385             :
        4386             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4387             :                        cName     = 'InvMEGAN_MYRC',       &
        4388             :                        ExtNr     = ExtNr,                 &
        4389             :                        Cat       = -1,                    &
        4390             :                        Hier      = -1,                    &
        4391             :                        HcoID     = -1,                    &
        4392             :                        SpaceDim  = 2,                     &
        4393             :                        OutUnit   = 'kg/m2/s',             &
        4394             :                        AutoFill  = 0,                     &
        4395             :                        Trgt2D    = Inst%FLUXMYRC,         &
        4396           0 :                        RC        = RC )
        4397           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4398           0 :         CALL HCO_ERROR( 'ERROR 50', RC, THISLOC=LOC )
        4399           0 :         RETURN
        4400             :     ENDIF
        4401             :
        4402             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4403             :                        cName     = 'InvMEGAN_CARE',       &
        4404             :                        ExtNr     = ExtNr,                 &
        4405             :                        Cat       = -1,                    &
        4406             :                        Hier      = -1,                    &
        4407             :                        HcoID     = -1,                    &
        4408             :                        SpaceDim  = 2,                     &
        4409             :                        OutUnit   = 'kg/m2/s',             &
        4410             :                        AutoFill  = 0,                     &
        4411             :                        Trgt2D    = Inst%FLUXCARE,         &
        4412           0 :                        RC        = RC )
        4413           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4414           0 :         CALL HCO_ERROR( 'ERROR 51', RC, THISLOC=LOC )
        4415           0 :         RETURN
        4416             :     ENDIF
        4417             :
        4418             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4419             :                        cName     = 'InvMEGAN_OCIM',       &
        4420             :                        ExtNr     = ExtNr,                 &
        4421             :                        Cat       = -1,                    &
        4422             :                        Hier      = -1,                    &
        4423             :                        HcoID     = -1,                    &
        4424             :                        SpaceDim  = 2,                     &
        4425             :                        OutUnit   = 'kg/m2/s',             &
        4426             :                        AutoFill  = 0,                     &
        4427             :                        Trgt2D    = Inst%FLUXOCIM,         &
        4428           0 :                        RC        = RC )
        4429           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4430           0 :         CALL HCO_ERROR( 'ERROR 52', RC, THISLOC=LOC )
        4431           0 :         RETURN
        4432             :     ENDIF
        4433             :
        4434             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4435             :                        cName     = 'InvMEGAN_OMON',       &
        4436             :                        ExtNr     = ExtNr,                 &
        4437             :                        Cat       = -1,                    &
        4438             :                        Hier      = -1,                    &
        4439             :                        HcoID     = -1,                    &
        4440             :                        SpaceDim  = 2,                     &
        4441             :                        OutUnit   = 'kg/m2/s',             &
        4442             :                        AutoFill  = 0,                     &
        4443             :                        Trgt2D    = Inst%FLUXOMON,         &
        4444           0 :                        RC        = RC )
        4445           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4446           0 :         CALL HCO_ERROR( 'ERROR 53', RC, THISLOC=LOC )
        4447           0 :         RETURN
        4448             :     ENDIF
        4449             :
        4450             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4451             :                        cName     = 'InvMEGAN_FARN',       &
        4452             :                        ExtNr     = ExtNr,                 &
        4453             :                        Cat       = -1,                    &
        4454             :                        Hier      = -1,                    &
        4455             :                        HcoID     = -1,                    &
        4456             :                        SpaceDim  = 2,                     &
        4457             :                        OutUnit   = 'kg/m2/s',             &
        4458             :                        AutoFill  = 0,                     &
        4459             :                        Trgt2D    = Inst%FLUXFARN,         &
        4460           0 :                        RC        = RC )
        4461           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4462           0 :         CALL HCO_ERROR( 'ERROR 54', RC, THISLOC=LOC )
        4463           0 :         RETURN
        4464             :     ENDIF
        4465             :
        4466             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4467             :                        cName     = 'InvMEGAN_BCAR',       &
        4468             :                        ExtNr     = ExtNr,                 &
        4469             :                        Cat       = -1,                    &
        4470             :                        Hier      = -1,                    &
        4471             :                        HcoID     = -1,                    &
        4472             :                        SpaceDim  = 2,                     &
        4473             :                        OutUnit   = 'kg/m2/s',             &
        4474             :                        AutoFill  = 0,                     &
        4475             :                        Trgt2D    = Inst%FLUXBCAR,         &
        4476           0 :                        RC        = RC )
        4477           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4478           0 :         CALL HCO_ERROR( 'ERROR 55', RC, THISLOC=LOC )
        4479           0 :         RETURN
        4480             :     ENDIF
        4481             :
        4482             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4483             :                        cName     = 'InvMEGAN_OSQT',       &
        4484             :                        ExtNr     = ExtNr,                 &
        4485             :                        Cat       = -1,                    &
        4486             :                        Hier      = -1,                    &
        4487             :                        HcoID     = -1,                    &
        4488             :                        SpaceDim  = 2,                     &
        4489             :                        OutUnit   = 'kg/m2/s',             &
        4490             :                        AutoFill  = 0,                     &
        4491             :                        Trgt2D    = Inst%FLUXOSQT,         &
        4492           0 :                        RC        = RC )
        4493           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4494           0 :         CALL HCO_ERROR( 'ERROR 56', RC, THISLOC=LOC )
        4495           0 :         RETURN
        4496             :     ENDIF
        4497             :
        4498             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4499             :                        cName     = 'InvMEGAN_MBOX',       &
        4500             :                        ExtNr     = ExtNr,                 &
        4501             :                        Cat       = -1,                    &
        4502             :                        Hier      = -1,                    &
        4503             :                        HcoID     = -1,                    &
        4504             :                        SpaceDim  = 2,                     &
        4505             :                        OutUnit   = 'kg/m2/s',             &
        4506             :                        AutoFill  = 0,                     &
        4507             :                        Trgt2D    = Inst%FLUXMBOX,         &
        4508           0 :                        RC        = RC )
        4509           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4510           0 :         CALL HCO_ERROR( 'ERROR 57', RC, THISLOC=LOC )
        4511           0 :         RETURN
        4512             :     ENDIF
        4513             :
        4514             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4515             :                        cName     = 'InvMEGAN_FAXX',       &
        4516             :                        ExtNr     = ExtNr,                 &
        4517             :                        Cat       = -1,                    &
        4518             :                        Hier      = -1,                    &
        4519             :                        HcoID     = -1,                    &
        4520             :                        SpaceDim  = 2,                     &
        4521             :                        OutUnit   = 'kg/m2/s',             &
        4522             :                        AutoFill  = 0,                     &
        4523             :                        Trgt2D    = Inst%FLUXFAXX,         &
        4524           0 :                        RC        = RC )
        4525           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4526           0 :         CALL HCO_ERROR( 'ERROR 58', RC, THISLOC=LOC )
        4527           0 :         RETURN
        4528             :     ENDIF
        4529             :
        4530             :     CALL Diagn_Create( HcoState  = HcoState,              &
        4531             :                        cName     = 'InvMEGAN_AAXX',       &
        4532             :                        ExtNr     = ExtNr,                 &
        4533             :                        Cat       = -1,                    &
        4534             :                        Hier      = -1,                    &
        4535             :                        HcoID     = -1,                    &
        4536             :                        SpaceDim  = 2,                     &
        4537             :                        OutUnit   = 'kg/m2/s',             &
        4538             :                        AutoFill  = 0,                     &
        4539             :                        Trgt2D    = Inst%FLUXAAXX,         &
        4540           0 :                        RC        = RC )
        4541           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4542           0 :         CALL HCO_ERROR( 'ERROR 59', RC, THISLOC=LOC )
        4543           0 :         RETURN
        4544             :     ENDIF
        4545             :
        4546             :     !=================================================================
        4547             :     ! Initialize internal diagnostics. These are the restart variables
        4548             :     ! that can be used for a 'warm' start of MEGAN.
        4549             :     !=================================================================
        4550             :     CALL HCO_RestartDefine ( HcoState, 'LAI_PREVDAY', &
        4551           0 :                              Inst%LAI_PREVDAY, '1', RC )
        4552           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4553           0 :         CALL HCO_ERROR( 'ERROR 60', RC, THISLOC=LOC )
        4554           0 :         RETURN
        4555             :     ENDIF
        4556             :
        4557             :     CALL HCO_RestartDefine ( HcoState, 'T_PREVDAY', &
        4558           0 :                              Inst%T_LAST24H,   'K', RC )
        4559           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4560           0 :         CALL HCO_ERROR( 'ERROR 61', RC, THISLOC=LOC )
        4561           0 :         RETURN
        4562             :     ENDIF
        4563             :
        4564             :     CALL HCO_RestartDefine ( HcoState, 'T_DAVG', &
        4565           0 :                              Inst%T_LASTXDAYS, 'K', RC )
        4566           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4567           0 :         CALL HCO_ERROR( 'ERROR 62', RC, THISLOC=LOC )
        4568           0 :         RETURN
        4569             :     ENDIF
        4570             :
        4571             :     CALL HCO_RestartDefine (  HcoState, 'PARDR_DAVG', &
        4572           0 :                              Inst%PARDR_LASTXDAYS, 'W/m2', RC )
        4573           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4574           0 :         CALL HCO_ERROR( 'ERROR 63', RC, THISLOC=LOC )
        4575           0 :         RETURN
        4576             :     ENDIF
        4577             :
        4578             :     CALL HCO_RestartDefine ( HcoState, 'PARDF_DAVG', &
        4579           0 :                              Inst%PARDF_LASTXDAYS, 'W/m2', RC )
        4580           0 :     IF ( RC /= HCO_SUCCESS ) THEN
        4581           0 :         CALL HCO_ERROR( 'ERROR 64', RC, THISLOC=LOC )
        4582           0 :         RETURN
        4583             :     ENDIF
        4584             :
        4585             :     !=================================================================
        4586             :     ! The original MEGAN code used to read the emission factors here.
        4587             :     ! We now get the emisson factors through HEMCO, hence no need to
        4588             :     ! do this anymore (ckeller, 05/19/2014).
        4589             :     !=================================================================
        4590             :
        4591             :     ! Set physical constants
        4592           0 :     PI_180     = HcoState%Phys%PI_180
        4593           0 :     Inst%D2RAD = PI_180                ! Degrees to radians
        4594           0 :     Inst%RAD2D = 1.0_hp / PI_180       ! Radians to degrees
        4595             :
        4596             :     ! Enable met. fields
        4597           0 :     ExtState%T2M%DoUse       = .TRUE.
        4598           0 :     ExtState%SUNCOS%DoUse    = .TRUE.
        4599           0 :     ExtState%PARDR%DoUse     = .TRUE.
        4600           0 :     ExtState%PARDF%DoUse     = .TRUE.
        4601           0 :     ExtState%LAI%DoUse       = .TRUE.
        4602           0 :     ExtState%GWETROOT%DoUse  = .TRUE.
        4603             :
        4604             :     ! Cleanup
        4605           0 :     Inst => NULL()
        4606             :
        4607             :     ! Leave w/ success
        4608           0 :     IF ( ALLOCATED(HcoIDs  ) ) DEALLOCATE(HcoIDs  )
        4609           0 :     IF ( ALLOCATED(SpcNames) ) DEALLOCATE(SpcNames)
        4610           0 :     CALL HCO_LEAVE( HcoState%Config%Err,RC )
        4611             :
        4612           0 :   END SUBROUTINE HCOX_Megan_Init
        4613             : !EOC
        4614             : !------------------------------------------------------------------------------
        4615             : !                   Harmonized Emissions Component (HEMCO)                    !
        4616             : !------------------------------------------------------------------------------
        4617             : !BOP
        4618             : !
        4619             : ! !IROUTINE: HCOX_Megan_Final
        4620             : !
        4621             : ! !DESCRIPTION: Subroutine HCOX\_Megan\_Final deallocates all allocated arrays
        4622             : !  at the end of a GEOS-Chem model run.
        4623             : !\\
        4624             : !\\
        4625             : ! !INTERFACE:
        4626             : !
        4627           0 :   SUBROUTINE HCOX_MEGAN_FINAL ( HcoState, ExtState, RC )
        4628             : !
        4629             : ! !USES
        4630             : !
        4631             : !
        4632             : ! !INPUT PARAMETERS:
        4633             : !
        4634             :     TYPE(HCO_State), POINTER        :: HcoState      ! HEMCO State obj
        4635             :     TYPE(Ext_State), POINTER        :: ExtState      ! Extension State obj
        4636             : !
        4637             : ! !INPUT/OUTPUT PARAMETERS:
        4638             : !
        4639             :     INTEGER,         INTENT(INOUT)  :: RC
        4640             : !
        4641             : ! !REVISION HISTORY:
        4642             : !  05 Aug 2013 - C. Keller   - Initial version
        4643             : !  See https://github.com/geoschem/hemco for complete history
        4644             : !EOP
        4645             : !------------------------------------------------------------------------------
        4646             : !BOC
        4647             : !
        4648             : ! !LOCAL VARIABLES:
        4649             : !
        4650           0 :     CALL InstRemove ( ExtState%Megan )
        4651             :
        4652           0 :   END SUBROUTINE HCOX_MEGAN_FINAL
        4653             : !EOC
        4654             : !------------------------------------------------------------------------------
        4655             : !                   Harmonized Emissions Component (HEMCO)                    !
        4656             : !------------------------------------------------------------------------------
        4657             : !BOP
        4658             : !
        4659             : ! !IROUTINE: InstGet
        4660             : !
        4661             : ! !DESCRIPTION: Subroutine InstGet returns a pointer to the desired instance.
        4662             : !\\
        4663             : !\\
        4664             : ! !INTERFACE:
        4665             : !
        4666           0 :   SUBROUTINE InstGet ( Instance, Inst, RC, PrevInst )
        4667             : !
        4668             : ! !INPUT PARAMETERS:
        4669             : !
        4670             :     INTEGER                             :: Instance
        4671             :     TYPE(MyInst),     POINTER           :: Inst
        4672             :     INTEGER                             :: RC
        4673             :     TYPE(MyInst),     POINTER, OPTIONAL :: PrevInst
        4674             : !
        4675             : ! !REVISION HISTORY:
        4676             : !  18 Feb 2016 - C. Keller   - Initial version
        4677             : !  See https://github.com/geoschem/hemco for complete history
        4678             : !EOP
        4679             : !------------------------------------------------------------------------------
        4680             : !BOC
        4681             :     TYPE(MyInst),     POINTER    :: PrvInst
        4682             :
        4683             :     !=================================================================
        4684             :     ! InstGet begins here!
        4685             :     !=================================================================
        4686             :
        4687             :     ! Get instance. Also archive previous instance.
        4688           0 :     PrvInst => NULL()
        4689           0 :     Inst    => AllInst
        4690           0 :     DO WHILE ( ASSOCIATED(Inst) )
        4691           0 :        IF ( Inst%Instance == Instance ) EXIT
        4692           0 :        PrvInst => Inst
        4693           0 :        Inst    => Inst%NextInst
        4694             :     END DO
        4695           0 :     IF ( .NOT. ASSOCIATED( Inst ) ) THEN
        4696           0 :        RC = HCO_FAIL
        4697           0 :        RETURN
        4698             :     ENDIF
        4699             :
        4700             :     ! Pass output arguments
        4701           0 :     IF ( PRESENT(PrevInst) ) PrevInst => PrvInst
        4702             :
        4703             :     ! Cleanup & Return
        4704           0 :     PrvInst => NULL()
        4705           0 :     RC = HCO_SUCCESS
        4706             :
        4707             :   END SUBROUTINE InstGet
        4708             : !EOC
        4709             : !------------------------------------------------------------------------------
        4710             : !                   Harmonized Emissions Component (HEMCO)                    !
        4711             : !------------------------------------------------------------------------------
        4712             : !BOP
        4713             : !
        4714             : ! !IROUTINE: InstCreate
        4715             : !
        4716             : ! !DESCRIPTION: Subroutine InstCreate adds a new instance to the list of
        4717             : !  instances, assigns a unique instance number to this new instance, and
        4718             : !  archives this instance number to output argument Instance.
        4719             : !\\
        4720             : !\\
        4721             : ! !INTERFACE:
        4722             : !
        4723           0 :   SUBROUTINE InstCreate ( ExtNr, Instance, Inst, RC )
        4724             : !
        4725             : ! !INPUT PARAMETERS:
        4726             : !
        4727             :     INTEGER,       INTENT(IN)       :: ExtNr
        4728             : !
        4729             : ! !OUTPUT PARAMETERS:
        4730             : !
        4731             :     INTEGER,       INTENT(  OUT)    :: Instance
        4732             :     TYPE(MyInst),  POINTER          :: Inst
        4733             : !
        4734             : ! !INPUT/OUTPUT PARAMETERS:
        4735             : !
        4736             :     INTEGER,       INTENT(INOUT)    :: RC
        4737             : !
        4738             : ! !REVISION HISTORY:
        4739             : !  18 Feb 2016 - C. Keller   - Initial version
        4740             : !  See https://github.com/geoschem/hemco for complete history
        4741             : !EOP
        4742             : !------------------------------------------------------------------------------
        4743             : !BOC
        4744             :     TYPE(MyInst), POINTER          :: TmpInst
        4745             :     INTEGER                        :: nnInst
        4746             :
        4747             :     !=================================================================
        4748             :     ! InstCreate begins here!
        4749             :     !=================================================================
        4750             :
        4751             :     ! ----------------------------------------------------------------
        4752             :     ! Generic instance initialization
        4753             :     ! ----------------------------------------------------------------
        4754             :
        4755             :     ! Initialize
        4756           0 :     Inst => NULL()
        4757             :
        4758             :     ! Get number of already existing instances
        4759           0 :     TmpInst => AllInst
        4760           0 :     nnInst = 0
        4761           0 :     DO WHILE ( ASSOCIATED(TmpInst) )
        4762           0 :        nnInst  =  nnInst + 1
        4763           0 :        TmpInst => TmpInst%NextInst
        4764             :     END DO
        4765             :
        4766             :     ! Create new instance
        4767           0 :     ALLOCATE(Inst)
        4768           0 :     Inst%Instance = nnInst + 1
        4769           0 :     Inst%ExtNr    = ExtNr
        4770             :
        4771             :     ! Attach to instance list
        4772           0 :     Inst%NextInst => AllInst
        4773           0 :     AllInst       => Inst
        4774             :
        4775             :     ! Update output instance
        4776           0 :     Instance = Inst%Instance
        4777             :
        4778             :     ! ----------------------------------------------------------------
        4779             :     ! Type specific initialization statements follow below
        4780             :     ! ----------------------------------------------------------------
        4781             :
        4782             :     ! Return w/ success
        4783           0 :     RC = HCO_SUCCESS
        4784             :
        4785           0 :   END SUBROUTINE InstCreate
        4786             : !EOC
        4787             : !------------------------------------------------------------------------------
        4788             : !                   Harmonized Emissions Component (HEMCO)                    !
        4789             : !------------------------------------------------------------------------------
        4790             : !BOP
        4791             : !
        4792             : ! !IROUTINE: InstRemove
        4793             : !
        4794             : ! !DESCRIPTION: Subroutine InstRemove removes an instance from the list of
        4795             : ! instances.
        4796             : !\\
        4797             : !\\
        4798             : ! !INTERFACE:
        4799             : !
        4800           0 :   SUBROUTINE InstRemove ( Instance )
        4801             : !
        4802             : ! !INPUT PARAMETERS:
        4803             : !
        4804             :     INTEGER                     :: Instance
        4805             : !
        4806             : ! !REVISION HISTORY:
        4807             : !  18 Feb 2016 - C. Keller   - Initial version
        4808             : !  See https://github.com/geoschem/hemco for complete history
        4809             : !EOP
        4810             : !------------------------------------------------------------------------------
        4811             : !BOC
        4812             :     INTEGER                     :: RC
        4813             :     TYPE(MyInst), POINTER       :: PrevInst
        4814             :     TYPE(MyInst), POINTER       :: Inst
        4815             :
        4816             :     !=================================================================
        4817             :     ! InstRemove begins here!
        4818             :     !=================================================================
        4819             :
        4820             :     ! Get instance. Also archive previous instance.
        4821           0 :     PrevInst => NULL()
        4822           0 :     Inst     => NULL()
        4823           0 :     CALL InstGet ( Instance, Inst, RC, PrevInst=PrevInst )
        4824             :
        4825             :     ! Instance-specific deallocation
        4826           0 :     IF ( ASSOCIATED(Inst) ) THEN
        4827             :
        4828             :        !---------------------------------------------------------------------
        4829             :        ! Deallocate fields of Inst before popping off from the list
        4830             :        ! in order to avoid memory leaks (Bob Yantosca (17 Aug 2022)
        4831             :        !---------------------------------------------------------------------
        4832           0 :        IF ( ASSOCIATED( Inst%ARRAY_16 ) ) THEN
        4833           0 :           DEALLOCATE( Inst%ARRAY_16 )
        4834             :        ENDIF
        4835           0 :        Inst%ARRAY_16 => NULL()
        4836             :
        4837           0 :        IF ( ASSOCIATED( Inst%NORM_FAC ) ) THEN
        4838           0 :           DEALLOCATE( Inst%NORM_FAC )
        4839             :        ENDIF
        4840           0 :        Inst%NORM_FAC => NULL()
        4841             :
        4842           0 :        IF ( ASSOCIATED( Inst%AEF_ISOP ) ) THEN
        4843           0 :           DEALLOCATE( Inst%AEF_ISOP )
        4844             :        ENDIF
        4845           0 :        Inst%AEF_ISOP => NULL()
        4846             :
        4847           0 :        IF ( ASSOCIATED( Inst%AEF_MBOX ) ) THEN
        4848           0 :           DEALLOCATE( Inst%AEF_MBOX )
        4849             :        ENDIF
        4850           0 :        Inst%AEF_MBOX => NULL()
        4851             :
        4852           0 :        IF ( ASSOCIATED( Inst%AEF_BPIN ) ) THEN
        4853           0 :           DEALLOCATE( Inst%AEF_BPIN )
        4854             :        ENDIF
        4855           0 :        Inst%AEF_BPIN => NULL()
        4856             :
        4857           0 :        IF ( ASSOCIATED( Inst%AEF_CARE ) ) THEN
        4858           0 :           DEALLOCATE( Inst%AEF_CARE )
        4859             :        ENDIF
        4860           0 :        Inst%AEF_CARE => NULL()
        4861             :
        4862           0 :        IF ( ASSOCIATED( Inst%AEF_LIMO ) ) THEN
        4863           0 :           DEALLOCATE( Inst%AEF_LIMO )
        4864             :        ENDIF
        4865           0 :        Inst%AEF_LIMO => NULL()
        4866             :
        4867           0 :        IF ( ASSOCIATED( Inst%AEF_OCIM ) ) THEN
        4868           0 :           DEALLOCATE( Inst%AEF_OCIM )
        4869             :        ENDIF
        4870           0 :        Inst%AEF_OCIM => NULL()
        4871             :
        4872           0 :        IF ( ASSOCIATED( Inst%AEF_SABI ) ) THEN
        4873           0 :           DEALLOCATE( Inst%AEF_SABI )
        4874             :        ENDIF
        4875           0 :        Inst%AEF_SABI => NULL()
        4876             :
        4877           0 :        IF ( ASSOCIATED( Inst%AEF_APIN ) ) THEN
        4878           0 :           DEALLOCATE( Inst%AEF_APIN )
        4879             :        ENDIF
        4880           0 :        Inst%AEF_APIN => NULL()
        4881             :
        4882           0 :        IF ( ASSOCIATED( Inst%AEF_MYRC ) ) THEN
        4883           0 :           DEALLOCATE( Inst%AEF_MYRC )
        4884             :        ENDIF
        4885           0 :        Inst%AEF_MYRC => NULL()
        4886             :
        4887           0 :        IF ( ASSOCIATED( Inst%AEF_OMON ) ) THEN
        4888           0 :           DEALLOCATE( Inst%AEF_OMON )
        4889             :        ENDIF
        4890           0 :        Inst%AEF_OMON => NULL()
        4891             :
        4892           0 :        IF ( ASSOCIATED( Inst%AEF_ACET ) ) THEN
        4893           0 :           DEALLOCATE( Inst%AEF_ACET )
        4894             :        ENDIF
        4895           0 :        Inst%AEF_ACET => NULL()
        4896             :
        4897           0 :        IF ( ASSOCIATED( Inst%AEF_MOH  ) ) THEN
        4898           0 :           DEALLOCATE( Inst%AEF_MOH  )
        4899             :        ENDIF
        4900           0 :        Inst%AEF_MOH => NULL()
        4901             :
        4902           0 :        IF ( ASSOCIATED( Inst%AEF_EOH  ) ) THEN
        4903           0 :           DEALLOCATE( Inst%AEF_EOH  )
        4904             :        ENDIF
        4905           0 :        Inst%AEF_EOH  => NULL()
        4906             :
        4907           0 :        IF ( ASSOCIATED( Inst%AEF_CH2O ) ) THEN
        4908           0 :           DEALLOCATE( Inst%AEF_CH2O )
        4909             :        ENDIF
        4910           0 :        Inst%AEF_CH2O => NULL()
        4911             :
        4912           0 :        IF ( ASSOCIATED( Inst%AEF_ALD2 ) ) THEN
        4913           0 :           DEALLOCATE( Inst%AEF_ALD2 )
        4914             :        ENDIF
        4915           0 :        Inst%AEF_ALD2 => NULL()
        4916             :
        4917           0 :        IF ( ASSOCIATED( Inst%AEF_FAXX ) ) THEN
        4918           0 :           DEALLOCATE( Inst%AEF_FAXX )
        4919             :        ENDIF
        4920           0 :        Inst%AEF_FAXX => NULL()
        4921             :
        4922           0 :        IF ( ASSOCIATED( Inst%AEF_AAXX ) ) THEN
        4923           0 :           DEALLOCATE( Inst%AEF_AAXX )
        4924             :        ENDIF
        4925           0 :        Inst%AEF_AAXX => NULL()
        4926             :
        4927           0 :        IF ( ASSOCIATED( Inst%AEF_C2H4 ) ) THEN
        4928           0 :           DEALLOCATE( Inst%AEF_C2H4 )
        4929             :        ENDIF
        4930           0 :        Inst%AEF_C2H4 => NULL()
        4931             :
        4932           0 :        IF ( ASSOCIATED( Inst%AEF_TOLU ) ) THEN
        4933           0 :           DEALLOCATE( Inst%AEF_TOLU )
        4934             :        ENDIF
        4935           0 :        Inst%AEF_TOLU => NULL()
        4936             :
        4937           0 :        IF ( ASSOCIATED( Inst%AEF_HCNX ) ) THEN
        4938           0 :           DEALLOCATE( Inst%AEF_HCNX )
        4939             :        ENDIF
        4940           0 :        Inst%AEF_HCNX => NULL()
        4941             :
        4942           0 :        IF ( ASSOCIATED( Inst%AEF_PRPE ) ) THEN
        4943           0 :           DEALLOCATE( Inst%AEF_PRPE )
        4944             :        ENDIF
        4945           0 :        Inst%AEF_PRPE => NULL()
        4946             :
        4947           0 :        IF ( ASSOCIATED( Inst%AEF_FARN ) ) THEN
        4948           0 :           DEALLOCATE( Inst%AEF_FARN )
        4949             :        ENDIF
        4950           0 :        Inst%AEF_FARN => NULL()
        4951             :
        4952           0 :        IF ( ASSOCIATED( Inst%AEF_BCAR ) ) THEN
        4953           0 :           DEALLOCATE( Inst%AEF_BCAR )
        4954             :        ENDIF
        4955           0 :        Inst%AEF_BCAR => NULL()
        4956             :
        4957           0 :        IF ( ASSOCIATED( Inst%AEF_OSQT ) ) THEN
        4958           0 :           DEALLOCATE( Inst%AEF_OSQT )
        4959             :        ENDIF
        4960           0 :        Inst%AEF_OSQT => NULL()
        4961             :
        4962           0 :        IF ( ASSOCIATED( Inst%FLUXISOP ) ) THEN
        4963           0 :           DEALLOCATE( Inst%FLUXISOP )
        4964             :        ENDIF
        4965           0 :        Inst%FLUXISOP => NULL()
        4966             :
        4967           0 :        IF ( ASSOCIATED( Inst%FLUXMONO ) ) THEN
        4968           0 :           DEALLOCATE( Inst%FLUXMONO )
        4969             :        ENDIF
        4970           0 :        Inst%FLUXMONO => NULL()
        4971             :
        4972           0 :        IF ( ASSOCIATED( Inst%FLUXACET ) ) THEN
        4973           0 :           DEALLOCATE( Inst%FLUXACET )
        4974             :        ENDIF
        4975           0 :        Inst%FLUXACET => NULL()
        4976             :
        4977           0 :        IF ( ASSOCIATED( Inst%FLUXACETmb ) ) THEN
        4978           0 :           DEALLOCATE( Inst%FLUXACETmb )
        4979             :        ENDIF
        4980           0 :        Inst%FLUXACETmb => NULL()
        4981             :
        4982           0 :        IF ( ASSOCIATED( Inst%FLUXACETbg ) ) THEN
        4983           0 :           DEALLOCATE( Inst%FLUXACETbg )
        4984             :        ENDIF
        4985           0 :        Inst%FLUXACETbg => NULL()
        4986             :
        4987           0 :        IF ( ASSOCIATED( Inst%FLUXPRPE ) ) THEN
        4988           0 :           DEALLOCATE( Inst%FLUXPRPE )
        4989             :        ENDIF
        4990           0 :        Inst%FLUXPRPE => NULL()
        4991             :
        4992           0 :        IF ( ASSOCIATED( Inst%FLUXC2H4 ) ) THEN
        4993           0 :           DEALLOCATE( Inst%FLUXC2H4 )
        4994             :        ENDIF
        4995           0 :        Inst%FLUXC2H4 => NULL()
        4996             :
        4997           0 :        IF ( ASSOCIATED( Inst%FLUXLIMO ) ) THEN
        4998           0 :           DEALLOCATE( Inst%FLUXLIMO )
        4999             :        ENDIF
        5000           0 :        Inst%FLUXLIMO => NULL()
        5001             :
        5002           0 :        IF ( ASSOCIATED( Inst%FLUXMTPA ) ) THEN
        5003           0 :           DEALLOCATE( Inst%FLUXMTPA )
        5004             :        ENDIF
        5005           0 :        Inst%FLUXMTPA => NULL()
        5006             :
        5007           0 :        IF ( ASSOCIATED( Inst%FLUXMTPO ) ) THEN
        5008           0 :           DEALLOCATE( Inst%FLUXMTPO )
        5009             :        ENDIF
        5010           0 :        Inst%FLUXMTPO => NULL()
        5011             :
        5012           0 :        IF ( ASSOCIATED( Inst%FLUXSESQ ) ) THEN
        5013           0 :           DEALLOCATE( Inst%FLUXSESQ )
        5014             :        ENDIF
        5015           0 :        Inst%FLUXSESQ => NULL()
        5016             :
        5017           0 :        IF ( ASSOCIATED( Inst%FLUXSOAP ) ) THEN
        5018           0 :           DEALLOCATE( Inst%FLUXSOAP )
        5019             :        ENDIF
        5020           0 :        Inst%FLUXSOAP => NULL()
        5021             :
        5022           0 :        IF ( ASSOCIATED( Inst%FLUXSOAS ) ) THEN
        5023           0 :           DEALLOCATE( Inst%FLUXSOAS )
        5024             :        ENDIF
        5025           0 :        Inst%FLUXSOAS => NULL()
        5026             :
        5027           0 :        IF ( ASSOCIATED( Inst%FLUXALD2 ) ) THEN
        5028           0 :           DEALLOCATE( Inst%FLUXALD2 )
        5029             :        ENDIF
        5030           0 :        Inst%FLUXALD2 => NULL()
        5031             :
        5032           0 :        IF ( ASSOCIATED( Inst%FLUXMOH ) ) THEN
        5033           0 :           DEALLOCATE( Inst%FLUXMOH )
        5034             :        ENDIF
        5035           0 :        Inst%FLUXMOH => NULL()
        5036             :
        5037           0 :        IF ( ASSOCIATED( Inst%FLUXEOH ) ) THEN
        5038           0 :           DEALLOCATE( Inst%FLUXEOH )
        5039             :        ENDIF
        5040           0 :        Inst%FLUXEOH => NULL()
        5041             :
        5042           0 :        IF ( ASSOCIATED( Inst%FLUXAPIN ) ) THEN
        5043           0 :           DEALLOCATE( Inst%FLUXAPIN )
        5044             :        ENDIF
        5045           0 :        Inst%FLUXAPIN => NULL()
        5046             :
        5047           0 :        IF ( ASSOCIATED( Inst%FLUXBPIN ) ) THEN
        5048           0 :           DEALLOCATE( Inst%FLUXBPIN )
        5049             :        ENDIF
        5050           0 :        Inst%FLUXBPIN => NULL()
        5051             :
        5052           0 :        IF ( ASSOCIATED( Inst%FLUXSABI ) ) THEN
        5053           0 :           DEALLOCATE( Inst%FLUXSABI )
        5054             :        ENDIF
        5055           0 :        Inst%FLUXSABI => NULL()
        5056             :
        5057           0 :        IF ( ASSOCIATED( Inst%FLUXMYRC ) ) THEN
        5058           0 :           DEALLOCATE( Inst%FLUXMYRC )
        5059             :        ENDIF
        5060           0 :        Inst%FLUXMYRC => NULL()
        5061             :
        5062           0 :        IF ( ASSOCIATED( Inst%FLUXCARE ) ) THEN
        5063           0 :           DEALLOCATE( Inst%FLUXCARE )
        5064             :        ENDIF
        5065           0 :        Inst%FLUXCARE => NULL()
        5066             :
        5067           0 :        IF ( ASSOCIATED( Inst%FLUXOCIM ) ) THEN
        5068           0 :           DEALLOCATE( Inst%FLUXOCIM )
        5069             :        ENDIF
        5070           0 :        Inst%FLUXOCIM => NULL()
        5071             :
        5072           0 :        IF ( ASSOCIATED( Inst%FLUXOMON ) ) THEN
        5073           0 :           DEALLOCATE( Inst%FLUXOMON )
        5074             :        ENDIF
        5075           0 :        Inst%FLUXOMON => NULL()
        5076             :
        5077           0 :        IF ( ASSOCIATED( Inst%FLUXMBOX ) ) THEN
        5078           0 :           DEALLOCATE( Inst%FLUXMBOX )
        5079             :        ENDIF
        5080           0 :        Inst%FLUXMBOX => NULL()
        5081             :
        5082           0 :        IF ( ASSOCIATED( Inst%FLUXFAXX ) ) THEN
        5083           0 :           DEALLOCATE( Inst%FLUXFAXX )
        5084             :        ENDIF
        5085           0 :        Inst%FLUXFAXX => NULL()
        5086             :
        5087           0 :        IF ( ASSOCIATED( Inst%FLUXAAXX ) ) THEN
        5088           0 :           DEALLOCATE( Inst%FLUXAAXX )
        5089             :        ENDIF
        5090           0 :        Inst%FLUXAAXX => NULL()
        5091             :
        5092           0 :        IF ( ASSOCIATED( Inst%FLUXFARN ) ) THEN
        5093           0 :           DEALLOCATE( Inst%FLUXFARN )
        5094             :        ENDIF
        5095           0 :        Inst%FLUXFARN => NULL()
        5096             :
        5097           0 :        IF ( ASSOCIATED( Inst%FLUXBCAR ) ) THEN
        5098           0 :           DEALLOCATE( Inst%FLUXBCAR )
        5099             :        ENDIF
        5100           0 :        Inst%FLUXBCAR => NULL()
        5101             :
        5102           0 :        IF ( ASSOCIATED( Inst%FLUXOSQT ) ) THEN
        5103           0 :           DEALLOCATE( Inst%FLUXOSQT )
        5104             :        ENDIF
        5105           0 :        Inst%FLUXOSQT => NULL()
        5106             :
        5107           0 :        IF ( ASSOCIATED( Inst%LAI_PREVDAY ) ) THEN
        5108           0 :           DEALLOCATE( Inst%LAI_PREVDAY )
        5109             :        ENDIF
        5110           0 :        Inst%LAI_PREVDAY => NULL()
        5111             :
        5112           0 :        IF ( ASSOCIATED( Inst%T_LASTXDAYS ) ) THEN
        5113           0 :           DEALLOCATE( Inst%T_LASTXDAYS )
        5114             :        ENDIF
        5115           0 :        Inst%T_LASTXDAYS => NULL()
        5116             :
        5117           0 :        IF ( ASSOCIATED( Inst%T_LAST24H ) ) THEN
        5118           0 :           DEALLOCATE( Inst%T_LAST24H )
        5119             :        ENDIF
        5120           0 :        Inst%T_LAST24H => NULL()
        5121             :
        5122           0 :        IF ( ASSOCIATED( Inst%PARDF_LASTXDAYS ) ) THEN
        5123           0 :           DEALLOCATE( Inst%PARDF_LASTXDAYS )
        5124             :        ENDIF
        5125           0 :        Inst%PARDF_LASTXDAYS => NULL()
        5126             :
        5127           0 :        IF ( ASSOCIATED( Inst%PARDR_LASTXDAYS ) ) THEN
        5128           0 :           DEALLOCATE( Inst%PARDR_LASTXDAYS )
        5129             :        ENDIF
        5130           0 :        Inst%PARDR_LASTXDAYS => NULL()
        5131             :
        5132             :        !---------------------------------------------------------------------
        5133             :        ! Pop off instance from list
        5134             :        !---------------------------------------------------------------------
        5135           0 :        IF ( ASSOCIATED(PrevInst) ) THEN
        5136           0 :           PrevInst%NextInst => Inst%NextInst
        5137             :        ELSE
        5138           0 :           AllInst => Inst%NextInst
        5139             :        ENDIF
        5140           0 :        DEALLOCATE(Inst)
        5141             :     ENDIF
        5142             :
        5143             :     ! Free pointers before exiting
        5144           0 :     PrevInst => NULL()
        5145           0 :     Inst     => NULL()
        5146             :
        5147           0 :   END SUBROUTINE InstRemove
        5148             : !EOC
        5149           0 : END MODULE HCOX_MEGAN_MOD

Generated by: LCOV version 1.14