- Timestamp:
- 2020-03-11T16:02:54+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zpoc.F90
r11536 r12537 3 3 !! *** MODULE p4zpoc *** 4 4 !! TOP : PISCES Compute remineralization of organic particles 5 !! Same module for both PISCES and PISCES-QUOTA 5 6 !!========================================================================= 6 7 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 8 9 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Quota model for iron 9 10 !! 3.6 ! 2016-03 (O. Aumont) Quota model and diverse 11 !! 4.0 ! 2018 (O. Aumont) Variable lability parameterization 10 12 !!---------------------------------------------------------------------- 11 13 !! p4z_poc : Compute remineralization/dissolution of organic compounds 12 14 !! p4z_poc_init : Initialisation of parameters for remineralisation 15 !! alngam and gamain : computation of the incomplete gamma function 13 16 !!---------------------------------------------------------------------- 14 17 USE oce_trc ! shared variables between ocean and passive tracers … … 22 25 23 26 PUBLIC p4z_poc ! called in p4zbio.F90 24 PUBLIC p4z_poc_init ! called in trc sms_pisces.F9025 PUBLIC alngam ! 27 PUBLIC p4z_poc_init ! called in trcini_pisces.F90 28 PUBLIC alngam ! 26 29 PUBLIC gamain ! 27 30 … … 33 36 REAL(wp), PUBLIC :: rshape !: shape factor of the gamma distribution 34 37 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: alphan, reminp !: 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: alphap !: 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: alphan, reminp !: variable lability of POC and initial distribution 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: alphap !: lability distribution of small particles 37 40 38 41 … … 49 52 !! 50 53 !! ** Purpose : Compute remineralization of organic particles 54 !! A reactivity-continuum parameterization is chosen 55 !! to describe the lability of the organic particles 56 !! As a consequence, the remineralisation rates of the 57 !! the different pools change with time as a function of 58 !! the lability distribution 51 59 !! 52 !! ** Method : - ??? 60 !! ** Method : - Computation of the remineralisation rates is performed 61 !! according to reactivity continuum formalism described 62 !! in Aumont et al. (2017). 53 63 !!--------------------------------------------------------------------- 54 64 INTEGER, INTENT(in) :: kt, knt ! ocean time step and ??? … … 79 89 solgoc = 0.04/ 2.56 * 1./ ( 1.-50**(-0.04) ) 80 90 81 ! Initialisation of temp rary arrys91 ! Initialisation of temporary arrys 82 92 IF( ln_p4z ) THEN 83 93 zremipoc(:,:,:) = xremip … … 92 102 zfolimi (:,:,:) = 0. 93 103 104 ! Initialisation of the lability distributions that are set to 105 ! the distribution of newly produced organic particles 94 106 DO jn = 1, jcpoc 95 107 alphag(:,:,:,jn) = alphan(jn) … … 97 109 END DO 98 110 99 ! -----------------------------------------------------------------------100 111 ! Lability parameterization. This is the big particles part (GOC) 101 ! This lability parameterization can be activated only with the standard 102 ! particle scheme. Does not work with Kriest parameterization. 112 ! This lability parameterization is always active. However, if only one 113 ! lability class is specified in the namelist, this is equivalent to 114 ! a standard parameterisation with a constant lability 103 115 ! ----------------------------------------------------------------------- 104 116 ztremint(:,:,:) = zremigoc(:,:,:) … … 108 120 IF (tmask(ji,jj,jk) == 1.) THEN 109 121 zdep = hmld(ji,jj) 110 ! 122 111 123 ! In the case of GOC, lability is constant in the mixed layer 112 124 ! It is computed only below the mixed layer depth 113 125 ! ------------------------------------------------------------ 114 !115 126 IF( gdept_n(ji,jj,jk) > zdep ) THEN 116 127 alphat = 0. … … 153 164 END DO 154 165 ELSE 155 ! 166 156 167 ! standard algorithm in the rest of the water column 157 168 ! See the comments in the previous block. 158 169 ! --------------------------------------------------- 159 !160 170 zpoc = trb(ji,jj,jk-1,jpgoc) + consgoc(ji,jj,jk-1) * rday / rfact2 & 161 171 & * e3t_n(ji,jj,jk-1) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) + consgoc(ji,jj,jk) & … … 192 202 193 203 IF( ln_p4z ) THEN 204 ! The standard PISCES part 194 205 DO jk = 1, jpkm1 195 206 DO jj = 1, jpj 196 207 DO ji = 1, jpi 197 ! POC disaggregation by turbulence and bacterial activity. 198 ! -------------------------------------------------------- 208 ! POC degradation by bacterial activity. It is a function 209 ! of the mean lability and of temperature. This also includes 210 ! shrinking of particles due to the bacterial activity 211 ! ----------------------------------------------------------- 199 212 zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 200 213 zorem2 = zremig * trb(ji,jj,jk,jpgoc) … … 204 217 zofer3 = zremig * solgoc * trb(ji,jj,jk,jpbfe) 205 218 206 ! -------------------------------------219 ! update of the TRA arrays 207 220 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem3(ji,jj,jk) 208 221 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zorem2 - zorem3(ji,jj,jk) … … 216 229 END DO 217 230 ELSE 231 ! PISCES-QUOTA part 218 232 DO jk = 1, jpkm1 219 233 DO jj = 1, jpj 220 234 DO ji = 1, jpi 221 ! POC disaggregation by turbulence and bacterial activity. 222 ! -------------------------------------------------------- 235 ! POC disaggregation by bacterial activity. It is a function 236 ! of the mean lability and of temperature. Shrinking of 237 ! particles due to the bacterial activity is also included 238 ! ---------------------------------------------------------- 223 239 zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 224 240 zopoc2 = zremig * trb(ji,jj,jk,jpgoc) … … 229 245 zofer2 = xremipn / xremipc * zremig * trb(ji,jj,jk,jpbfe) 230 246 231 ! -------------------------------------247 ! Update of the TRA arrays 232 248 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem3(ji,jj,jk) 233 249 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + solgoc * zopon2 … … 254 270 ENDIF 255 271 256 ! ------------------------------------------------------------------257 272 ! Lability parameterization for the small OM particles. This param 258 273 ! is based on the same theoretical background as the big particles. 259 274 ! However, because of its low sinking speed, lability is not supposed 260 275 ! to be equal to its initial value (the value of the freshly produced 261 ! organic matter). It is however uniform in the mixed layer. 262 ! ------------------------------------------------------------------- 263 ! 276 ! organic matter) in the MLD. It is however uniform in the mixed layer. 277 ! --------------------------------------------------------------------- 264 278 totprod (:,:) = 0. 265 279 totthick(:,:) = 0. 266 280 totcons (:,:) = 0. 281 267 282 ! intregrated production and consumption of POC in the mixed layer 268 283 ! ---------------------------------------------------------------- 269 !270 284 DO jk = 1, jpkm1 271 285 DO jj = 1, jpj … … 284 298 285 299 ! Computation of the lability spectrum in the mixed layer. In the mixed 286 ! layer, this spectrum is supposed to be uniform. 300 ! layer, this spectrum is supposed to be uniform as a result of intense 301 ! mixing. 287 302 ! --------------------------------------------------------------------- 288 303 ztremint(:,:,:) = zremipoc(:,:,:) … … 318 333 ENDIF 319 334 320 ! -----------------------------------------------------------------------321 335 ! The lability parameterization is used here. The code is here 322 336 ! almost identical to what is done for big particles. The only difference … … 325 339 ! should be determined before. 326 340 ! ----------------------------------------------------------------------- 327 !328 341 DO jk = 2, jpkm1 329 342 DO jj = 1, jpj … … 334 347 alphat = 0. 335 348 remint = 0. 336 !337 349 ! the scale factors are corrected with temperature 338 350 zsizek1 = e3t_n(ji,jj,jk-1) / 2. / (wsbio3(ji,jj,jk-1) + rtrn) * tgfunc(ji,jj,jk-1) 339 351 zsizek = e3t_n(ji,jj,jk) / 2. / (wsbio3(ji,jj,jk) + rtrn) * tgfunc(ji,jj,jk) 340 ! 352 341 353 ! Special treatment of the level just below the MXL 342 354 ! See the comments in the GOC section 343 355 ! --------------------------------------------------- 344 !345 356 IF ( gdept_n(ji,jj,jk-1) <= zdep ) THEN 346 357 ! … … 362 373 END DO 363 374 ELSE 364 ! 375 365 376 ! Lability parameterization for the interior of the ocean 366 377 ! This is very similar to what is done in the previous 367 378 ! block 368 379 ! -------------------------------------------------------- 369 !370 380 zpoc = trb(ji,jj,jk-1,jppoc) + conspoc(ji,jj,jk-1) * rday / rfact2 & 371 381 & * e3t_n(ji,jj,jk-1) / 2. / (wsbio3(ji,jj,jk-1) + rtrn) + conspoc(ji,jj,jk) & … … 404 414 405 415 IF( ln_p4z ) THEN 406 DO jk = 1, jpkm1 407 DO jj = 1, jpj 408 DO ji = 1, jpi 409 IF (tmask(ji,jj,jk) == 1.) THEN 410 ! POC disaggregation by turbulence and bacterial activity. 411 ! -------------------------------------------------------- 416 ! Standard PISCES part 417 DO jk = 1, jpkm1 418 DO jj = 1, jpj 419 DO ji = 1, jpi 420 IF (tmask(ji,jj,jk) == 1.) THEN 421 ! POC disaggregation by bacterial activity. It is a function 422 ! of the mean lability and of temperature 423 ! ---------------------------------------------------------- 412 424 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 413 425 zorem = zremip * trb(ji,jj,jk,jppoc) 414 426 zofer = zremip * trb(ji,jj,jk,jpsfe) 415 427 428 ! Update of the TRA arrays 416 429 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem 417 430 orem(ji,jj,jk) = orem(ji,jj,jk) + zorem … … 420 433 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 421 434 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 422 423 424 425 435 ENDIF 436 END DO 437 END DO 438 END DO 426 439 ELSE 427 DO jk = 1, jpkm1 428 DO jj = 1, jpj 429 DO ji = 1, jpi 430 ! POC disaggregation by turbulence and bacterial activity. 431 ! -------------------------------------------------------- 432 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 433 zopoc = zremip * trb(ji,jj,jk,jppoc) 434 orem(ji,jj,jk) = orem(ji,jj,jk) + zopoc 435 zopon = xremipn / xremipc * zremip * trb(ji,jj,jk,jppon) 436 zopop = xremipp / xremipc * zremip * trb(ji,jj,jk,jppop) 437 zofer = xremipn / xremipc * zremip * trb(ji,jj,jk,jpsfe) 438 439 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zopoc 440 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zopon 441 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zopop 442 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 443 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zopoc 444 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zopon 445 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop 446 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer 447 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 448 END DO 440 ! PISCES QUOTA part 441 DO jk = 1, jpkm1 442 DO jj = 1, jpj 443 DO ji = 1, jpi 444 ! POC disaggregation by bacterial activity. It is a function 445 ! of the mean lability and of temperature 446 ! ---------------------------------------------------------- 447 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 448 zopoc = zremip * trb(ji,jj,jk,jppoc) 449 orem(ji,jj,jk) = orem(ji,jj,jk) + zopoc 450 zopon = xremipn / xremipc * zremip * trb(ji,jj,jk,jppon) 451 zopop = xremipp / xremipc * zremip * trb(ji,jj,jk,jppop) 452 zofer = xremipn / xremipc * zremip * trb(ji,jj,jk,jpsfe) 453 454 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zopoc 455 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zopon 456 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zopop 457 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 458 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zopoc 459 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zopon 460 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop 461 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer 462 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 463 END DO 449 464 END DO 450 465 END DO … … 454 469 IF( knt == nrdttrc ) THEN 455 470 zrfact2 = 1.e3 * rfact2r 456 CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate 457 CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate 458 CALL iom_put( "REMINF" , zfolimi(:,:,:) * tmask(:,:,:) * 1.e+9 * zrfact2 ) ! Remineralisation rate471 CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate of small particles 472 CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate of large particles 473 CALL iom_put( "REMINF" , zfolimi(:,:,:) * tmask(:,:,:) * 1.e+9 * zrfact2 ) ! Remineralisation of biogenic particulate iron 459 474 ENDIF 460 475 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.