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 6966 for branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z – NEMO

Ignore:
Timestamp:
2016-09-30T16:56:23+02:00 (8 years ago)
Author:
aumont
Message:

various bug fixes and updates on carbon chemistry

Location:
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zbio.F90

    r6453 r6966  
    2828   USE p5zpoc          !  Remineralisation of organic particles 
    2929   USE p5zagg          !  Aggregation of particles 
    30    USE p4zlys          !  Dissolution of calcite 
    31    USE p4zfechem       !  Iron chemistry 
    3230   USE p4zligand       !  Remineralization of ligands 
    3331   USE prtctl_trc      !  print control for debugging 
     
    8280      CALL p4z_opt  ( kt, knt )     ! Optic: PAR in the water column 
    8381      CALL p5z_sink ( kt, knt )     ! vertical flux of particulate organic matter 
    84       CALL p4z_lys   (kt, knt )     ! Dissolution of calcite 
    8582      CALL p4z_fechem(kt, knt )     ! Iron chemistry/scavenging 
    8683      CALL p5z_lim  ( kt, knt )     ! co-limitations by the various nutrients 
  • branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zpoc.F90

    r6841 r6966  
    6767      INTEGER  ::   ji, jj, jk, jn 
    6868      REAL(wp) ::   zremip, zremig, zdep, zstep 
    69       REAL(wp) ::   zopon, zopop, zopoc2, zopon2, zopop2, zofer 
     69      REAL(wp) ::   zopon, zopop, zopoc, zopoc2, zopon2, zopop2, zofer 
    7070      REAL(wp) ::   zsizek, zsizek1, alphat, remint 
    7171      REAL(wp) ::   solgoc, zpoc 
     
    211211               zremig = zremigoc(ji,jj,jk) * zstep * tgfunc(ji,jj,jk) 
    212212               zopoc2 = zremig  * trb(ji,jj,jk,jpgoc) 
     213               orem(ji,jj,jk) = zopoc2 
    213214               zopon2 = xremipn / xremipc * zremig * trb(ji,jj,jk,jpgon) 
    214215               zopop2 = xremipp / xremipc * zremig * trb(ji,jj,jk,jpgop) 
     
    396397               ! -------------------------------------------------------- 
    397398               zremip = zremipoc(ji,jj,jk) * zstep * tgfunc(ji,jj,jk) 
    398  
    399                orem(ji,jj,jk)  = zremip * trb(ji,jj,jk,jppoc) 
     399               zopoc  = zremip * trb(ji,jj,jk,jppoc) 
     400               orem(ji,jj,jk)  = orem(ji,jj,jk) + zopoc 
    400401               zopon  = xremipn / xremipc * zremip * trb(ji,jj,jk,jppon) 
    401402               zopop  = xremipp / xremipc * zremip * trb(ji,jj,jk,jppop) 
     
    407408               ! Update the appropriate tracers trends 
    408409               ! ------------------------------------- 
    409                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - orem(ji,jj,jk) 
     410               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zopoc 
    410411               tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zopon 
    411412               tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zopop 
    412413               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 
    413                tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + orem(ji,jj,jk) 
     414               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zopoc 
    414415               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zopon  
    415416               tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop  
  • branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zprod.F90

    r6841 r6966  
    3333 
    3434   !! * Shared module variables 
    35    REAL(wp), PUBLIC ::  pislope         !: 
     35   REAL(wp), PUBLIC ::  pislopen        !: 
    3636   REAL(wp), PUBLIC ::  pislopep        !: 
    37    REAL(wp), PUBLIC ::  pislope2        !: 
     37   REAL(wp), PUBLIC ::  pisloped        !: 
    3838   REAL(wp), PUBLIC ::  xadap           !: 
    39    REAL(wp), PUBLIC ::  excret          !: 
     39   REAL(wp), PUBLIC ::  excretn         !: 
    4040   REAL(wp), PUBLIC ::  excretp         !: 
    41    REAL(wp), PUBLIC ::  excret2         !: 
     41   REAL(wp), PUBLIC ::  excretd         !: 
    4242   REAL(wp), PUBLIC ::  bresp           !: 
    4343   REAL(wp), PUBLIC ::  thetanpm        !: 
     
    5656    
    5757   REAL(wp) :: r1_rday                !: 1 / rday 
    58    REAL(wp) :: texcret                !: 1 - excret  
     58   REAL(wp) :: texcretn               !: 1 - excret  
    5959   REAL(wp) :: texcretp               !: 1 - excretp  
    60    REAL(wp) :: texcret2               !: 1 - excret2         
     60   REAL(wp) :: texcretd               !: 1 - excret2         
    6161 
    6262 
     
    8787      REAL(wp) ::   zpronmax, zpropmax, zprofmax, zrat 
    8888      REAL(wp) ::   zlim, zsilfac2, zsiborn, zprod, zprontot, zproptot, zprodtot 
    89       REAL(wp) ::   zmxltst, zmxlday, zprnutmax, zdocprod 
    90       REAL(wp) ::   zpislopen, zpislopep, zpislope2n 
     89      REAL(wp) ::   zprnutmax, zdocprod, zprochln, zprochld, zprochlp 
     90      REAL(wp) ::   zpislopen, zpislopep, zpisloped 
    9191      REAL(wp) ::   zrum, zcodel, zargu, zval, zfeup 
    9292      REAL(wp) ::   zrfact2 
    9393      CHARACTER (len=25) :: charout 
    9494      REAL(wp), POINTER, DIMENSION(:,:  ) :: zmixnano, zmixpico, zmixdiat, zstrn 
    95       REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopead, zpislopeadp, zpislopead2 
     95      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopeadn, zpislopeadp, zpislopead 
    9696      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprbio, zprpic, zprdia, zysopt 
    9797      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprchln, zprchlp, zprchld 
    9898      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprorcan, zprorcap, zprorcad  
    9999      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprofed, zprofep, zprofen 
    100       REAL(wp), POINTER, DIMENSION(:,:,:) :: zprochln, zprochlp, zprochld 
    101100      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpronewn, zpronewp, zpronewd 
    102101      REAL(wp), POINTER, DIMENSION(:,:,:) :: zproregn, zproregp, zproregd 
     
    105104      REAL(wp), POINTER, DIMENSION(:,:,:) :: zrespn, zrespp, zrespd, zprnut 
    106105      REAL(wp), POINTER, DIMENSION(:,:,:) :: zcroissn, zcroissp, zcroissd 
     106      REAL(wp), POINTER, DIMENSION(:,:,:) :: zmxl_fac, zmxl_chl 
    107107      !!--------------------------------------------------------------------- 
    108108      ! 
     
    111111      !  Allocate temporary workspace 
    112112      CALL wrk_alloc( jpi, jpj,      zmixnano, zmixpico, zmixdiat, zstrn ) 
    113       CALL wrk_alloc( jpi, jpj, jpk, zpislopead, zpislopeadp, zpislopead2, zysopt )  
     113      CALL wrk_alloc( jpi, jpj, jpk, zmxl_fac, zmxl_chl ) 
     114      CALL wrk_alloc( jpi, jpj, jpk, zpislopeadn, zpislopeadp, zpislopead, zysopt )  
    114115      CALL wrk_alloc( jpi, jpj, jpk, zprdia, zprpic, zprbio, zprorcan, zprorcap, zprorcad ) 
    115       CALL wrk_alloc( jpi, jpj, jpk, zprofed, zprofep, zprofen, zprochln, zprochlp, zprochld ) 
     116      CALL wrk_alloc( jpi, jpj, jpk, zprofed, zprofep, zprofen ) 
    116117      CALL wrk_alloc( jpi, jpj, jpk, zpronewn, zpronewp, zpronewd, zproregn, zproregp, zproregd ) 
    117118      CALL wrk_alloc( jpi, jpj, jpk, zpropo4n, zpropo4p, zpropo4d, zrespn, zrespp, zrespd, zprnut ) 
     
    121122      zprorcan(:,:,:) = 0._wp ; zprorcap(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp 
    122123      zprofed (:,:,:) = 0._wp ; zprofep (:,:,:) = 0._wp ; zprofen (:,:,:) = 0._wp 
    123       zprochln(:,:,:) = 0._wp ; zprochlp(:,:,:) = 0._wp ; zprochld(:,:,:) = 0._wp 
    124124      zpronewn(:,:,:) = 0._wp ; zpronewp(:,:,:) = 0._wp ; zpronewd(:,:,:) = 0._wp 
    125125      zproregn(:,:,:) = 0._wp ; zproregp(:,:,:) = 0._wp ; zproregd(:,:,:) = 0._wp  
     
    159159         DO jj = 1 ,jpj 
    160160            DO ji = 1, jpi 
    161                IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     161               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    162162                  zval = MAX( 1., zstrn(ji,jj) ) 
    163                   zval = 1.5 * zval / (12. + zval) * (1. - fr_i(ji,jj)) 
    164                   zprbio(ji,jj,jk) = prmaxn(ji,jj,jk) * zval 
    165                   zprpic(ji,jj,jk) = prmaxp(ji,jj,jk) * zval 
    166                   zprdia(ji,jj,jk) = prmaxd(ji,jj,jk) * zval 
     163                  zmxl_fac(ji,jj,jk) = zval 
     164                  zmxl_chl(ji,jj,jk) = zval / 24. 
     165                  IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
     166                     zval = MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 
     167                     zmxl_fac(ji,jj,jk) = zmxl_fac(ji,jj,jk) * zval 
     168                     zmxl_chl(ji,jj,jk) = zmxl_chl(ji,jj,jk) * zval 
     169                  ENDIF 
     170                  zmxl_fac(ji,jj,jk) = ( 1. - exp( -0.2 * zmxl_fac(ji,jj,jk) ) ) 
     171                  zmxl_chl(ji,jj,jk) = zmxl_chl(ji,jj,jk) 
    167172               ENDIF 
    168173            END DO 
    169174         END DO 
    170175      END DO 
     176 
     177      zprbio(:,:,:) = prmaxn(:,:,:) * zmxl_fac(:,:,:) 
     178      zprdia(:,:,:) = prmaxd(:,:,:) * zmxl_fac(:,:,:) 
     179      zprpic(:,:,:) = prmaxp(:,:,:) * zmxl_fac(:,:,:) 
     180 
    171181 
    172182      ! Maximum light intensity 
     
    180190!CDIR NOVERRCHK 
    181191            DO ji = 1, jpi 
     192               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    182193                  ! Computation of the P-I slope for nanos and diatoms 
    183                IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
    184194                  ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
    185195                  zadap       = xadap * ztn / ( 2.+ ztn ) 
    186                   znanotot    = enano(ji,jj,jk) * zstrn(ji,jj) 
    187                   zpicotot    = epico(ji,jj,jk) * zstrn(ji,jj) 
    188                   zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj) 
    189196                  ! 
    190                   zpislopead (ji,jj,jk) = pislope * trb(ji,jj,jk,jpnch)    & 
     197                  zpislopeadn(ji,jj,jk) = pislopen * trb(ji,jj,jk,jpnch)    & 
    191198                  &                       /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 
    192                   zpislopeadp(ji,jj,jk) = pislopep * ( 1. + zadap * EXP( -0.5 * zpicotot ) )   & 
     199                  zpislopeadp(ji,jj,jk) = pislopep * ( 1. + zadap * EXP( -0.25 * epico(ji,jj,jk) ) )   & 
    193200                  &                       * trb(ji,jj,jk,jppch) /( trb(ji,jj,jk,jppic) * 12. + rtrn) 
    194                   zpislopead2(ji,jj,jk) = pislope2 * trb(ji,jj,jk,jpdch)    & 
     201                  zpislopeadd(ji,jj,jk) = pisloped * trb(ji,jj,jk,jpdch)    & 
    195202                     &                    /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 
    196                   zpislopen   = zpislopead (ji,jj,jk) / ( prmaxn(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 
    197                   zpislopep   = zpislopeadp(ji,jj,jk) / ( prmaxp(ji,jj,jk) * rday * xlimpic(ji,jj,jk) + rtrn ) 
    198                   zpislope2n  = zpislopead2(ji,jj,jk) / ( prmaxd(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 
     203                  ! 
     204                  zpislopen = zpislopeadn(ji,jj,jk) / ( prmaxn(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 
     205                  zpislopep = zpislopeadp(ji,jj,jk) / ( prmaxp(ji,jj,jk) * rday * xlimpic(ji,jj,jk) + rtrn ) 
     206                  zpisloped = zpislopeadd(ji,jj,jk) / ( prmaxd(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 
    199207 
    200208                  ! Computation of production function for Carbon 
    201209                  !  --------------------------------------------- 
    202                   zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen  * znanotot )  ) 
    203                   zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep  * zpicotot )  ) 
    204                   zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot )  ) 
     210                  zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) )  ) 
     211                  zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) )  ) 
     212                  zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) )  ) 
    205213 
    206214                  ! Computation of production function for Chlorophyll 
    207215                  !  ------------------------------------------------- 
    208                   zprchln(ji,jj,jk) = prmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen  * enano(ji,jj,jk) )  ) 
    209                   zprchlp(ji,jj,jk) = prmaxp(ji,jj,jk) * ( 1.- EXP( -zpislopep  * epico(ji,jj,jk) )  ) 
    210                   zprchld(ji,jj,jk) = prmaxd(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) )  ) 
     216                  zpislopen = zpislopen * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
     217                  zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
     218                  zpislopep = zpislopep * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
     219                  zprchln(ji,jj,jk) = prmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) )  ) 
     220                  zprchlp(ji,jj,jk) = prmaxp(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) )  ) 
     221                  zprchld(ji,jj,jk) = prmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) )  ) 
    211222               ENDIF 
    212223            END DO 
     
    217228         DO jj = 1, jpj 
    218229            DO ji = 1, jpi 
    219               IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     230 
     231                IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    220232                  !    Si/C of diatoms 
    221233                  !    ------------------------ 
     
    238250      END DO 
    239251 
    240       !  Computation of the limitation term due to a mixed layer deeper than the euphotic depth 
    241       DO jj = 1, jpj 
    242          DO ji = 1, jpi 
    243             zmxltst = MAX( 0.e0, hmld(ji,jj) - heup_01(ji,jj) ) 
    244             zmxlday = zmxltst * zmxltst * r1_rday 
    245             zmixnano(ji,jj) = 1. - zmxlday / ( zlimmxln + zmxlday ) 
    246             zmixpico(ji,jj) = 1. - zmxlday / ( zlimmxlp + zmxlday ) 
    247             zmixdiat(ji,jj) = 1. - zmxlday / ( zlimmxld + zmxlday ) 
    248          END DO 
    249       END DO 
    250   
    251       !  Mixed-layer effect on production                                                                                
    252       DO jk = 1, jpkm1 
    253          DO jj = 1, jpj 
    254             DO ji = 1, jpi 
    255                IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    256                   zprbio(ji,jj,jk)  = zprbio(ji,jj,jk) * zmixnano(ji,jj) 
    257                   zprpic(ji,jj,jk)  = zprpic(ji,jj,jk) * zmixpico(ji,jj) 
    258                   zprdia(ji,jj,jk)  = zprdia(ji,jj,jk) * zmixdiat(ji,jj) 
    259                   zprchln(ji,jj,jk) = zprchln(ji,jj,jk) * zmixnano(ji,jj) 
    260                   zprchlp(ji,jj,jk) = zprchlp(ji,jj,jk) * zmixpico(ji,jj) 
    261                   zprchld(ji,jj,jk) = zprchld(ji,jj,jk) * zmixdiat(ji,jj) 
    262                ENDIF 
     252      !  Sea-ice effect on production                                                                                
     253      DO jk = 1, jpkm1 
     254         DO jj = 1, jpj 
     255            DO ji = 1, jpi 
     256               zprbio(ji,jj,jk)  = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
     257               zprpic(ji,jj,jk)  = zprpic(ji,jj,jk) * ( 1. - fr_i(ji,jj) )  
     258               zprdia(ji,jj,jk)  = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) )  
     259               zprnut(ji,jj,jk)  = zprnut(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
    263260            END DO 
    264261         END DO 
     
    269266         DO jj = 1, jpj 
    270267            DO ji = 1, jpi 
    271                IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     268               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    272269                  !  production terms for nanophyto. 
    273270                  zprorcan(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 
     
    306303         DO jj = 1, jpj 
    307304            DO ji = 1, jpi 
    308                IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     305               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    309306                  !  production terms for picophyto. 
    310307                  zprorcap(ji,jj,jk) = zprpic(ji,jj,jk)  * xlimpic(ji,jj,jk) * trb(ji,jj,jk,jppic) * rfact2 
     
    343340         DO jj = 1, jpj 
    344341            DO ji = 1, jpi 
    345                IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     342               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    346343                  !  production terms for diatomees 
    347344                  zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 
     
    381378         DO jj = 1, jpj 
    382379            DO ji = 1, jpi 
    383                IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     380               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    384381                     !  production terms for nanophyto. ( chlorophyll ) 
     382                  znanotot = enano(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
    385383                  zprod = rday * (zpronewn(ji,jj,jk) + zproregn(ji,jj,jk)) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk) 
    386                   zprochln(ji,jj,jk) = thetannm * zprod / ( zpislopead(ji,jj,jk) * enano(ji,jj,jk) +rtrn ) 
    387                   zprochln(ji,jj,jk) = MAX(zprochln(ji,jj,jk), chlcmin * 12. * zprorcan (ji,jj,jk) ) 
     384                  zprochln = thetannm * zprod / ( zpislopeadn(ji,jj,jk) * znanotot + rtrn ) 
     385                  zprochln = MAX(zprochln, chlcmin * 12. * zprorcan (ji,jj,jk) ) 
    388386                     !  production terms for picophyto. ( chlorophyll ) 
     387                  zpicotot = epico(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
    389388                  zprod = rday * (zpronewp(ji,jj,jk) + zproregp(ji,jj,jk)) * zprchlp(ji,jj,jk) * xlimpic(ji,jj,jk) 
    390                   zprochlp(ji,jj,jk) = thetanpm * zprod / ( zpislopeadp(ji,jj,jk) * epico(ji,jj,jk) +rtrn ) 
    391                   zprochlp(ji,jj,jk) = MAX(zprochlp(ji,jj,jk), chlcmin * 12. * zprorcap(ji,jj,jk) ) 
     389                  zprochlp = thetanpm * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn ) 
     390                  zprochlp = MAX(zprochlp, chlcmin * 12. * zprorcap(ji,jj,jk) ) 
    392391                  !  production terms for diatomees ( chlorophyll ) 
     392                  zdiattot = ediat(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
    393393                  zprod = rday * (zpronewd(ji,jj,jk) + zproregd(ji,jj,jk)) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) 
    394                   zprochld(ji,jj,jk) = thetandm * zprod / ( zpislopead2(ji,jj,jk) * ediat(ji,jj,jk) +rtrn ) 
    395                   zprochld(ji,jj,jk) = MAX(zprochld(ji,jj,jk), chlcmin * 12. * zprorcad(ji,jj,jk) ) 
     394                  zprochld = thetandm * zprod / ( zpislopeadd(ji,jj,jk) * zdiattot + rtrn ) 
     395                  zprochld = MAX(zprochld, chlcmin * 12. * zprorcad(ji,jj,jk) ) 
     396                  !   Update the arrays TRA which contain the Chla sources and sinks 
     397                  tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) + zprochln * texcretn 
     398                  tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) + zprochld * texcretd 
     399                  tra(ji,jj,jk,jppch) = tra(ji,jj,jk,jppch) + zprochlp * texcretp 
    396400               ENDIF 
    397401            END DO 
     
    406410              zproptot = zpronewp(ji,jj,jk) + zproregp(ji,jj,jk) 
    407411              zprodtot = zpronewd(ji,jj,jk) + zproregd(ji,jj,jk) 
    408               zdocprod = excret2 * zprorcad(ji,jj,jk) + excret * zprorcan(ji,jj,jk)  & 
     412              zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk)  & 
    409413              &          + excretp * zprorcap(ji,jj,jk) 
    410414              tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - zpropo4n(ji,jj,jk) - zpropo4d(ji,jj,jk)  & 
     
    414418              tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zproregn(ji,jj,jk) - zproregd(ji,jj,jk)  & 
    415419              &                     - zproregp(ji,jj,jk) 
    416               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zprorcan(ji,jj,jk) * texcret     & 
     420              tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zprorcan(ji,jj,jk) * texcretn    & 
    417421                 &                  - zpsino3 * zpronewn(ji,jj,jk) - zpsinh4 * zproregn(ji,jj,jk)   & 
    418422                 &                  - zrespn(ji,jj,jk)  
    419423              zcroissn(ji,jj,jk) = tra(ji,jj,jk,jpphy) / rfact2/ (trb(ji,jj,jk,jpphy) + rtrn) 
    420               tra(ji,jj,jk,jpnph) = tra(ji,jj,jk,jpnph) + zprontot * texcret 
    421               tra(ji,jj,jk,jppph) = tra(ji,jj,jk,jppph) + zpropo4n(ji,jj,jk) * texcret   & 
    422               &                     + zprodopn(ji,jj,jk) * texcret 
    423               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) + zprochln(ji,jj,jk) * texcret 
    424               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) + zprofen(ji,jj,jk) * texcret 
     424              tra(ji,jj,jk,jpnph) = tra(ji,jj,jk,jpnph) + zprontot * texcretn 
     425              tra(ji,jj,jk,jppph) = tra(ji,jj,jk,jppph) + zpropo4n(ji,jj,jk) * texcretn   & 
     426              &                     + zprodopn(ji,jj,jk) * texcretn 
     427              tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) + zprofen(ji,jj,jk) * texcretn 
    425428              tra(ji,jj,jk,jppic) = tra(ji,jj,jk,jppic) + zprorcap(ji,jj,jk) * texcretp     & 
    426429                 &                  - zpsino3 * zpronewp(ji,jj,jk) - zpsinh4 * zproregp(ji,jj,jk)   & 
     
    430433              tra(ji,jj,jk,jpppi) = tra(ji,jj,jk,jpppi) + zpropo4p(ji,jj,jk) * texcretp   & 
    431434              &                     + zprodopp(ji,jj,jk) * texcretp 
    432               tra(ji,jj,jk,jppch) = tra(ji,jj,jk,jppch) + zprochlp(ji,jj,jk) * texcretp 
    433435              tra(ji,jj,jk,jppfe) = tra(ji,jj,jk,jppfe) + zprofep(ji,jj,jk) * texcretp 
    434               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) + zprorcad(ji,jj,jk) * texcret2   & 
     436              tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) + zprorcad(ji,jj,jk) * texcretd   & 
    435437                 &                  - zpsino3 * zpronewd(ji,jj,jk) - zpsinh4 * zproregd(ji,jj,jk)   & 
    436438                 &                  - zrespd(ji,jj,jk)  
    437439              zcroissd(ji,jj,jk) = tra(ji,jj,jk,jpdia) / rfact2 / (trb(ji,jj,jk,jpdia) + rtrn) 
    438               tra(ji,jj,jk,jpndi) = tra(ji,jj,jk,jpndi) + zprodtot * texcret2 
    439               tra(ji,jj,jk,jppdi) = tra(ji,jj,jk,jppdi) + zpropo4d(ji,jj,jk) * texcret2   & 
    440               &                     + zprodopd(ji,jj,jk) * texcret2 
    441               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) + zprochld(ji,jj,jk) * texcret2 
    442               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcret2 
    443               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcret2 
    444               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + excret2 * zprorcad(ji,jj,jk) + excret * zprorcan(ji,jj,jk)  & 
     440              tra(ji,jj,jk,jpndi) = tra(ji,jj,jk,jpndi) + zprodtot * texcretd 
     441              tra(ji,jj,jk,jppdi) = tra(ji,jj,jk,jppdi) + zpropo4d(ji,jj,jk) * texcretd   & 
     442              &                     + zprodopd(ji,jj,jk) * texcretd 
     443              tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcretd 
     444              tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcretd 
     445              tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk)  & 
    445446              &                     + excretp * zprorcap(ji,jj,jk) 
    446               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + excret2 * zprodtot + excret * zprontot   & 
     447              tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + excretd * zprodtot + excretn * zprontot   & 
    447448              &                     + excretp * zproptot 
    448               tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + excret2 * zpropo4d(ji,jj,jk) + excret * zpropo4n(ji,jj,jk)   & 
    449               &    - texcret * zprodopn(ji,jj,jk) - texcret2 * zprodopd(ji,jj,jk) + excretp * zpropo4p(ji,jj,jk)     & 
     449              tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + excretd * zpropo4d(ji,jj,jk) + excretn * zpropo4n(ji,jj,jk)   & 
     450              &    - texcretn * zprodopn(ji,jj,jk) - texcretd * zprodopd(ji,jj,jk) + excretp * zpropo4p(ji,jj,jk)     & 
    450451              &    - texcretp * zprodopp(ji,jj,jk) 
    451452              tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2ut * ( zproregn(ji,jj,jk) + zproregd(ji,jj,jk)   & 
     
    453454                 &                + zpronewd(ji,jj,jk) + zpronewp(ji,jj,jk) )   & 
    454455                 &                - o2ut * ( zrespn(ji,jj,jk) + zrespp(ji,jj,jk) + zrespd(ji,jj,jk) ) 
    455               zfeup    = texcret * zprofen(ji,jj,jk) + texcret2 * zprofed(ji,jj,jk)  & 
     456              zfeup    = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk)  & 
    456457              &          + texcretp * zprofep(ji,jj,jk) 
    457458              tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zfeup 
    458               tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - texcret2 * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 
     459              tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - texcretd * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 
    459460              tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) - zprorcap(ji,jj,jk)  & 
    460461              &                     + zpsino3 * zpronewn(ji,jj,jk) + zpsinh4 * zproregn(ji,jj,jk)   & 
     
    522523      ! 
    523524      CALL wrk_dealloc( jpi, jpj,      zmixnano, zmixpico, zmixdiat, zstrn ) 
    524       CALL wrk_dealloc( jpi, jpj, jpk, zpislopead, zpislopeadp, zpislopead2, zysopt )                            
     525      CALL wrk_dealloc( jpi, jpj, jpk, zmxl_fac, zmxl_chl ) 
     526      CALL wrk_dealloc( jpi, jpj, jpk, zpislopeadn, zpislopeadp, zpislopeadd, zysopt )                            
    525527      CALL wrk_dealloc( jpi, jpj, jpk, zprdia, zprpic, zprbio, zprorcan, zprorcap, zprorcad ) 
    526       CALL wrk_dealloc( jpi, jpj, jpk, zprofed, zprofep, zprofen, zprochln, zprochlp, zprochld )  
     528      CALL wrk_dealloc( jpi, jpj, jpk, zprofed, zprofep, zprofen )  
    527529      CALL wrk_dealloc( jpi, jpj, jpk, zpronewn, zpronewp, zpronewd, zproregn, zproregp, zproregd ) 
    528530      CALL wrk_dealloc( jpi, jpj, jpk, zpropo4n, zpropo4p, zpropo4d, zrespn, zrespp, zrespd, zprnut ) 
     
    547549      !!---------------------------------------------------------------------- 
    548550      ! 
    549       NAMELIST/nampisprod/ pislope, pislopep, pislope2, xadap, bresp, excret, excretp, excret2,  & 
     551      NAMELIST/nampisprod/ pislopen, pislopep, pisloped, xadap, bresp, excretn, excretp, excretd,  & 
    550552         &                 thetannm, thetanpm, thetandm, chlcmin, grosip, zlimmxln,           & 
    551553         &                 zlimmxlp, zlimmxld 
     
    568570         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    569571         WRITE(numout,*) '    mean Si/C ratio                           grosip       =', grosip 
    570          WRITE(numout,*) '    P-I slope                                 pislope      =', pislope 
    571          WRITE(numout,*) '    Acclimation factor to low light           xadap       =', xadap 
    572          WRITE(numout,*) '    excretion ratio of nanophytoplankton      excret       =', excret 
     572         WRITE(numout,*) '    P-I slope                                 pislopen     =', pislopen 
     573         WRITE(numout,*) '    Acclimation factor to low light           xadap        =', xadap 
     574         WRITE(numout,*) '    excretion ratio of nanophytoplankton      excretn      =', excretn 
    573575         WRITE(numout,*) '    excretion ratio of picophytoplankton      excretp      =', excretp 
    574          WRITE(numout,*) '    excretion ratio of diatoms                excret2      =', excret2 
     576         WRITE(numout,*) '    excretion ratio of diatoms                excretd      =', excretd 
    575577         WRITE(numout,*) '    basal respiration in phytoplankton        bresp        =', bresp 
    576578         WRITE(numout,*) '    Maximum Chl/C in phytoplankton            chlcmin      =', chlcmin 
    577          WRITE(numout,*) '    P-I slope  for diatoms                    pislope2     =', pislope2 
     579         WRITE(numout,*) '    P-I slope  for diatoms                    pisloped     =', pisloped 
    578580         WRITE(numout,*) '    P-I slope  for picophytoplankton          pislopep     =', pislopep 
    579581         WRITE(numout,*) '    Minimum Chl/N in nanophytoplankton        thetannm     =', thetannm 
     
    586588      ! 
    587589      r1_rday   = 1._wp / rday  
    588       texcret   = 1._wp - excret 
     590      texcretn  = 1._wp - excretn 
    589591      texcretp  = 1._wp - excretp 
    590       texcret2  = 1._wp - excret2 
     592      texcretd  = 1._wp - excretd 
    591593      tpp       = 0._wp 
    592594      ! 
  • branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zsms.F90

    r6841 r6966  
    2020   USE p5zbio          !  Biological model 
    2121   USE p4zche          !  Chemical model 
     22   USE p4zlys          !  Calcite saturation 
    2223   USE p4zflx          !  Gas exchange 
    2324   USE p4zsbc          !  External source of nutrients 
     
    132133         ! 
    133134         CALL p5z_bio (kt, knt)    ! Biology 
     135         CALL p4z_lys( kt, jnt )   ! Compute CaCO3 saturation 
    134136         CALL p4z_flx( kt, knt )   ! Compute surface fluxes 
    135137         CALL p5z_sed (kt, knt)    ! Sedimentation 
Note: See TracChangeset for help on using the changeset viewer.