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 12537 for NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zpoc.F90 – NEMO

Ignore:
Timestamp:
2020-03-11T16:02:54+01:00 (4 years ago)
Author:
aumont
Message:

Comments in routines have been revised and significantly augmented

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zpoc.F90

    r11536 r12537  
    33   !!                         ***  MODULE p4zpoc  *** 
    44   !! TOP :   PISCES Compute remineralization of organic particles 
     5   !!         Same module for both PISCES and PISCES-QUOTA 
    56   !!========================================================================= 
    67   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    89   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Quota model for iron 
    910   !!             3.6  !  2016-03  (O. Aumont) Quota model and diverse 
     11   !!             4.0  !  2018     (O. Aumont) Variable lability parameterization 
    1012   !!---------------------------------------------------------------------- 
    1113   !!   p4z_poc       :  Compute remineralization/dissolution of organic compounds 
    1214   !!   p4z_poc_init  :  Initialisation of parameters for remineralisation 
     15   !!   alngam and gamain : computation of the incomplete gamma function 
    1316   !!---------------------------------------------------------------------- 
    1417   USE oce_trc         !  shared variables between ocean and passive tracers 
     
    2225 
    2326   PUBLIC   p4z_poc         ! called in p4zbio.F90 
    24    PUBLIC   p4z_poc_init    ! called in trcsms_pisces.F90 
    25    PUBLIC   alngam          ! 
     27   PUBLIC   p4z_poc_init    ! called in trcini_pisces.F90 
     28   PUBLIC   alngam          !  
    2629   PUBLIC   gamain          ! 
    2730 
     
    3336   REAL(wp), PUBLIC ::   rshape     !: shape factor of the gamma distribution 
    3437 
    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 
    3740 
    3841 
     
    4952      !! 
    5053      !! ** 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 
    5159      !! 
    52       !! ** Method  : - ??? 
     60      !! ** Method  : - Computation of the remineralisation rates is performed 
     61      !!                according to reactivity continuum formalism described 
     62      !!                in Aumont et al. (2017).  
    5363      !!--------------------------------------------------------------------- 
    5464      INTEGER, INTENT(in) ::   kt, knt   ! ocean time step and ??? 
     
    7989      solgoc = 0.04/ 2.56 * 1./ ( 1.-50**(-0.04) ) 
    8090 
    81       ! Initialisation of temprary arrys 
     91      ! Initialisation of temporary arrys 
    8292      IF( ln_p4z ) THEN 
    8393         zremipoc(:,:,:) = xremip 
     
    92102      zfolimi (:,:,:) = 0. 
    93103 
     104      ! Initialisation of the lability distributions that are set to  
     105      ! the distribution of newly produced organic particles 
    94106      DO jn = 1, jcpoc 
    95107        alphag(:,:,:,jn) = alphan(jn) 
     
    97109      END DO 
    98110 
    99      ! ----------------------------------------------------------------------- 
    100111     ! 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 
    103115     ! ----------------------------------------------------------------------- 
    104116     ztremint(:,:,:) = zremigoc(:,:,:) 
     
    108120              IF (tmask(ji,jj,jk) == 1.) THEN 
    109121                zdep = hmld(ji,jj) 
    110                 ! 
     122 
    111123                ! In the case of GOC, lability is constant in the mixed layer  
    112124                ! It is computed only below the mixed layer depth 
    113125                ! ------------------------------------------------------------ 
    114                 ! 
    115126                IF( gdept_n(ji,jj,jk) > zdep ) THEN 
    116127                  alphat = 0. 
     
    153164                    END DO 
    154165                  ELSE 
    155                     ! 
     166 
    156167                    ! standard algorithm in the rest of the water column 
    157168                    ! See the comments in the previous block. 
    158169                    ! --------------------------------------------------- 
    159                     ! 
    160170                    zpoc = trb(ji,jj,jk-1,jpgoc) + consgoc(ji,jj,jk-1) * rday / rfact2               & 
    161171                    &   * e3t_n(ji,jj,jk-1) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) + consgoc(ji,jj,jk)   & 
     
    192202 
    193203      IF( ln_p4z ) THEN 
     204         ! The standard PISCES part 
    194205         DO jk = 1, jpkm1 
    195206            DO jj = 1, jpj 
    196207               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                  ! ----------------------------------------------------------- 
    199212                  zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
    200213                  zorem2  = zremig * trb(ji,jj,jk,jpgoc) 
     
    204217                  zofer3 = zremig * solgoc * trb(ji,jj,jk,jpbfe) 
    205218 
    206                   ! ------------------------------------- 
     219                  ! update of the TRA arrays 
    207220                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem3(ji,jj,jk) 
    208221                  tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zorem2 - zorem3(ji,jj,jk) 
     
    216229         END DO 
    217230      ELSE 
     231         ! PISCES-QUOTA part 
    218232         DO jk = 1, jpkm1 
    219233            DO jj = 1, jpj 
    220234               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                  ! ---------------------------------------------------------- 
    223239                  zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
    224240                  zopoc2 = zremig  * trb(ji,jj,jk,jpgoc) 
     
    229245                  zofer2 = xremipn / xremipc * zremig * trb(ji,jj,jk,jpbfe) 
    230246 
    231                   ! ------------------------------------- 
     247                  ! Update of the TRA arrays 
    232248                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem3(ji,jj,jk) 
    233249                  tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + solgoc * zopon2  
     
    254270     ENDIF 
    255271 
    256      ! ------------------------------------------------------------------ 
    257272     ! Lability parameterization for the small OM particles. This param  
    258273     ! is based on the same theoretical background as the big particles. 
    259274     ! However, because of its low sinking speed, lability is not supposed 
    260275     ! 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     ! --------------------------------------------------------------------- 
    264278     totprod (:,:) = 0. 
    265279     totthick(:,:) = 0. 
    266280     totcons (:,:) = 0. 
     281 
    267282     ! intregrated production and consumption of POC in the mixed layer 
    268283     ! ---------------------------------------------------------------- 
    269      !  
    270284     DO jk = 1, jpkm1 
    271285        DO jj = 1, jpj 
     
    284298 
    285299     ! 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. 
    287302     ! --------------------------------------------------------------------- 
    288303     ztremint(:,:,:) = zremipoc(:,:,:) 
     
    318333     ENDIF 
    319334 
    320      ! ----------------------------------------------------------------------- 
    321335     ! The lability parameterization is used here. The code is here  
    322336     ! almost identical to what is done for big particles. The only difference 
     
    325339     ! should be determined before. 
    326340     ! ----------------------------------------------------------------------- 
    327      ! 
    328341     DO jk = 2, jpkm1 
    329342        DO jj = 1, jpj 
     
    334347                  alphat = 0. 
    335348                  remint = 0. 
    336                   ! 
    337349                  ! the scale factors are corrected with temperature 
    338350                  zsizek1  = e3t_n(ji,jj,jk-1) / 2. / (wsbio3(ji,jj,jk-1) + rtrn) * tgfunc(ji,jj,jk-1) 
    339351                  zsizek = e3t_n(ji,jj,jk) / 2. / (wsbio3(ji,jj,jk) + rtrn) * tgfunc(ji,jj,jk) 
    340                   ! 
     352 
    341353                  ! Special treatment of the level just below the MXL 
    342354                  ! See the comments in the GOC section 
    343355                  ! --------------------------------------------------- 
    344                   ! 
    345356                  IF ( gdept_n(ji,jj,jk-1) <= zdep ) THEN 
    346357                    ! 
     
    362373                    END DO 
    363374                  ELSE 
    364                     ! 
     375 
    365376                    ! Lability parameterization for the interior of the ocean 
    366377                    ! This is very similar to what is done in the previous  
    367378                    ! block 
    368379                    ! -------------------------------------------------------- 
    369                     ! 
    370380                    zpoc = trb(ji,jj,jk-1,jppoc) + conspoc(ji,jj,jk-1) * rday / rfact2               & 
    371381                    &   * e3t_n(ji,jj,jk-1) / 2. / (wsbio3(ji,jj,jk-1) + rtrn) + conspoc(ji,jj,jk)   & 
     
    404414 
    405415     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                    ! ---------------------------------------------------------- 
    412424                    zremip          = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
    413425                    zorem           = zremip * trb(ji,jj,jk,jppoc) 
    414426                    zofer           = zremip * trb(ji,jj,jk,jpsfe) 
    415427 
     428                    ! Update of the TRA arrays 
    416429                    tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem 
    417430                    orem(ji,jj,jk)      = orem(ji,jj,jk) + zorem 
     
    420433                    tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 
    421434                    zfolimi(ji,jj,jk)   = zfolimi(ji,jj,jk) + zofer 
    422                   ENDIF 
    423                END DO 
    424             END DO 
    425          END DO 
     435                 ENDIF 
     436              END DO 
     437           END DO 
     438        END DO 
    426439     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 
    449464           END DO 
    450465        END DO 
     
    454469        IF( knt == nrdttrc ) THEN 
    455470          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 rate 
     471          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 
    459474        ENDIF 
    460475     ENDIF 
Note: See TracChangeset for help on using the changeset viewer.