1 | MODULE gastransfer |
---|
2 | !!====================================================================== |
---|
3 | !! *** MODULE trcdms_medusa *** |
---|
4 | !! TOP : MEDUSA |
---|
5 | !!====================================================================== |
---|
6 | !! History : |
---|
7 | !! - ! 2015-06 (A. Yool) added for UKESM1 project |
---|
8 | !!---------------------------------------------------------------------- |
---|
9 | #if defined key_medusa && defined key_roam |
---|
10 | USE oce_trc |
---|
11 | USE trc |
---|
12 | USE sms_medusa |
---|
13 | USE lbclnk |
---|
14 | USE prtctl_trc ! Print control for debugging |
---|
15 | USE in_out_manager ! I/O manager |
---|
16 | |
---|
17 | IMPLICIT NONE |
---|
18 | PRIVATE |
---|
19 | |
---|
20 | PUBLIC gas_transfer ! called by trcbio_medusa.F90 module |
---|
21 | |
---|
22 | !!* Substitution |
---|
23 | # include "domzgr_substitute.h90" |
---|
24 | !!---------------------------------------------------------------------- |
---|
25 | !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) |
---|
26 | !! $Id$ |
---|
27 | !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) |
---|
28 | !!---------------------------------------------------------------------- |
---|
29 | |
---|
30 | CONTAINS |
---|
31 | |
---|
32 | subroutine gas_transfer(wind, N, eqn, kw660) |
---|
33 | ! -------------------------------------------------------------------- |
---|
34 | ! Gas transfer velocity |
---|
35 | ! -------------------------------------------------------------------- |
---|
36 | ! |
---|
37 | ! Title : Calculates gas transfer velocity |
---|
38 | ! Author : Andrew Yool |
---|
39 | ! Date : 15/10/04 |
---|
40 | ! |
---|
41 | ! This subroutine uses near-surface wind speed to calculate gas |
---|
42 | ! transfer velocity for use in CO2 and O2 exchange calculations. |
---|
43 | ! |
---|
44 | ! Note that the parameterisation of Wanninkhof quoted here is a |
---|
45 | ! truncation of the original equation. It excludes a chemical |
---|
46 | ! enhancement function (based on temperature), although such |
---|
47 | ! temperature dependence is reported negligible by Etcheto & |
---|
48 | ! Merlivat (1988). |
---|
49 | ! |
---|
50 | ! Note also that in calculating scalar wind, the variance of the |
---|
51 | ! wind over the period of a timestep is ignored. Some authors, |
---|
52 | ! for instance OCMIP-2, favour including some reference to the |
---|
53 | ! variability of wind. However, their wind fields are averaged |
---|
54 | ! over relatively long time periods, and so this issue may be |
---|
55 | ! safely (!) ignored here. |
---|
56 | ! |
---|
57 | ! AXY (12/06/2015) |
---|
58 | ! UPDATED: revised formulation from Wanninkhof (2014) update to |
---|
59 | ! original 1992 paper. Full reference is: |
---|
60 | ! |
---|
61 | ! Wanninkhof, R. (2014). Relationship between wind speed and gas |
---|
62 | ! exchange over the ocean revisited. LIMNOLOGY AND OCEANOGRAPHY-METHODS |
---|
63 | ! 12, 351-362, doi:10.4319/lom.2014.12.351 |
---|
64 | ! |
---|
65 | ! Subroutine inputs are (in order) : |
---|
66 | ! wind wind velocity at 10 m (m/s) |
---|
67 | ! N size of input array (value 1 at this time) |
---|
68 | ! eqn choice of parameterisation: |
---|
69 | ! 1 = Liss & Merlivat (1986) [approximated] |
---|
70 | ! 2 = Wanninkhof (1992) [sans enhancement] |
---|
71 | ! 3 = Nightingale et al. (2000) [good] |
---|
72 | ! 4 = Nightingale et al. (2000) [better] |
---|
73 | ! 5 = Nightingale et al. (2000) [best] |
---|
74 | ! 6 = OCMIP-2 [sans variability] |
---|
75 | ! 7 = Wanninkhof (2014) [assumes 6h avg winds] |
---|
76 | ! (*) k gas transfer velocity (m/s) |
---|
77 | ! |
---|
78 | ! Where (*) is the function output and (+) is a diagnostic output. |
---|
79 | ! |
---|
80 | implicit none |
---|
81 | |
---|
82 | INTEGER, INTENT(in) :: N, eqn |
---|
83 | ! Input variables |
---|
84 | ! real(kind=wp), INTENT(in), DIMENSION(N) :: wind |
---|
85 | real(wp), INTENT(in) :: wind |
---|
86 | ! |
---|
87 | ! Output variables |
---|
88 | ! real(kind=wp), INTENT(out), DIMENSION(N) :: kw660 |
---|
89 | real(wp), INTENT(out) :: kw660 |
---|
90 | ! |
---|
91 | ! INTEGER :: eqn |
---|
92 | ! |
---|
93 | ! Coefficients for various parameterisations |
---|
94 | real(wp) :: a(7) |
---|
95 | real(wp) :: b(7) |
---|
96 | ! |
---|
97 | ! real(wp), DIMENSION(N) :: tmp_k |
---|
98 | real(wp) :: tmp_k |
---|
99 | ! |
---|
100 | ! Values of coefficients |
---|
101 | data a(1) / 0.166 / ! Liss & Merlivat (1986) [approximated] |
---|
102 | data a(2) / 0.3 / ! Wanninkhof (1992) [sans enhancement] |
---|
103 | data a(3) / 0.23 / ! Nightingale et al. (2000) [good] |
---|
104 | data a(4) / 0.23 / ! Nightingale et al. (2000) [better] |
---|
105 | data a(5) / 0.222 / ! Nightingale et al. (2000) [best] |
---|
106 | data a(6) / 0.337 / ! OCMIP-2 [sans variability] |
---|
107 | data a(7) / 0.251 / ! Wanninkhof (2014) [assumes 6h avg winds] |
---|
108 | ! |
---|
109 | data b(1) / 0.133 / |
---|
110 | data b(2) / 0.0 / |
---|
111 | data b(3) / 0.0 / |
---|
112 | data b(4) / 0.1 / |
---|
113 | data b(5) / 0.333 / |
---|
114 | data b(6) / 0.0 / |
---|
115 | data b(7) / 0.0 / |
---|
116 | ! |
---|
117 | ! Which parameterisation is to be used? |
---|
118 | ! eqn = 7 |
---|
119 | ! |
---|
120 | ! Calculate gas transfer velocity (cm/h) |
---|
121 | tmp_k = (a(eqn) * wind**2) + (b(eqn) * wind) |
---|
122 | ! |
---|
123 | ! Convert tmp_k from cm/h to m/s |
---|
124 | kw660 = tmp_k / (100. * 3600.) |
---|
125 | ! |
---|
126 | return |
---|
127 | |
---|
128 | end subroutine gas_transfer |
---|
129 | |
---|
130 | !======================================================================= |
---|
131 | !======================================================================= |
---|
132 | !======================================================================= |
---|
133 | |
---|
134 | #else |
---|
135 | !!====================================================================== |
---|
136 | !! Dummy module : No MEDUSA bio-model |
---|
137 | !!====================================================================== |
---|
138 | |
---|
139 | CONTAINS |
---|
140 | |
---|
141 | SUBROUTINE gas_transfer(wind, N, eqn, kw660) |
---|
142 | USE par_kind |
---|
143 | |
---|
144 | REAL(wp), INTENT( in ) :: wind |
---|
145 | REAL(wp), INTENT( in ) :: kw660 |
---|
146 | INTEGER, INTENT(in) :: N, eqn |
---|
147 | |
---|
148 | WRITE(*,*) 'gas_transfer: You should not have seen this print! error?', kt |
---|
149 | |
---|
150 | END SUBROUTINE gas_transfer |
---|
151 | #endif |
---|
152 | |
---|
153 | !!====================================================================== |
---|
154 | END MODULE gastransfer |
---|