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 5288 for branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zprod.F90 – NEMO

Ignore:
Timestamp:
2015-05-22T18:22:18+02:00 (9 years ago)
Author:
aumont
Message:

various bug fixes and updates of PISCES quota

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zprod.F90

    r5266 r5288  
    77   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
    88   !!             3.4  !  2011-05  (O. Aumont, C. Ethe) New parameterization of light limitation 
     9   !!             3.6  !  2015-05  (O. Aumont) PISCES quota 
    910   !!---------------------------------------------------------------------- 
    1011#if defined key_pisces_quota 
     
    4041   REAL(wp), PUBLIC ::  excret2         !: 
    4142   REAL(wp), PUBLIC ::  bresp           !: 
    42    REAL(wp), PUBLIC ::  chlcpm          !: 
    43    REAL(wp), PUBLIC ::  chlcnm          !: 
    44    REAL(wp), PUBLIC ::  chlcdm          !: 
     43   REAL(wp), PUBLIC ::  thetanpm        !: 
     44   REAL(wp), PUBLIC ::  thetannm        !: 
     45   REAL(wp), PUBLIC ::  thetandm        !: 
    4546   REAL(wp), PUBLIC ::  chlcmin         !: 
    4647   REAL(wp), PUBLIC ::  grosip          !: 
     48   REAL(wp), PUBLIC ::  zlimmxln        !: 
     49   REAL(wp), PUBLIC ::  zlimmxlp        !: 
     50   REAL(wp), PUBLIC ::  zlimmxld        !: 
    4751 
    4852   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prmaxn   !: optimal production = f(temperature) 
     
    8488      REAL(wp) ::   zlim, zsilfac2, zsiborn, zprod, zprontot, zproptot, zprodtot 
    8589      REAL(wp) ::   zmxltst, zmxlday, zprnutmax 
    86       REAL(wp) ::   zpislopen, zpislopep, zpislope2n, zpsichl 
    87       REAL(wp) ::   zrum, zcodel, zargu, zval, thetannm, thetanpm, thetandm 
     90      REAL(wp) ::   zpislopen, zpislopep, zpislope2n 
     91      REAL(wp) ::   zrum, zcodel, zargu, zval 
    8892      REAL(wp) ::   zrfact2 
    8993      CHARACTER (len=25) :: charout 
     
    142146 
    143147      ! Computation of the optimal production 
    144       zpsichl = 0. 
    145       thetannm = 0.25 
    146       thetanpm = 0.25 
    147       thetandm = 0.35 
    148  
    149       prmaxn(:,:,:) = ( 0.8_wp * (1. + zpsino3 * qnpmax + zpsichl ) ) * r1_rday * tgfunc(:,:,:) 
     148      prmaxn(:,:,:) = ( 0.8_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc(:,:,:) 
    150149      prmaxp(:,:,:) = 0.6 / 0.8 * prmaxn(:,:,:)  
    151       prmaxd(:,:,:) = 0.8 / 0.8 * prmaxn(:,:,:)  
     150      prmaxd(:,:,:) = prmaxn(:,:,:)  
    152151      zprnut(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 
    153152 
     
    258257      DO jj = 1, jpj 
    259258         DO ji = 1, jpi 
    260             zmxltst = MAX( 0.e0, hmld(ji,jj) - heup(ji,jj) ) 
     259            zmxltst = MAX( 0.e0, hmld(ji,jj) - heup_01(ji,jj) ) 
    261260            zmxlday = zmxltst * zmxltst * r1_rday 
    262             zmixnano(ji,jj) = 1. - zmxlday / ( 2. + zmxlday ) 
    263             zmixpico(ji,jj) = 1. - zmxlday / ( 2. + zmxlday ) 
    264             zmixdiat(ji,jj) = 1. - zmxlday / ( 4. + zmxlday ) 
     261            zmixnano(ji,jj) = 1. - zmxlday / ( zlimmxln + zmxlday ) 
     262            zmixpico(ji,jj) = 1. - zmxlday / ( zlimmxlp + zmxlday ) 
     263            zmixdiat(ji,jj) = 1. - zmxlday / ( zlimmxld + zmxlday ) 
    265264         END DO 
    266265      END DO 
     
    290289                  zprorcan(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trn(ji,jj,jk,jpphy) * rfact2 
    291290                  ! 
    292                   zrespn(ji,jj,jk) = zprorcan(ji,jj,jk) * zpsichl 
    293291                  zration = trn(ji,jj,jk,jpnph) / ( trn(ji,jj,jk,jpphy) + rtrn ) 
    294292                  zratiop = trn(ji,jj,jk,jppph) / ( trn(ji,jj,jk,jpphy) + rtrn ) 
     
    312310                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 
    313311                  zprofmax = zprnutmax * qfnmax * zmax 
    314                   zprofen(ji,jj,jk) = zprofmax * xnanofer(ji,jj,jk) * ( 4. - 4.5 * xlimnfe(ji,jj,jk)    & 
     312                  zprofen(ji,jj,jk) = zprofmax * xnanofer(ji,jj,jk) * ( 4. - 3.6 * xlimnfe(ji,jj,jk)    & 
    315313                  &          / ( xlimnfe(ji,jj,jk) + 0.2 ) ) * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn  & 
    316314                  &          + xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) ) 
     
    328326                  zprorcap(ji,jj,jk) = zprpic(ji,jj,jk)  * xlimpic(ji,jj,jk) * trn(ji,jj,jk,jppic) * rfact2 
    329327                  ! 
    330                   zrespp(ji,jj,jk) = zprorcap(ji,jj,jk) * zpsichl 
    331328                  zration = trn(ji,jj,jk,jpnpi) / ( trn(ji,jj,jk,jppic) + rtrn ) 
    332329                  zratiop = trn(ji,jj,jk,jpppi) / ( trn(ji,jj,jk,jppic) + rtrn ) 
     
    350347                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 
    351348                  zprofmax = zprnutmax * qfpmax * zmax 
    352                   zprofep(ji,jj,jk) = zprofmax * xpicofer(ji,jj,jk) * ( 4. - 4.5 * xlimpfe(ji,jj,jk)   & 
     349                  zprofep(ji,jj,jk) = zprofmax * xpicofer(ji,jj,jk) * ( 4. - 3.6 * xlimpfe(ji,jj,jk)   & 
    353350                  &          / ( xlimpfe(ji,jj,jk) + 0.2 ) ) * (1. + 0.8 * xpicono3(ji,jj,jk) / ( rtrn   & 
    354351                  &          + xpicono3(ji,jj,jk) + xpiconh4(ji,jj,jk) ) * (1. - xpicofer(ji,jj,jk) ) ) 
     
    367364                  ! Computation of the respiration term according to pahlow  
    368365                  ! & oschlies (2013) 
    369                   zrespd(ji,jj,jk) = zprorcad(ji,jj,jk) * zpsichl 
    370366                  ! 
    371367                  zration = trn(ji,jj,jk,jpndi) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
     
    390386                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 
    391387                  zprofmax = zprnutmax * qfdmax * zmax 
    392                   zprofed(ji,jj,jk) = zprofmax * xdiatfer(ji,jj,jk) * ( 4. - 4.5 * xlimdfe(ji,jj,jk)     & 
     388                  zprofed(ji,jj,jk) = zprofmax * xdiatfer(ji,jj,jk) * ( 4. - 3.6 * xlimdfe(ji,jj,jk)     & 
    393389                  &          / ( xlimdfe(ji,jj,jk) + 0.2 ) ) * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn   & 
    394390                  &          + xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) ) 
     
    562558      ! 
    563559      NAMELIST/nampisprod/ pislope, pislopep, pislope2, xadap, bresp, excret, excretp, excret2,  & 
    564          &                 chlcnm, chlcpm, chlcdm, chlcmin, grosip 
     560         &                 thetannm, thetanpm, thetandm, chlcmin, grosip, zlimmxln,           & 
     561         &                 zlimmxlp, zlimmxld 
    565562 
    566563      INTEGER :: ios                 ! Local integer output status for namelist read 
     
    590587         WRITE(numout,*) '    P-I slope  for diatoms                    pislope2     =', pislope2 
    591588         WRITE(numout,*) '    P-I slope  for picophytoplankton          pislopep     =', pislopep 
    592          WRITE(numout,*) '    Minimum Chl/C in nanophytoplankton        chlcnm       =', chlcnm 
    593          WRITE(numout,*) '    Minimum Chl/C in picophytoplankton        chlcpm       =', chlcpm 
    594          WRITE(numout,*) '    Minimum Chl/C in diatoms                  chlcdm       =', chlcdm 
     589         WRITE(numout,*) '    Minimum Chl/N in nanophytoplankton        thetannm     =', thetannm 
     590         WRITE(numout,*) '    Minimum Chl/N in picophytoplankton        thetanpm     =', thetanpm 
     591         WRITE(numout,*) '    Minimum Chl/N in diatoms                  thetandm     =', thetandm 
     592         WRITE(numout,*) '    Critical time scale for mixing (nano)     zlimmxln     =', zlimmxln 
     593         WRITE(numout,*) '    Critical time scale for mixing (pico)     zlimmxlp     =', zlimmxlp 
     594         WRITE(numout,*) '    Critical time scale for mixing (diatoms)  zlimmxld     =', zlimmxld 
    595595      ENDIF 
    596596      ! 
Note: See TracChangeset for help on using the changeset viewer.