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

          Line data    Source code
       1             : !------------------------------------------------------------------------------
       2             : !                   Harmonized Emissions Component (HEMCO)                    !
       3             : !------------------------------------------------------------------------------
       4             : !BOP
       5             : !
       6             : ! !MODULE: ocean_toolbox_mod.F90
       7             : !
       8             : ! !DESCRIPTION: Module Ocean\_ToolBox\_Mod contains functions and routines to
       9             : ! calculate the ocean exchange velocity for any gas, according to Johnson, 2010.
      10             : !
      11             : ! References:
      12             : ! \begin{itemize}
      13             : ! \item  M.T. Johnson: "A numerical scheme to calculate temperature and
      14             : !        salinity dependent air-water transfer velocities for any gas",
      15             : !        Ocean Sci. 6, 913-932, 2010.
      16             : ! \item  Liss and Slater: Flux of gases across the air-sea interface,
      17             : !        Nature, 247, 1974.
      18             : ! \item  Laliberte, M: "Model for calculating the viscosity of aqueous
      19             : !        solutions", Journal of Chemical \& Engineering Data, 52, 2007.
      20             : ! \item  Millero and Poisson: "International one-atmosphere equation of
      21             : !        state of seawater", Deep Sea Res. Pt A, 28, 1981.
      22             : ! \item  Wilke and Chang: "Correlation of diffusion coefficients in dilute
      23             : !        solutions", AIChE Journal, 1, 1955.
      24             : ! \item  Hayduk and Minhas, "Correlations for prediction of molecular
      25             : !        diffusivities in liquids, Can. J. Chem. Eng., 60, 1982,
      26             : ! \item  E. Fuller et al.: "New method for prediction of binary gas-phase
      27             : !        diffusion coefficients", Industrial \& Engineering Chemistry, 58,
      28             : !        1966.
      29             : ! \item Saltzman et al.: Experimental determination of the diffusion
      30             : !    coefficient of dimethylsulfide in water, J. Geophys. Res., 98, 1993.
      31             : ! \end{itemize}
      32             : !
      33             : ! !INTERFACE:
      34             : !
      35             : MODULE Ocean_ToolBox_Mod
      36             : !
      37             : ! !USES:
      38             : !
      39             :   IMPLICIT NONE
      40             :   PRIVATE
      41             : !
      42             : ! !PUBLIC MEMBER FUNCTIONS:
      43             : !
      44             :   PUBLIC  :: Calc_Kg
      45             : !
      46             : ! !PRIVATE MEMBER FUNCTIONS:
      47             : !
      48             :   PRIVATE :: Calc_Ka
      49             :   PRIVATE :: Calc_Kl
      50             :   PRIVATE :: N_SW
      51             :   PRIVATE :: P_SW
      52             :   PRIVATE :: V_SW
      53             :   PRIVATE :: D_WC
      54             :   PRIVATE :: D_HM
      55             :   PRIVATE :: Schmidt_W
      56             :   PRIVATE :: Schmidt_Saltzmann
      57             :   PRIVATE :: Schmidt_Acet
      58             :   PRIVATE :: Schmidt_Ald2
      59             :   PRIVATE :: N_Air
      60             :   PRIVATE :: P_Air
      61             :   PRIVATE :: V_Air
      62             :   PRIVATE :: D_Air
      63             :   PRIVATE :: Schmidt_G
      64             : !
      65             : ! ! PARAMETER
      66             : !
      67             :   INTEGER, PARAMETER :: OC_SUCCESS = 0
      68             :   INTEGER, PARAMETER :: OC_FAIL    = -999
      69             : !
      70             : ! !REVISION HISTORY:
      71             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
      72             : !  See https://github.com/geoschem/hemco for complete history
      73             : !EOP
      74             : !------------------------------------------------------------------------------
      75             : !BOC
      76             : !
      77             : CONTAINS
      78             : !EOC
      79             : !------------------------------------------------------------------------------
      80             : !                   Harmonized Emissions Component (HEMCO)                    !
      81             : !------------------------------------------------------------------------------
      82             : !BOP
      83             : !
      84             : ! !IROUTINE: Calc_Kg
      85             : !
      86             : ! !DESCRIPTION: Subroutine Calc\_Kg is the wrapper routine to calculate the
      87             : ! exchange velocity Kg used for calculating the ocean-air flux (cf. Liss \&
      88             : ! Slater 1974) as:
      89             : !\\
      90             : !\\
      91             : ! F = Kg ( Cg - H * Cl )
      92             : !\\
      93             : !\\
      94             : ! where Cg and Cl are the bulk gas and liquid concentrations and H is the
      95             : ! Henry constant (H= Cgs/Cls).
      96             : !\\
      97             : !\\
      98             : ! 1/Kg = 1/ka + H/Kl = Ra + Rl.
      99             : !\\
     100             : !\\
     101             : ! Note that Kg is returned in m/s and not cm h-1, as is usually reported for
     102             : ! exchange velocities!
     103             : !\\
     104             : !\\
     105             : ! !INTERFACE:
     106             : !
     107           0 :   SUBROUTINE Calc_Kg( T, P, V, SALT, H, VB, MW, SCW, KG, RC, RA_OVER_RL, VERBOSE )
     108             : !
     109             : ! !INPUT PARAMETERS:
     110             : !
     111             :     REAL*8,  INTENT(IN   )  :: T    ! Surface temperature     [C]
     112             :     REAL*8,  INTENT(IN   )  :: P    ! Surface pressure        [Pa]
     113             :     REAL*8,  INTENT(IN   )  :: V    ! Surface wind speed      [m/s]
     114             :     REAL*8,  INTENT(IN   )  :: SALT ! Salinity                [PSU]
     115             :     REAL*8,  INTENT(IN   )  :: H    ! Henry constant          [-]
     116             :     REAL*8,  INTENT(IN   )  :: VB   ! Liquid mol. volume      [cm3/mol]
     117             :     REAL*8,  INTENT(IN   )  :: MW   ! Molecular weight        [g/mol]
     118             :     INTEGER, INTENT(IN   )  :: SCW  ! Parameterization type
     119             :                                     ! for Schmidt number in water
     120             :     LOGICAL, INTENT(IN   ), OPTIONAL  :: VERBOSE   ! turn on verbose output
     121             : !
     122             : ! !OUTPUT PARAMETERS:
     123             : !
     124             :     REAL*8,  INTENT(  OUT)  :: KG   ! Exchange velocity       [ms-1]
     125             :     INTEGER, INTENT(  OUT)  :: RC   ! Error code
     126             :     REAL*8,  INTENT(  OUT), OPTIONAL  :: RA_OVER_RL ! Ra/Rl   [-]
     127             : !
     128             : ! !REVISION HISTORY:
     129             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     130             : !  See https://github.com/geoschem/hemco for complete history
     131             : !EOP
     132             : !------------------------------------------------------------------------------
     133             : !BOC
     134             : !
     135             : ! !LOCAL VARIABLES:
     136             : !
     137             :     LOGICAL :: VERB
     138             :     REAL*8  :: RA, RL, TMP, KL, KA
     139             :     REAL*8, PARAMETER :: TMAX = -40.0d0
     140             : 
     141             :     !=================================================================
     142             :     ! CALC_KG begins here!
     143             :     !=================================================================
     144             : 
     145             :     ! Fail by default
     146           0 :     RC = OC_FAIL
     147             : 
     148             :     ! Set verbose flag
     149           0 :     IF ( PRESENT ( VERBOSE ) ) THEN
     150           0 :        VERB = VERBOSE
     151             :     ELSE
     152           0 :        VERB = .FALSE.
     153             :     ENDIF
     154             : 
     155             :     ! Set KG to zero and return if winds are 0
     156           0 :     IF ( V == 0.d0 ) THEN
     157           0 :        KG = 0d0
     158           0 :        RC = OC_SUCCESS
     159           0 :        RETURN
     160             :     ENDIF
     161             : 
     162             :     ! Surface temperature must be greater than -40 degC. Otherwise, an
     163             :     ! overflow error may occur!
     164           0 :     TMP = MAX(T,TMAX)
     165             : 
     166             :     ! Don't allow values between -10.7 and -10.9 to avoid div-zero error
     167             :     ! in N_SW!
     168           0 :     IF ( TMP > -10.7d0 .AND. TMP < -10.9d0 ) THEN
     169           0 :        TMP = -10.7d0
     170             :     ENDIF
     171             : 
     172             :     ! Calculate air resistence RA
     173           0 :     KA = CALC_KA(TMP,P,V,MW,VB,VERB)
     174           0 :     IF ( KA < 0.0d0 ) RETURN
     175           0 :     RA = 1d0 / KA
     176             : 
     177             :     ! Calculate water resistence RL
     178           0 :     KL = CALC_KL(TMP,V,SALT,VB,SCW,VERB)
     179           0 :     IF ( KL < 0.0d0 ) RETURN
     180           0 :     RL = H / KL
     181             : 
     182             :     ! Calculate transfer velocity Kg
     183           0 :     KG = 1d0 / (RA + RL)
     184             : 
     185             :     ! Ratio of RA / RL
     186           0 :     IF ( PRESENT(RA_OVER_RL) ) RA_OVER_RL = RA / RL
     187             : 
     188             :     ! Return w/ success
     189           0 :     RC = OC_SUCCESS
     190             : 
     191             :   END SUBROUTINE Calc_Kg
     192             : !EOC
     193             : !------------------------------------------------------------------------------
     194             : !                   Harmonized Emissions Component (HEMCO)                    !
     195             : !------------------------------------------------------------------------------
     196             : !BOP
     197             : !
     198             : ! !IROUTINE: Calc_Ka
     199             : !
     200             : ! !DESCRIPTION: Calc\_Ka returns the air exchange velocity KA.
     201             : !\\
     202             : !\\
     203             : ! !INTERFACE:
     204             : !
     205           0 :   FUNCTION Calc_Ka(T,P,V,MW,VB,VERB) RESULT(KA)
     206             : !
     207             : ! !INPUT PARAMETERS:
     208             : !
     209             :     REAL*8, INTENT(IN)  :: T,P,V, MW, VB!T in C, P in Pa
     210             :     LOGICAL, INTENT(IN) :: VERB
     211             : !
     212             : ! !RETURN VALUE:
     213             : !
     214             :     REAL*8              :: KA
     215             : !
     216             : ! !REVISION HISTORY:
     217             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     218             : !  See https://github.com/geoschem/hemco for complete history
     219             : !EOP
     220             : !------------------------------------------------------------------------------
     221             : !BOC
     222             : !
     223             : ! !LOCAL VARIABLES:
     224             :     REAL*8             :: SC, USTAR,CD
     225             :     REAL*8, PARAMETER  :: KAPPA=0.4d0
     226             : 
     227             :     !=================================================================
     228             :     ! CALC_KA begins here!
     229             :     !=================================================================
     230             : 
     231             :     ! Get Schmidt number in the air
     232           0 :     SC = SCHMIDT_G(T,P,MW,VB)
     233             : 
     234             :     !drag coefficient
     235           0 :     CD = 0.61d-3 + 0.063d-3 * V
     236             : 
     237             :     !friction velocity
     238           0 :     USTAR = V * SQRT(CD)
     239             : 
     240             :     ! Calculate KA
     241             :     KA = 1d-3 + USTAR / &
     242           0 :       ( 13.3d0 * SQRT(SC) + 1d0/SQRT(CD) - 5d0 + LOG(SC)/(2d0*KAPPA) )
     243             : 
     244           0 :     IF ( VERB ) THEN
     245           0 :        WRITE(*,*) 'Schmidt number in air: ', SC
     246           0 :        WRITE(*,*) 'Drag coefficient     : ', CD
     247           0 :        WRITE(*,*) 'Friction velocity    : ', USTAR
     248           0 :        WRITE(*,*) 'Airside resistance   : ', KA
     249             :     ENDIF
     250             : 
     251           0 :   END FUNCTION Calc_Ka
     252             : !EOC
     253             : !------------------------------------------------------------------------------
     254             : !                   Harmonized Emissions Component (HEMCO)                    !
     255             : !------------------------------------------------------------------------------
     256             : !BOP
     257             : !
     258             : ! !IROUTINE: Calc_Kl
     259             : !
     260             : ! !DESCRIPTION: Calc\_Kl calculates the water exchange velocity Kl following
     261             : ! Nightingale et al., Geophysical Research Letters, 2000.
     262             : !\\
     263             : !\\
     264             : ! !INTERFACE:
     265             : !
     266           0 :   FUNCTION Calc_Kl(T,V,S,VB,SCW,VERB) RESULT(K)
     267             : !
     268             : ! !INPUT PARAMETERS:
     269             : !
     270             :     REAL*8,  INTENT(IN) :: T,S,V,VB
     271             :     INTEGER, INTENT(IN) :: SCW
     272             :     LOGICAL, INTENT(IN) :: VERB
     273             : !
     274             : ! !RETURN VALUE:
     275             : !
     276             :     REAL*8              :: K
     277             : !
     278             : ! !REVISION HISTORY:
     279             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     280             : !  See https://github.com/geoschem/hemco for complete history
     281             : !EOP
     282             : !------------------------------------------------------------------------------
     283             : !BOC
     284             : !
     285             : ! !LOCAL VARIABLES:
     286             : !
     287             :     REAL*8             :: SC,ScCO2
     288             : 
     289             :     !=================================================================
     290             :     ! CALC_KL begins here!
     291             :     !=================================================================
     292             : 
     293             :     ! Get Schmidt number in water according to parameterization type
     294           0 :     IF ( SCW == 1 ) THEN
     295           0 :        SC = SCHMIDT_W(T,S,VB)
     296           0 :     ELSEIF ( SCW == 2 ) THEN
     297           0 :        SC = SCHMIDT_SALTZMANN(T)
     298           0 :     ELSEIF ( SCW == 3 ) THEN
     299           0 :        SC = SCHMIDT_ACET(T)
     300           0 :     ELSEIF ( SCW == 4 ) THEN
     301           0 :        SC = SCHMIDT_ALD2(T)
     302             :     ENDIF
     303             : 
     304             :     ! Schmidt number for CO2
     305           0 :     ScCO2 = 644.7d0 + T * ( -6.16d0 + T * ( 0.11d0 ) )
     306             : 
     307             :     ! Error trap: Schmidt numbers MUST be positive
     308           0 :     IF ( SC < 0.0d0 .OR. ScCO2 < 0.0d0 ) THEN
     309           0 :        WRITE(*,*) 'Negative Schmidt number!'
     310           0 :        WRITE(*,*) 'SC, ScCO2, T, S, VB: ', SC, ScCO2, T, S, VB
     311           0 :        K = -999.0d0
     312           0 :        RETURN
     313             :     ENDIF
     314             : 
     315             :     ! KL in cm/h according to Nightingale, 2000
     316           0 :     K = V * ( 0.24d0 * V + 0.061d0) / SQRT( SC / ScCO2 )
     317             : 
     318             :     ! Convert from cm/h to m/s
     319           0 :     K = K / 3600d0 / 100d0
     320             : 
     321           0 :     IF ( VERB ) THEN
     322           0 :        WRITE(*,*) 'Schmidt number in water: ', SC
     323           0 :        WRITE(*,*) 'Schmidt number of CO2  : ', ScCO2
     324           0 :        WRITE(*,*) 'Waterside resistance   : ', K
     325             :     ENDIF
     326             : 
     327           0 :   END FUNCTION Calc_Kl
     328             : !EOC
     329             : !------------------------------------------------------------------------------
     330             : !                   Harmonized Emissions Component (HEMCO)                    !
     331             : !------------------------------------------------------------------------------
     332             : !BOP
     333             : !
     334             : ! !IROUTINE: N_SW
     335             : !
     336             : ! !DESCRIPTION: N\_SW returns the dynamic seawater viscosity following
     337             : ! Laliberte, 2007.
     338             : !\\
     339             : !\\
     340             : ! !INTERFACE:
     341             : !
     342           0 :   FUNCTION N_SW(T,S) RESULT(N)
     343             : !
     344             : ! !INPUT PARAMETERS:
     345             : !
     346             :     REAL*8, INTENT(IN) :: T,S !temperature (C) and salinity
     347             : !
     348             : ! !RETURN VALUE:
     349             : !
     350             :     REAL*8             :: N   ! Dynamic viscosity
     351             : !
     352             : ! !REVISION HISTORY:
     353             : !  11 Apr 2013 - C. Keller   - Adapted from F. Paulot
     354             : !  See https://github.com/geoschem/hemco for complete history
     355             : !EOP
     356             : !------------------------------------------------------------------------------
     357             : !BOC
     358             : !
     359             : ! !LOCAL VARIABLES:
     360             : !
     361             :     REAL*8  :: n_0, ln_n_m, w_i_ln_n_i_tot, NI, W_I_TOT, W_I
     362             :     INTEGER :: I
     363             : 
     364             :     !salt in the order NaCl, KCl, CaCl2, MgCl2, MgSO4
     365             :     REAL*8, PARAMETER :: MASS_FRACTION(5) = &
     366             :        (/  0.798D0,     0.022D0,    0.033D0,     0.047D0,    0.1D0       /)
     367             : 
     368             :     REAL*8, PARAMETER :: V1(5) = &
     369             :        (/ 16.22D0,      6.4883D0,  32.028D0,    24.032D0,   72.269D0     /)
     370             : 
     371             :     REAL*8, PARAMETER :: V2(5) = &
     372             :        (/  1.3229D0,    1.3175D0,   0.78792D0,   2.2694D0,   2.2238D0    /)
     373             : 
     374             :     REAL*8, PARAMETER :: V3(5) = &
     375             :        (/  1.4849D0,   -0.7785D0,  -1.1495D0,    3.7108D0,   6.6037D0    /)
     376             : 
     377             :     REAL*8, PARAMETER :: V4(5) = &
     378             :        (/  0.0074691D0, 0.09272D0,  0.0026995D0, 0.021853D0, 0.0079004D0 /)
     379             : 
     380             :     REAL*8, PARAMETER :: V5(5) = &
     381             :        (/ 30.78D0,     -1.3D0,      780860D0,   -1.1236D0,   3340.1D0    /)
     382             : 
     383             :     REAL*8, PARAMETER :: V6(5) = &
     384             :        (/  2.0583D0,    2.0811D0,   5.8442D0,    0.14474D0,  6.1304D0    /)
     385             : 
     386             :     !=================================================================
     387             :     ! N_SW begins here!
     388             :     !=================================================================
     389             : 
     390             :     ! Init
     391           0 :     W_I_TOT = 0d0
     392           0 :     w_i_ln_n_i_tot = 0d0
     393             : 
     394           0 :     DO I=1,5
     395           0 :        W_I = MASS_FRACTION(I) * S / 1000D0
     396           0 :        W_I_TOT = W_I + W_I_TOT
     397             :     ENDDO
     398             : 
     399           0 :     DO I=1,5
     400           0 :        W_I = MASS_FRACTION(I) * S / 1000d0
     401             : 
     402             :        NI = exp(                                          &
     403             :                  ( ( v1(I) * w_i_tot**v2(I) ) + v3(I) ) / &
     404             :                  ( ( v4(I) * T ) + 1d0                )   &
     405             :                ) / (                                      &
     406             :                      ( v5(I) * (w_i_tot**v6(I)) ) + 1d0   &
     407           0 :                    )
     408             : 
     409             :        !-------------------------------------------------------------
     410             :        ! Prior to 7/1/14:
     411             :        ! NOTE: PRESERVE ORIGINAL CODE HERE:
     412             :        !w_i_ln_n_i_tot = w_i_ln_n_i_tot + (W_I * log(NI))
     413             :        !-------------------------------------------------------------
     414             : 
     415             :        ! BUG FIX: Don't take the log unless NI > 0!! (bmy, 7/1/14)
     416           0 :        IF ( NI > 0d0 ) THEN
     417           0 :           w_i_ln_n_i_tot = w_i_ln_n_i_tot + (W_I * log(NI))
     418             :        ENDIF
     419             :     ENDDO
     420             : 
     421           0 :     n_0 = (T+246d0)/(137.37d0+(5.2842d0*T)+(0.05594d0*(T**2d0)))
     422             : 
     423           0 :     ln_n_m = (1d0 - w_i_tot) * log(n_0) + w_i_ln_n_i_tot
     424             : 
     425           0 :     N = exp(ln_n_m)
     426             : 
     427           0 :   END FUNCTION N_SW
     428             : !EOC
     429             : !------------------------------------------------------------------------------
     430             : !                   Harmonized Emissions Component (HEMCO)                    !
     431             : !------------------------------------------------------------------------------
     432             : !BOP
     433             : !
     434             : ! !IROUTINE: P_SW
     435             : !
     436             : ! !DESCRIPTION: P\_SW returns the seawater density following Millero and
     437             : ! Poisson,  1981.
     438             : !\\
     439             : !\\
     440             : ! !INTERFACE:
     441             : !
     442           0 :   FUNCTION P_SW(T,S) RESULT(P)
     443             : !
     444             : ! !INPUT PARAMETERS:
     445             : !
     446             :     REAL*8, INTENT(IN) :: T,S
     447             : !
     448             : ! !RETURN VALUE:
     449             : !
     450             :     REAL*8             :: P
     451             : !
     452             : ! !REVISION HISTORY:
     453             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     454             : !  See https://github.com/geoschem/hemco for complete history
     455             : !EOP
     456             : !------------------------------------------------------------------------------
     457             : !BOC
     458             : !
     459             : ! !LOCAL VARIABLES:
     460             : !
     461             :     REAL*8            :: A, B, C
     462             : 
     463             :     !=================================================================
     464             :     ! P_SW begins here!
     465             :     !=================================================================
     466             : 
     467             :     !A = 0.824493D0-(4.0899D-3*T)+(7.6438D-5*(T**2d0))-(8.2467D-7*(T**3d0))+(5.3875D-9*(T**4d0))
     468             : !    B = -5.72466D-3+(1.0277D-4*T)-(1.6546D-6*(T**2d0))
     469           0 :     A =  0.824493d0 + T * (-4.0899d-3 + T * (7.6438d-5 + T * (-8.2467d-7 + T * 5.3875d-9)))
     470           0 :     B = -5.72466D-3 + T * ( 1.0277D-4 + T *(-1.6546D-6))
     471           0 :     C =  4.8314D-4
     472             : 
     473             :     ! Density of pure water
     474             : !    P = 999.842594D0+(6.793952D-2*T)-(9.09529D-3*(T**2d0))+(1.001685D-4*(T**3d0))-(1.120083D-6*(T**4d0))+(6.536332D-9*(T**5d0))
     475           0 :     P = 999.842594D0 + T * (6.793952D-2 + T * (-9.09529D-3 + T * (1.001685D-4 + T * (-1.120083D-6 + T * 6.536332D-9 ))))
     476             : 
     477             :     ! Salinity correction
     478           0 :     P = (P+(A*S)+(B*(S**(1.5D0)))+(C*S))
     479             : 
     480           0 :   END FUNCTION P_SW
     481             : !EOC
     482             : !------------------------------------------------------------------------------
     483             : !                   Harmonized Emissions Component (HEMCO)                    !
     484             : !------------------------------------------------------------------------------
     485             : !BOP
     486             : !
     487             : ! !IROUTINE: V_SW
     488             : !
     489             : ! !DESCRIPTION: V\_SW returns the ???
     490             : !\\
     491             : !\\
     492             : ! !INTERFACE:
     493             : !
     494           0 :   FUNCTION V_SW(T,S) RESULT(V)
     495             : !
     496             : ! !INPUT PARAMETERS:
     497             : !
     498             :     REAL*8, INTENT(IN) :: T,S
     499             : !
     500             : ! !RETURN VALUE:
     501             : !
     502             :     REAL*8             :: V
     503             : !
     504             : ! !REVISION HISTORY:
     505             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     506             : !  See https://github.com/geoschem/hemco for complete history
     507             : !EOP
     508             : !------------------------------------------------------------------------------
     509             : !BOC
     510             : !
     511             : ! !LOCAL VARIABLES:
     512             : !
     513             :     REAL*8   :: N, P
     514             : 
     515             :     !=================================================================
     516             :     ! V_SW begins here!
     517             :     !=================================================================
     518             : 
     519           0 :     N=N_SW(T,S)*1D-3
     520           0 :     P=P_SW(T,S)
     521             : 
     522           0 :     V = 1D4*N/P
     523             : 
     524           0 :   END FUNCTION  V_SW
     525             : !EOC
     526             : !------------------------------------------------------------------------------
     527             : !                   Harmonized Emissions Component (HEMCO)                    !
     528             : !------------------------------------------------------------------------------
     529             : !BOP
     530             : !
     531             : ! !IROUTINE: D_WC
     532             : !
     533             : ! !DESCRIPTION: D\_WC returns the (water) diffusion coefficient following Wilke
     534             : !  and Chang, 1955.
     535             : !\\
     536             : !\\
     537             : ! !INTERFACE:
     538             : !
     539           0 :   FUNCTION D_WC(T,S,VB) RESULT(D)
     540             : !
     541             : ! !INPUT PARAMETERS:
     542             : !
     543             :     REAL*8, INTENT(IN) :: T,S,VB
     544             : !
     545             : ! !RETURN VALUE:
     546             : !
     547             :     REAL*8             :: D
     548             : !
     549             : ! !REVISION HISTORY:
     550             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     551             : !  See https://github.com/geoschem/hemco for complete history
     552             : !EOP
     553             : !------------------------------------------------------------------------------
     554             : !BOC
     555             : !
     556             : ! !LOCAL VARIABLES:
     557             : !
     558             :     REAL*8, PARAMETER  :: PHI = 2.6D0
     559             : 
     560             :     !=================================================================
     561             :     ! D_WC begins here!
     562             :     !=================================================================
     563             : 
     564           0 :     D = ((T+273.15D0)*7.4D-8*(PHI*18.01D0)**0.5D0)/((N_SW(T,S))*(VB**0.6D0))
     565             : 
     566           0 :   END FUNCTION D_WC
     567             : !EOC
     568             : !------------------------------------------------------------------------------
     569             : !                   Harmonized Emissions Component (HEMCO)                    !
     570             : !------------------------------------------------------------------------------
     571             : !BOP
     572             : !
     573             : ! !IROUTINE: D_HM
     574             : !
     575             : ! !DESCRIPTION: D\_HM returns the (water) diffusivity following Hayduk and
     576             : ! Minhas, 1982.
     577             : !\\
     578             : !\\
     579             : ! !INTERFACE:
     580             : !
     581           0 :   FUNCTION D_HM(T,S,VB) RESULT(D)
     582             : !
     583             : ! !INPUT PARAMETERS:
     584             : !
     585             :     REAL*8, INTENT(IN) :: T,S,VB
     586             : !
     587             : ! !RETURN VALUE:
     588             : !
     589             :     REAL*8             :: D
     590             : !
     591             : ! !REVISION HISTORY:
     592             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     593             : !  See https://github.com/geoschem/hemco for complete history
     594             : !EOP
     595             : !------------------------------------------------------------------------------
     596             : !BOC
     597             : !
     598             : ! !LOCAL VARIABLES:
     599             : !
     600             :     REAL*8     :: EpsilonStar
     601             : 
     602             :     !=================================================================
     603             :     ! D_HM begins here!
     604             :     !=================================================================
     605             : 
     606           0 :     EpsilonStar = (9.58D0/VB)-1.12D0
     607           0 :     D=1.25D-8*(VB**(-0.19D0)-0.292D0)*((T+273.15D0)**(1.52D0))*((N_SW(T,S))**EpsilonStar)
     608             : 
     609           0 :   END FUNCTION D_HM
     610             : !EOC
     611             : !------------------------------------------------------------------------------
     612             : !                   Harmonized Emissions Component (HEMCO)                    !
     613             : !------------------------------------------------------------------------------
     614             : !BOP
     615             : !
     616             : ! !IROUTINE: Schmidt_W
     617             : !
     618             : ! !DESCRIPTION: Schmidt\_W returns the Schmidt number of the gas in the water
     619             : ! following Johnson, 2010.
     620             : !\\
     621             : !\\
     622             : ! !INTERFACE:
     623             : !
     624           0 :   FUNCTION Schmidt_W(T,S,VB) RESULT(SC)
     625             : !
     626             : ! !INPUT PARAMETERS:
     627             : !
     628             :     REAL*8, INTENT(IN) :: T,S,VB
     629             : !
     630             : ! !RETURN VALUE:
     631             : !
     632             :     REAL*8             :: SC
     633             : !
     634             : ! !REVISION HISTORY:
     635             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     636             : !  See https://github.com/geoschem/hemco for complete history
     637             : !EOP
     638             : !------------------------------------------------------------------------------
     639             : !BOC
     640             : 
     641             :     !=================================================================
     642             :     ! SCHMIDT_W begins here!
     643             :     !=================================================================
     644             : 
     645           0 :     SC = 2D0 * V_SW(T,S) / ( D_HM(T,S,VB) + D_WC(T,S,VB) )
     646             : 
     647           0 :   END FUNCTION Schmidt_W
     648             : !EOC
     649             : !------------------------------------------------------------------------------
     650             : !                   Harmonized Emissions Component (HEMCO)                    !
     651             : !------------------------------------------------------------------------------
     652             : !BOP
     653             : !
     654             : ! !IROUTINE: Schmidt_Saltzmann
     655             : !
     656             : ! !DESCRIPTION: Schmidt\_Saltzmann returns the Schmidt number of the gas in
     657             : ! the water calculated according to Saltzmann et al., 1993.
     658             : !\\
     659             : !\\
     660             : ! !INTERFACE:
     661             : !
     662           0 :   FUNCTION Schmidt_Saltzmann(T) RESULT(SC)
     663             : !
     664             : ! !INPUT PARAMETERS:
     665             : !
     666             :     REAL*8, INTENT(IN) :: T   ! Temperature in C
     667             : !
     668             : ! !RETURN VALUE:
     669             : !
     670             :     REAL*8             :: SC
     671             : !
     672             : ! !REVISION HISTORY:
     673             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     674             : !  See https://github.com/geoschem/hemco for complete history
     675             : !EOP
     676             : !------------------------------------------------------------------------------
     677             : !BOC
     678             : !
     679             :     !=================================================================
     680             :     ! SCHMIDT_SALTZMANN begins here!
     681             :     !=================================================================
     682             : 
     683           0 :     SC = 2674.0d0 + T * ( -147.12d0 + T * ( 3.726d0 - T * 0.038d0 ) )
     684             : 
     685           0 :   END FUNCTION Schmidt_Saltzmann
     686             : !EOC
     687             : !------------------------------------------------------------------------------
     688             : !                   Harmonized Emissions Component (HEMCO)                    !
     689             : !------------------------------------------------------------------------------
     690             : !BOP
     691             : !
     692             : ! !IROUTINE: Schmidt_Acet
     693             : !
     694             : ! !DESCRIPTION: Schmidt\_Acet returns the Schmidt number of acetone.
     695             : !\\
     696             : !\\
     697             : ! !INTERFACE:
     698             : !
     699           0 :   FUNCTION Schmidt_Acet(T) RESULT(SC)
     700             : !
     701             : ! !INPUT PARAMETERS:
     702             : !
     703             :     REAL*8, INTENT(IN) :: T   ! Temperature in C
     704             : !
     705             : ! !RETURN VALUE:
     706             : !
     707             :     REAL*8             :: SC
     708             : !
     709             : ! !NOTES:
     710             : !  Coefficients for fitting the Schmidt number for acetone [unitless]
     711             : !    A0 =  3287.687d0
     712             : !    A1 = -136.2176d0
     713             : !    A2 =  2.20642d0
     714             : !    A3 = -0.01410642d0
     715             : !
     716             : ! !REVISION HISTORY:
     717             : !  11 Aug 2013 - C. Keller: Initial version
     718             : !  See https://github.com/geoschem/hemco for complete history
     719             : !EOP
     720             : !------------------------------------------------------------------------------
     721             : !BOC
     722             : !
     723             :     !=================================================================
     724             :     ! SCHMIDT_ACET begins here!
     725             :     !=================================================================
     726             : 
     727           0 :     SC = 3287.687d0 + T * ( -136.2176d0 + T * ( 2.20642d0 - T*0.01410642d0 ) )
     728             : 
     729           0 :   END FUNCTION Schmidt_Acet
     730             : !EOC
     731             : !------------------------------------------------------------------------------
     732             : !                   Harmonized Emissions Component (HEMCO)                    !
     733             : !------------------------------------------------------------------------------
     734             : !BOP
     735             : !
     736             : ! !IROUTINE: Schmidt_Ald2
     737             : !
     738             : ! !DESCRIPTION: Schmidt\_Ald2 returns the Schmidt number of acetaldehyde.
     739             : !\\
     740             : !\\
     741             : ! !INTERFACE:
     742             : !
     743           0 :   FUNCTION Schmidt_Ald2(T) RESULT(SC)
     744             : !
     745             : ! !INPUT PARAMETERS:
     746             : !
     747             :     REAL*8, INTENT(IN) :: T   ! Temperature in C
     748             : !
     749             : ! !RETURN VALUE:
     750             : !
     751             :     REAL*8             :: SC
     752             : !
     753             : ! !NOTES:
     754             : !  Coefficients for fitting the Schmidt number for acetaldehyde [unitless]
     755             : !  Derived using polynomial fit (code provided by qli, same as used
     756             : !  for acetone, methanol)
     757             : !  and partial molal volume of acetaldehyde at its normal boiling
     758             : !  temperature (51.8 cm3/g/mole) calculated using Le Bas method
     759             : !  see "The Properties of Gases and Liquids", Reid, Prausnitz, Sherwood.
     760             : !    A0 = 2581.709d0
     761             : !    A1 = -106.9671d0
     762             : !    A2 = 1.73263d0
     763             : !    A3 = -0.0110773d0
     764             : !
     765             : ! !REVISION HISTORY:
     766             : !  10 Mar 2017 - M. Sulprizio- Initial version
     767             : !  See https://github.com/geoschem/hemco for complete history
     768             : !EOP
     769             : !------------------------------------------------------------------------------
     770             : !BOC
     771             : !
     772             :     !=================================================================
     773             :     ! SCHMIDT_ALD2 begins here!
     774             :     !=================================================================
     775             : 
     776           0 :     SC = 2581.709d0 + T * ( -106.9671d0 + T * ( 1.73263d0 - T*0.0110773d0 ) )
     777             : 
     778           0 :   END FUNCTION Schmidt_Ald2
     779             : !EOC
     780             : !------------------------------------------------------------------------------
     781             : !                   Harmonized Emissions Component (HEMCO)                    !
     782             : !------------------------------------------------------------------------------
     783             : !BOP
     784             : !
     785             : ! !IROUTINE: N_Air
     786             : !
     787             : ! !DESCRIPTION: N\_Air returns the dynamic air viscosity.
     788             : !\\
     789             : !\\
     790             : ! !INTERFACE:
     791             : !
     792           0 :   FUNCTION N_Air(T) RESULT(N)
     793             : !
     794             : ! !INPUT PARAMETERS:
     795             : !
     796             :     REAL*8, INTENT(IN) :: T
     797             : !
     798             : ! !RETURN VALUE:
     799             : !
     800             :     REAL*8             :: N
     801             : !
     802             : ! !REVISION HISTORY:
     803             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     804             : !  See https://github.com/geoschem/hemco for complete history
     805             : !EOP
     806             : !------------------------------------------------------------------------------
     807             : !BOC
     808             : !
     809             : ! !LOCAL VARIABLES:
     810             :     REAL*8             :: SV_0,SV_1,SV_2,SV_3,SV_4
     811             : 
     812             :     !=================================================================
     813             :     ! N_AIR begins here!
     814             :     !=================================================================
     815             : 
     816           0 :     SV_0 =  1.715747771D-5
     817           0 :     SV_1 =  4.722402075D-8
     818           0 :     SV_2 = -3.663027156D-10
     819           0 :     SV_3 =  1.873236686D-12
     820           0 :     SV_4 = -8.050218737D-14
     821             : 
     822             :     ! in N.s/m^2 (Pa.s)
     823             : !    N = SV_0+(SV_1*T)+(SV_2*T**2d0)+(SV_3*T**3d0)+(SV_4*T**4d0)
     824           0 :     N = SV_0 + T * ( SV_1 + T * ( SV_2 + T * (SV_3 + T * SV_4) ) )
     825             : 
     826           0 :   END FUNCTION N_Air
     827             : !EOC
     828             : !------------------------------------------------------------------------------
     829             : !                   Harmonized Emissions Component (HEMCO)                    !
     830             : !------------------------------------------------------------------------------
     831             : !BOP
     832             : !
     833             : ! !IROUTINE: P_Air
     834             : !
     835             : ! !DESCRIPTION: P\_Air returns the kinematic air viscosity.
     836             : !\\
     837             : !\\
     838             : ! !INTERFACE:
     839             : !
     840           0 :   FUNCTION P_Air(T) RESULT(P)
     841             : !
     842             : ! !INPUT PARAMETERS:
     843             : !
     844             :     REAL*8, INTENT(IN) :: T
     845             : !
     846             : ! !RETURN VALUE:
     847             : !
     848             :     REAL*8             :: P
     849             : !
     850             : ! !REVISION HISTORY:
     851             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     852             : !  See https://github.com/geoschem/hemco for complete history
     853             : !EOP
     854             : !------------------------------------------------------------------------------
     855             : !BOC
     856             : !
     857             : ! !LOCAL VARIABLES:
     858             :     REAL*8             :: SD_0,SD_1,SD_2,SD_3
     859             : 
     860             :     !=================================================================
     861             :     ! P_AIR begins here!
     862             :     !=================================================================
     863             : 
     864           0 :     SD_0 =  1.293393662D0
     865           0 :     SD_1 = -5.538444326D-3
     866           0 :     SD_2 =  3.860201577D-5
     867           0 :     SD_3 = -5.2536065D-7
     868           0 :     P = SD_0 + T * (SD_1 + T * (SD_2 + T * SD_3 ))
     869             : !    P = SD_0+(SD_1*T)+(SD_2*T**2)+(SD_3*T**3)
     870             : 
     871           0 :   END FUNCTION P_Air
     872             : !EOC
     873             : !------------------------------------------------------------------------------
     874             : !                   Harmonized Emissions Component (HEMCO)                    !
     875             : !------------------------------------------------------------------------------
     876             : !BOP
     877             : !
     878             : ! !IROUTINE: V_Air
     879             : !
     880             : ! !DESCRIPTION: V\_Air returns the kinematic air viscosity (m2/s).
     881             : !\\
     882             : !\\
     883             : ! !INTERFACE:
     884             : !
     885           0 :   FUNCTION V_Air(T) RESULT(V)
     886             : !
     887             : ! !INPUT PARAMETERS:
     888             : !
     889             :     REAL*8, INTENT(IN) :: T
     890             : !
     891             : ! !RETURN VALUE:
     892             : !
     893             :     REAL*8             :: V
     894             : !
     895             : ! !REVISION HISTORY:
     896             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     897             : !  See https://github.com/geoschem/hemco for complete history
     898             : !EOP
     899             : !------------------------------------------------------------------------------
     900             : !BOC
     901             : !
     902             :     !=================================================================
     903             :     ! V_AIR begins here!
     904             :     !=================================================================
     905             : 
     906           0 :     V = N_AIR(T)/P_AIR(T)
     907             : 
     908           0 :   END FUNCTION V_Air
     909             : !EOC
     910             : !------------------------------------------------------------------------------
     911             : !                   Harmonized Emissions Component (HEMCO)                    !
     912             : !------------------------------------------------------------------------------
     913             : !BOP
     914             : !
     915             : ! !IROUTINE: D_Air
     916             : !
     917             : ! !DESCRIPTION: D\_Air returns the gas phase diffusion coefficient according to
     918             : ! Fuller et al., 1966.
     919             : !\\
     920             : !\\
     921             : ! !INTERFACE:
     922             : !
     923           0 :   FUNCTION D_Air(T,P,MW,VB) RESULT(D)
     924             : !
     925             : ! !INPUT PARAMETERS:
     926             : !
     927             :     REAL*8, INTENT(IN) :: T  !T in C
     928             :     REAL*8, INTENT(IN) :: P  !P in Pa
     929             :     REAL*8, INTENT(IN) :: MW !MW in g/mol
     930             :     REAL*8, INTENT(IN) :: VB !Liq. molar volume (cm3/mol)
     931             : !
     932             : ! !RETURN VALUE:
     933             : !
     934             :     REAL*8             :: D
     935             : !
     936             : ! !REVISION HISTORY:
     937             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     938             : !  See https://github.com/geoschem/hemco for complete history
     939             : !EOP
     940             : !------------------------------------------------------------------------------
     941             : !BOC
     942             : !
     943             : ! !LOCAL VARIABLES:
     944             : !
     945             :     REAL*8            :: Pa
     946             :     REAL*8, PARAMETER :: Ma = 29.97d0 !Mw air in g/mol
     947             :     REAL*8, PARAMETER :: Va = 20.1d0  !cm3/mol (diffusion volume for air)
     948             : 
     949             :     !=================================================================
     950             :     ! D_AIR begins here!
     951             :     !=================================================================
     952             : 
     953             :     ! Convert P to atm
     954           0 :     PA = 9.8692D-6*P
     955             : 
     956             :     ! Calculate diffusion coefficient
     957             :     D  = 1D-3 * (T+273.15D0)**(1.75D0)*SQRT(1D0/Ma +     &
     958           0 :         1D0/MW)/(PA*(VA**(1D0/3D0)+VB**(1D0/3D0))**2D0)
     959             : 
     960             :     !D is in cm2/s convert to m2/s
     961           0 :     D = D * 1D-4
     962             : 
     963           0 :   END FUNCTION D_Air
     964             : !EOC
     965             : !------------------------------------------------------------------------------
     966             : !                   Harmonized Emissions Component (HEMCO)                    !
     967             : !------------------------------------------------------------------------------
     968             : !BOP
     969             : !
     970             : ! !IROUTINE: Schmidt_G
     971             : !
     972             : ! !DESCRIPTION: Schmidt\_G returns the schmidt number of the gas in the air.
     973             : !\\
     974             : !\\
     975             : ! !INTERFACE:
     976             : !
     977           0 :   FUNCTION Schmidt_G(T,P,MW,VB) RESULT(SC)
     978             : !
     979             : ! !INPUT PARAMETERS:
     980             : !
     981             :     REAL*8, INTENT(IN) :: T, P, MW, VB
     982             : !
     983             : ! !RETURN VALUE:
     984             : !
     985             :     REAL*8             :: SC
     986             : !
     987             : ! !REVISION HISTORY:
     988             : !  11 Apr 2013 - C. Keller: Adapted from F. Paulot
     989             : !  See https://github.com/geoschem/hemco for complete history
     990             : !EOP
     991             : !------------------------------------------------------------------------------
     992             : !BOC
     993             : !
     994             : ! !LOCAL VARIABLES:
     995             : !
     996             :     REAL*8 :: D,V
     997             : 
     998             :     !=================================================================
     999             :     ! SCHMIDT_G begins here!
    1000             :     !=================================================================
    1001             : 
    1002           0 :     V=V_AIR(T)
    1003           0 :     D=D_AIR(T,P,MW,VB)
    1004             : 
    1005           0 :     SC = V / D
    1006             : 
    1007           0 :   END FUNCTION Schmidt_G
    1008             : !EOC
    1009             : END MODULE Ocean_ToolBox_Mod

Generated by: LCOV version 1.14