New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
gas_transfer.F90 in branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/MEDUSA – NEMO

source: branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/MEDUSA/gas_transfer.F90

Last change on this file was 6715, checked in by jpalmier, 8 years ago

JPALM -- 16-06-2016 -- MEDUSA branch update :

-- pass co2 flux and dms_surf through restart for atm coupling.
-- introduce CFC cycle for dynamic evolution comparison
-- add Tim Graham Age tracer
-- include MEDUSA Q10 modif
-- svn-key removed
-- still need debug stage

File size: 5.3 KB
Line 
1MODULE 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
30CONTAINS
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
139CONTAINS
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   !!======================================================================
154END MODULE gastransfer
Note: See TracBrowser for help on using the repository browser.