- Timestamp:
- 2016-10-21T17:38:13+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90
r7041 r7068 8 8 !! 3.4 ! 2011-06 (C. Ethe) USE of fldread 9 9 !! 3.5 ! 2012-07 (O. Aumont) improvment of river input of nutrients 10 !!----------------------------------------------------------------------11 #if defined key_pisces12 !!----------------------------------------------------------------------13 !! 'key_pisces' PISCES bio-model14 10 !!---------------------------------------------------------------------- 15 11 !! p4z_sed : Compute loss of organic matter in the sediments … … 56 52 INTEGER, INTENT(in) :: kt, knt ! ocean time step 57 53 INTEGER :: ji, jj, jk, ikt 58 #if ! defined key_sed59 54 REAL(wp) :: zsumsedsi, zsumsedpo4, zsumsedcal 60 55 REAL(wp) :: zrivalk, zrivsil, zrivno3 61 #endif62 56 REAL(wp) :: zwflux, zfminus, zfplus 63 57 REAL(wp) :: zlim, zfact, zfactcal … … 205 199 END DO 206 200 207 #if ! defined key_sed 208 ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used 209 ! Computation of the fraction of organic matter that is permanently buried from Dunne's model 210 ! ------------------------------------------------------- 211 DO jj = 1, jpj 212 DO ji = 1, jpi 213 IF( tmask(ji,jj,1) == 1 ) THEN 214 ikt = mbkt(ji,jj) 215 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 216 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E3 * 1E6 / 1E4 217 zflx = LOG10( MAX( 1E-3, zflx ) ) 218 zo2 = LOG10( MAX( 10. , trb(ji,jj,ikt,jpoxy) * 1E6 ) ) 219 zno3 = LOG10( MAX( 1. , trb(ji,jj,ikt,jpno3) * 1E6 * rno3 ) ) 220 zdep = LOG10( gdepw_n(ji,jj,ikt+1) ) 221 zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3 & 222 & + 0.4721 * zo2 - 0.0996 * zdep + 0.4256 * zflx * zo2 223 zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 224 ! 225 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 226 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 227 zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 228 ENDIF 229 END DO 230 END DO 231 232 ! Loss of biogenic silicon, Caco3 organic carbon in the sediments. 233 ! First, the total loss is computed. 234 ! The factor for calcite comes from the alkalinity effect 235 ! ------------------------------------------------------------- 236 DO jj = 1, jpj 237 DO ji = 1, jpi 238 IF( tmask(ji,jj,1) == 1 ) THEN 239 ikt = mbkt(ji,jj) 240 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 241 zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 242 ! For calcite, burial efficiency is made a function of saturation 243 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 244 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 245 zwork3(ji,jj) = trb(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 246 ENDIF 247 END DO 248 END DO 249 zsumsedsi = glob_sum( zwork1(:,:) * e1e2t(:,:) ) * r1_rday 250 zsumsedpo4 = glob_sum( zwork2(:,:) * e1e2t(:,:) ) * r1_rday 251 zsumsedcal = glob_sum( zwork3(:,:) * e1e2t(:,:) ) * r1_rday 252 #endif 201 IF( .NOT.lk_sed ) THEN 202 ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used 203 ! Computation of the fraction of organic matter that is permanently buried from Dunne's model 204 ! ------------------------------------------------------- 205 DO jj = 1, jpj 206 DO ji = 1, jpi 207 IF( tmask(ji,jj,1) == 1 ) THEN 208 ikt = mbkt(ji,jj) 209 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 210 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E3 * 1E6 / 1E4 211 zflx = LOG10( MAX( 1E-3, zflx ) ) 212 zo2 = LOG10( MAX( 10. , trb(ji,jj,ikt,jpoxy) * 1E6 ) ) 213 zno3 = LOG10( MAX( 1. , trb(ji,jj,ikt,jpno3) * 1E6 * rno3 ) ) 214 zdep = LOG10( gdepw_n(ji,jj,ikt+1) ) 215 zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3 & 216 & + 0.4721 * zo2 - 0.0996 * zdep + 0.4256 * zflx * zo2 217 zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 218 ! 219 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 220 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 221 zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 222 ENDIF 223 END DO 224 END DO 225 226 ! Loss of biogenic silicon, Caco3 organic carbon in the sediments. 227 ! First, the total loss is computed. 228 ! The factor for calcite comes from the alkalinity effect 229 ! ------------------------------------------------------------- 230 DO jj = 1, jpj 231 DO ji = 1, jpi 232 IF( tmask(ji,jj,1) == 1 ) THEN 233 ikt = mbkt(ji,jj) 234 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 235 zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 236 ! For calcite, burial efficiency is made a function of saturation 237 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 238 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 239 zwork3(ji,jj) = trb(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 240 ENDIF 241 END DO 242 END DO 243 zsumsedsi = glob_sum( zwork1(:,:) * e1e2t(:,:) ) * r1_rday 244 zsumsedpo4 = glob_sum( zwork2(:,:) * e1e2t(:,:) ) * r1_rday 245 zsumsedcal = glob_sum( zwork3(:,:) * e1e2t(:,:) ) * r1_rday 246 ! 247 ENDIF 253 248 254 249 ! This loss is scaled at each bottom grid cell for equilibrating the total budget of silica in the ocean. 255 250 ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers) 256 251 ! ------------------------------------------------------ 257 #if ! defined key_sed 258 zrivsil = 1._wp - ( sumdepsi + rivdsiinput * r1_ryyss ) / ( zsumsedsi + rtrn ) 259 #endif 252 IF( .NOT.lk_sed ) zrivsil = 1._wp - ( sumdepsi + rivdsiinput * r1_ryyss ) / ( zsumsedsi + rtrn ) 260 253 261 254 DO jj = 1, jpj … … 270 263 tra(ji,jj,ikt,jpgsi) = tra(ji,jj,ikt,jpgsi) - zsiloss 271 264 tra(ji,jj,ikt,jpcal) = tra(ji,jj,ikt,jpcal) - zcaloss 272 #if ! defined key_sed 273 tra(ji,jj,ikt,jpsil) = tra(ji,jj,ikt,jpsil) + zsiloss * zrivsil274 zfactcal = MIN( excess(ji,jj,ikt), 0.2 )275 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) )276 zrivalk = 1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / ( zsumsedcal + rtrn )277 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0278 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk279 #endif 265 IF( .NOT.lk_sed ) THEN 266 tra(ji,jj,ikt,jpsil) = tra(ji,jj,ikt,jpsil) + zsiloss * zrivsil 267 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 268 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 269 zrivalk = 1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / ( zsumsedcal + rtrn ) 270 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 271 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk 272 ENDIF 280 273 END DO 281 274 END DO … … 294 287 zwstpoc = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 295 288 296 #if ! defined key_sed 297 ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification298 ! in the sediments and just above the sediments. Not very clever, but simpliest option.299 zpdenit = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 )300 z1pdenit = zwstpoc * zrivno3 - zpdenit301 zolimit = MIN( ( trb(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) )302 zdenitt = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) )303 tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt304 tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt305 tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt306 tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt)307 tra(ji,jj,ikt,jpoxy) = tra(ji,jj,ikt,jpoxy) - zolimit * o2ut308 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) )309 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt310 sdenit(ji,jj) = rdenit * zpdenit * e3t_n(ji,jj,ikt)311 #endif 289 IF( .NOT.lk_sed ) THEN 290 ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 291 ! in the sediments and just above the sediments. Not very clever, but simpliest option. 292 zpdenit = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 293 z1pdenit = zwstpoc * zrivno3 - zpdenit 294 zolimit = MIN( ( trb(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 295 zdenitt = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 296 tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 297 tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 298 tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 299 tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 300 tra(ji,jj,ikt,jpoxy) = tra(ji,jj,ikt,jpoxy) - zolimit * o2ut 301 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 302 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 303 sdenit(ji,jj) = rdenit * zpdenit * e3t_n(ji,jj,ikt) 304 ENDIF 312 305 END DO 313 306 END DO … … 392 385 393 386 394 #else395 !!======================================================================396 !! Dummy module : No PISCES bio-model397 !!======================================================================398 CONTAINS399 SUBROUTINE p4z_sed ! Empty routine400 END SUBROUTINE p4z_sed401 #endif402 403 387 !!====================================================================== 404 388 END MODULE p4zsed
Note: See TracChangeset
for help on using the changeset viewer.