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
|