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 4529 for trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90 – NEMO

Ignore:
Timestamp:
2014-03-15T12:00:04+01:00 (10 years ago)
Author:
cetlod
Message:

Bugfix and minor improvment on PISCES, see ticket #1258

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90

    r4521 r4529  
    7171      REAL(wp) ::  zo2, zno3, zflx, zpdenit, z1pdenit, zdenitt, zolimit 
    7272      REAL(wp) ::  zsiloss, zcaloss, zws3, zws4, zwsc, zdep, zwstpoc 
    73       REAL(wp) ::  ztrfer, ztrpo4, zwdust 
     73      REAL(wp) ::  ztrfer, ztrpo4, zwdust, zlight 
    7474      REAL(wp) ::  zrdenittot, zsdenittot, znitrpottot 
    7575      ! 
    7676      CHARACTER (len=25) :: charout 
    7777      REAL(wp), POINTER, DIMENSION(:,:  ) :: zpdep, zsidep, zwork1, zwork2, zwork3, zwork4 
    78       REAL(wp), POINTER, DIMENSION(:,:  ) :: zdenit2d, zironice 
     78      REAL(wp), POINTER, DIMENSION(:,:  ) :: zdenit2d, zironice, zbureff 
    7979      REAL(wp), POINTER, DIMENSION(:,:  ) :: zwsbio3, zwsbio4, zwscal 
    80       REAL(wp), POINTER, DIMENSION(:,:,:) :: znitrpot, zirondep 
     80      REAL(wp), POINTER, DIMENSION(:,:,:) :: znitrpot, zirondep, zsoufer 
    8181      !!--------------------------------------------------------------------- 
    8282      ! 
     
    9393      ! 
    9494      ! Allocate temporary workspace 
    95       CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zwork4 ) 
     95      CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zwork4, zbureff ) 
    9696      CALL wrk_alloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
    97       CALL wrk_alloc( jpi, jpj, jpk, znitrpot ) 
     97      CALL wrk_alloc( jpi, jpj, jpk, znitrpot, zsoufer ) 
    9898 
    9999      zdenit2d(:,:) = 0.e0 
     100      zbureff (:,:) = 0.e0 
    100101 
    101102      ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. 
     
    131132         !                                              ! Iron and Si deposition at the surface 
    132133         IF( ln_solub ) THEN 
    133             zirondep(:,:,1) = solub(:,:) * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 55.85 * rmtss ) + 3.e-10 * r1_ryyss  
     134            zirondep(:,:,1) = solub(:,:) * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / ( 55.85 * rmtss ) + 3.e-10 * r1_ryyss  
    134135         ELSE 
    135             zirondep(:,:,1) = dustsolub  * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 55.85 * rmtss ) + 3.e-10 * r1_ryyss  
     136            zirondep(:,:,1) = dustsolub  * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / ( 55.85 * rmtss ) + 3.e-10 * r1_ryyss  
    136137         ENDIF 
    137          zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 28.1  * rmtss ) 
    138          zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 31.   * rmtss ) / po4r  
     138         zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / ( 28.1  * rmtss ) 
     139         zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / ( 31.   * rmtss ) / po4r  
    139140         !                                              ! Iron solubilization of particles in the water column 
    140          zwdust = 0.005 / ( wdust * 55.85 * 30.42 ) / ( 45. * rday )  
     141         !                                              ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ;  wdust in m/j 
     142         zwdust = 0.03 * rday / ( wdust * 55.85 ) / ( 270. * rday ) 
    141143         DO jk = 2, jpkm1 
    142             zirondep(:,:,jk) = dust(:,:) * zwdust * rfact2 * EXP( -fsdept(:,:,jk) / 1000. ) 
     144            zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -fsdept(:,:,jk) / 540. ) 
    143145         END DO 
    144146         !                                              ! Iron solubilization of particles in the water column 
     
    152154               IF( jnt == nrdttrc ) THEN 
    153155                  CALL iom_put( "Irondep", zirondep(:,:,1) * zfact * fse3t(:,:,1) * tmask(:,:,1) ) ! surface downward dust depo of iron 
    154                   CALL iom_put( "pdust"  , dust(:,:) / ( wdust * 30.42 * 0.035 )  * tmask(:,:,1) ) ! dust concentration at surface 
     156                  CALL iom_put( "pdust"  , dust(:,:) / ( wdust * rday )  * tmask(:,:,1) ) ! dust concentration at surface 
    155157               ENDIF 
    156158            ELSE 
     
    215217#if ! defined key_sed 
    216218      ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used 
     219      ! Computation of the fraction of organic matter that is permanently buried from Dunne's model 
    217220      ! ------------------------------------------------------- 
    218221      DO jj = 1, jpj 
     
    233236              &                + 0.4721 * zo2 - 0.0996 * zdep + 0.4256 * zflx * zo2 
    234237              zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 
     238              ! 
     239              zflx = (  trn(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
     240                &     + trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 
     241              zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 
    235242           ENDIF 
    236243         END DO 
    237244      END DO  
     245 
    238246      ! Loss of biogenic silicon, Caco3 organic carbon in the sediments.  
    239247      ! First, the total loss is computed. 
     
    266274#if ! defined key_sed 
    267275      zrivsil =  1._wp - ( sumdepsi + rivdsiinput * r1_ryyss ) / zsumsedsi 
    268       zrivno3 =  1._wp - ( rivdininput * r1_ryyss ) / zsumsedpo4 
    269276#endif 
    270277 
     
    301308            zws4 = zwsbio4(ji,jj) * zdep 
    302309            zws3 = zwsbio3(ji,jj) * zdep 
     310            zrivno3 = 1. - zbureff(ji,jj) 
    303311# if ! defined key_kriest 
    304312            trn(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) - trn(ji,jj,ikt,jpgoc) * zws4 
     
    334342 
    335343      ! Nitrogen fixation process 
     344      ! Small source iron from particulate inorganic iron 
    336345      !----------------------------------- 
    337346      DO jk = 1, jpkm1 
    338347         DO jj = 1, jpj 
    339348            DO ji = 1, jpi 
    340                !                                       ! Potential nitrogen fixation dependant on temperature and iron 
     349               !                      ! Potential nitrogen fixation dependant on temperature and iron 
    341350               zlim = ( 1.- xnanono3(ji,jj,jk) - xnanonh4(ji,jj,jk) ) 
    342351               IF( zlim <= 0.2 )   zlim = 0.01 
     
    348357               ztrfer = biron(ji,jj,jk)       / ( concfediaz + biron(ji,jj,jk)       ) 
    349358               ztrpo4 = trn  (ji,jj,jk,jppo4) / ( concnnh4   + trn  (ji,jj,jk,jppo4) )  
     359               zlight =  ( 1.- EXP( -etot(ji,jj,jk) / diazolight ) )  
    350360               znitrpot(ji,jj,jk) =  MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday )   & 
    351                  &         *  zfact * MIN( ztrfer, ztrpo4 ) * ( 1.- EXP( -etot(ji,jj,jk) / diazolight ) ) 
     361                 &         *  zfact * MIN( ztrfer, ztrpo4 ) * zlight 
     362               zsoufer(ji,jj,jk) = zlight * 2E-11 / (2E-11 + biron(ji,jj,jk)) 
    352363            END DO 
    353364         END DO 
    354365      END DO 
    355   
    356       IF( ln_check_mass ) THEN 
    357          ! The total gain from nitrogen fixation is scaled to balance the loss by denitrification 
    358          ! ------------------------------------------------------------- 
    359          zrdenittot   = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 
    360          zsdenittot   = glob_sum ( zwork4(:,:)   * e1e2t(:,:) ) 
    361          znitrpottot  = glob_sum ( znitrpot(:,:,:)                        * cvol(:,:,:) ) 
    362          IF( kt == nitend .AND. jnt == nrdttrc ) THEN 
    363             zfact = 1.e+3 * rfact2r * rno3 * 365. * 86400. * 14. / 1e12 
    364             IF(lwp) WRITE(numnit,9100) ndastp, znitrpottot * nitrfix * zfact, zrdenittot * zfact , zsdenittot * zfact 
    365          ENDIF 
    366        ENDIF 
    367366 
    368367      ! Nitrogen change due to nitrogen fixation 
     
    371370         DO jj = 1, jpj 
    372371            DO ji = 1, jpi 
    373                ! zfact = znitrpot(ji,jj,jk) * ( zrdenittot + zsdenittot ) / znitrpottot 
    374372               zfact = znitrpot(ji,jj,jk) * nitrfix 
    375373               trn(ji,jj,jk,jpnh4) = trn(ji,jj,jk,jpnh4) +             zfact 
    376374               trn(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) + rno3      * zfact 
    377375               trn(ji,jj,jk,jpoxy) = trn(ji,jj,jk,jpoxy) + o2nit     * zfact  
    378                trn(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + 30. / 46. * zfact 
     376               trn(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trn(ji,jj,jk,jppo4) ) & 
     377               &                     * 0.002 * trn(ji,jj,jk,jpdoc) * rfact2 / rday 
     378               trn(ji,jj,jk,jpfer) = trn(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 
    379379           END DO 
    380380         END DO  
    381381      END DO 
     382 
     383  
     384      IF( ln_check_mass ) THEN 
     385        ! Global budget of N SMS : denitrification in the water column and in the sediment 
     386         !                          nitrogen fixation by the diazotrophs 
     387         ! -------------------------------------------------------------------------------- 
     388         zrdenittot   = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 
     389         zsdenittot   = glob_sum ( zwork4(:,:)   * e1e2t(:,:) ) 
     390         znitrpottot  = glob_sum ( znitrpot(:,:,:) * nitrfix              * cvol(:,:,:) ) 
     391         IF( kt == nitend .AND. jnt == nrdttrc ) THEN 
     392            zfact = 1.e+3 * rfact2r * rno3 * ryyss * 14. / 1e12 
     393            IF(lwp) WRITE(numnit,9100) ndastp, znitrpottot * nitrfix * zfact, zrdenittot * zfact , zsdenittot * zfact 
     394         ENDIF 
     395       ENDIF 
    382396      ! 
    383397      IF( ln_diatrc ) THEN 
Note: See TracChangeset for help on using the changeset viewer.