Changeset 10196 for branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcdms_medusa.F90
- Timestamp:
- 2018-10-16T12:15:14+02:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcdms_medusa.F90
r9258 r10196 7 7 !! - ! 2014-08 (J. Palmieri - A. Yool) added for UKESM1 project 8 8 !! - ! 2017-05 (A. Yool) add extra Anderson scheme 9 !! - ! 2018-10 (A. Yool) Add air-sea DMS flux 9 10 !!---------------------------------------------------------------------- 10 11 #if defined key_medusa && defined key_roam … … 25 26 26 27 PUBLIC trc_dms_medusa ! called in trc_bio_medusa 28 PUBLIC dms_flux_ocn ! called in air_sea 27 29 28 30 !!* Substitution … … 170 172 endif 171 173 172 END SUBROUTINE trc_dms_medusa 174 END SUBROUTINE trc_dms_medusa 175 176 177 !======================================================================= 178 !======================================================================= 179 !======================================================================= 180 181 182 !======================================================================= 183 ! 184 SUBROUTINE dms_flux_ocn( wind_10m, tstar, dms_conc, i_dms_flux, & !! inputs 185 & f_dms ) !! outputs 186 ! 187 !======================================================================= 188 !! 189 !! Title : Calculates DMS air-sea exchange 190 !! Author : Andrew Yool, based on UKMO original code 191 !! Date : 11/10/18 192 !! 193 !! Air-sea DMS flux is normally calculated by the UM atmosphere, 194 !! as part of its aerosols; however, the OMIP simulation for CMIP6 195 !! is ocean-only and does not include the UM; consequently, this 196 !! code has been added to permit ocean-only UKESM1 to produce an 197 !! air-sea DMS flux in addition to surface DMS which, hitherto, 198 !! was all it would produce; code is largely copy-pasted from the 199 !! UKMO original (UM code block is dms_flux_4A.F90); the code 200 !! here is hard-wired to use single input values (i.e. not a 2D 201 !! area) and make use of the Liss & Merlivat (1986) function 202 !! 203 !! This DMS function is called from air_sea.F90 204 205 !--------------------------------------------------------------------- 206 ! Purpose: To calculate the flux of DMS (as kg m-2 s-1 of sulphur) 207 ! from the ocean surface as a function of its concentration 208 ! in seawater and of windspeed. The sea-air exchange can 209 ! be determined according to one of three commonly-used 210 ! parametrization schemes, those of Liss & Merlivat (1986), 211 ! Wanninkhof (1992) or Nightingale et al. (2000). The routine 212 ! is called by Aero_Ctl. 213 ! 214 ! Method: The Schmidt number 215 ! for DMS is calculated as in Saltzman et al. (1993), and 216 ! used with the windspeed to determine the mass transfer (or 217 ! "piston") velocity according to the desired parametrization. 218 ! This is then used to determine the sea-air mass flux of DMS 219 ! as a function of sea-water DMS concentration. High surface 220 ! temperatures (caused by the land portion of a gridbox when 221 ! coastal tiling is not active) cause negative Sc values which 222 ! would give a floating-point error in the k_DMS calculation, 223 ! so the Tstar values are capped. This shouldn't be a problem 224 ! when coastal tiling is on as then the Tstar values passed in 225 ! are those for sea only. 226 ! 227 ! Code Owner: Please refer to the UM file CodeOwners.txt 228 ! This file belongs in section: Aerosols 229 ! 230 ! Code Description: 231 ! Language: Fortran 90 232 ! This code is written to UMDP3 v8 programming standards 233 ! 234 !--------------------------------------------------------------------- 235 236 IMPLICIT NONE 237 ! 238 REAL(wp), INTENT( in ) :: wind_10m !! 10m wind (m/s) 239 REAL(wp), INTENT( in ) :: tstar !! SST (degrees C) 240 REAL(wp), INTENT( in ) :: dms_conc !! surface DMS (nmol / l) 241 INTEGER, INTENT(in) :: i_dms_flux !! gas transfer choice 242 ! 243 REAL(wp), INTENT( inout ) :: f_dms !! DMS flux (kg S m-2 s-1) 244 245 ! Local variables: 246 REAL :: sc ! Schmidt number 247 REAL :: k_dms ! Piston velocity of DMS (cm h-1) 248 REAL :: t_c ! Surface temperature in degrees Celsius 249 ! Piston velocities for gases with Schmidt numbers of 600 & 660 resp. (cm h-1) 250 REAL :: k_600 251 REAL :: k_660 252 REAL :: n ! Schmidt number exponent 253 REAL, PARAMETER :: t_max = 47.0 !! Max T to avoid breaking the Sc fit (C) 254 255 ! Calculate the Schmidt number (Sc): 256 t_c = MIN(tstar, t_max) 257 sc = 2674.0 - (147.12*t_c) + (3.726*t_c**2) & 258 - (0.038*t_c**3) 259 260 ! Determine the mass transfer (or "piston") velocity (k_DMS) over sea 261 ! according to the specified parametrization scheme: 262 263 if (i_dms_flux .eq. 1) then 264 ! ---------------------------------------------------------------------- 265 ! Liss & Merlivat (1986) 266 IF (wind_10m .le. 3.6) THEN 267 k_600 = 0.17 * wind_10m 268 n = -2.0/3.0 269 ELSEIF ( wind_10m .gt. 3.6 .AND. wind_10m .le. 13.0 ) THEN 270 k_600 = (2.85 * wind_10m) - 9.65 271 n = -0.5 272 ELSE 273 k_600 = (5.90 * wind_10m) - 49.3 274 n = -0.5 275 END IF 276 k_dms = k_600 * (sc / 600.0)**n 277 elseif (i_dms_flux .eq. 2) then 278 ! ---------------------------------------------------------------------- 279 ! Wanninkhof (1992) 280 k_660 = 0.31 * wind_10m**2 281 n = -0.5 282 k_dms = k_660 * (sc / 660.0)**n 283 elseif (i_dms_flux .eq. 3) then 284 ! ---------------------------------------------------------------------- 285 ! Nightingale et al. (2000) 286 k_600 = (0.222 * wind_10m**2) + (0.333 * wind_10m) 287 n = -0.5 288 k_dms = k_600 * (sc / 600.0)**n 289 else 290 ! ---------------------------------------------------------------------- 291 ! You shouldn't be here 292 k_dms = 0.0 293 endif 294 295 ! Finally, calculate the sea-air flux of DMS as a function of k_DMS 296 ! and dissolved DMS concentration. The former requires a conversion 297 ! from cm hour-1 to ms-1, and the latter from nanomoles per litre to 298 ! kg[S] m-3, to return the flux in kg[S] m-2 sec-1. 299 300 f_dms = (k_dms / 3.6e5) * (dms_conc * 32.0e-9) 301 302 END SUBROUTINE dms_flux_ocn 173 303 174 304
Note: See TracChangeset
for help on using the changeset viewer.