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 7068 for branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90 – NEMO

Ignore:
Timestamp:
2016-10-21T17:38:13+02:00 (8 years ago)
Author:
cetlod
Message:

ROBUST5_CNRS : implementation of part I of new TOP interface - 1st step -, see ticket #1782

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90

    r7041 r7068  
    88   !!             3.4  !  2011-06 (C. Ethe) USE of fldread 
    99   !!             3.5  !  2012-07 (O. Aumont) improvment of river input of nutrients  
    10    !!---------------------------------------------------------------------- 
    11 #if defined key_pisces 
    12    !!---------------------------------------------------------------------- 
    13    !!   'key_pisces'                                       PISCES bio-model 
    1410   !!---------------------------------------------------------------------- 
    1511   !!   p4z_sed        :  Compute loss of organic matter in the sediments 
     
    5652      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    5753      INTEGER  ::   ji, jj, jk, ikt 
    58 #if ! defined key_sed 
    5954      REAL(wp) ::   zsumsedsi, zsumsedpo4, zsumsedcal 
    6055      REAL(wp) ::   zrivalk, zrivsil, zrivno3 
    61 #endif 
    6256      REAL(wp) ::  zwflux, zfminus, zfplus 
    6357      REAL(wp) ::  zlim, zfact, zfactcal 
     
    205199      END DO 
    206200 
    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 
    253248 
    254249      ! This loss is scaled at each bottom grid cell for equilibrating the total budget of silica in the ocean. 
    255250      ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers) 
    256251      ! ------------------------------------------------------ 
    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 ) 
    260253 
    261254      DO jj = 1, jpj 
     
    270263            tra(ji,jj,ikt,jpgsi) = tra(ji,jj,ikt,jpgsi) - zsiloss 
    271264            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 * zrivsil  
    274             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.0 
    278             tra(ji,jj,ikt,jpdic) =  tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk 
    279 #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 
    280273         END DO 
    281274      END DO 
     
    294287            zwstpoc              = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 
    295288 
    296 #if ! defined key_sed 
    297             ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 
    298             ! 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 - zpdenit 
    301             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 - zdenitt 
    304             tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 
    305             tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 
    306             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 * o2ut 
    308             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 + zdenitt 
    310             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 
    312305         END DO 
    313306      END DO 
     
    392385 
    393386 
    394 #else 
    395    !!====================================================================== 
    396    !!  Dummy module :                                   No PISCES bio-model 
    397    !!====================================================================== 
    398 CONTAINS 
    399    SUBROUTINE p4z_sed                         ! Empty routine 
    400    END SUBROUTINE p4z_sed 
    401 #endif  
    402  
    403387   !!====================================================================== 
    404388END MODULE p4zsed 
Note: See TracChangeset for help on using the changeset viewer.