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 6231 for branches/CNRS – NEMO

Changeset 6231 for branches/CNRS


Ignore:
Timestamp:
2016-01-12T11:51:52+01:00 (8 years ago)
Author:
aumont
Message:

update PISCES QUOTA to its latest version

Location:
branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/CONFIG/ORCA2_OFF_PISCES_QUOTA/EXP00/namelist_pisces

    r5290 r6231  
    4040   xkmort     =  1.E-8    ! half saturation constant for mortality 
    4141   ferat3     =  10.E-6   ! Fe/C in zooplankton  
    42    no3rat3    =  0.167    ! N/C ratio in zooplankton 
    43    po4rat3    =  0.0094   ! P/C ratio in zooplankton 
     42   no3rat3    =  0.182    ! N/C ratio in zooplankton 
     43   po4rat3    =  0.0094    ! P/C ratio in zooplankton 
    4444   wsbio2     =  50.      ! Big particles sinking speed 
    4545   niter1max  =  1        ! Maximum number of iterations for POC 
    4646   niter2max  =  1        ! Maximum number of iterations for GOC 
     47   bmetexcess = .true.   ! Excess carbon for respiration 
    4748/ 
    4849!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     
    5354   concdno3   =  4E-6     ! Phosphate half saturation for diatoms 
    5455   concnnh4   =  1.5E-6   ! NH4 half saturation for phyto 
    55    concpnh4   =  3E-7 
     56   concpnh4   =  4E-7 
    5657   concdnh4   =  2E-6     ! NH4 half saturation for diatoms 
    5758   concnpo4   =  3E-6     ! PO4 half saturation for phyto 
    58    concppo4   =  1E-6 
     59   concppo4   =  1.5E-6 
    5960   concdpo4   =  4E-6     ! PO4 half saturation for diatoms 
    6061   concnfer   =  3E-9   ! Iron half saturation for phyto 
    61    concpfer   =  1E-9 
     62   concpfer   =  1.5E-9 
    6263   concdfer   =  4E-9   ! Iron half saturation for diatoms 
    6364   concbfe    =  1.E-11   ! Half-saturation for Fe limitation of Bacteria 
     
    7778   qfpopt     =  7.E-6 
    7879   qfdopt     =  7.E-6    ! Optimal quota of diatoms 
    79    caco3r     =  0.35      ! mean rain ratio 
     80   caco3r     =  0.35     ! mean rain ratio 
    8081   qnnmin     =  0.29 
    81    qnnmax     =  1.525 
     82   qnnmax     =  1.39 
    8283   qpnmin     =  0.28 
    8384   qpnmax     =  1.06 
    8485   qnpmin     =  0.42 
    85    qnpmax     =  1.525 
     86   qnpmax     =  1.39 
    8687   qppmin     =  0.25 
    8788   qppmax     =  0.7    
    8889   qndmin     =  0.25 
    89    qndmax     =  1.525 
     90   qndmax     =  1.39 
    9091   qpdmin     =  0.29 
    9192   qpdmax     =  1.32 
     
    108109!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    109110   pislope    =  3.       ! P-I slope 
    110    pislopep   =  4.       ! P-I slope for picophytoplankton 
     111   pislopep   =  3.       ! P-I slope for picophytoplankton 
    111112   pislope2   =  3.       ! P-I slope  for diatoms 
    112113   xadap      =  0.       ! Adaptation factor to low light 
     
    117118   thetannm   =  0.25     ! Maximum Chl/N in nanophytoplankton 
    118119   thetanpm   =  0.25     ! Maximum Chl/N in picophytoplankton 
    119    thetandm   =  0.35     ! Maximum Chl/N in diatoms 
     120   thetandm   =  0.3      ! Maximum Chl/N in diatoms 
    120121   chlcmin    =  0.004    ! Minimum Chl/c in phytoplankton 
    121122   grosip     =  0.131    ! mean Si/C ratio 
     
    128129!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    129130   wchl       =  0.01    ! quadratic mortality of phytoplankton 
    130    wchlp      =  0.001 
     131   wchlp      =  0.01 
    131132   wchld      =  0.01     ! maximum quadratic mortality of diatoms 
    132133   wchldm     =  0.02     ! maximum quadratic mortality of diatoms 
     
    155156   xkgraz2     =  20.E-6   ! half sturation constant for meso grazing 
    156157   epsher2     =  0.5      ! Efficicency of Mesozoo growth 
    157    ssigma2     =  0.7     ! Fraction excreted as semi-labile DOM 
     158   ssigma2     =  0.5     ! Fraction excreted as semi-labile DOM 
    158159   srespir2    =  0.2     ! Active respiration 
    159160   unass2c     =  0.3     ! non assimilated fraction of P by mesozoo 
     
    169170   resrat     =  0.03     ! exsudation rate of zooplankton 
    170171   mzrat      =  0.005    ! zooplankton mortality rate 
    171    xprefc     =  0.2      ! Microzoo preference for POM 
     172   xprefc     =  0.1      ! Microzoo preference for POM 
    172173   xprefn     =  1.       ! Microzoo preference for Nanophyto 
    173    xprefp     =  1.5 
     174   xprefp     =  1.6 
    174175   xprefd     =  1.0      ! Microzoo preference for Diatoms 
    175176   xprefz     =  0.3      ! Microzoo preference for microzooplankton 
     
    182183   xkgraz     =  20.E-6   ! half sturation constant for grazing 
    183184   epsher     =  0.5      ! Efficiency of microzoo growth 
    184    ssigma     =  0.7      ! Fraction excreted as semi-labile DOM 
     185   ssigma     =  0.5      ! Fraction excreted as semi-labile DOM 
    185186   srespir    =  0.2      ! Active respiration 
    186187   unassc     =  0.3      ! non assimilated fraction of C by zoo 
     
    200201&nampisrem     !   parameters for remineralization 
    201202!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    202    xremikc   =  0.35      ! remineralization rate of DOC 
     203   xremikc   =  0.25      ! remineralization rate of DOC 
    203204   xremikn   =  0.35      ! remineralization rate of DON 
    204    xremikp   =  0.35      ! remineralization rate of DOP 
    205    xremipc   =  0.025     ! remineralisation rate of POC 
    206    xremipn   =  0.03      ! remineralisation rate of PON 
    207    xremipp   =  0.035      ! remineralisation rate of POP 
     205   xremikp   =  0.4       ! remineralization rate of DOP 
     206   xremipc   =  0.02      ! remineralisation rate of POC 
     207   xremipn   =  0.025      ! remineralisation rate of PON 
     208   xremipp   =  0.03      ! remineralisation rate of POP 
    208209   nitrif    =  0.05      ! NH4 nitrification rate 
    209210   xsirem    =  0.003     ! remineralization rate of Si 
     
    211212   xsilab    =  0.5       ! Fraction of labile biogenic silica 
    212213   oxymin    =  1.E-6     ! Half-saturation constant for anoxia 
    213    oxymin    =  6.E-6     ! Minimum O2 concentration for oxic remin. 
     214   oxymin2   =  6.E-6     ! Minimum O2 concentration for oxic remin. 
     215   feratb    =  20E-6     ! Bacterial Fe/C ratio  
     216   xkferb    =  3E-10     ! Half-saturation constant for bact. Fe/C 
    214217/ 
    215218!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    216219&nampiscal     !   parameters for Calcite chemistry 
    217220!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    218    kdca       =  6.       ! calcite dissolution rate constant (1/time) 
    219    nca        =  1.       ! order of dissolution reaction (dimensionless) 
     221   kdca       =  2.5       ! calcite dissolution rate constant (1/time) 
     222   nca        =  4.       ! order of dissolution reaction (dimensionless) 
    220223/ 
    221224!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     
    250253   wdust       =  2.0      ! Dust sinking speed  
    251254   icefeinput  =  15.e-9   ! Iron concentration in sea ice 
    252    nitrfix     =  1.e-7    ! Nitrogen fixation rate 
     255   nitrfix     =  1.5e-7    ! Nitrogen fixation rate 
    253256   diazolight  =  30.      ! Diazotrophs sensitivity to light (W/m2) 
    254257   concfediaz  =  1.e-10   ! Diazotrophs half-saturation Cste for Iron 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90

    r5288 r6231  
    2222   USE fldread         !  time interpolation 
    2323   USE prtctl_trc      !  print control for debugging 
     24   USE lib_mpp         ! distribued memory computing library 
     25 
    2426 
    2527 
     
    7375      INTEGER, INTENT(in) ::   kt, jnt   ! ocean time step 
    7476      ! 
    75       INTEGER  ::   ji, jj, jk 
     77      INTEGER  ::   ji, jj, jk, jn 
    7678      INTEGER  ::   irgb 
    7779      REAL(wp) ::   zchl, zxsi0r 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90

    r5266 r6231  
    7272   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdic, rivalk    !: river input fields 
    7373   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdin, rivdip    !: river input fields 
     74#if defined key_pisces_quota 
     75   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdon, rivdop    !: river input fields 
     76   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdoc    !: river input fields 
     77#endif 
    7478   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdsi    !: river input fields 
    7579   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: nitdep    !: atmospheric N deposition  
     
    118122         IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_dust > 1 ) ) THEN 
    119123            CALL fld_read( kt, 1, sf_dust ) 
    120             dust(:,:) = sf_dust(1)%fnow(:,:,1) 
     124            dust(:,:) = sf_dust(1)%fnow(:,:,1) * tmask(:,:,1) 
    121125         ENDIF 
    122126      ENDIF 
     
    139143                  zcoef = ryyss * cvol(ji,jj,1)  
    140144                  rivalk(ji,jj) =   sf_river(jr_dic)%fnow(ji,jj,1)                                    & 
    141                      &              * 1.E3        / ( 12. * zcoef + rtrn ) 
     145                     &              * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1) 
     146#if defined key_pisces_quota 
     147                  rivdic(ji,jj) = ( sf_river(jr_dic)%fnow(ji,jj,1) ) & 
     148                     &              * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1) 
     149                  rivdin(ji,jj) = ( sf_river(jr_din)%fnow(ji,jj,1) ) & 
     150                     &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) * tmask(ji,jj,1) 
     151                  rivdip(ji,jj) = ( sf_river(jr_dip)%fnow(ji,jj,1) ) & 
     152                     &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 
     153                  rivdoc(ji,jj) = ( sf_river(jr_doc)%fnow(ji,jj,1) ) & 
     154                     &              * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1) 
     155                  rivdon(ji,jj) = ( sf_river(jr_don)%fnow(ji,jj,1) ) & 
     156                     &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) * tmask(ji,jj,1) 
     157                  rivdop(ji,jj) = ( sf_river(jr_dop)%fnow(ji,jj,1) ) & 
     158                     &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 
     159#else 
    142160                  rivdic(ji,jj) = ( sf_river(jr_dic)%fnow(ji,jj,1) + sf_river(jr_doc)%fnow(ji,jj,1) ) & 
    143                      &              * 1.E3         / ( 12. * zcoef + rtrn ) 
     161                     &              * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1) 
    144162                  rivdin(ji,jj) = ( sf_river(jr_din)%fnow(ji,jj,1) + sf_river(jr_don)%fnow(ji,jj,1) ) & 
    145                      &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) 
     163                     &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) * tmask(ji,jj,1) 
    146164                  rivdip(ji,jj) = ( sf_river(jr_dip)%fnow(ji,jj,1) + sf_river(jr_dop)%fnow(ji,jj,1) ) & 
    147                      &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) 
     165                     &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 
     166#endif 
    148167                  rivdsi(ji,jj) =   sf_river(jr_dsi)%fnow(ji,jj,1)                                    & 
    149                      &              * 1.E3        / ( 28.1 * zcoef + rtrn ) 
     168                     &              * 1.E3 / ( 28.1 * zcoef + rtrn ) * tmask(ji,jj,1) 
    150169               END DO 
    151170            END DO 
     
    159178            DO jj = 1, jpj 
    160179               DO ji = 1, jpi 
    161                   nitdep(ji,jj) = sf_ndepo(1)%fnow(ji,jj,1) / rno3 / ( 14E6 * ryyss * fse3t(ji,jj,1) + rtrn ) 
     180                  nitdep(ji,jj) = sf_ndepo(1)%fnow(ji,jj,1) / rno3 / ( 14E6   & 
     181                  &               * ryyss * fse3t(ji,jj,1) + rtrn ) * tmask(ji,jj,1) 
    162182               END DO 
    163183            END DO 
     
    318338         ! 
    319339         ALLOCATE( rivdic(jpi,jpj), rivalk(jpi,jpj), rivdin(jpi,jpj), rivdip(jpi,jpj), rivdsi(jpi,jpj) )  
     340#if defined key_pisces_quota 
     341         ALLOCATE( rivdon(jpi,jpj), rivdop(jpi,jpj), rivdoc(jpi,jpj) ) 
     342#endif 
    320343         ! 
    321344         ALLOCATE( sf_river(jpriv), rivinput(jpriv), STAT=ierr1 )           !* allocate and fill sf_river (forcing structure) with sn_river_ 
     
    455478                  zexpide   = MIN( 8.,( fsdept(ji,jj,jk) / 500. )**(-1.5) ) 
    456479                  zdenitide = -0.9543 + 0.7662 * LOG( zexpide ) - 0.235 * LOG( zexpide )**2 
    457                   zcmask(ji,jj,jk) = zcmask(ji,jj,jk) * MIN( 1., EXP( zdenitide ) / 0.5 ) 
     480                  zcmask(ji,jj,jk) = zcmask(ji,jj,jk) * MIN( 1., EXP( zdenitide ) / 0.5 ) * tmask(ji,jj,jk) 
    458481               END DO 
    459482            END DO 
     
    463486         ironsed(:,:,jpk) = 0._wp 
    464487         DO jk = 1, jpkm1 
    465             ironsed(:,:,jk) = sedfeinput * zcmask(:,:,jk) / ( fse3t(:,:,jk) * rday ) 
     488            ironsed(:,:,jk) = sedfeinput * zcmask(:,:,jk) / ( fse3t(:,:,jk) * rday )  
    466489         END DO 
    467490         DEALLOCATE( zcmask) 
     
    481504         CALL iom_close( numhydro ) 
    482505         ! 
    483          hydrofe(:,:,:) = ( hydrofe(:,:,:) * hratio ) / ( cvol(:,:,:) * ryyss + rtrn ) / 1000._wp 
     506         hydrofe(:,:,:) = ( hydrofe(:,:,:) * hratio ) / ( cvol(:,:,:) * ryyss + rtrn ) / 1000._wp * tmask(:,:,:) 
    484507         ! 
    485508      ENDIF 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90

    r4624 r6231  
    6161      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
    6262      !! 
    63       INTEGER ::   jnt, jn, jl 
     63      INTEGER ::   ji,jj,jnt, jn, jl, jk 
    6464      CHARACTER (len=25) :: charout 
    6565      REAL(wp), POINTER, DIMENSION(:,:,:,:)  :: ztrdpis 
     
    374374  
    375375         IF(lwp) WRITE(numout,*) '       TALK mean : ', zalksum 
    376          trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksum 
     376         trn(:,:,:,jptal) = MIN(2800E-6, trn(:,:,:,jptal) * alkmean / zalksum) 
    377377 
    378378         IF(lwp) WRITE(numout,*) '       PO4  mean : ', zpo4sum 
    379          trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sum 
     379         trn(:,:,:,jppo4) = MIN(400E-6, trn(:,:,:,jppo4) * po4mean / zpo4sum ) 
    380380 
    381381         IF(lwp) WRITE(numout,*) '       NO3  mean : ', zno3sum 
    382          trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sum 
     382         trn(:,:,:,jpno3) = MIN(400E-6, trn(:,:,:,jpno3) * no3mean / zno3sum ) 
    383383 
    384384         IF(lwp) WRITE(numout,*) '       SiO3 mean : ', zsilsum 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zlim.F90

    r5288 r6231  
    219219               xnanodop(ji,jj,jk) = trn(ji,jj,jk,jpdop) / ( trn(ji,jj,jk,jpdop) + xkdoc )   & 
    220220               &                    * ( 1.0 - xnanopo4(ji,jj,jk) ) 
     221               xnanodop(ji,jj,jk) = 0. 
    221222               ! 
    222223               zfalim = (1.-fananof) / fananof 
     
    227228               ! 
    228229               zration = trn(ji,jj,jk,jpnph) * z1_trnphy 
     230               zration = MIN(xqnnmax(ji,jj,jk), MAX( 2. * xqnnmin(ji,jj,jk), zration )) 
    229231               fvnuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnnmin(ji,jj,jk) / (zration + rtrn)  & 
    230232               &                   * MAX(0., (1. - zratchl * znanochl / 12. ) ) 
     
    248250               xpicodop(ji,jj,jk) = trn(ji,jj,jk,jpdop) / ( trn(ji,jj,jk,jpdop) + xkdoc )   & 
    249251               &                    * ( 1.0 - xpicopo4(ji,jj,jk) ) 
     252               xpicodop(ji,jj,jk) = 0. 
    250253               ! 
    251254               zfalim = (1.-fapicof) / fapicof 
     
    256259               ! 
    257260               zration   = trn(ji,jj,jk,jpnpi) * z1_trnpic 
     261               zration = MIN(xqnpmax(ji,jj,jk), MAX( 2. * xqnpmin(ji,jj,jk), zration )) 
    258262               fvpuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnpmin(ji,jj,jk) / (zration + rtrn)  & 
    259263               &                   * MAX(0., (1. - zratchl * zpicochl / 12. ) )  
     
    277281               xdiatdop(ji,jj,jk) = trn(ji,jj,jk,jpdop) / ( trn(ji,jj,jk,jpdop) + xkdoc )  & 
    278282               &                    * ( 1.0 - xdiatpo4(ji,jj,jk) ) 
     283               xdiatdop(ji,jj,jk) = 0. 
    279284               ! 
    280285               zfalim = (1.-fadiatf) / fadiatf 
     
    285290               ! 
    286291               zration   = trn(ji,jj,jk,jpndi) * z1_trndia 
     292               zration = MIN(xqndmax(ji,jj,jk), MAX( 2. * xqndmin(ji,jj,jk), zration )) 
    287293               fvduptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqndmin(ji,jj,jk) / (zration + rtrn)   & 
    288294               &                   * MAX(0., (1. - zratchl * zdiatchl / 12. ) )  
     
    351357               xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) * trn(ji,jj,jk,jpndi) / ( trn(ji,jj,jk,jpdia) + rtrn ) + 0.13 
    352358               xqpdmin(ji,jj,jk) = 0.13 + 0.2 * 0.0128 * 16. 
     359 
    353360            END DO 
    354361         END DO 
     
    360367         DO jj = 1, jpj 
    361368            DO ji = 1, jpi 
     369               zlim1 =  trn(ji,jj,jk,jpnh4) / ( trn(ji,jj,jk,jpnh4) + concnnh4 ) + trn(ji,jj,jk,jpno3)    & 
     370               &        / ( trn(ji,jj,jk,jpno3) + concnno3 ) * ( 1.0 - trn(ji,jj,jk,jpnh4)   & 
     371               &        / ( trn(ji,jj,jk,jpnh4) + concnnh4 ) ) 
     372               zlim2  = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concnpo4 ) 
     373               zlim3  = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) +  5.E-11 )  
    362374               ztem1  = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 
    363375               ztem2  = tsn(ji,jj,jk,jp_tem) - 10. 
    364376               zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) * 20. / ( 20. + etot(ji,jj,jk) )  
    365377 
    366                xfracal(ji,jj,jk) = caco3r * ztem1 / ( 2. + ztem1 ) * (1. + trn(ji,jj,jk,jpphy) / ( 5E-7    & 
    367                   &                       + trn(ji,jj,jk,jpphy) ) ) * zetot1 * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )  & 
    368                   &                       * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) 
    369                xfracal(ji,jj,jk) = MAX( 0.05, MIN( 0.8 , xfracal(ji,jj,jk) ) ) 
     378!               xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 )                  & 
     379               xfracal(ji,jj,jk) = caco3r                 & 
     380               &                   * ztem1 / ( 1. + ztem1 ) * MAX( 1., trn(ji,jj,jk,jpphy)*1E6 )   & 
     381                  &                * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )         & 
     382                  &                * zetot1 * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) 
     383               xfracal(ji,jj,jk) = MAX( 0.02, MIN( 0.8 , xfracal(ji,jj,jk) ) ) 
    370384            END DO 
    371385         END DO 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zmeso.F90

    r5288 r6231  
    8181      REAL(wp) :: zmortzgoc, zfracc, zfracn, zfracp, zfracfe, zratio, zratio2 
    8282      REAL(wp) :: zepsherf, zepshert, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi 
    83       REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf 
    84       REAL(wp) :: zgradoc, zgradon, zgradop, zgratmp, zgradoct, zgradont, zgrafert, zgradopt 
     83      REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf 
     84      REAL(wp) :: zgradoc, zgradon, zgradop, zgratmp, zgradoct, zgradont, zgrareft, zgradopt 
    8585      REAL(wp) :: zgrapoc, zgrapon, zgrapop, zgrapof, zprcaca, zmortz 
    86       REAL(wp) :: zexcess, zgrarem, zgraren, zgrarep, zgrafer 
     86      REAL(wp) :: zexcess, zgrarem, zgraren, zgrarep, zgraref 
    8787      REAL(wp) :: zbeta, zrespz, ztortz, zgrasratp, zgrasratn, zgrasratf 
    8888      REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot 
     
    9090      REAL znumpoc 
    9191#endif 
    92       REAL(wp) :: zgrazdc, zgrazz, zgrazm, zgrazpof, zgrazcal 
     92      REAL(wp) :: zgrazdc, zgrazz, zgrazm, zgrazpof, zgrazcal, zfracal 
    9393      REAL(wp) :: zgraznc, zgrazpoc, zgrazpon, zgrazpop, zgraznf, zgrazdf 
    9494      REAL(wp) :: zgraznp, zgraznn, zgrazdn, zgrazdp 
     
    9696      REAL(wp) :: zgrazffnp, zgrazffng, zgrazffpp, zgrazffpg 
    9797      CHARACTER (len=25) :: charout 
    98       REAL(wp) :: zrfact2 
     98      REAL(wp) :: zrfact2, zmetexcess 
    9999      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing 
    100100 
     
    107107         zgrazing(:,:,:) = 0._wp 
    108108      ENDIF 
     109 
     110      zmetexcess = 0.0 
     111      IF ( bmetexcess ) zmetexcess = 1.0 
    109112 
    110113      DO jk = 1, jpkm1 
     
    141144               !   ------------------------ 
    142145               zfood     = xpref2d * zcompadi + xpref2z * zcompaz + xpref2p * zcompaph + xpref2c * zcompapoc   & 
    143                &           + xpref2c * zcompapoc + xpref2m * zcompames  
     146               &           + xpref2m * zcompames  
    144147               zfoodlim  = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) 
    145148               zdenom    = zfoodlim / ( xkgraz2 + zfoodlim ) 
     
    265268               !   Excess carbon in the food is used preferentially 
    266269               !   ----------------  ------------------------------ 
    267                zexcess  = zgraztotc * zepsherf * (1.0 - zepshert)  
     270               zexcess  = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess  
    268271               zbasresb = MAX(0., zrespz - zexcess) 
    269272               zbasresi = zexcess + MIN(0., zrespz - zexcess) 
    270273               zrespirc = srespir2 * zepsherv * zgraztotc + zbasresb 
    271274 
     275               !   When excess carbon is used, the other elements in excess 
     276               !   are also used proportionally to their abundance 
     277               !   -------------------------------------------------------- 
     278               zexcess  = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
     279               zbasresn = zbasresi * zexcess * zgrasratn 
     280               zexcess  = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
     281               zbasresp = zbasresi * zexcess * zgrasratp 
     282               zexcess  = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
     283               zbasresf = zbasresi * zexcess * zgrasratf 
     284 
    272285               !   Voiding of the excessive elements as organic matter 
    273286               !   -------------------------------------------------------- 
    274287               zgradoct = (1. - unass2c - zepsherv) * zgraztotc - zbasresi 
    275                zgradont = (1. - unass2n) * zgraztotn - zepsherv * no3rat3 * zgraztotc 
    276                zgradopt = (1. - unass2p) * zgraztotp - zepsherv * po4rat3 * zgraztotc 
    277                zgrafert = (1. - unass2c) * zgraztotf - zepsherv * ferat3 * zgraztotc 
     288               zgradont = (1. - unass2n) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 
     289               zgradopt = (1. - unass2p) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 
     290               zgrareft = (1. - unass2c) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 
    278291               ztmp1   = ( 1. - epsher2 - unass2c ) /( 1. - 0.8 * epsher2 ) * ztortz 
    279292               zgradoc = (zgradoct + ztmp1) * ssigma2 
     
    281294               zgradop = (zgradopt + po4rat3 * ztmp1) * ssigma2 
    282295               zgratmp = 0.2 * epsher2 /( 1. - 0.8 * epsher2 ) * ztortz 
     296 
     297               !  Since only semilabile DOM is represented in PISCES 
     298               !  part of DOM is in fact labile and is then released 
     299               !  as dissolved inorganic compounds (ssigma2) 
     300               !  -------------------------------------------------- 
    283301               zgrarem = zgratmp + ( zgradoct + ztmp1 ) * (1.0 - ssigma2) 
    284302               zgraren = no3rat3 * zgratmp + ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2) 
    285303               zgrarep = po4rat3 * zgratmp + ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2) 
    286                zgrafer = zgrafert + ferat3 * ( ztmp1 + zgratmp ) 
     304               zgraref = zgrareft + ferat3 * ( ztmp1 + zgratmp ) 
    287305 
    288306               !   Defecation as a result of non assimilated products 
    289307               !   -------------------------------------------------- 
    290308               zgrapoc  = zgraztotc * unass2c + unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 
    291                zgrapon  = zgraztotn * unass2n + no3rat3 * unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 
    292                zgrapop  = zgraztotp * unass2p + po4rat3 * unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 
     309               zgrapon  = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - 0.8 * epsher2 ) * ztortz 
     310               zgrapop  = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - 0.8 * epsher2 ) * ztortz 
    293311               zgrapof  = zgraztotf * unass2c + ferat3  * unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 
     312 
     313               !  Addition of respiration to the release of inorganic nutrients 
     314               !  ------------------------------------------------------------- 
     315               zgrarem = zgrarem + zbasresi + zrespirc 
     316               zgraren = zgraren + zbasresn + zrespirc * no3rat3 
     317               zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 
     318               zgraref = zgraref + zbasresf + zrespirc * ferat3 
    294319 
    295320               !   Update the arrays TRA which contain the biological sources and 
    296321               !   sinks 
    297322               !   -------------------------------------------------------------- 
    298                zrespirn  = zrespirc * no3rat3 
    299                zrespirp  = zrespirc * po4rat3 
    300                zgrafer   = zgrafer + zrespirc * ferat3 
    301  
    302                tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep + zrespirp 
    303                tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren + zrespirn 
     323               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep  
     324               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren 
    304325               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 
    305326               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon 
    306327               tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zgradop 
    307                tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * (zgrarem + zrespirc) 
    308                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 
    309                tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zrespirc + zgrarem 
    310                tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * (zgraren + zrespirn) 
     328               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem 
     329               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 
     330               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem 
     331               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgraren 
    311332               tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) + zepsherv * zgraztotc - zrespirc   & 
    312333               &                     - ztortz - zgrazm 
     
    334355               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazfffp - zgrazpof    & 
    335356               &   + zgrapof 
    336                zgrazcal = zgrazffep * ( 1. - part2 ) * trn(ji,jj,jk,jpcal) / ( trn(ji,jj,jk,jppoc) + rtrn ) 
     357               zfracal = trn(ji,jj,jk,jpcal) / (trn(ji,jj,jk,jppoc) + rtrn ) 
     358               zgrazcal = ( zgrazffep + zgrazpoc ) * (1. - part2) * zfracal 
    337359#else 
    338360               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfracc 
     
    344366               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe 
    345367               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zgrazfffg + zgrapof - zfracfe 
    346                zgrazcal = zgrazffeg * ( 1. - part2 ) * trn(ji,jj,jk,jpcal) / ( trn(ji,jj,jk,jpgoc) + rtrn ) 
     368               zfracal = trn(ji,jj,jk,jpcal) / (trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) + rtrn ) 
     369               zgrazcal = ( zgrazffeg + zgrazpoc ) * (1. - part2) * zfracal 
    347370#endif 
    348371               !  calcite production 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zmicro.F90

    r5288 r6231  
    8383      REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot 
    8484      REAL(wp) :: zepsherf, zepshert, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi 
    85       REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf 
    86       REAL(wp) :: zgradoc, zgradon, zgradop, zgrafer, zgradoct, zgradont, zgradopt, zgrafert 
    87       REAL(wp) :: zexcess, zgraren, zgrarep, zgrarem 
     85      REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf 
     86      REAL(wp) :: zgradoc, zgradon, zgradop, zgraref, zgradoct, zgradont, zgradopt, zgrareft 
     87      REAL(wp) :: zexcess, zgraren, zgrarep, zgrarem, zfracal, zgrazcal 
    8888      REAL(wp) :: zgrapoc, zgrapon, zgrapop, zgrapof, zprcaca, zmortz 
    8989      REAL(wp) :: zrespz, ztortz, zgrasratf, zgrasratn, zgrasratp 
    9090      REAL(wp) :: zgraznc, zgraznn, zgraznp, zgrazpoc, zgrazpon, zgrazpop, zgrazpof 
    9191      REAL(wp) :: zgrazdc, zgrazdn, zgrazdp, zgrazdf, zgraznf, zgrazz 
    92       REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2 
     92      REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess 
    9393      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing 
    9494      CHARACTER (len=25) :: charout 
     
    9898      ! 
    9999      IF( ln_diatrc .AND. lk_iomput )  CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
     100      ! 
     101      zmetexcess = 0.0 
     102      IF ( bmetexcess ) zmetexcess = 1.0 
    100103      ! 
    101104      DO jk = 1, jpkm1 
     
    201204               !   Excess carbon in the food is used preferentially 
    202205               !   ------------------------------------------------ 
    203                zexcess  = zgraztotc * zepsherf * (1.0 - zepshert)  
     206               zexcess  = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 
    204207               zbasresb = MAX(0., zrespz - zexcess) 
    205208               zbasresi = zexcess + MIN(0., zrespz - zexcess)   
    206209               zrespirc = srespir * zepsherv * zgraztotc + zbasresb 
     210                
     211               !   When excess carbon is used, the other elements in excess 
     212               !   are also used proportionally to their abundance 
     213               !   -------------------------------------------------------- 
     214               zexcess  = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
     215               zbasresn = zbasresi * zexcess * zgrasratn  
     216               zexcess  = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
     217               zbasresp = zbasresi * zexcess * zgrasratp 
     218               zexcess  = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
     219               zbasresf = zbasresi * zexcess * zgrasratf 
    207220 
    208221               !   Voiding of the excessive elements as DOM 
    209222               !   ---------------------------------------- 
    210223               zgradoct   = (1. - unassc - zepsherv) * zgraztotc - zbasresi   
    211                zgradont   = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc 
    212                zgradopt   = (1. - unassp) * zgraztotp - zepsherv * po4rat3 * zgraztotc 
    213                zgrafert   = (1. - unassc) * zgraztotf - zepsherv * ferat3 * zgraztotc 
     224               zgradont   = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 
     225               zgradopt   = (1. - unassp) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 
     226               zgrareft   = (1. - unassc) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 
     227 
     228               !  Since only semilabile DOM is represented in PISCES 
     229               !  part of DOM is in fact labile and is then released 
     230               !  as dissolved inorganic compounds (ssigma) 
     231               !  -------------------------------------------------- 
    214232               zgradoc =  zgradoct * ssigma 
    215233               zgradon =  zgradont * ssigma 
     
    218236               zgraren = (1.0 - ssigma) * zgradont 
    219237               zgrarep = (1.0 - ssigma) * zgradopt 
    220                zgrafer = zgrafert 
     238               zgraref = zgrareft 
    221239 
    222240               !   Defecation as a result of non assimilated products 
     
    227245               zgrapof   = zgraztotf * unassc 
    228246 
     247               !  Addition of respiration to the release of inorganic nutrients 
     248               !  ------------------------------------------------------------- 
     249               zgrarem = zgrarem + zbasresi + zrespirc 
     250               zgraren = zgraren + zbasresn + zrespirc * no3rat3 
     251               zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 
     252               zgraref = zgraref + zbasresf + zrespirc * ferat3 
     253 
    229254               !   Update of the TRA arrays 
    230255               !   ------------------------ 
    231                zrespirn  = zrespirc * no3rat3  
    232                zrespirp  = zrespirc * po4rat3 
    233                zgrafer   = zgrafer + zrespirc * ferat3 
    234  
    235                tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zrespirp + zgrarep 
    236                tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zrespirn + zgraren 
     256               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep 
     257               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren 
    237258               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 
    238259               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon 
    239260               tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zgradop 
    240                tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * ( zrespirc + zgrarem ) 
    241                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 
     261               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem  
     262               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 
    242263               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zepsherv * zgraztotc - zrespirc   & 
    243264               &                     - ztortz - zgrazz 
     
    271292               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
    272293               ! 
     294               zfracal = trn(ji,jj,jk,jpcal) / (trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) + rtrn ) 
     295               zgrazcal = zgrazpoc * (1. - part ) * zfracal  
    273296               zprcaca = part * zprcaca 
    274                tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zrespirc + zgrarem - zprcaca 
    275                tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca 
    276                tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + rno3 * ( zrespirn + zgraren ) + zprcaca 
     297               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem - zprcaca + zgrazcal 
     298               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * ( zgrazcal - zprcaca )    & 
     299               &                     + rno3 * zgraren 
     300               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca - zgrazcal 
    277301#if defined key_kriest 
    278302               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortz * xkr_dmicro & 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zmort.F90

    r5288 r6231  
    8888         DO jj = 1, jpj 
    8989            DO ji = 1, jpi 
    90                zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 
     90               zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 1e-9 ), 0.e0 ) 
    9191               zstep    = xstep 
    9292# if defined key_degrad 
     
    168168         DO jj = 1, jpj 
    169169            DO ji = 1, jpi 
    170                zcompaph = MAX( ( trn(ji,jj,jk,jppic) - 1e-8 ), 0.e0 ) 
     170               zcompaph = MAX( ( trn(ji,jj,jk,jppic) - 1e-9 ), 0.e0 ) 
    171171               zstep    = xstep 
    172172# if defined key_degrad 
     
    242242            DO ji = 1, jpi 
    243243 
    244                zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1E-8), 0. ) 
     244               zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1E-9), 0. ) 
    245245 
    246246               !   Aggregation term for diatoms is increased in case of nutrient 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zprod.F90

    r5288 r6231  
    146146 
    147147      ! Computation of the optimal production 
    148       prmaxn(:,:,:) = ( 0.8_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc(:,:,:) 
    149       prmaxp(:,:,:) = 0.6 / 0.8 * prmaxn(:,:,:)  
     148      prmaxn(:,:,:) = ( 0.65_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc(:,:,:) 
     149      prmaxp(:,:,:) = 0.5 / 0.65 * prmaxn(:,:,:)  
    150150      prmaxd(:,:,:) = prmaxn(:,:,:)  
    151       zprnut(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 
     151      zprnut(:,:,:) = 0.65_wp * r1_rday * tgfunc(:,:,:) 
    152152 
    153153      IF( lk_degrad )  THEN 
     
    241241                  zlim  = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 ) 
    242242                  zsilim = MIN( zprdia(ji,jj,jk) / ( prmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 
    243                   zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) )  ) + 1.e0 
     243                  zsilfac = 3.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) )  ) + 1.e0 
    244244                  zsiborn = trn(ji,jj,jk,jpsil) * trn(ji,jj,jk,jpsil) * trn(ji,jj,jk,jpsil) 
    245245                  IF (gphit(ji,jj) < -30 ) THEN 
     
    310310                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 
    311311                  zprofmax = zprnutmax * qfnmax * zmax 
    312                   zprofen(ji,jj,jk) = zprofmax * xnanofer(ji,jj,jk) * ( 4. - 3.6 * xlimnfe(ji,jj,jk)    & 
     312                  zprofen(ji,jj,jk) = zprofmax * xnanofer(ji,jj,jk) * ( 3. - 2.4 * xlimnfe(ji,jj,jk)    & 
    313313                  &          / ( xlimnfe(ji,jj,jk) + 0.2 ) ) * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn  & 
    314314                  &          + xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) ) 
     
    347347                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 
    348348                  zprofmax = zprnutmax * qfpmax * zmax 
    349                   zprofep(ji,jj,jk) = zprofmax * xpicofer(ji,jj,jk) * ( 4. - 3.6 * xlimpfe(ji,jj,jk)   & 
     349                  zprofep(ji,jj,jk) = zprofmax * xpicofer(ji,jj,jk) * ( 3. - 2.4 * xlimpfe(ji,jj,jk)   & 
    350350                  &          / ( xlimpfe(ji,jj,jk) + 0.2 ) ) * (1. + 0.8 * xpicono3(ji,jj,jk) / ( rtrn   & 
    351351                  &          + xpicono3(ji,jj,jk) + xpiconh4(ji,jj,jk) ) * (1. - xpicofer(ji,jj,jk) ) ) 
     
    386386                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 
    387387                  zprofmax = zprnutmax * qfdmax * zmax 
    388                   zprofed(ji,jj,jk) = zprofmax * xdiatfer(ji,jj,jk) * ( 4. - 3.6 * xlimdfe(ji,jj,jk)     & 
     388                  zprofed(ji,jj,jk) = zprofmax * xdiatfer(ji,jj,jk) * ( 3. - 2.4 * xlimdfe(ji,jj,jk)     & 
    389389                  &          / ( xlimdfe(ji,jj,jk) + 0.2 ) ) * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn   & 
    390390                  &          + xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) ) 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zrem.F90

    r5288 r6231  
    5151   REAL(wp), PUBLIC ::  oxymin     !: half saturation constant for anoxia  
    5252   REAL(wp), PUBLIC ::  oxymin2    !: Minimum O2 concentration for oxic remin. 
     53   REAL(wp), PUBLIC ::  feratb     !: Fe/C quota in bacteria 
     54   REAL(wp), PUBLIC ::  xkferb     !: Half-saturation constant for bacteria Fe/C 
    5355 
    5456 
     
    107109         DO jj = 1, jpj 
    108110            DO ji = 1, jpi 
    109                zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 
     111               zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 
    110112               IF( fsdept(ji,jj,jk) < zdep ) THEN 
    111113                  zdepbac(ji,jj,jk) = MIN( 0.7 * ( trn(ji,jj,jk,jpzoo) + 2.* trn(ji,jj,jk,jpmes) ), 4.e-6 ) 
     
    143145               ! of the bacterial activity.  
    144146               ! ----------------------------------------------------------------- 
    145                zremik = zstep / 1.e-6 * MAX(0.02, xlimbac(ji,jj,jk) ) * zdepbac(ji,jj,jk)  
     147               zremik = zstep / 1.e-6 * MAX(0.01, xlimbac(ji,jj,jk)) * zdepbac(ji,jj,jk)  
    146148               zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 
    147149 
    148150               zremikc = xremikc * zremik 
    149                zremikn = xremikn * zremik * 1.0 / (5.6*rno3) 
    150                zremikp = xremikp * zremik * 1.0 / (75.0*po4r) 
     151               zremikn = xremikn / xremikc 
     152               zremikp = xremikp / xremikc 
    151153 
    152154               ! Ammonification in oxic waters with oxygen consumption 
     
    155157               zolimic = MAX( 0.e0, MIN( ( trn(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit ) )  
    156158               zwork1(ji,jj,jk) = zolimic 
    157                zolimin = zolimic * trn(ji,jj,jk,jpdon) / ( trn(ji,jj,jk,jpdoc) + rtrn ) 
    158                zolimip = zolimic * trn(ji,jj,jk,jpdop) / ( trn(ji,jj,jk,jpdoc) + rtrn )  
     159               zolimin = zremikn * zolimic * trn(ji,jj,jk,jpdon) / ( trn(ji,jj,jk,jpdoc) + rtrn ) 
     160               zolimip = zremikp * zolimic * trn(ji,jj,jk,jpdop) / ( trn(ji,jj,jk,jpdoc) + rtrn )  
    159161 
    160162               ! Ammonification in suboxic waters with denitrification 
     
    163165               denitrc(ji,jj,jk)  = MIN(  ( trn(ji,jj,jk,jpno3) - rtrn ) / rdenit, zolimit ) 
    164166               denitrc (ji,jj,jk) = MAX( 0.e0, denitrc (ji,jj,jk) ) 
    165                zdenitrn  = denitrc(ji,jj,jk) * trn(ji,jj,jk,jpdon) / ( trn(ji,jj,jk,jpdoc) + rtrn ) 
    166                zdenitrp  = denitrc(ji,jj,jk) * trn(ji,jj,jk,jpdop) / ( trn(ji,jj,jk,jpdoc) + rtrn ) 
     167               zdenitrn  = zremikn * denitrc(ji,jj,jk) * trn(ji,jj,jk,jpdon) / ( trn(ji,jj,jk,jpdoc) + rtrn ) 
     168               zdenitrp  = zremikp * denitrc(ji,jj,jk) * trn(ji,jj,jk,jpdop) / ( trn(ji,jj,jk,jpdoc) + rtrn ) 
    167169 
    168170               ! Update of trends TRA 
     
    221223               ! studies (especially at Papa) have shown this uptake to be significant 
    222224               ! ---------------------------------------------------------- 
    223                zbactfer = ferat3 *  rfact2 * prmaxp(ji,jj,jk) * xlimbacl(ji,jj,jk)             & 
    224                   &              * biron(ji,jj,jk) / ( 2E-10 + biron(ji,jj,jk) )    & 
     225               zbactfer = feratb *  rfact2 * prmaxp(ji,jj,jk) * xlimbacl(ji,jj,jk)             & 
     226                  &              * biron(ji,jj,jk) / ( xkferb + biron(ji,jj,jk) )    & 
    225227                  &              * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 
    226228#if defined key_kriest 
     
    326328               ! constant and specified in the namelist. 
    327329               ! ---------------------------------------------------------- 
    328                zdep     = MAX( hmld(ji,jj), heup_01(ji,jj) )  
     330               zdep     = MAX( hmld(ji,jj), heup(ji,jj) )  
    329331               zdep     = MAX( 0., fsdept(ji,jj,jk) - zdep ) 
    330332               ztem     = MAX( tsn(ji,jj,1,jp_tem), 0. ) 
     
    379381      !!---------------------------------------------------------------------- 
    380382      NAMELIST/nampisrem/ xremikc, xremikn, xremikp, xremipc, xremipn, xremipp,   & 
    381       &                   nitrif, xsirem, xsiremlab, xsilab, oxymin, oxymin2 
     383      &                   nitrif, xsirem, xsiremlab, xsilab, oxymin, oxymin2,  & 
     384      &                   feratb, xkferb  
    382385      INTEGER :: ios                 ! Local integer output status for namelist read 
    383386 
     
    407410         WRITE(numout,*) '    half saturation constant for anoxia       oxymin    =', oxymin 
    408411         WRITE(numout,*) '    Minimum O2 concentration for oxic remin.  oxymin2   =', oxymin2 
     412         WRITE(numout,*) '    Bacterial Fe/C ratio                      feratb    =', feratb 
     413         WRITE(numout,*) '    Half-saturation constant for bact. Fe/C   xkferb    =', xkferb 
    409414      ENDIF 
    410415      ! 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zsed.F90

    r5288 r6231  
    6262      ! 
    6363      INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
    64       INTEGER  ::   ji, jj, jk, ikt 
     64      INTEGER  ::   ji, jj, jk, ikt, jn 
    6565#if ! defined key_sed 
    6666      REAL(wp) ::   zsumsedsi, zsumsedpo4, zsumsedcal 
     
    7676      ! 
    7777      CHARACTER (len=25) :: charout 
    78       REAL(wp), POINTER, DIMENSION(:,:  ) :: zpdep, zsidep, zwork1, zwork2, zwork3, zwork4 
     78      REAL(wp), POINTER, DIMENSION(:,:  ) :: zsidep, zwork1, zwork2, zwork3, zwork4 
    7979      REAL(wp), POINTER, DIMENSION(:,:  ) :: zdenit2d, zironice, zbureff 
    8080      REAL(wp), POINTER, DIMENSION(:,:  ) :: zwsbio3, zwsbio4, zwscal 
    81       REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrpo4, ztrdop, znitrpot, zirondep, zsoufer 
     81      REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrpo4, ztrdop, znitrpot, zirondep, zsoufer, zpdep 
    8282      !!--------------------------------------------------------------------- 
    8383      ! 
     
    132132      IF( ln_dust ) THEN 
    133133         !                                               
    134          CALL wrk_alloc( jpi, jpj,      zpdep, zsidep ) 
    135          CALL wrk_alloc( jpi, jpj, jpk, zirondep      ) 
     134         CALL wrk_alloc( jpi, jpj,      zsidep ) 
     135         CALL wrk_alloc( jpi, jpj, jpk, zpdep, zirondep      ) 
    136136         !                                              ! Iron and Si deposition at the surface 
    137137         IF( ln_solub ) THEN 
     
    143143         ENDIF 
    144144         zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / 28.1  
    145          zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / 31. / po4r  
     145         zpdep (:,:,1) = 0.2 * 0.023 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / 31. / po4r  
    146146         !                                              ! Iron solubilization of particles in the water column 
    147147         !                                              ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ;  wdust in m/j 
     
    150150            zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2  & 
    151151            &   * EXP( -fsdept(:,:,jk) / 540. ) 
     152            zpdep(:,:,jk) = dust(:,:) * mfrac * 0.023 * zwdust * rfact2  & 
     153            &   * EXP( -fsdept(:,:,jk) / 540. ) 
    152154         END DO 
    153155         !                                              ! Iron solubilization of particles in the water column 
    154          trn(:,:,1,jppo4) = trn(:,:,1,jppo4) + zpdep   (:,:) 
     156         trn(:,:,:,jppo4) = trn(:,:,:,jppo4) + zpdep   (:,:,:) 
    155157         trn(:,:,1,jpsil) = trn(:,:,1,jpsil) + zsidep  (:,:) 
    156158         trn(:,:,:,jpfer) = trn(:,:,:,jpfer) + zirondep(:,:,:)  
     
    167169            ENDIF 
    168170         ENDIF 
    169          CALL wrk_dealloc( jpi, jpj,      zpdep, zsidep ) 
    170          CALL wrk_dealloc( jpi, jpj, jpk, zirondep      ) 
     171         CALL wrk_dealloc( jpi, jpj,      zsidep ) 
     172         CALL wrk_dealloc( jpi, jpj, jpk, zpdep, zirondep      ) 
    171173         !                                               
    172174      ENDIF 
     
    176178      IF( ln_river ) THEN 
    177179         trn(:,:,1,jppo4) = trn(:,:,1,jppo4) + rivdip(:,:) * rfact2 
     180         trn(:,:,1,jpdop) = trn(:,:,1,jpdop) + rivdop(:,:) * rfact2 
    178181         trn(:,:,1,jpno3) = trn(:,:,1,jpno3) + rivdin(:,:) * rfact2 
     182         trn(:,:,1,jpdon) = trn(:,:,1,jpdon) + rivdon(:,:) * rfact2 
    179183         trn(:,:,1,jpfer) = trn(:,:,1,jpfer) + rivdic(:,:) * 5.e-5 * rfact2 
    180184         trn(:,:,1,jpsil) = trn(:,:,1,jpsil) + rivdsi(:,:) * rfact2 
    181185         trn(:,:,1,jpdic) = trn(:,:,1,jpdic) + rivdic(:,:) * rfact2 
     186         trn(:,:,1,jpdoc) = trn(:,:,1,jpdoc) + rivdoc(:,:) * rfact2 
    182187         trn(:,:,1,jptal) = trn(:,:,1,jptal) + ( rivalk(:,:) - rno3 * rivdin(:,:) ) * rfact2 
    183188      ENDIF 
    184        
     189 
    185190      ! Add the external input of nutrients from nitrogen deposition 
    186191      ! ---------------------------------------------------------- 
     
    207212            &   CALL iom_put( "HYDR", hydrofe(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! hydrothermal iron input 
    208213      ENDIF 
    209  
    210214 
    211215      ! OA: Warning, the following part is necessary, especially with Kriest 
     
    310314         END DO 
    311315      END DO 
     316 
    312317 
    313318      DO jj = 1, jpj 
     
    345350            ! in the sediments and just above the sediments. Not very clever, but simpliest option. 
    346351            zpdenit  = MIN( 0.5 * ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
     352            zpdenit = MAX( 0., zpdenit ) 
    347353            z1pdenit = zwstpoc * zrivno3 - zpdenit 
    348354            zolimit = MIN( ( trn(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 
    349355            zdenitt = MIN(  0.5 * ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 
     356            zolimit = MAX( 0., zolimit ) 
     357            zdenitt = MAX( 0., zdenitt ) 
    350358            trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 
    351359            trn(ji,jj,ikt,jpdon) = trn(ji,jj,ikt,jpdon) + (z1pdenit - zolimit - zdenitt) * zwstpon / (zwstpoc + rtrn) 
     
    424432      END DO 
    425433 
    426   
    427434      IF( ln_check_mass ) THEN 
    428435        ! Global budget of N SMS : denitrification in the water column and in the sediment 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zsink.F90

    r5288 r6231  
    112112         DO jj = 1, jpj 
    113113            DO ji = 1,jpi 
    114                zmax  = MAX( heup_01(ji,jj), hmld(ji,jj) ) 
    115                zfact = MAX( 0., fsdepw(ji,jj,jk+1) - zmax ) / 5000._wp 
    116114               wsbio4(ji,jj,jk) = wsbio2  
    117115            END DO 
     
    121119      ! limit the values of the sinking speeds to avoid numerical instabilities   
    122120      wsbio3(:,:,:) = wsbio 
    123       wscal(:,:,:) = wsbio4(:,:,:) 
     121 
    124122      ! 
    125123      ! OA This is (I hope) a temporary solution for the problem that may  
     
    169167      END DO 
    170168 
     169      wscal (:,:,:) = wsbio4(:,:,:) 
     170 
    171171      !  Initializa to zero all the sinking arrays  
    172172      !   ----------------------------------------- 
     
    196196        CALL p4z_sink2( wsbio4, sinking2p, jpgop, iiter2 ) 
    197197        CALL p4z_sink2( wsbio4, sinkfer2, jpbfe, iiter2 ) 
    198         CALL p4z_sink2( wscal , sinksil , jpgsi, iiter2 ) 
    199         CALL p4z_sink2( wscal , sinkcal , jpcal, iiter2 ) 
     198        CALL p4z_sink2( wsbio4, sinksil , jpgsi, iiter2 ) 
     199        CALL p4z_sink2( wscal, sinkcal , jpcal, iiter2 ) 
    200200      END DO 
    201201 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zsms.F90

    r5288 r6231  
    170170      !!                       natkriest ("key_kriest") 
    171171      !!---------------------------------------------------------------------- 
    172       NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, no3rat3, po4rat3, wsbio2, niter1max, niter2max 
     172      NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, no3rat3, po4rat3, wsbio2, niter1max, niter2max, bmetexcess 
    173173#if defined key_kriest 
    174174      NAMELIST/nampiskrp/ xkr_eta, xkr_zeta, xkr_ncontent, xkr_mass_min, xkr_mass_max 
     
    199199         WRITE(numout,*) '    Maximum number of iterations for POC      niter1max =', niter1max 
    200200         WRITE(numout,*) '    Maximum number of iterations for GOC      niter2max =', niter2max 
     201         WRITE(numout,*) '    Use excess carbon for respiration         bmetexcess =', bmetexcess 
    201202      ENDIF 
    202203 
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90

    r5289 r6231  
    4949   REAL(wp) ::   xkmort            !: ??? 
    5050   REAL(wp) ::   ferat3            !: ??? 
     51   LOGICAL  ::   bmetexcess        !: ??? 
    5152 
    5253   !!*  diagnostic parameters  
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/trcini.F90

    r4607 r6231  
    5858      !!                or read data or analytical formulation 
    5959      !!--------------------------------------------------------------------- 
    60       INTEGER ::   jk, jn, jl    ! dummy loop indices 
     60      INTEGER ::   ji,jj,jk, jn, jl    ! dummy loop indices 
    6161      CHARACTER (len=25) :: charout 
    6262      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrcdta   ! 4D  workspace 
     
    138138        ENDIF 
    139139        ! 
     140        trn(:,:,:,:) = MAX(0., trn(:,:,:,:) ) 
    140141        trb(:,:,:,:) = trn(:,:,:,:) 
    141142        !  
    142       ENDIF 
    143   
     143      ENDIF  
     144 
    144145      tra(:,:,:,:) = 0._wp 
    145146       
  • branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/trcrst.F90

    r4152 r6231  
    103103      DO jn = 1, jptra 
    104104         CALL iom_get( numrtr, jpdom_autoglo, 'TRN'//ctrcnm(jn), trn(:,:,:,jn) ) 
     105         trn(:,:,:,jn) = trn(:,:,:,jn) * tmask(:,:,:) 
    105106      END DO 
    106107 
    107108      DO jn = 1, jptra 
    108109         CALL iom_get( numrtr, jpdom_autoglo, 'TRB'//ctrcnm(jn), trb(:,:,:,jn) ) 
     110         trb(:,:,:,jn) = trb(:,:,:,jn) * tmask(:,:,:) 
    109111      END DO 
    110112      ! 
Note: See TracChangeset for help on using the changeset viewer.