Ignore:
Timestamp:
2021-01-07T23:09:56+01:00 (3 months ago)
Author:
aumont
Message:

numerous updates to PISCES, PISCES-QUOTA and the sediment module

File:
1 edited

Legend:

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

    r13233 r14276  
    3535   REAL(wp), PUBLIC ::   xremikn    !: remineralisation rate of DON (p5z)  
    3636   REAL(wp), PUBLIC ::   xremikp    !: remineralisation rate of DOP (p5z)  
    37    REAL(wp), PUBLIC ::   xremik     !: remineralisation rate of DOC (p4z)  
    3837   REAL(wp), PUBLIC ::   nitrif     !: NH4 nitrification rate  
    3938   REAL(wp), PUBLIC ::   xsirem     !: remineralisation rate of biogenic silica 
     
    7170      REAL(wp) ::   zremik, zremikc, zremikn, zremikp, zsiremin, zfact  
    7271      REAL(wp) ::   zsatur, zsatur2, znusil, znusil2, zdep, zdepmin, zfactdep 
    73       REAL(wp) ::   zbactfer, zolimit, zonitr, zrfact2 
    74       REAL(wp) ::   zammonic, zoxyremc, zoxyremn, zoxyremp 
    75       REAL(wp) ::   zosil, ztem, zdenitnh4, zolimic, zolimin, zolimip, zdenitrn, zdenitrp 
     72      REAL(wp) ::   zbactfer, zonitr 
     73      REAL(wp) ::   zammonic, zoxyremc, zosil, ztem, zdenitnh4, zolimic 
    7674      CHARACTER (len=25) :: charout 
    77       REAL(wp), DIMENSION(jpi,jpj    ) :: ztempbac 
    78       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zdepprod, zfacsi, zfacsib, zdepeff, zfebact 
     75      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zfacsi, zfacsib, zdepeff, zfebact 
    7976      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 
    8077      !!--------------------------------------------------------------------- 
     
    8380      ! 
    8481      ! Initialisation of arrays 
    85       zdepprod(:,:,:) = 1._wp 
    8682      zdepeff (:,:,:) = 0.3_wp 
    87       ztempbac(:,:)   = 0._wp 
    8883      zfacsib(:,:,:)  = xsilab / ( 1.0 - xsilab ) 
    8984      zfebact(:,:,:)  = 0._wp 
     
    9994         DO jj = 1, jpj 
    10095            DO ji = 1, jpi 
    101                zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 
    102                IF( gdept_n(ji,jj,jk) < zdep ) THEN 
    103                   zdepbac(ji,jj,jk) = MIN( 0.7 * ( trb(ji,jj,jk,jpzoo) + 2.* trb(ji,jj,jk,jpmes) ), 4.e-6 ) 
    104                   ztempbac(ji,jj)   = zdepbac(ji,jj,jk) 
    105                ELSE 
     96               zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 
     97               zdepbac(ji,jj,jk) = 0.6 * ( MAX(0.0, trb(ji,jj,jk,jpzoo) + trb(ji,jj,jk,jpmes) ) * 1.0E6 )**0.6 * 1.E-6 
     98               IF( gdept_n(ji,jj,jk) >= zdep ) THEN 
    10699                  zdepmin = MIN( 1., zdep / gdept_n(ji,jj,jk) ) 
    107                   zdepbac (ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj) 
    108                   zdepprod(ji,jj,jk) = zdepmin**0.273 
    109100                  zdepeff (ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.3 
    110101               ENDIF 
     
    113104      END DO 
    114105 
    115       IF( ln_p4z ) THEN ! Standard PISCES code 
    116          DO jk = 1, jpkm1 
    117             DO jj = 1, jpj 
    118                DO ji = 1, jpi 
    119                   ! DOC ammonification. Depends on a limitation term of the bacterial activity 
    120                   ! and on the implicit bacteria concentration 
    121                   ! -------------------------------------------------------------------------- 
    122                   zremik = xremik * xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)  
    123                   zremik = MAX( zremik, 2.74e-4 * xstep ) 
    124  
    125                   ! Ammonification in oxic waters with oxygen consumption 
    126                   ! ----------------------------------------------------- 
    127                   zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
    128                   zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )  
    129  
    130                   ! Ammonification in suboxic waters with denitrification 
    131                   ! ----------------------------------------------------- 
    132                   zammonic = zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 
    133                   denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 
    134                   denitr(ji,jj,jk)  = MIN( ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, denitr(ji,jj,jk) ) 
    135  
    136                   ! Ammonification in waters depleted in O2 and NO3 based on  
    137                   ! other redox processes 
    138                   ! -------------------------------------------------------- 
    139                   zoxyremc          = zammonic - denitr(ji,jj,jk) 
    140                   ! 
    141                   zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 
    142                   denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 
    143                   zoxyremc          = MAX( 0.e0, zoxyremc ) 
    144                   ! Update of the TRA arrays 
    145                   tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 
    146                   tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 
    147                   tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr (ji,jj,jk) * rdenit 
    148                   tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimi (ji,jj,jk) - denitr(ji,jj,jk) - zoxyremc 
    149                   tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimi (ji,jj,jk) * o2ut 
    150                   tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 
    151                   tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimi(ji,jj,jk) + zoxyremc    & 
    152                   &                     + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
    153                END DO 
    154             END DO 
    155          END DO 
    156       ELSE ! PISCES-QUOTA 
    157          DO jk = 1, jpkm1 
    158             DO jj = 1, jpj 
    159                DO ji = 1, jpi 
    160                   ! DOC ammonification. Depends on a limitation term of the bacterial activity 
    161                   ! and on the implicit bacteria concentration 
    162                   ! --------------------------------------------------------------- 
    163                   zremik = xstep / 1.e-6 * MAX(0.01, xlimbac(ji,jj,jk)) * zdepbac(ji,jj,jk)  
    164                   zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 
    165  
    166                   zremikc = xremikc * zremik 
    167                   zremikn = xremikn / xremikc 
    168                   zremikp = xremikp / xremikc 
    169  
    170                   ! Ammonification in oxic waters with oxygen consumption 
    171                   ! ----------------------------------------------------- 
    172                   zolimit = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
    173                   zolimic = MAX( 0.e0, MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit ) )  
    174                   zolimi(ji,jj,jk) = zolimic 
    175                   zolimin = zremikn * zolimic * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
    176                   zolimip = zremikp * zolimic * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn )  
    177  
    178                   ! Ammonification in suboxic waters with denitrification 
    179                   ! ------------------------------------------------------- 
    180                   zammonic = zremikc * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 
    181                   denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 
    182                   denitr(ji,jj,jk)  = MAX(0., MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, denitr(ji,jj,jk) ) ) 
    183                   zoxyremc          = MAX(0., zammonic - denitr(ji,jj,jk)) 
    184                   zdenitrn  = zremikn * denitr(ji,jj,jk) * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
    185                   zdenitrp  = zremikp * denitr(ji,jj,jk) * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
    186                   zoxyremn  = zremikn * zoxyremc * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
    187                   zoxyremp  = zremikp * zoxyremc * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
    188                   ! Update of the TRA arrays 
    189                   tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimip + zdenitrp + zoxyremp 
    190                   tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimin + zdenitrn + zoxyremn 
    191                   tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr(ji,jj,jk) * rdenit 
    192                   tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimic - denitr(ji,jj,jk) - zoxyremc 
    193                   tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zolimin - zdenitrn - zoxyremn 
    194                   tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zolimip - zdenitrp - zoxyremp 
    195                   tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimic * o2ut 
    196                   tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimic + denitr(ji,jj,jk) + zoxyremc 
    197                   tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimin + zoxyremn + ( rdenit + 1.) * zdenitrn ) 
    198                END DO 
    199             END DO 
    200          END DO 
    201          ! 
    202       ENDIF 
     106      DO jk = 1, jpkm1 
     107         DO jj = 1, jpj 
     108            DO ji = 1, jpi 
     109               ! DOC ammonification. Depends on a limitation term of the bacterial activity 
     110               ! and on the implicit bacteria concentration 
     111               ! -------------------------------------------------------------------------- 
     112               zremik = xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)  
     113               zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 
     114               zremikc = xremikc * zremik 
     115 
     116               ! Ammonification in oxic waters with oxygen consumption 
     117               ! ----------------------------------------------------- 
     118               zolimic = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc) 
     119               zolimic = MAX( 0.e0, MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimic ) ) 
     120               zolimi(ji,jj,jk) = zolimic 
     121 
     122               ! Ammonification in suboxic waters with denitrification 
     123               ! ----------------------------------------------------- 
     124               zammonic = zremikc * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 
     125               denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 
     126               denitr(ji,jj,jk)  = MAX(0., MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, denitr(ji,jj,jk) ) ) 
     127 
     128               ! Ammonification in waters depleted in O2 and NO3 based on  
     129               ! other redox processes 
     130               ! -------------------------------------------------------- 
     131               zoxyremc          = MAX(0., zammonic - denitr(ji,jj,jk) ) 
     132 
     133               ! Update of the TRA arrays 
     134               tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr(ji,jj,jk) * rdenit 
     135               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     136               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimic * o2ut 
     137               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimic + denitr(ji,jj,jk) + zoxyremc 
     138               IF ( ln_p4z ) THEN ! PISCES-std 
     139                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimic + denitr(ji,jj,jk) + zoxyremc 
     140                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimic + denitr(ji,jj,jk) + zoxyremc 
     141                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimic + zoxyremc + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
     142               ELSE  ! PISCES-QUOTA (p5z) 
     143                  zremikn = xremikn / xremikc * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
     144                  zremikp = xremikp / xremikc * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
     145                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zremikp * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     146                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zremikn * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     147                  tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zremikn * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     148                  tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zremikp * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     149                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zremikn * ( zolimic + zoxyremc + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
     150               ENDIF 
     151            END DO 
     152         END DO 
     153      END DO 
    203154 
    204155      DO jk = 1, jpkm1 
     
    211162               &         / ( 1.+ emoy(ji,jj,jk) ) * ( 1. + fr_i(ji,jj) * emoy(ji,jj,jk) )  
    212163               zdenitnh4 = nitrif * xstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk) 
    213                zdenitnh4 = MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenita, zdenitnh4 )  
     164               zdenitnh4 = MAX(0., MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenita, zdenitnh4 ) )  
    214165               ! Update of the tracers trends 
    215166               ! ---------------------------- 
     
    217168               tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr - rdenita * zdenitnh4 
    218169               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2nit * zonitr 
    219                tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr + rno3 * ( rdenita - 1. ) * zdenitnh4 
     170               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * rno3 * zonitr + rno3 * ( rdenita - 1. ) * zdenitnh4 
    220171            END DO 
    221172         END DO 
     
    236187               ! studies (especially at Papa) have shown this uptake to be significant 
    237188               ! --------------------------------------------------------------------- 
    238                zbactfer = feratb *  rfact2 * 0.6_wp / rday * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk)     & 
    239                   &              * trb(ji,jj,jk,jpfer) / ( xkferb + trb(ji,jj,jk,jpfer) )    & 
    240                   &              * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 
     189               zbactfer = feratb * 0.6_wp * xstep * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) * trb(ji,jj,jk,jpfer)    & 
     190                  &       / ( xkferb + trb(ji,jj,jk,jpfer) ) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 
    241191 
    242192               ! Only the transfer of iron from its dissolved form to particles 
    243193               ! is treated here. The GGE of bacteria supposed to be equal to  
    244194               ! 0.33. This is hard-coded.  
    245                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.33 
    246                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.25 
    247                tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.08 
    248                zfebact(ji,jj,jk)   = zbactfer * 0.33 
     195               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.18 
     196               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.15 
     197               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.03 
     198               zfebact(ji,jj,jk)   = zbactfer * 0.18 
    249199               blim(ji,jj,jk)      = xlimbacl(ji,jj,jk)  * zdepbac(ji,jj,jk) / 1.e-6 
    250200            END DO 
     
    304254 
    305255      IF( knt == nrdttrc ) THEN 
    306           zrfact2 = 1.e3 * rfact2r 
    307256          ALLOCATE( zw3d(jpi,jpj,jpk) ) 
    308257          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s 
     
    321270          ENDIF 
    322271          IF( iom_use( "FEBACT" ) )  THEN 
    323                zw3d(:,:,:) = zfebact(:,:,:) * 1E9 * tmask(:,:,:) * zrfact2   ! Bacterial iron consumption 
     272               zw3d(:,:,:) = zfebact(:,:,:) * 1E9 * tmask(:,:,:) * zfact   ! Bacterial iron consumption 
    324273               CALL iom_put( "FEBACT" , zw3d ) 
    325274          ENDIF 
     
    345294      !! 
    346295      !!---------------------------------------------------------------------- 
    347       NAMELIST/nampisrem/ xremik, nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, &  
     296      NAMELIST/nampisrem/ nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, &  
    348297         &                xremikc, xremikn, xremikp 
    349298      INTEGER :: ios                 ! Local integer output status for namelist read 
     
    367316         WRITE(numout,*) '   Namelist parameters for remineralization, nampisrem' 
    368317         IF( ln_p4z ) THEN 
    369             WRITE(numout,*) '      remineralization rate of DOC              xremik    =', xremik 
     318            WRITE(numout,*) '      remineralization rate of DOC              xremikc   =', xremikc 
    370319         ELSE 
    371320            WRITE(numout,*) '      remineralization rate of DOC              xremikc   =', xremikc 
Note: See TracChangeset for help on using the changeset viewer.