[5841] | 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) |
---|
[6715] | 26 | !! $Id$ |
---|
[5841] | 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 |
---|