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

Ignore:
Timestamp:
2021-01-07T23:09:56+01:00 (3 years 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/p4zprod.F90

    r13233 r14276  
    6767      INTEGER  ::   ji, jj, jk 
    6868      REAL(wp) ::   zsilfac, znanotot, zdiattot, zconctemp, zconctemp2 
    69       REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap, zlim, zsilfac2, zsiborn 
     69      REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap, zlim, zsiborn 
    7070      REAL(wp) ::   zprod, zproreg, zproreg2, zprochln, zprochld 
    7171      REAL(wp) ::   zdocprod, zpislopen, zpisloped, zfact 
    72       REAL(wp) ::   zratiosi, zmaxsi, zlimfac, zsizetmp 
    73       REAL(wp) ::   zrum, zcodel, zargu, zval, zfeup, chlcnm_n, chlcdm_n 
     72      REAL(wp) ::   zratiosi, zmaxsi, zlimfac, zsizetmp, zfecnm, zfecdm 
     73      REAL(wp) ::   zrum, zcodel, zargu, zval, zfeup 
    7474      CHARACTER (len=25) :: charout 
    7575      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zw2d 
    7676      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 
    77       REAL(wp), DIMENSION(jpi,jpj    ) :: zstrn 
    7877      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprmaxn,zprmaxd 
    7978      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopeadn, zpislopeadd, zysopt   
     
    9493      zprbio  (:,:,:) = 0._wp ; zprchld (:,:,:) = 0._wp ; zprchln (:,:,:) = 0._wp  
    9594      zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp  
     95      consfe3 (:,:,:) = 0._wp 
    9696 
    9797      ! Computation of the maximimum production. Based on a Q10 description 
     
    100100      zprmaxn(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 
    101101      zprmaxd(:,:,:) = zprmaxn(:,:,:) 
    102  
    103       ! compute the day length depending on latitude and the day 
    104       ! Astronomical parameterization taken from HAMOCC3 
    105       zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 
    106       zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  ) 
    107  
    108       ! day length in hours 
    109       zstrn(:,:) = 0. 
    110       DO jj = 1, jpj 
    111          DO ji = 1, jpi 
    112             zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
    113             zargu = MAX( -1., MIN(  1., zargu ) ) 
    114             zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
    115          END DO 
    116       END DO 
    117102 
    118103      ! Impact of the day duration and light intermittency on phytoplankton growth 
     
    127112            DO ji = 1, jpi 
    128113               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    129                   zval = MAX( 1., zstrn(ji,jj) ) 
     114                  zval = MAX( 1., strn(ji,jj) ) 
    130115                  IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    131116                     zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 
     
    225210                   ! Si/C of diatoms 
    226211                   ! ------------------------ 
    227                    ! Si/C increases with iron stress and silicate availability (zsilfac) 
     212                   ! Si/C increases with iron stress and silicate availability 
    228213                   ! Si/C is arbitrariliy increased for very high Si concentrations 
    229                    ! to mimic the very high ratios observed in the Southern Ocean (zsilfac2) 
     214                   ! to mimic the very high ratios observed in the Southern Ocean (zsilfac) 
    230215                   ! A parameterization derived from Flynn (2003) is used for the control 
    231216                   ! when Si is not limiting which is similar to the parameterisation 
     
    236221                 zsiborn = trb(ji,jj,1,jpsil)**3 
    237222                 IF (gphit(ji,jj) < -30.0 ) THEN 
    238                    zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
     223                   zsilfac = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
    239224                 ELSE 
    240                    zsilfac2 = 1. +      zsiborn / ( zsiborn + xksi2**3 ) 
     225                   zsilfac = 1. +      zsiborn / ( zsiborn + xksi2**3 ) 
    241226                 ENDIF 
    242                  zratiosi = 1.0 - trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) / ( zsilfac2 * grosip * 3.0 + rtrn ) 
     227                 zratiosi = 1.0 - trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) / ( zsilfac * grosip * 3.0 + rtrn ) 
    243228                 zratiosi = MAX(0., MIN(1.0, zratiosi) ) 
    244229                 zmaxsi  = (1.0 + 0.1**4) * zratiosi**4 / ( zratiosi**4 + 0.1**4 ) 
    245230                 IF ( xlimsi(ji,jj,jk) /= xlimdia(ji,jj,jk) ) THEN 
    246                     zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zmaxsi 
     231                    zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zmaxsi 
    247232                 ELSE 
    248                     zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zsilim**0.7 * zmaxsi 
     233                    zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zsilim**0.7 * zmaxsi 
    249234                 ENDIF 
    250235              ENDIF 
     
    291276                  ! do not suggest it for accimated cells. Uptake is 
    292277                  ! downregulated when the quota is close to the maximum quota 
    293                   zratio = 1.0 - MIN(1.0,trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) ) 
     278                  zfecnm = xqfuncfecn(ji,jj,jk) + ( fecnm - xqfuncfecn(ji,jj,jk) ) * ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) 
     279                  zratio = 1.0 - MIN(1.0,trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * zfecnm + rtrn ) ) 
    294280                  zmax   = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) )  
    295                   zprofen(ji,jj,jk) = fecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
     281                  zprofen(ji,jj,jk) = zfecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
    296282                  &          * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn + xnanono3(ji,jj,jk)  & 
    297283                  &          + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) )   & 
     
    317303                  ! do not suggest it for accimated cells. Uptake is 
    318304                  ! downregulated when the quota is close to the maximum quota 
    319                   zratio = 1.0 - MIN(1.0, trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) ) 
     305                  zfecdm = xqfuncfecd(ji,jj,jk) + ( fecdm - xqfuncfecd(ji,jj,jk) ) * ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) 
     306                  zratio = 1.0 - MIN(1.0, trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * zfecdm + rtrn ) ) 
    320307                  zmax   = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) )  
    321                   zprofed(ji,jj,jk) = fecdm * zprmaxd(ji,jj,jk) * (1.0 - fr_i(ji,jj) )  & 
     308                  zprofed(ji,jj,jk) = zfecdm * zprmaxd(ji,jj,jk) * (1.0 - fr_i(ji,jj) )  & 
    322309                  &          * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn + xdiatno3(ji,jj,jk)  & 
    323310                  &          + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) )   & 
     
    339326                  zprod    = rday * zprorcan(ji,jj,jk) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk) 
    340327                  zprochln = chlcmin * 12. * zprorcan (ji,jj,jk) 
    341  
    342                   ! The maximum reachable Chl quota is modulated by temperature 
    343                   ! following Geider (1987) 
    344                   chlcnm_n   = MIN ( chlcnm, ( chlcnm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 
    345                   zprochln = zprochln + (chlcnm_n-chlcmin) * 12. * zprod / & 
     328                  zprochln = zprochln + (chlcnm - chlcmin) * 12. * zprod / & 
    346329                                        & (  zpislopeadn(ji,jj,jk) * znanotot +rtrn) 
    347330 
     
    350333                  zprod    = rday * zprorcad(ji,jj,jk) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) 
    351334                  zprochld = chlcmin * 12. * zprorcad(ji,jj,jk) 
    352  
    353                   ! The maximum reachable Chl quota is modulated by temperature 
    354                   ! following Geider (1987) 
    355                   chlcdm_n   = MIN ( chlcdm, ( chlcdm / (1. - 1.14 / 43.4 * tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 
    356                   zprochld = zprochld + (chlcdm_n-chlcmin) * 12. * zprod / & 
     335                  zprochld = zprochld + (chlcdm - chlcmin) * 12. * zprod / & 
    357336                                        & ( zpislopeadd(ji,jj,jk) * zdiattot +rtrn ) 
    358337 
     
    386365                 &                   + ( o2ut + o2nit ) * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) 
    387366                 ! 
    388                  zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
    389                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zfeup 
     367                 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - ( texcretn * zprofen(ji,jj,jk)    & 
     368                 &                   + texcretd * zprofed(ji,jj,jk) ) 
     369                 consfe3(ji,jj,jk) = ( texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) )     & 
     370                 &                    * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * trb(ji,jj,jk,jpfer) ) / rfact2 
    390371                 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk)   & 
    391372                 &                   * rfact2 * trb(ji,jj,jk,jpdia) 
     
    401382     ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small  
    402383     ! and based on the FeL model by Morel et al. (2008) and on the study of 
    403      ! Shaked and Lis (2012) 
     384     ! Shaked et al. (2020) 
    404385     ! ------------------------------------------------------------------------- 
    405386     IF( ln_ligand ) THEN 
     
    412393                    zfeup    = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
    413394                    tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp    & 
    414                     &       - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
     395                    &       - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
    415396                    zpligprod1(ji,jj,jk) = zdocprod * ldocp 
    416397                    zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) & 
    417                     &                      + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
     398                    &                      + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
    418399                 ENDIF 
    419400              END DO 
Note: See TracChangeset for help on using the changeset viewer.