Changeset 10196
- Timestamp:
- 2018-10-16T12:15:14+02:00 (6 years ago)
- 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 489 489 <field id= "DMS_HALL" long_name="DMS Surface Concentration, Halloran" unit="nmol/L" /> 490 490 <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" /> 491 492 <field id= "CHL_MLD" long_name="MLD averaged Chlorophyll" unit="mg-Chl/m3" /> 492 493 <field id= "CHL_CPL" long_name="Scaled Surf or MLD Chlorophyll to UM" unit="kg Chl/m3" /> … … 2194 2195 <field field_ref="SMS_FER_E3T" name="SMS_FER_E3T" /> 2195 2196 <field field_ref="SMS_DiC_E3T" name="SMS_DiC_E3T" /> 2197 <field field_ref="SMS_OXY_E3T" name="SMS_OXY_E3T" /> 2196 2198 <field field_ref="SMS_ALK_E3T" name="SMS_ALK_E3T" /> 2197 2199 <!-- trd case: jptra_tot --> … … 2200 2202 <field field_ref="TOT_FER_E3T" name="TOT_FER_E3T" /> 2201 2203 <field field_ref="TOT_DiC_E3T" name="TOT_DiC_E3T" /> 2204 <field field_ref="TOT_OXY_E3T" name="TOT_OXY_E3T" /> 2202 2205 <field field_ref="TOT_ALK_E3T" name="TOT_ALK_E3T" /> 2203 2206 </field_group> … … 2525 2528 <field field_ref= "DMS_HALL" name="DMS_HALL" /> 2526 2529 <field field_ref= "DMS_ANDM" name="DMS_ANDM" /> 2530 <field field_ref= "DMS_FLUX" name="DMS_FLUX" /> 2527 2531 </field_group> 2528 2532 -
branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/air_sea.F90
r10049 r10196 7 7 !! - ! 2017-04 (M. Stringer) Code taken from trcbio_medusa.F90 8 8 !! - ! 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 10 11 !!---------------------------------------------------------------------- 11 12 #if defined key_medusa … … 43 44 dms_surf2d, dms_andm, dms_andm2d, & 44 45 dms_nlim, dms_wtkn, & 46 dms_flux, dms_flux2d, & 45 47 f_co2flux, f_co2flux2d, & 46 48 f_co2starair_2d, f_co3, & … … 105 107 USE trcco2_medusa, ONLY: trc_co2_medusa 106 108 # endif 107 USE trcdms_medusa, ONLY: trc_dms_medusa 109 USE trcdms_medusa, ONLY: trc_dms_medusa, dms_flux_ocn 108 110 USE trcoxy_medusa, ONLY: trc_oxy_medusa 109 111 # endif … … 540 542 endif 541 543 !! 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 !! 542 551 !! 2D diag through iom_use 543 552 IF( med_diag%DMS_SURF%dgsave ) THEN … … 558 567 IF( med_diag%DMS_ANDM%dgsave ) THEN 559 568 dms_andm2d(ji,jj) = dms_andm 569 ENDIF 570 IF( med_diag%DMS_FLUX%dgsave ) THEN 571 dms_flux2d(ji,jj) = dms_flux 560 572 ENDIF 561 573 ENDIF -
branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_diag_slice.F90
r10047 r10196 7 7 !! - ! 2017-04 (M. Stringer) Code taken from trcbio_medusa.F90 8 8 !! - ! 2018-08 (A. Yool) add OMIP preindustrial DIC 9 !! - ! 2018-10 (A. Yool) Add air-sea DMS flux 9 10 !!---------------------------------------------------------------------- 10 11 #if defined key_medusa … … 196 197 CALL iom_put( "DMS_ANDM" , dms_andm2d ) 197 198 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 ) 198 203 ENDIF 199 204 ENDIF -
branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90
r10047 r10196 33 33 !!---------------------------------------------------------------------- 34 34 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 36 39 USE in_out_manager, ONLY: lwp, numout 37 40 USE iom, ONLY: iom_put … … 62 65 INTEGER :: jn 63 66 64 REAL(wp) :: fq0,fq1,fq2,fq3 67 REAL(wp) :: fq0,fq1,fq2,fq3,fq4 68 69 70 !!* Substitution 71 # include "domzgr_substitute.h90" 65 72 66 73 # if defined key_roam … … 149 156 fq2 = fq0 + fq1 150 157 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)') & 152 159 'AXY N cons: (i,j)=',ji,jj,', (flx,ben,err,out)=', & 153 160 fq0,fq1,fq2,fq3 … … 163 170 fq2 = fq0 + fq1 164 171 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)') & 166 173 'AXY Si cons: (i,j)=',ji,jj,', (flx,ben,err,out)=', & 167 174 fq0,fq1,fq2,fq3 … … 178 185 fq3 = fq0 + fq1 179 186 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)') & 181 188 'AXY C cons: (i,j)=',ji,jj,', (flx,ben,asf,err,out)=', & 182 189 fq0,fq1,fq2,fq3,fq4 … … 192 199 fq2 = fq0 + fq1 193 200 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)') & 195 202 'AXY alk cons: (i,j)=',ji,jj,', (flx,ben,err,out)=', & 196 203 fq0,fq1,fq2,fq3 -
branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_init.F90
r10048 r10196 8 8 !! - ! 2017-08 (A. Yool) Add slow-sinking detrius variables 9 9 !! - ! 2018-08 (A. Yool) add OMIP preindustrial DIC 10 !! - ! 2018-10 (A. Yool) Add air-sea DMS flux 10 11 !!---------------------------------------------------------------------- 11 12 #if defined key_medusa … … 695 696 dms_andm2d(:,:) = 0.0 !! 696 697 ENDIF 698 IF( med_diag%DMS_FLUX%dgsave ) THEN 699 ALLOCATE( dms_flux2d(1:jpi, 1:jpj) ) 700 dms_flux2d(:,:) = 0.0 !! 701 ENDIF 697 702 ENDIF 698 703 !! -
branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_mod.F90
r10047 r10196 9 9 !! - ! 2017-08 (A. Yool) Slow detritus, ML-avg chl variables 10 10 !! - ! 2018-08 (A. Yool) add OMIP preindustrial DIC 11 !! - ! 2018-10 (A. Yool) Add air-sea DMS flux 11 12 !!---------------------------------------------------------------------- 12 13 #if defined key_medusa … … 184 185 185 186 !! Add DMS in MEDUSA for UKESM1 model 186 REAL(wp) :: dms_surf,dms_andm 187 REAL(wp) :: dms_surf,dms_andm,dms_flux 187 188 !! AXY (13/03/15): add in other DMS calculations 188 189 REAL(wp) :: dms_andr,dms_simo,dms_aran,dms_hall … … 240 241 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: dms_andr2d, dms_simo2d, dms_aran2d 241 242 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: dms_hall2d, dms_andm2d, dms_surf2d 243 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: dms_flux2d 242 244 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: iben_n2d, iben_fe2d, iben_c2d 243 245 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 6 6 !! History : 7 7 !! - ! 2017-04 (M. Stringer) Code taken from trcbio_medusa.F90 8 !! - ! 2018-19 (A. Yool) Bugfix for excessive CaCO3 production 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_medusa … … 63 64 # if defined key_roam 64 65 fifd_c, fofd_c, fregenfastc, & 66 zdic, zalk, & 65 67 # endif 66 68 idf, idfval, & … … 277 279 !! factors to estimate the various elemental fractions (Si, Ca) 278 280 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 279 300 280 301 # if defined key_debug_medusa -
branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/gas_transfer.F90
r6715 r10196 1 1 MODULE gastransfer 2 2 !!====================================================================== 3 !! *** MODULE trcdms_medusa***3 !! *** MODULE gas_transfer *** 4 4 !! TOP : MEDUSA 5 5 !!====================================================================== 6 6 !! 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 8 9 !!---------------------------------------------------------------------- 9 10 #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 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 -
branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcnam_medusa.F90
r10051 r10196 2056 2056 med_diag%DMS_ANDM%dgsave = .FALSE. 2057 2057 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 2058 2063 IF (iom_use("ATM_XCO2")) THEN 2059 2064 med_diag%ATM_XCO2%dgsave = .TRUE. -
branches/NERC/dev_r5518_GO6_under_ice_relax/NEMOGCM/NEMO/TOP_SRC/trc.F90
r10047 r10196 136 136 ZE_MES_C, ZE_MESDC, ZE_EXCR, ZE_RESP, ZE_GROW, MDETC, GMIDC, GMEDC, & 137 137 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, & 139 139 OCN_KWCO2, OCN_K0, CO2STARAIR, OCN_DPCO2, & ! end of regular 2D 140 140 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 SIREN1 REBUILD_NEMO
Note: See TracChangeset
for help on using the changeset viewer.