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.
Changeset 10196 for branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcdms_medusa.F90 – NEMO

Ignore:
Timestamp:
2018-10-16T12:15:14+02:00 (6 years ago)
Author:
jpalmier
Message:

add DMS flux --

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  
    77   !!  -   !  2014-08  (J. Palmieri - A. Yool)    added for UKESM1 project 
    88   !!  -   !  2017-05  (A. Yool)                  add extra Anderson scheme 
     9   !!  -   !  2018-10 (A. Yool)                   Add air-sea DMS flux 
    910   !!---------------------------------------------------------------------- 
    1011#if defined key_medusa && defined key_roam 
     
    2526 
    2627      PUBLIC   trc_dms_medusa    ! called in trc_bio_medusa 
     28      PUBLIC   dms_flux_ocn      ! called in air_sea 
    2729 
    2830   !!* Substitution 
     
    170172        endif 
    171173 
    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 
    173303 
    174304 
Note: See TracChangeset for help on using the changeset viewer.