LCOV - code coverage report
Current view: top level - hemco/HEMCO/src/Extensions - hcox_iodine_mod.F90 (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 168 0.0 %
Date: 2025-03-13 18:42:46 Functions: 0 8 0.0 %

          Line data    Source code
       1             : !------------------------------------------------------------------------------
       2             : !                   Harmonized Emissions Component (HEMCO)                    !
       3             : !------------------------------------------------------------------------------
       4             : !BOP
       5             : !
       6             : ! !MODULE: hcox_Iodine_mod.F90
       7             : !
       8             : ! !DESCRIPTION: Module HCOX\_Iodine\_Mod contains routines to calculate
       9             : ! oceanic iodine emissions (HOI and I2), following carpenter et al. (2014).
      10             : ! The emission is parameterised herein using online feilds for O3, 10 metre
      11             : ! wind speed, and ocean surface iodide concentration (parameterised from
      12             : ! STT following Chance et al (2014)).
      13             : !\\
      14             : !\\
      15             : ! This is a HEMCO extension module that uses many of the HEMCO core
      16             : ! utilities.
      17             : !\\
      18             : !\\
      19             : ! !INTERFACE:
      20             : !
      21             : MODULE HCOX_Iodine_Mod
      22             : !
      23             : ! !USES:
      24             : !
      25             :   USE HCO_Error_Mod
      26             :   USE HCO_Diagn_Mod
      27             :   USE HCO_State_Mod,  ONLY : HCO_State
      28             :   USE HCOX_State_Mod, ONLY : Ext_State
      29             : 
      30             :   IMPLICIT NONE
      31             :   PRIVATE
      32             : !
      33             : ! !PUBLIC MEMBER FUNCTIONS:
      34             : !
      35             :   PUBLIC :: HCOX_Iodine_Init
      36             :   PUBLIC :: HCOX_Iodine_Run
      37             :   PUBLIC :: HCOX_Iodine_Final
      38             : !
      39             : ! !PRIVATE MEMBER FUNCTIONS:
      40             : !
      41             : ! N/A
      42             : !
      43             : ! !REVISION HISTORY:
      44             : !  15 Mar 2013 - T. Sherwen - Initial implementation (v9-3-01)
      45             : !  See https://github.com/geoschem/hemco for complete history
      46             : !EOP
      47             : !------------------------------------------------------------------------------
      48             : !
      49             : ! !PRIVATE TYPES:
      50             : !
      51             :   TYPE :: MyInst
      52             :    ! Tracer IDs
      53             :    INTEGER                :: Instance
      54             :    INTEGER                :: ExtNr
      55             :    INTEGER                :: IDTI2            ! I2 model species ID
      56             :    INTEGER                :: IDTHOI           ! HOI model species ID
      57             :    LOGICAL                :: CalcI2           ! Calculate I2 oceanic emissions?
      58             :    LOGICAL                :: CalcHOI          ! Calculate HOI oceanic emissions?
      59             :    TYPE(MyInst), POINTER  :: NextInst => NULL()
      60             :   END TYPE MyInst
      61             : 
      62             :   ! Pointer to instances
      63             :   TYPE(MyInst), POINTER   :: AllInst => NULL()
      64             : !
      65             : ! !DEFINED PARAMETERS:
      66             : !
      67             :    ! Molecular weight of I2 [kg/mol]
      68             :    REAL*8,  PARAMETER   :: MWT_I2 = 2.54d-1
      69             :    ! Molecular weight of HOI [kg/mol]
      70             :    REAL*8,  PARAMETER   :: MWT_HOI = 1.44d-1
      71             : 
      72             : CONTAINS
      73             : !EOC
      74             : !-------------------------------------------------------------------------------
      75             : !                   Harmonized Emissions Component (HEMCO)                    !
      76             : !------------------------------------------------------------------------------
      77             : !BOP
      78             : !
      79             : ! !IROUTINE: HCOX_Iodine_Run
      80             : !
      81             : ! !DESCRIPTION: Subroutine HcoX\_Iodine\_Run is the driver run routine to
      82             : ! calculate ocean inorganic iodine emissions in HEMCO.
      83             : !\\
      84             : !\\
      85             : ! !INTERFACE:
      86             : !
      87           0 :   SUBROUTINE HCOX_Iodine_Run( ExtState, HcoState, RC )
      88             : !
      89             : ! !USES:
      90             : !
      91             :     USE HCO_FluxArr_Mod,      ONLY : HCO_EmisAdd
      92             :     USE HCO_GeoTools_Mod,     ONLY : HCO_LANDTYPE
      93             : !
      94             : ! !INPUT PARAMETERS:
      95             : !
      96             :     TYPE(HCO_State), POINTER       :: HcoState   ! Output obj
      97             :     TYPE(Ext_State), POINTER       :: ExtState   ! Module options
      98             : !
      99             : ! !INPUT/OUTPUT PARAMETERS:
     100             : !
     101             :     INTEGER,         INTENT(INOUT) :: RC         ! Success or failure?
     102             : !
     103             : ! !REMARKS:
     104             : !  References:
     105             : !  ============================================================================
     106             : !  (1) Carpenter et al. 2013, https://doi.org/10.1038/ngeo1687
     107             : !  (2) Chance et al. 2014, https://doi.org/10.1039/c4em00139g
     108             : !  (3) Macdonal et al. 2014, https://doi.org/10.5194/acp-14-5841-2014
     109             : !  (4) Sherwen et al. 2016a, https://doi.org/10.5194/acp-16-1161-2016
     110             : !  (5) Sherwen et al. 2016b, https://doi.org/10.5194/acp-16-12239-2016
     111             : !
     112             : ! !REVISION HISTORY:
     113             : !  15 Mar 2013 - T. Sherwen - Initial implementation (v9-3-01)
     114             : !  See https://github.com/geoschem/hemco for complete history
     115             : !EOP
     116             : !------------------------------------------------------------------------------
     117             : !BOC
     118             : !
     119             : ! !LOCAL VARIABLES:
     120             : !
     121             :     INTEGER               :: I, J
     122             :     REAL*8                :: EMIS_HOI
     123             :     REAL*8                :: EMIS_I2, IODIDE, O3_CONC
     124             :     REAL*8                :: SST
     125             :     REAL*8                :: A_M2
     126             :     REAL*8                :: W10M
     127           0 :     REAL(hp),     TARGET  :: FLUXHOI(HcoState%NX,HcoState%NY)
     128           0 :     REAL(hp),     TARGET  :: FLUXI2(HcoState%NX,HcoState%NY)
     129             :     TYPE(MyInst), POINTER :: Inst
     130             : 
     131             :     ! Error handling
     132             :     LOGICAL               :: ERR
     133             :     CHARACTER(LEN=255)    :: MSG, LOC
     134             : 
     135             :     !=================================================================
     136             :     ! HCOX_Iodine_Run begins here!
     137             :     !=================================================================
     138           0 :     LOC = 'HCOX_Iodine_Run (HCOX_IODINE_MOD.F90)'
     139             : 
     140             :     ! Return if extension disabled
     141           0 :     IF ( ExtState%Inorg_Iodine <= 0 ) RETURN
     142             : 
     143             :     ! Enter
     144           0 :     CALL HCO_ENTER ( HcoState%Config%Err, LOC, RC )
     145           0 :     IF ( RC /= HCO_SUCCESS ) THEN
     146           0 :         CALL HCO_ERROR( 'ERROR 0', RC, THISLOC=LOC )
     147           0 :         RETURN
     148             :     ENDIF
     149             : 
     150             :     ! Exit status
     151           0 :     ERR = .FALSE.
     152             : 
     153             :     ! Get instance
     154           0 :     Inst   => NULL()
     155           0 :     CALL InstGet ( ExtState%Inorg_Iodine, Inst, RC )
     156           0 :     IF ( RC /= HCO_SUCCESS ) THEN
     157           0 :        WRITE(MSG,*) 'Cannot find iodine instance Nr. ', ExtState%Inorg_Iodine
     158           0 :        CALL HCO_ERROR(MSG,RC)
     159           0 :        RETURN
     160             :     ENDIF
     161             : 
     162             :     ! Initialize flux arrays/variables
     163           0 :     FLUXHOI  = 0.0_hp
     164           0 :     FLUXI2   = 0.0_hp
     165             : 
     166             :     !------------------------------------------------------------------------
     167             :     ! Compute emissions
     168             :     !------------------------------------------------------------------------
     169             :     !$OMP PARALLEL DO                                                        &
     170             :     !$OMP DEFAULT( SHARED                                                   )&
     171             :     !$OMP PRIVATE( I,      J,       A_M2,    W10M,     SST                  )&
     172             :     !$OMP PRIVATE( IODIDE, O3_CONC, EMIS_I2, EMIS_HOI                       )&
     173             :     !$OMP COLLAPSE( 2                                                       )&
     174             :     !$OMP SCHEDULE( DYNAMIC, 4                                              )
     175           0 :     DO J = 1, HcoState%NY
     176           0 :     DO I = 1, HcoState%NX
     177             : 
     178             :        ! Zero private variables for safety's sake
     179           0 :        A_M2     = 0.0d0
     180           0 :        EMIS_HOI = 0.0d0
     181           0 :        EMIS_I2  = 0.0d0
     182           0 :        IODIDE   = 0.0d0
     183           0 :        O3_CONC  = 0.0d0
     184           0 :        SST      = 0.0d0
     185           0 :        W10M     = 0.0d0
     186             : 
     187             :        ! Advance to next grid box if box is not over ocean
     188           0 :        IF ( HCO_LANDTYPE( ExtState%FRLAND%Arr%Val(I,J),   &
     189           0 :                           ExtState%FRLANDIC%Arr%Val(I,J), &
     190           0 :                           ExtState%FROCEAN%Arr%Val(I,J),  &
     191           0 :                           ExtState%FRSEAICE%Arr%Val(I,J), &
     192           0 :                           ExtState%FRLAKE%Arr%Val(I,J) ) /= 0 ) CYCLE
     193             : 
     194             :        ! Grid box surface area on simulation grid [m2]
     195           0 :        A_M2 = HcoState%Grid%AREA_M2%Val( I, J )
     196             : 
     197             :        ! Wind speed at 10 m altitude [m/s]
     198           0 :        W10M = SQRT( ExtState%U10M%Arr%Val(I,J)**2                            &
     199           0 :                   + ExtState%V10M%Arr%Val(I,J)**2                           )
     200             : 
     201             :        ! limit W10M to a minimium of 5 m/s to avoid overestimation of fluxes
     202             :        ! from CARPENTER et al. (2013) (per. comm.)
     203           0 :        IF ( W10M .LE. 5.0d0  ) W10M = 5.0d0
     204             : 
     205             : !%%% Comment out unused code (bmy, 09 Mar 2022)
     206             : !%%%!       ! Sea surface temperature in Celcius
     207             : !%%%!       SST = ExtState%TSKIN%Arr%Val(I,J) - 273.15d0
     208             : 
     209             :        ! Sea surface temperature in Kelvin
     210           0 :        SST = ExtState%TSKIN%Arr%Val(I,J)
     211             : 
     212             : !%%%% Comment out unused code (bmy, 09 Mar 2022)
     213             : !%%%#if defined( MODEL_GEOS )
     214             : !%%%!       ! Empirical SST scaling factor (jaegle 5/11/11)
     215             : !%%%!       SCALE = 0.329d0 + 0.0904d0*SST - &
     216             : !%%%!               0.00717d0*SST**2d0 + 0.000207d0*SST**3d0
     217             : !%%%#endif
     218             : !%%%!
     219             : !%%%!       ! SST dependence of iodide - Chance et al. 2014
     220             : !%%%!       IODIDE = ( (0.225d0 * ( (SST)**2d0) )  + 19d0 )  / 1d9
     221             : 
     222             :        ! SST dependence of iodide - Macdonald et al. 2014
     223           0 :        IODIDE = 1.46d6 * EXP( (-9134d0/SST) )
     224             : 
     225             :        ! Get O3 concentration at the surface ( in mol/mol )
     226             :        ! ExtState%O3 is in units of kg/kg dry air
     227           0 :        O3_CONC = ExtState%O3%Arr%Val(I,J,1)                                  &
     228             :                * HcoState%Phys%AIRMW / 48.0_dp                               &
     229           0 :                * 1.0e9_dp
     230             : 
     231             : !%%% Comment out unused code (bmy, 09 Mar 2022)
     232             : !%%%#if defined( MODEL_GEOS )
     233             : !%%%       ! Reset to using original Gong (2003) emissions (jaegle 6/30/11)
     234             : !%%%       !SCALE = 1.0d0
     235             : !%%%
     236             : !%%%       ! Eventually apply wind scaling factor.
     237             : !%%%!       SCALE = SCALE * WindScale
     238             : !%%%#endif
     239             : 
     240             :        !---------------------------------------------------------------------
     241             :        ! If I2 & emitting, use parameterisation from
     242             :        ! Carpenter et al (2013) to give emissions in nmol m-2 d-1.
     243             :        ! Then convert this to kg/m2/s
     244             :        !---------------------------------------------------------------------
     245           0 :        IF ( Inst%CalcI2 ) THEN
     246             :            EMIS_I2 = ( O3_CONC * (IODIDE**1.3d0) *                           &
     247             :                ( ( 1.74d9 - ( 6.54d8*LOG( W10M ) )   ) )/                    &
     248           0 :                      24d0/60d0/60d0/1d9*MWT_I2 )
     249             : 
     250             :           ! If parametsation results in negative ( W10 too high )
     251             :           ! flux set to zero
     252           0 :           IF ( EMIS_I2 .LT. 0.0d0 ) EMIS_I2 = 0.0d0
     253             : 
     254             :           ! store I2 flux in tendency array in [kg/m2/s]
     255           0 :           FLUXI2(I,J) = EMIS_I2
     256             : 
     257             :        ENDIF
     258             : 
     259             :        !---------------------------------------------------------------------
     260             :        ! If HOI & emitting, use parameterisation from
     261             :        ! Carpenter et al (2013) to give emissions in nmol m-2 d-1.
     262             :        ! Then convert this to kg/m2/s
     263             :        !---------------------------------------------------------------------
     264           0 :        IF ( Inst%CalcHOI ) THEN
     265             : 
     266             :           EMIS_HOI =  O3_CONC *                                              &
     267             :              ( ( 4.15d5 * ( SQRT(IODIDE)/ W10M ) ) -                         &
     268             :              ( 20.6 / W10M ) - ( 2.36d4  * SQRT(IODIDE) ) ) /                &
     269           0 :                       24d0/60d0/60d0/1d9*MWT_HOI
     270             : 
     271             :           ! If parametsation results in negative ( W10 too high )
     272             :           ! flux set to zero
     273           0 :           IF ( EMIS_HOI .LT. 0.0d0 ) EMIS_HOI = 0.0d0
     274             : 
     275             :           ! Store HOI flux in tendency array in [kg/m2/s]
     276           0 :           FLUXHOI(I,J) = EMIS_HOI
     277             :        ENDIF
     278             : 
     279             :     ENDDO !I
     280             :     ENDDO !J
     281             :     !$OMP END PARALLEL DO
     282             : 
     283             :     ! Check exit status
     284             :     IF ( ERR ) THEN
     285             :        RC = HCO_FAIL
     286             :        RETURN
     287             :     ENDIF
     288             : 
     289             :     !=================================================================
     290             :     ! PASS TO HEMCO STATE AND UPDATE DIAGNOSTICS
     291             :     !=================================================================
     292             : 
     293             :     ! HOI
     294           0 :     IF ( Inst%CalcHOI ) THEN
     295             : 
     296             :        ! Add flux to emission array
     297             :        CALL HCO_EmisAdd( HcoState, FLUXHOI, Inst%IDTHOI, &
     298           0 :                          RC,       ExtNr=Inst%ExtNr )
     299           0 :        IF ( RC /= HCO_SUCCESS ) THEN
     300           0 :           CALL HCO_ERROR( 'HCO_EmisAdd error: FLUXHOI', RC )
     301           0 :           RETURN
     302             :        ENDIF
     303             : 
     304             :     ENDIF
     305             : 
     306             :     ! I2
     307           0 :     IF ( Inst%CalcI2 ) THEN
     308             : 
     309             :        ! Add flux to emission array
     310             :        CALL HCO_EmisAdd( HcoState, FLUXI2, Inst%IDTI2, &
     311           0 :                          RC,       ExtNr=Inst%ExtNr )
     312           0 :        IF ( RC /= HCO_SUCCESS ) THEN
     313           0 :           CALL HCO_ERROR( 'HCO_EmisAdd error: FLUXI2', RC )
     314           0 :           RETURN
     315             :        ENDIF
     316             : 
     317             :     ENDIF
     318             : 
     319             :     ! Cleanup
     320           0 :     Inst => NULL()
     321             : 
     322             :     ! Leave w/ success
     323           0 :     CALL HCO_LEAVE ( HcoState%Config%Err, RC )
     324             : 
     325             :   END SUBROUTINE HCOX_Iodine_Run
     326             : 
     327             : !EOC
     328             : !------------------------------------------------------------------------------
     329             : !                   Harmonized Emissions Component (HEMCO)                    !
     330             : !------------------------------------------------------------------------------
     331             : !BOP
     332             : !
     333             : ! !IROUTINE: HCOX_Iodine_Init
     334             : !
     335             : ! !DESCRIPTION: Subroutine HcoX\_Iodine\_Init initializes all
     336             : !  extension variables.
     337             : !\\
     338             : !\\
     339             : ! !INTERFACE:
     340             : !
     341           0 :   SUBROUTINE HCOX_Iodine_Init( HcoState, ExtName, ExtState, RC )
     342             : !
     343             : ! !USES:
     344             : !
     345             :     USE HCO_State_Mod,          ONLY : HCO_GetHcoID
     346             :     USE HCO_STATE_MOD,          ONLY : HCO_GetExtHcoID
     347             :     USE HCO_ExtList_Mod,        ONLY : GetExtNr
     348             :     USE HCO_ExtList_Mod,        ONLY : GetExtOpt
     349             : !
     350             : ! !INPUT PARAMETERS:
     351             : !
     352             :     TYPE(HCO_State),  POINTER        :: HcoState    ! HEMCO state object
     353             :     CHARACTER(LEN=*), INTENT(IN   )  :: ExtName     ! Extension name
     354             :     TYPE(Ext_State),  POINTER        :: ExtState    ! Options object
     355             : !
     356             : ! !INPUT/OUTPUT PARAMETERS:
     357             : !
     358             :     INTEGER,          INTENT(INOUT)  :: RC          ! Return status
     359             : !
     360             : ! !REVISION HISTORY:
     361             : !  15 Mar 2013 - T. Sherwen - Initial implementation (v9-3-01)
     362             : !  See https://github.com/geoschem/hemco for complete history
     363             : !EOP
     364             : !------------------------------------------------------------------------------
     365             : !BOC
     366             : !
     367             : ! !LOCAL VARIABLES:
     368             : !
     369             :     INTEGER                        :: ExtNr, N, R, AS
     370             :     CHARACTER(LEN=255)             :: MSG, LOC
     371             :     INTEGER                        :: nSpc, minLen
     372             :     LOGICAL                        :: FOUND
     373           0 :     INTEGER, ALLOCATABLE           :: HcoIDs(:)
     374           0 :     CHARACTER(LEN=31), ALLOCATABLE :: SpcNames(:)
     375             :     TYPE(MyInst), POINTER          :: Inst
     376             : 
     377             :     !=================================================================
     378             :     ! HCOX_Iodine_Init begins here!
     379             :     !=================================================================
     380           0 :     LOC = 'HCOX_Iodine_Init (HCOX_IODINE_MOD.F90)'
     381             : 
     382             :     ! Extension Nr.
     383           0 :     ExtNr = GetExtNr( HcoState%Config%ExtList, TRIM(ExtName) )
     384           0 :     IF ( ExtNr <= 0 ) RETURN
     385             : 
     386             :     ! Enter
     387           0 :     CALL HCO_ENTER ( HcoState%Config%Err, LOC, RC )
     388           0 :     IF ( RC /= HCO_SUCCESS ) THEN
     389           0 :         CALL HCO_ERROR( 'ERROR 1', RC, THISLOC=LOC )
     390           0 :         RETURN
     391             :     ENDIF
     392             : 
     393             :     ! Init
     394           0 :     Inst => NULL()
     395             : 
     396             :     ! Create Instance
     397           0 :     CALL InstCreate ( ExtNr, ExtState%Inorg_Iodine, Inst, RC )
     398           0 :     IF ( RC /= HCO_SUCCESS ) THEN
     399           0 :        CALL HCO_ERROR ( 'Cannot create InorgIodine instance', RC )
     400           0 :        RETURN
     401             :     ENDIF
     402             : 
     403             :     ! ----------------------------------------------------------------------
     404             :     ! Get species IDs and settings
     405             :     ! ----------------------------------------------------------------------
     406             : 
     407             :     ! Read settings specified in configuration file
     408             :     ! Note: the specified strings have to match those in
     409             :     !       the config. file!
     410             :     CALL GetExtOpt ( HcoState%Config, Inst%ExtNr, 'Emit I2',  &
     411           0 :                      OptValBool=Inst%CalcI2, RC=RC )
     412           0 :     IF ( RC /= HCO_SUCCESS ) THEN
     413           0 :         CALL HCO_ERROR( 'ERROR 2', RC, THISLOC=LOC )
     414           0 :         RETURN
     415             :     ENDIF
     416             : 
     417             :     CALL GetExtOpt ( HcoState%Config, Inst%ExtNr, 'Emit HOI', &
     418           0 :                      OptValBool=Inst%CalcHOI, RC=RC )
     419           0 :     IF ( RC /= HCO_SUCCESS ) THEN
     420           0 :         CALL HCO_ERROR( 'ERROR 3', RC, THISLOC=LOC )
     421           0 :         RETURN
     422             :     ENDIF
     423             : 
     424             :     ! Set minimum length and update if CalcI2/CalcHOI==True
     425           0 :     minLen = 0
     426           0 :     IF ( Inst%CalcI2 ) THEN
     427           0 :        minLen = minLen +1
     428             :     ENDIF
     429           0 :     IF ( Inst%CalcHOI ) THEN
     430           0 :        minLen = minLen +1
     431             :     ENDIF
     432             :     ! Get HEMCO species IDs
     433           0 :     CALL HCO_GetExtHcoID( HcoState, Inst%ExtNr, HcoIDs, SpcNames, nSpc, RC )
     434           0 :     IF ( RC /= HCO_SUCCESS ) THEN
     435           0 :         CALL HCO_ERROR( 'ERROR 4', RC, THISLOC=LOC )
     436           0 :         RETURN
     437             :     ENDIF
     438           0 :     IF ( nSpc < minLen ) THEN
     439           0 :        MSG = 'Not enough iodine emission species set'
     440           0 :        CALL HCO_ERROR ( MSG, RC )
     441           0 :        RETURN
     442             :     ENDIF
     443             : 
     444           0 :     Inst%IDTHOI = HcoIDs(1)
     445           0 :     Inst%IDTI2 = HcoIDs(2)
     446             : 
     447             :     ! Final I2/HOI flag
     448           0 :     Inst%CalcI2 = ( Inst%CalcI2 .AND. Inst%IDTI2 > 0 )
     449           0 :     Inst%CalcHOI = ( Inst%CalcHOI .AND. Inst%IDTHOI > 0 )
     450             : 
     451             :     ! Verbose mode
     452           0 :     IF ( HcoState%amIRoot ) THEN
     453           0 :        MSG = 'Use inorganic iodine emissions (extension module)'
     454           0 :        CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='-')
     455             : 
     456           0 :        IF ( Inst%CalcHOI ) THEN
     457           0 :           WRITE(MSG,*) 'HOI: ', TRIM(SpcNames(1)), Inst%IDTHOI
     458           0 :           CALL HCO_MSG(HcoState%Config%Err,MSG)
     459             :        ENDIF
     460             : 
     461           0 :        IF ( Inst%CalcI2 ) THEN
     462           0 :           WRITE(MSG,*) 'I2: ', TRIM(SpcNames(2)), Inst%IDTI2
     463           0 :           CALL HCO_MSG(HcoState%Config%Err,MSG)
     464             :        ENDIF
     465             :     ENDIF
     466             : 
     467             :     !=======================================================================
     468             :     ! Activate this module and the fields of ExtState that it uses
     469             :     !=======================================================================
     470             : 
     471             :     ! Activate met fields used by this module
     472           0 :     ExtState%FRLAND%DoUse   = .TRUE.
     473           0 :     ExtState%FRLANDIC%DoUse = .TRUE.
     474           0 :     ExtState%FROCEAN%DoUse  = .TRUE.
     475           0 :     ExtState%FRSEAICE%DoUse = .TRUE.
     476           0 :     ExtState%FRLAKE%DoUse   = .TRUE.
     477           0 :     ExtState%TSKIN%DoUse    = .TRUE.
     478           0 :     ExtState%U10M%DoUse     = .TRUE.
     479           0 :     ExtState%V10M%DoUse     = .TRUE.
     480           0 :     ExtState%O3%DoUse       = .TRUE.
     481           0 :     ExtState%AIR%DoUse      = .TRUE.
     482             : 
     483             :     ! Enable module
     484             :     !ExtState%Inorg_Iodine = .TRUE.
     485             : 
     486             :     ! Return w/ success
     487           0 :     Inst => NULL()
     488           0 :     IF ( ALLOCATED(HcoIDs  ) ) DEALLOCATE(HcoIDs  )
     489           0 :     IF ( ALLOCATED(SpcNames) ) DEALLOCATE(SpcNames)
     490           0 :     CALL HCO_LEAVE ( HcoState%Config%Err, RC )
     491             : 
     492           0 :   END SUBROUTINE HCOX_Iodine_Init
     493             : 
     494             : !EOC
     495             : !------------------------------------------------------------------------------
     496             : !                   Harmonized Emissions Component (HEMCO)                    !
     497             : !------------------------------------------------------------------------------
     498             : !BOP
     499             : !
     500             : ! !IROUTINE: HCOX_Iodine_Final
     501             : !
     502             : ! !DESCRIPTION: Subroutine HcoX\_Iodine\_Final deallocates
     503             : !  all module arrays.
     504             : !\\
     505             : !\\
     506             : ! !INTERFACE:
     507             : !
     508           0 :   SUBROUTINE HCOX_Iodine_Final ( ExtState )
     509             : !
     510             : ! !INPUT PARAMETERS:
     511             : !
     512             :     TYPE(Ext_State),  POINTER       :: ExtState   ! Module options
     513             : !
     514             : ! !REVISION HISTORY:
     515             : !  15 Mar 2013 - T. Sherwen - Initial implementation (v9-3-01)
     516             : !  See https://github.com/geoschem/hemco for complete history
     517             : !EOP
     518             : !------------------------------------------------------------------------------
     519             : !BOC
     520             : !
     521             :     !=================================================================
     522             :     ! HCOX_Iodine_Final begins here!
     523             :     !=================================================================
     524           0 :     CALL InstRemove ( ExtState%Inorg_Iodine )
     525             : 
     526             :     ! Cleanup module arrays
     527             : !    IF ( ALLOCATED ( HcoIDs     ) ) DEALLOCATE( HcoIDs      )
     528             : !    IF ( ALLOCATED ( SpcNames   ) ) DEALLOCATE( SpcNames    )
     529             : 
     530           0 :   END SUBROUTINE HCOX_Iodine_Final
     531             : !EOC
     532             : !------------------------------------------------------------------------------
     533             : !                   Harmonized Emissions Component (HEMCO)                    !
     534             : !------------------------------------------------------------------------------
     535             : !BOP
     536             : !
     537             : ! !IROUTINE: InstGet
     538             : !
     539             : ! !DESCRIPTION: Subroutine InstGet returns a poiner to the desired instance.
     540             : !\\
     541             : !\\
     542             : ! !INTERFACE:
     543             : !
     544           0 :   SUBROUTINE InstGet ( Instance, Inst, RC, PrevInst )
     545             : !
     546             : ! !INPUT PARAMETERS:
     547             : !
     548             :     INTEGER                             :: Instance
     549             :     TYPE(MyInst),     POINTER           :: Inst
     550             :     INTEGER                             :: RC
     551             :     TYPE(MyInst),     POINTER, OPTIONAL :: PrevInst
     552             : !
     553             : ! !REVISION HISTORY:
     554             : !  18 Feb 2016 - C. Keller   - Initial version
     555             : !  See https://github.com/geoschem/hemco for complete history
     556             : !EOP
     557             : !------------------------------------------------------------------------------
     558             : !BOC
     559             :     TYPE(MyInst),     POINTER    :: PrvInst
     560             : 
     561             :     !=================================================================
     562             :     ! InstGet begins here!
     563             :     !=================================================================
     564             : 
     565             :     ! Get instance. Also archive previous instance.
     566           0 :     PrvInst => NULL()
     567           0 :     Inst    => AllInst
     568           0 :     DO WHILE ( ASSOCIATED(Inst) )
     569           0 :        IF ( Inst%Instance == Instance ) EXIT
     570           0 :        PrvInst => Inst
     571           0 :        Inst    => Inst%NextInst
     572             :     END DO
     573           0 :     IF ( .NOT. ASSOCIATED( Inst ) ) THEN
     574           0 :        RC = HCO_FAIL
     575           0 :        RETURN
     576             :     ENDIF
     577             : 
     578             :     ! Pass output arguments
     579           0 :     IF ( PRESENT(PrevInst) ) PrevInst => PrvInst
     580             : 
     581             :     ! Cleanup & Return
     582           0 :     PrvInst => NULL()
     583           0 :     RC = HCO_SUCCESS
     584             : 
     585             :   END SUBROUTINE InstGet
     586             : !EOC
     587             : !------------------------------------------------------------------------------
     588             : !                   Harmonized Emissions Component (HEMCO)                    !
     589             : !------------------------------------------------------------------------------
     590             : !BOP
     591             : !
     592             : ! !IROUTINE: InstCreate
     593             : !
     594             : ! !DESCRIPTION: Subroutine InstCreate creates a new instance.
     595             : !\\
     596             : !\\
     597             : ! !INTERFACE:
     598             : !
     599           0 :   SUBROUTINE InstCreate ( ExtNr, Instance, Inst, RC )
     600             : !
     601             : ! !INPUT PARAMETERS:
     602             : !
     603             :     INTEGER,       INTENT(IN)       :: ExtNr
     604             : !
     605             : ! !OUTPUT PARAMETERS:
     606             : !
     607             :     INTEGER,       INTENT(  OUT)    :: Instance
     608             :     TYPE(MyInst),  POINTER          :: Inst
     609             : !
     610             : ! !INPUT/OUTPUT PARAMETERS:
     611             : !
     612             :     INTEGER,       INTENT(INOUT)    :: RC
     613             : !
     614             : ! !REVISION HISTORY:
     615             : !  18 Feb 2016 - C. Keller   - Initial version
     616             : !  See https://github.com/geoschem/hemco for complete history
     617             : !EOP
     618             : !------------------------------------------------------------------------------
     619             : !BOC
     620             :     TYPE(MyInst), POINTER          :: TmpInst
     621             :     INTEGER                        :: nnInst
     622             : 
     623             :     !=================================================================
     624             :     ! InstCreate begins here!
     625             :     !=================================================================
     626             : 
     627             :     ! ----------------------------------------------------------------
     628             :     ! Generic instance initialization
     629             :     ! ----------------------------------------------------------------
     630             : 
     631             :     ! Initialize
     632           0 :     Inst => NULL()
     633             : 
     634             :     ! Get number of already existing instances
     635           0 :     TmpInst => AllInst
     636           0 :     nnInst = 0
     637           0 :     DO WHILE ( ASSOCIATED(TmpInst) )
     638           0 :        nnInst  =  nnInst + 1
     639           0 :        TmpInst => TmpInst%NextInst
     640             :     END DO
     641             : 
     642             :     ! Create new instance
     643           0 :     ALLOCATE(Inst)
     644           0 :     Inst%Instance = nnInst + 1
     645           0 :     Inst%ExtNr    = ExtNr
     646             : 
     647             :     ! Attach to instance list
     648           0 :     Inst%NextInst => AllInst
     649           0 :     AllInst       => Inst
     650             : 
     651             :     ! Update output instance
     652           0 :     Instance = Inst%Instance
     653             : 
     654             :     ! ----------------------------------------------------------------
     655             :     ! Type specific initialization statements follow below
     656             :     ! ----------------------------------------------------------------
     657             : 
     658             :     ! Return w/ success
     659           0 :     RC = HCO_SUCCESS
     660             : 
     661           0 :   END SUBROUTINE InstCreate
     662             : !EOC
     663             : !------------------------------------------------------------------------------
     664             : !                   Harmonized Emissions Component (HEMCO)                    !
     665             : !------------------------------------------------------------------------------
     666             : !BOP
     667             : !
     668             : ! !IROUTINE: InstRemove
     669             : !
     670             : ! !DESCRIPTION: Subroutine InstRemove creates a new instance.
     671             : !\\
     672             : !\\
     673             : ! !INTERFACE:
     674             : !
     675           0 :   SUBROUTINE InstRemove ( Instance )
     676             : !
     677             : ! !INPUT PARAMETERS:
     678             : !
     679             :     INTEGER                         :: Instance
     680             : !
     681             : ! !REVISION HISTORY:
     682             : !  18 Feb 2016 - C. Keller   - Initial version
     683             : !  See https://github.com/geoschem/hemco for complete history
     684             : !EOP
     685             : !------------------------------------------------------------------------------
     686             : !BOC
     687             :     INTEGER                     :: RC
     688             :     TYPE(MyInst), POINTER       :: PrevInst
     689             :     TYPE(MyInst), POINTER       :: Inst
     690             : 
     691             :     !=================================================================
     692             :     ! InstRemove begins here!
     693             :     !=================================================================
     694             : 
     695             :     ! Init
     696           0 :     PrevInst => NULL()
     697           0 :     Inst     => NULL()
     698             : 
     699             :     ! Get instance. Also archive previous instance.
     700           0 :     CALL InstGet ( Instance, Inst, RC, PrevInst=PrevInst )
     701             : 
     702             :     ! Instance-specific deallocation
     703           0 :     IF ( ASSOCIATED(Inst) ) THEN
     704             : 
     705             :        ! Pop off instance from list
     706           0 :        IF ( ASSOCIATED(PrevInst) ) THEN
     707           0 :           PrevInst%NextInst => Inst%NextInst
     708             :        ELSE
     709           0 :           AllInst => Inst%NextInst
     710             :        ENDIF
     711           0 :        DEALLOCATE(Inst)
     712             :     ENDIF
     713             : 
     714             :     ! Free pointers before exiting
     715           0 :     PrevInst => NULL()
     716           0 :     Inst     => NULL()
     717             : 
     718           0 :    END SUBROUTINE InstRemove
     719             : !EOC
     720           0 : END MODULE HCOX_Iodine_Mod

Generated by: LCOV version 1.14