LCOV - code coverage report
Current view: | top level - hemco/HEMCO/src/Shared/GeosUtil - hco_henry_mod.F90 (source / functions) |  |  | Hit | Total | Coverage
Test: | coverage.info |  | Lines: | 0 | 13 | 0.0 %
Date: | 2025-01-13 21:54:50 |  | Functions: | 0 | 2 | 0.0 %

              Line data    Source code
           1             : !------------------------------------------------------------------------------
           2             : !                   Harmonized Emissions Component (HEMCO)                    !
           3             : !------------------------------------------------------------------------------
           4             : !BOP
           5             : !
           6             : ! !MODULE: henry_mod.F90
           7             : !
           8             : ! !DESCRIPTION: Module HCO\_HENRY\_MOD contains routines to calculate
           9             : ! The dimensionless liquid-over-gas Henry constant KH as well as the
          10             : ! effective Henry constant HEFF, which accounts for hydrolysis.
          11             : !\\
          12             : !\\
          13             : ! KH   = K0 * exp ( CR * (1/T - 1/Tref)  ) * R * T / 101.325
          14             : !\\
          15             : !\\
          16             : ! HEFF = KH * ( 1 + 10\^(pH-pKa) )
          17             : !\\
          18             : !\\
          19             : ! where K0 is the value of KH at standard conditions [M/atm], CR is the
          20             : ! temperature dependency of KH [K], T is the temperature in Kelvin, Tref
          21             : ! is the reference temperature (298.15 K), and R is the universal gas
          22             : ! constant R = 8.314 JK-1mol-1.
          23             : !\\
          24             : !\\
          25             : ! References:
          26             : ! \begin{itemize}
          27             : ! \item Sander, R: Compilation of Henry's law constant for inorganic and
          28             : ! organic species of potential importance in environmental chemistry, 1999.
          29             : ! \item  http://www.mpch-mainz.mpg.de/~sander/res/henry.html.
          30             : ! \end{itemize}
          31             : !
          32             : ! !INTERFACE:
          33             : !
          34             : MODULE HCO_HENRY_MOD
          35             :
          36             :   IMPLICIT NONE
          37             :   PRIVATE
          38             : !
          39             : ! !PUBLIC MEMBER FUNCTIONS:
          40             : !
          41             :   PUBLIC :: CALC_KH
          42             :   PUBLIC :: CALC_HEFF
          43             : !
          44             : ! !REVISION HISTORY:
          45             : !  16 Apr 2013 - C. Keller   - Initial version
          46             : !  See https://github.com/geoschem/hemco for complete history
          47             : !EOP
          48             : !------------------------------------------------------------------------------
          49             : !BOC
          50             : !
          51             : ! !DEFINED PARAMETERS:
          52             : !
          53             :   REAL*8, PARAMETER :: TREF = 298.15d0      ! [K          ]
          54             :   REAL*8, PARAMETER :: R    = 8.3144598d0   ! [J K-1 mol-1]
          55             :   REAL*8, PARAMETER :: ATM  = 101.325d0     ! [mPa (!)    ]
          56             :
          57             : CONTAINS
          58             : !EOC
          59             : !------------------------------------------------------------------------------
          60             : !                   Harmonized Emissions Component (HEMCO)                    !
          61             : !------------------------------------------------------------------------------
          62             : !BOP
          63             : !
          64             : ! !IROUTINE: calc_kh
          65             : !
          66             : ! !DESCRIPTION: Function CALC\_KH calculates the liquid over gas
          67             : ! dimensionless Henry constant for the given tracer and temperature.
          68             : !
          69             : ! Reference: http://www.mpch-mainz.mpg.de/~sander/res/henry.html
          70             : !\\
          71             : !\\
          72             : ! !INTERFACE:
          73             : !
          74           0 :   SUBROUTINE CALC_KH ( thisK0, thisCR, TK, KH, RC )
          75             : !
          76             : ! !INPUT PARAMETERS:
          77             : !
          78             :     REAL*8,  INTENT(IN)    :: thisK0  ! [M/atm]
          79             :     REAL*8,  INTENT(IN)    :: thisCR  ! [-d ln kH / d(1/T) ]
          80             :     REAL*8,  INTENT(IN)    :: TK      ! Temperature [K]
          81             : !
          82             : ! !OUTPUT PARAMETERS:
          83             : !
          84             :     REAL*8,  INTENT(OUT)   :: KH      ! Henry liquid over gas constant [-]
          85             : !
          86             : ! !INPUT/OUTPUT PARAMETERS:
          87             : !
          88             :     INTEGER, INTENT(INOUT) :: RC      ! Error handling
          89             : !
          90             : ! !REVISION HISTORY:
          91             : !  16 Apr 2013 - C. Keller - Initial version
          92             : !  See https://github.com/geoschem/hemco for complete history
          93             : !EOP
          94             : !------------------------------------------------------------------------------
          95             : !BOC
          96             :     !=================================================================
          97             :     ! CALC_KH begins here!
          98             :     !=================================================================
          99             :
         100             :     ! Assume success
         101           0 :     RC = 0
         102             :
         103             :     ! Error if not defined
         104           0 :     IF ( thisK0 == 0d0 ) THEN
         105           0 :        RC = -999
         106           0 :        KH = -999
         107           0 :        RETURN
         108             :     ENDIF
         109             :
         110             :     ! Calculate Henry coefficient for given temperature
         111           0 :     KH = thisK0 * exp( thisCR * (1/TK - 1/TREF) ) * R * TK / ATM
         112             :
         113             :   END SUBROUTINE CALC_KH
         114             : !EOC
         115             : !------------------------------------------------------------------------------
         116             : !                   Harmonized Emissions Component (HEMCO)                    !
         117             : !------------------------------------------------------------------------------
         118             : !BOP
         119             : !
         120             : ! !IROUTINE: calc_heff
         121             : !
         122             : ! !DESCRIPTION: Function CALC\_HEFF calculates the effective Henry
         123             : ! constant taking into account hydrolysis effects. For instance, aqueous
         124             : ! HBr will dissociate to Br- (and H+), and often we are interested in the
         125             : ! total Br concentration in water, i.e. Brx = HBr + Br-, with the equilibrium
         126             : ! concentration of Brx and gaseous HBr being the effective Henry
         127             : ! constant. This function provides the correction factor to calculate
         128             : ! the effective Henry constant from the 'regular' Henry constant
         129             : ! (above):
         130             : !\\
         131             : !\\
         132             : ! Heff = KH * CORR
         133             : !\\
         134             : !\\
         135             : ! The correction term is derived as following:
         136             : !\\
         137             : !\\
         138             : ! The regular Henry constant is:   H    = HA(liq) / HA(g)
         139             : ! The effective Henry constant is: Heff = ( HA(liq) + A(liq)) / HA(g)
         140             : ! Equilibrium between HA and A is: pH = pK + log ( A/HA )
         141             : ! A(liq) hence becomes: HA(liq) * 10**(pH-pK)
         142             : !\\
         143             : !\\
         144             : ! ==> Heff = ( HA(liq) * ( 1 + 10**(pH-pK) ) / HA(g)
         145             : !          = HA(liq) / HA(g) * ( 1 + 10**(pH-pK) )
         146             : !          = H * ( 1 + 10**(pH-pK) )
         147             : !\\
         148             : !\\
         149             : ! ==> CORR = 1 + 10**(pH-pK)
         150             : !\\
         151             : !\\
         152             : ! !INTERFACE:
         153             : !
         154           0 :   SUBROUTINE CALC_HEFF ( thispKa, PH, KH, HEFF, RC )
         155             : !
         156             : ! !INPUT PARAMETERS:
         157             : !
         158             :     REAL*8,  INTENT(IN)    :: thispKa  ! pKa value [-]
         159             :     REAL*8,  INTENT(IN)    :: PH       ! PH value [-]
         160             :     REAL*8,  INTENT(IN)    :: KH       ! gas/aq Henry constant [-]
         161             : !
         162             : ! !OUTPUT PARAMETERS:
         163             : !
         164             :     REAL*8,  INTENT(OUT)   :: HEFF     ! effective gas/aq constant [-]
         165             : !
         166             : ! !INPUT/OUTPUT PARAMETERS:
         167             : !
         168             :     INTEGER, INTENT(INOUT) :: RC       ! for error handling
         169             : !
         170             : ! !REMARKS:
         171             : ! It should be noted that the correction term calculated here is from a
         172             : ! 'acid perspective', i.e. for compounds with the acid being in the
         173             : ! gaseous phase. The correction term reads 1 + 10**(-pH+pK) for
         174             : ! compounds with the base in the gas phase (e.g. ammonia).
         175             : !
         176             : ! The correction term becomes more complicated for compounds with more
         177             : ! than two equilibrium compounds that are relevant under the current
         178             : ! conditions (e.g. CO2).
         179             : !
         180             : ! We ignore any temperature dependencies of pKa for now.
         181             : !
         182             : ! !REVISION HISTORY:
         183             : !  16 Apr 2013 - C. Keller - Initial version
         184             : !  See https://github.com/geoschem/hemco for complete history
         185             : !EOP
         186             : !------------------------------------------------------------------------------
         187             : !BOC
         188             :     !=================================================================
         189             :     ! CALC_HEFF begins here!
         190             :     !=================================================================
         191             :
         192             :     ! Assume success
         193           0 :     RC = 0
         194             :
         195             :     ! Calculate correction term.
         196           0 :     IF ( thispKa > 0d0 ) THEN
         197           0 :        HEFF = KH * ( 1d0 + 10d0**( pH - thispKa ) )
         198             :     ELSE
         199           0 :        HEFF = KH
         200             :     ENDIF
         201             :
         202           0 :   END SUBROUTINE CALC_HEFF
         203             : !EOC
         204             : END MODULE HCO_HENRY_MOD

Generated by: LCOV version 1.14