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 | 170 | 0.0 %
Date: | 2024-12-17 22:39:59 |  | 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             :
         454             :        ! Write the name of the extension regardless of the verbose setting
         455           0 :        msg = 'Using HEMCO extension: Inorg_Iodine (HOI and I2 emissions)'
         456           0 :        IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN
         457           0 :           CALL HCO_Msg( HcoState%Config%Err, sep1='-' ) ! with separator
         458             :        ELSE
         459           0 :           CALL HCO_Msg( msg, verb=.TRUE.              ) ! w/o separator
         460             :        ENDIF
         461             :
         462             :        ! Write all other messages as debug printout only
         463           0 :        IF ( Inst%CalcHOI ) THEN
         464           0 :           WRITE(MSG,*) 'HOI: ', TRIM(SpcNames(1)), Inst%IDTHOI
         465           0 :           CALL HCO_MSG(HcoState%Config%Err,MSG)
         466             :        ENDIF
         467             :
         468           0 :        IF ( Inst%CalcI2 ) THEN
         469           0 :           WRITE(MSG,*) 'I2: ', TRIM(SpcNames(2)), Inst%IDTI2
         470           0 :           CALL HCO_MSG(HcoState%Config%Err,MSG)
         471             :        ENDIF
         472             :     ENDIF
         473             :
         474             :     !=======================================================================
         475             :     ! Activate this module and the fields of ExtState that it uses
         476             :     !=======================================================================
         477             :
         478             :     ! Activate met fields used by this module
         479           0 :     ExtState%FRLAND%DoUse   = .TRUE.
         480           0 :     ExtState%FRLANDIC%DoUse = .TRUE.
         481           0 :     ExtState%FROCEAN%DoUse  = .TRUE.
         482           0 :     ExtState%FRSEAICE%DoUse = .TRUE.
         483           0 :     ExtState%FRLAKE%DoUse   = .TRUE.
         484           0 :     ExtState%TSKIN%DoUse    = .TRUE.
         485           0 :     ExtState%U10M%DoUse     = .TRUE.
         486           0 :     ExtState%V10M%DoUse     = .TRUE.
         487           0 :     ExtState%O3%DoUse       = .TRUE.
         488           0 :     ExtState%AIR%DoUse      = .TRUE.
         489             :
         490             :     ! Enable module
         491             :     !ExtState%Inorg_Iodine = .TRUE.
         492             :
         493             :     ! Return w/ success
         494           0 :     Inst => NULL()
         495           0 :     IF ( ALLOCATED(HcoIDs  ) ) DEALLOCATE(HcoIDs  )
         496           0 :     IF ( ALLOCATED(SpcNames) ) DEALLOCATE(SpcNames)
         497           0 :     CALL HCO_LEAVE ( HcoState%Config%Err, RC )
         498             :
         499           0 :   END SUBROUTINE HCOX_Iodine_Init
         500             :
         501             : !EOC
         502             : !------------------------------------------------------------------------------
         503             : !                   Harmonized Emissions Component (HEMCO)                    !
         504             : !------------------------------------------------------------------------------
         505             : !BOP
         506             : !
         507             : ! !IROUTINE: HCOX_Iodine_Final
         508             : !
         509             : ! !DESCRIPTION: Subroutine HcoX\_Iodine\_Final deallocates
         510             : !  all module arrays.
         511             : !\\
         512             : !\\
         513             : ! !INTERFACE:
         514             : !
         515           0 :   SUBROUTINE HCOX_Iodine_Final ( ExtState )
         516             : !
         517             : ! !INPUT PARAMETERS:
         518             : !
         519             :     TYPE(Ext_State),  POINTER       :: ExtState   ! Module options
         520             : !
         521             : ! !REVISION HISTORY:
         522             : !  15 Mar 2013 - T. Sherwen - Initial implementation (v9-3-01)
         523             : !  See https://github.com/geoschem/hemco for complete history
         524             : !EOP
         525             : !------------------------------------------------------------------------------
         526             : !BOC
         527             : !
         528             :     !=================================================================
         529             :     ! HCOX_Iodine_Final begins here!
         530             :     !=================================================================
         531           0 :     CALL InstRemove ( ExtState%Inorg_Iodine )
         532             :
         533             :     ! Cleanup module arrays
         534             : !    IF ( ALLOCATED ( HcoIDs     ) ) DEALLOCATE( HcoIDs      )
         535             : !    IF ( ALLOCATED ( SpcNames   ) ) DEALLOCATE( SpcNames    )
         536             :
         537           0 :   END SUBROUTINE HCOX_Iodine_Final
         538             : !EOC
         539             : !------------------------------------------------------------------------------
         540             : !                   Harmonized Emissions Component (HEMCO)                    !
         541             : !------------------------------------------------------------------------------
         542             : !BOP
         543             : !
         544             : ! !IROUTINE: InstGet
         545             : !
         546             : ! !DESCRIPTION: Subroutine InstGet returns a poiner to the desired instance.
         547             : !\\
         548             : !\\
         549             : ! !INTERFACE:
         550             : !
         551           0 :   SUBROUTINE InstGet ( Instance, Inst, RC, PrevInst )
         552             : !
         553             : ! !INPUT PARAMETERS:
         554             : !
         555             :     INTEGER                             :: Instance
         556             :     TYPE(MyInst),     POINTER           :: Inst
         557             :     INTEGER                             :: RC
         558             :     TYPE(MyInst),     POINTER, OPTIONAL :: PrevInst
         559             : !
         560             : ! !REVISION HISTORY:
         561             : !  18 Feb 2016 - C. Keller   - Initial version
         562             : !  See https://github.com/geoschem/hemco for complete history
         563             : !EOP
         564             : !------------------------------------------------------------------------------
         565             : !BOC
         566             :     TYPE(MyInst),     POINTER    :: PrvInst
         567             :
         568             :     !=================================================================
         569             :     ! InstGet begins here!
         570             :     !=================================================================
         571             :
         572             :     ! Get instance. Also archive previous instance.
         573           0 :     PrvInst => NULL()
         574           0 :     Inst    => AllInst
         575           0 :     DO WHILE ( ASSOCIATED(Inst) )
         576           0 :        IF ( Inst%Instance == Instance ) EXIT
         577           0 :        PrvInst => Inst
         578           0 :        Inst    => Inst%NextInst
         579             :     END DO
         580           0 :     IF ( .NOT. ASSOCIATED( Inst ) ) THEN
         581           0 :        RC = HCO_FAIL
         582           0 :        RETURN
         583             :     ENDIF
         584             :
         585             :     ! Pass output arguments
         586           0 :     IF ( PRESENT(PrevInst) ) PrevInst => PrvInst
         587             :
         588             :     ! Cleanup & Return
         589           0 :     PrvInst => NULL()
         590           0 :     RC = HCO_SUCCESS
         591             :
         592             :   END SUBROUTINE InstGet
         593             : !EOC
         594             : !------------------------------------------------------------------------------
         595             : !                   Harmonized Emissions Component (HEMCO)                    !
         596             : !------------------------------------------------------------------------------
         597             : !BOP
         598             : !
         599             : ! !IROUTINE: InstCreate
         600             : !
         601             : ! !DESCRIPTION: Subroutine InstCreate creates a new instance.
         602             : !\\
         603             : !\\
         604             : ! !INTERFACE:
         605             : !
         606           0 :   SUBROUTINE InstCreate ( ExtNr, Instance, Inst, RC )
         607             : !
         608             : ! !INPUT PARAMETERS:
         609             : !
         610             :     INTEGER,       INTENT(IN)       :: ExtNr
         611             : !
         612             : ! !OUTPUT PARAMETERS:
         613             : !
         614             :     INTEGER,       INTENT(  OUT)    :: Instance
         615             :     TYPE(MyInst),  POINTER          :: Inst
         616             : !
         617             : ! !INPUT/OUTPUT PARAMETERS:
         618             : !
         619             :     INTEGER,       INTENT(INOUT)    :: RC
         620             : !
         621             : ! !REVISION HISTORY:
         622             : !  18 Feb 2016 - C. Keller   - Initial version
         623             : !  See https://github.com/geoschem/hemco for complete history
         624             : !EOP
         625             : !------------------------------------------------------------------------------
         626             : !BOC
         627             :     TYPE(MyInst), POINTER          :: TmpInst
         628             :     INTEGER                        :: nnInst
         629             :
         630             :     !=================================================================
         631             :     ! InstCreate begins here!
         632             :     !=================================================================
         633             :
         634             :     ! ----------------------------------------------------------------
         635             :     ! Generic instance initialization
         636             :     ! ----------------------------------------------------------------
         637             :
         638             :     ! Initialize
         639           0 :     Inst => NULL()
         640             :
         641             :     ! Get number of already existing instances
         642           0 :     TmpInst => AllInst
         643           0 :     nnInst = 0
         644           0 :     DO WHILE ( ASSOCIATED(TmpInst) )
         645           0 :        nnInst  =  nnInst + 1
         646           0 :        TmpInst => TmpInst%NextInst
         647             :     END DO
         648             :
         649             :     ! Create new instance
         650           0 :     ALLOCATE(Inst)
         651           0 :     Inst%Instance = nnInst + 1
         652           0 :     Inst%ExtNr    = ExtNr
         653             :
         654             :     ! Attach to instance list
         655           0 :     Inst%NextInst => AllInst
         656           0 :     AllInst       => Inst
         657             :
         658             :     ! Update output instance
         659           0 :     Instance = Inst%Instance
         660             :
         661             :     ! ----------------------------------------------------------------
         662             :     ! Type specific initialization statements follow below
         663             :     ! ----------------------------------------------------------------
         664             :
         665             :     ! Return w/ success
         666           0 :     RC = HCO_SUCCESS
         667             :
         668           0 :   END SUBROUTINE InstCreate
         669             : !EOC
         670             : !------------------------------------------------------------------------------
         671             : !                   Harmonized Emissions Component (HEMCO)                    !
         672             : !------------------------------------------------------------------------------
         673             : !BOP
         674             : !
         675             : ! !IROUTINE: InstRemove
         676             : !
         677             : ! !DESCRIPTION: Subroutine InstRemove creates a new instance.
         678             : !\\
         679             : !\\
         680             : ! !INTERFACE:
         681             : !
         682           0 :   SUBROUTINE InstRemove ( Instance )
         683             : !
         684             : ! !INPUT PARAMETERS:
         685             : !
         686             :     INTEGER                         :: Instance
         687             : !
         688             : ! !REVISION HISTORY:
         689             : !  18 Feb 2016 - C. Keller   - Initial version
         690             : !  See https://github.com/geoschem/hemco for complete history
         691             : !EOP
         692             : !------------------------------------------------------------------------------
         693             : !BOC
         694             :     INTEGER                     :: RC
         695             :     TYPE(MyInst), POINTER       :: PrevInst
         696             :     TYPE(MyInst), POINTER       :: Inst
         697             :
         698             :     !=================================================================
         699             :     ! InstRemove begins here!
         700             :     !=================================================================
         701             :
         702             :     ! Init
         703           0 :     PrevInst => NULL()
         704           0 :     Inst     => NULL()
         705             :
         706             :     ! Get instance. Also archive previous instance.
         707           0 :     CALL InstGet ( Instance, Inst, RC, PrevInst=PrevInst )
         708             :
         709             :     ! Instance-specific deallocation
         710           0 :     IF ( ASSOCIATED(Inst) ) THEN
         711             :
         712             :        ! Pop off instance from list
         713           0 :        IF ( ASSOCIATED(PrevInst) ) THEN
         714           0 :           PrevInst%NextInst => Inst%NextInst
         715             :        ELSE
         716           0 :           AllInst => Inst%NextInst
         717             :        ENDIF
         718           0 :        DEALLOCATE(Inst)
         719             :     ENDIF
         720             :
         721             :     ! Free pointers before exiting
         722           0 :     PrevInst => NULL()
         723           0 :     Inst     => NULL()
         724             :
         725           0 :    END SUBROUTINE InstRemove
         726             : !EOC
         727           0 : END MODULE HCOX_Iodine_Mod

Generated by: LCOV version 1.14