Changeset 10196


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

add DMS flux —

Location:
branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/CONFIG/SHARED/field_def_bgc.xml

    r10062 r10196  
    489489       <field id= "DMS_HALL"   long_name="DMS Surface Concentration, Halloran"       unit="nmol/L"      /> 
    490490       <field id= "DMS_ANDM"   long_name="DMS Surface Concentration, Anderson modif" unit="nmol/L"      /> 
     491       <field id= "DMS_FLUX"   long_name="DMS Sea-Air flux"                          unit="kg-S/m2/s"   /> 
    491492       <field id= "CHL_MLD"    long_name="MLD averaged Chlorophyll"                  unit="mg-Chl/m3"   /> 
    492493       <field id= "CHL_CPL"    long_name="Scaled Surf or MLD Chlorophyll to UM"      unit="kg Chl/m3"   /> 
     
    21942195       <field field_ref="SMS_FER_E3T"  name="SMS_FER_E3T"   /> 
    21952196       <field field_ref="SMS_DiC_E3T"  name="SMS_DiC_E3T"   /> 
     2197       <field field_ref="SMS_OXY_E3T"  name="SMS_OXY_E3T"   /> 
    21962198       <field field_ref="SMS_ALK_E3T"  name="SMS_ALK_E3T"   /> 
    21972199       <!-- trd case: jptra_tot --> 
     
    22002202       <field field_ref="TOT_FER_E3T"  name="TOT_FER_E3T"   /> 
    22012203       <field field_ref="TOT_DiC_E3T"  name="TOT_DiC_E3T"   /> 
     2204       <field field_ref="TOT_OXY_E3T"  name="TOT_OXY_E3T"   /> 
    22022205       <field field_ref="TOT_ALK_E3T"  name="TOT_ALK_E3T"   /> 
    22032206    </field_group> 
     
    25252528      <field field_ref= "DMS_HALL"   name="DMS_HALL"   /> 
    25262529      <field field_ref= "DMS_ANDM"   name="DMS_ANDM"   /> 
     2530      <field field_ref= "DMS_FLUX"   name="DMS_FLUX"   /> 
    25272531    </field_group> 
    25282532 
  • branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/air_sea.F90

    r10049 r10196  
    77   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90 
    88   !!   -   ! 2017-08 (A. Yool)            Add air-sea flux kill switch 
    9    !!   -   ! 2018-08 (A. Yool)            add OMIP preindustrial DIC 
     9   !!   -   ! 2018-08 (A. Yool)            add OMIP preindustrial DIC  
     10   !!   -   ! 2018-10 (A. Yool)            Add air-sea DMS flux 
    1011   !!---------------------------------------------------------------------- 
    1112#if defined key_medusa 
     
    4344                                   dms_surf2d, dms_andm, dms_andm2d,      & 
    4445                                   dms_nlim, dms_wtkn,                    & 
     46               dms_flux, dms_flux2d,                  & 
    4547                                   f_co2flux, f_co2flux2d,                & 
    4648                                   f_co2starair_2d, f_co3,                & 
     
    105107      USE trcco2_medusa,     ONLY: trc_co2_medusa 
    106108#  endif  
    107       USE trcdms_medusa,     ONLY: trc_dms_medusa 
     109      USE trcdms_medusa,     ONLY: trc_dms_medusa, dms_flux_ocn 
    108110      USE trcoxy_medusa,     ONLY: trc_oxy_medusa 
    109111# endif 
     
    540542                  endif 
    541543                  !! 
     544                  !! calculate air-sea DMS flux using UM code 
     545                  CALL dms_flux_ocn(wndm(ji,jj),ztmp(ji,jj),dms_surf,1, & 
     546                                    dms_flux) 
     547                  !! 
     548                  !! Correct DMS flux for sea-ice, but leave units as kg S m-2 s-1 
     549                  dms_flux = (1. - fr_i(ji,jj)) * dms_flux 
     550                  !! 
    542551                  !! 2D diag through iom_use 
    543552                  IF( med_diag%DMS_SURF%dgsave ) THEN 
     
    558567                  IF( med_diag%DMS_ANDM%dgsave ) THEN  
    559568                     dms_andm2d(ji,jj) = dms_andm 
     569                  ENDIF 
     570                  IF( med_diag%DMS_FLUX%dgsave ) THEN  
     571                     dms_flux2d(ji,jj) = dms_flux 
    560572                  ENDIF 
    561573               ENDIF 
  • branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_diag_slice.F90

    r10047 r10196  
    77   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90 
    88   !!   -   ! 2018-08 (A. Yool)            add OMIP preindustrial DIC 
     9   !!   -   ! 2018-10 (A. Yool)            Add air-sea DMS flux 
    910   !!---------------------------------------------------------------------- 
    1011#if defined key_medusa 
     
    196197               CALL iom_put( "DMS_ANDM"  , dms_andm2d ) 
    197198               DEALLOCATE( dms_andm2d ) 
     199            ENDIF 
     200            IF( med_diag%DMS_FLUX%dgsave ) THEN 
     201               CALL iom_put( "DMS_FLUX"  , dms_flux2d ) 
     202               DEALLOCATE( dms_flux2d ) 
    198203            ENDIF 
    199204         ENDIF 
  • branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90

    r10047 r10196  
    3333      !!---------------------------------------------------------------------- 
    3434      USE bio_medusa_mod 
    35       USE dom_oce,           ONLY: atfp, atfp1, neuler, rdt, tmask 
     35      USE dom_oce,           ONLY: atfp, atfp1, neuler, rdt, tmask, e3t_0 
     36# if defined key_vvl 
     37      USE dom_oce,           ONLY: e3t_n  
     38# endif 
    3639      USE in_out_manager,    ONLY: lwp, numout 
    3740      USE iom,               ONLY: iom_put 
     
    6265      INTEGER :: jn 
    6366 
    64       REAL(wp) :: fq0,fq1,fq2,fq3 
     67      REAL(wp) :: fq0,fq1,fq2,fq3,fq4 
     68 
     69 
     70   !!* Substitution 
     71#  include "domzgr_substitute.h90" 
    6572 
    6673# if defined key_roam                      
     
    149156                  fq2 = fq0 + fq1 
    150157                  fq3 = f_benout_n(ji,jj) 
    151                   if (lwp) write (numout,'a,2i3,a,4f15,5)')                   & 
     158                  if (lwp) write (numout,'(a,2i3,a,4f15.5)')                   & 
    152159                     'AXY N   cons: (i,j)=',ji,jj,', (flx,ben,err,out)=',      & 
    153160                     fq0,fq1,fq2,fq3 
     
    163170                  fq2 = fq0 + fq1 
    164171                  fq3 = f_benout_si(ji,jj) 
    165                   if (lwp) write (numout,'a,2i3,a,4f15,5)')                   & 
     172                  if (lwp) write (numout,'(a,2i3,a,4f15.5)')                   & 
    166173                     'AXY Si  cons: (i,j)=',ji,jj,', (flx,ben,err,out)=',     & 
    167174                     fq0,fq1,fq2,fq3 
     
    178185                  fq3 = fq0 + fq1 
    179186                  fq4 = f_benout_c(ji,jj) + f_benout_ca(ji,jj) 
    180                   if (lwp) write (numout,'a,2i3,a,5f15,5)')                   & 
     187                  if (lwp) write (numout,'(a,2i3,a,5f15.5)')                   & 
    181188                     'AXY C   cons: (i,j)=',ji,jj,', (flx,ben,asf,err,out)=', & 
    182189                     fq0,fq1,fq2,fq3,fq4 
     
    192199                   fq2 = fq0 + fq1 
    193200                   fq3 = 2.0 * f_benout_ca(ji,jj) 
    194                    if (lwp) write (numout,'a,2i3,a,4f15,5)')                   & 
     201                   if (lwp) write (numout,'(a,2i3,a,4f15.5)')                   & 
    195202                      'AXY alk cons: (i,j)=',ji,jj,', (flx,ben,err,out)=',     & 
    196203                      fq0,fq1,fq2,fq3 
  • branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_init.F90

    r10048 r10196  
    88   !!   -   ! 2017-08 (A. Yool)            Add slow-sinking detrius variables 
    99   !!   -   ! 2018-08 (A. Yool)            add OMIP preindustrial DIC 
     10   !!   -   ! 2018-10 (A. Yool)            Add air-sea DMS flux 
    1011   !!---------------------------------------------------------------------- 
    1112#if defined key_medusa 
     
    695696               dms_andm2d(:,:)      = 0.0 !! 
    696697            ENDIF 
     698            IF( med_diag%DMS_FLUX%dgsave ) THEN 
     699               ALLOCATE( dms_flux2d(1:jpi, 1:jpj) ) 
     700               dms_flux2d(:,:)      = 0.0 !! 
     701            ENDIF 
    697702         ENDIF    
    698703         !! 
  • branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_mod.F90

    r10047 r10196  
    99   !!   -   ! 2017-08 (A. Yool)            Slow detritus, ML-avg chl variables 
    1010   !!   -   ! 2018-08 (A. Yool)            add OMIP preindustrial DIC 
     11   !!   -   ! 2018-10 (A. Yool)            Add air-sea DMS flux 
    1112   !!---------------------------------------------------------------------- 
    1213#if defined key_medusa 
     
    184185 
    185186   !! Add DMS in MEDUSA for UKESM1 model 
    186    REAL(wp)                              :: dms_surf,dms_andm 
     187   REAL(wp)                              :: dms_surf,dms_andm,dms_flux 
    187188   !! AXY (13/03/15): add in other DMS calculations 
    188189   REAL(wp)                              :: dms_andr,dms_simo,dms_aran,dms_hall 
     
    240241   REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: dms_andr2d, dms_simo2d, dms_aran2d 
    241242   REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: dms_hall2d, dms_andm2d, dms_surf2d 
     243   REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: dms_flux2d 
    242244   REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: iben_n2d, iben_fe2d, iben_c2d 
    243245   REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: iben_si2d, iben_ca2d, oben_n2d 
  • branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/detritus_fast_sink.F90

    r10047 r10196  
    66   !! History : 
    77   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90 
     8   !!   -   ! 2018-19 (A. Yool)            Bugfix for excessive CaCO3 production 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_medusa 
     
    6364# if defined key_roam 
    6465                                   fifd_c, fofd_c, fregenfastc,            & 
     66               zdic, zalk,                             &  
    6567# endif 
    6668                                   idf, idfval,                            & 
     
    277279               !! factors to estimate the various elemental fractions (Si, Ca) 
    278280               ftempca(ji,jj) = ftempc(ji,jj) * fcaco3 
     281 
     282# if defined key_roam 
     283               !! AXY (12/10/18): while DIC and alkalinity typically occur at 
     284               !! high concentrations in the ocean relative to the fluxes that 
     285               !! affect them, there are occasions when fluxes are comparable 
     286               !! to local concentrations; for example, the "microboils" found 
     287               !! in UKESM1 produce very temporary (<< 1 day) T & S excursions 
     288               !! that also affect BGC tracers, moving them towards near-zero 
     289               !! concentrations; this causes carbonate chemistry deviations  
     290               !! that, in turn, potentially support CaCO3 production that is 
     291               !! in excess of local availability of DIC and alkalinity; the 
     292               !! following code ensures that ftempca does not exceed the local 
     293               !! capacities of both tracers 
     294               fq0 = 0.1  ! threshold change limiter 
     295               fq1 = min(ftempca(ji,jj), (zdic(ji,jj) * fq0))        ! DIC 
     296               fq2 = min(ftempca(ji,jj) * 2.0, (zalk(ji,jj) * fq0))  ! ALK 
     297               fq3 = min(fq1, (fq2 / 2.0))  ! select smallest flux 
     298               ftempca(ji,jj) = fq3  ! reset CaCO3 production 
     299# endif                
    279300 
    280301# if defined key_debug_medusa 
  • branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/gas_transfer.F90

    r6715 r10196  
    11MODULE gastransfer 
    22   !!====================================================================== 
    3    !!                         ***  MODULE trcdms_medusa  *** 
     3   !!                         ***  MODULE gas_transfer  *** 
    44   !! TOP :   MEDUSA 
    55   !!====================================================================== 
    66   !! History : 
    7    !!  -   !  2015-06  (A. Yool)             added for UKESM1 project 
     7   !!   -   ! 2015-06 (A. Yool)            added for UKESM1 project 
     8   !!   -   ! 2018-10 (A. Yool)            comment fixing 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_medusa && defined key_roam 
  • 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 
  • branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcnam_medusa.F90

    r10051 r10196  
    20562056          med_diag%DMS_ANDM%dgsave = .FALSE. 
    20572057      ENDIF 
     2058      IF  (iom_use("DMS_FLUX")) THEN  
     2059          med_diag%DMS_FLUX%dgsave = .TRUE. 
     2060      ELSE  
     2061          med_diag%DMS_FLUX%dgsave = .FALSE. 
     2062      ENDIF 
    20582063      IF  (iom_use("ATM_XCO2")) THEN  
    20592064          med_diag%ATM_XCO2%dgsave = .TRUE. 
  • branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/trc.F90

    r10047 r10196  
    136136                  ZE_MES_C, ZE_MESDC, ZE_EXCR, ZE_RESP, ZE_GROW, MDETC, GMIDC, GMEDC,                & 
    137137                  INT_ZMI, INT_ZME, INT_DET, INT_DTC, DMS_SURF, DMS_ANDR, DMS_SIMO, DMS_ARAN,        & 
    138                   DMS_HALL, DMS_ANDM, ATM_XCO2, OCN_FCO2, ATM_FCO2, OCN_RHOSW, OCN_SCHCO2,          & 
     138                  DMS_HALL, DMS_ANDM, DMS_FLUX, ATM_XCO2, OCN_FCO2, ATM_FCO2, OCN_RHOSW, OCN_SCHCO2, & 
    139139                  OCN_KWCO2, OCN_K0, CO2STARAIR, OCN_DPCO2,                                          & ! end of regular 2D 
    140140                  TPP3, DETFLUX3, REMIN3N, PH3, OM_CAL3,                                             & ! end of regular 3D 
  • branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/TOOLS/COMPILE/tools.txt

    r6487 r10196  
    1 SIREN  
     1REBUILD_NEMO  
Note: See TracChangeset for help on using the changeset viewer.