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 14385 – NEMO

Changeset 14385


Ignore:
Timestamp:
2021-02-03T16:03:34+01:00 (4 years ago)
Author:
cetlod
Message:

dev_r11708_aumont_PISCES_QUOTA : merge with the trunk

Location:
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO
Files:
2 added
2 deleted
39 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/cfgs/SHARED/field_def_nemo-pisces.xml

    r14209 r14385  
    136136    <field id="SedpH"           long_name="PH"                                       unit="1"          /> 
    137137    <field id="SedCO3por"       long_name="Bicarbonates"                             unit="mol/m3" /> 
     138    <field id="Sedligand"       long_name="Ligands"                                  unit="mol/m3" /> 
     139    <field id="SaturCO3"        long_name="CO3 Saturation"                           unit="-" />        
    138140  </field_group> 
    139141 
    140142  <!-- SEDIMENT additional variables on T sediment grid  --> 
    141143  <field_group id="Diag_S" grid_ref="grid_T_2D"> 
    142     <field id="FlxSi"       long_name="Si sediment flux"                        unit="mol/cm2/s"     /> 
    143     <field id="FlxO2"       long_name="O2 sediment flux"                        unit="mol/cm2/s"     /> 
    144     <field id="FlxDIC"      long_name="DIC sediment flux"                       unit="mol/cm2/s"     /> 
    145     <field id="FlxNO3"      long_name="NO3 sediment flux"                       unit="mol/cm2/s"     /> 
    146     <field id="FlxPO4"      long_name="PO4 sediment flux"                       unit="mol/cm2/s"     /> 
    147     <field id="FlxAlkalini" long_name="Alkalinity sediment flux"                unit="mol/cm2/s"     /> 
    148     <field id="FlxNH4"      long_name="Ammonium sediment flux"                  unit="mol/cm2/s"     /> 
    149     <field id="FlxH2S"      long_name="H2S sediment flux"                       unit="mol/cm2/s"     /> 
    150     <field id="FlxSO4"      long_name="SO4 sediment flux"                       unit="mol/cm2/s"     /> 
    151     <field id="FlxFe2"      long_name="Fe2+ sediment flux"                      unit="mol/cm2/s"     /> 
    152     <field id="Flxtot"      long_name="Sediment net burial rate"                unit="cm/s"     /> 
    153     <field id="dzdep"       long_name="Sedimentation rate"                      unit="cm/s"     /> 
    154     <field id="sflxclay"    long_name="Clay sedimentation rate"                 unit="g/m2/s"     /> 
    155     <field id="sflxcal"     long_name="Calcite sedimentation rate"              unit="mol/m2/s"     /> 
    156     <field id="sflxbsi"     long_name="BSi Sedimentation rate"                  unit="mol/m2/s"     /> 
    157     <field id="sflxpoc"     long_name="POC Sedimentation rate"                  unit="mol/m2/s"     /> 
    158     <field id="sflxfeo"     long_name="Fe(OH)3 Sedimentation rate"              unit="mol/m2/s"     /> 
     144      <field id="FlxSi"       long_name="Si sediment flux"                        unit="mol/cm2/s"     /> 
     145       <field id="FlxO2"       long_name="O2 sediment flux"                        unit="mol/cm2/s"     /> 
     146       <field id="FlxDIC"      long_name="DIC sediment flux"                       unit="mol/cm2/s"     /> 
     147       <field id="FlxNO3"      long_name="NO3 sediment flux"                       unit="mol/cm2/s"     /> 
     148       <field id="FlxPO4"      long_name="PO4 sediment flux"                       unit="mol/cm2/s"     /> 
     149       <field id="FlxAlkalini" long_name="Alkalinity sediment flux"                unit="mol/cm2/s"     /> 
     150       <field id="FlxNH4"      long_name="Ammonium sediment flux"                  unit="mol/cm2/s"     /> 
     151       <field id="FlxH2S"      long_name="H2S sediment flux"                       unit="mol/cm2/s"     /> 
     152       <field id="FlxSO4"      long_name="SO4 sediment flux"                       unit="mol/cm2/s"     /> 
     153       <field id="FlxFe2"      long_name="Fe2+ sediment flux"                      unit="mol/cm2/s"     /> 
     154       <field id="dzdep"       long_name="Sedimentation rate"                      unit="cm/s"     /> 
     155       <field id="sflxclay"    long_name="Clay sedimentation rate"                 unit="g/cm2/s"     /> 
     156       <field id="sflxbsi"     long_name="BSi sedimentation rate"                  unit="g/cm2/s"     /> 
     157       <field id="sflxpoc"     long_name="POC sedimentation rate"                  unit="g/cm2/s"     /> 
     158       <field id="sflxcal"     long_name="Calcite sedimentation rate"              unit="g/cm2/s"     /> 
     159       <field id="FlxClay"     long_name="Clay burial rate"                        unit="g/cm2/s"     /> 
     160       <field id="FlxCaCO3"    long_name="Calcite burial rate"                     unit="g/cm2/s"     /> 
     161       <field id="FlxBSi"      long_name="BSi burial rate"                         unit="g/cm2/s"     /> 
     162       <field id="FlxPOC"      long_name="POC burial rate"                         unit="g/cm2/s"     /> 
     163       <field id="FlxFeO"      long_name="Fe(OH)3 burial rate"                     unit="g/cm2/s"     /> 
     164       <field id="FlxFeS"      long_name="FeS burial rate"                         unit="g/cm2/s"     /> 
     165       <field id="FlxPOR"      long_name="POR burial rate"                         unit="g/cm2/s"     /> 
     166       <field id="FlxPOS"      long_name="POS burial rate"                         unit="g/cm2/s"     /> 
     167       <field id="Flxtot"      long_name="total burial flux"                       unit="g/cm2/s"     /> 
    159168  </field_group> 
    160169 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/cfgs/SHARED/namelist_pisces_ref

    r12845 r14385  
    1414!----------------------------------------------------------------------- 
    1515  ln_p2z    = .false.        !  LOBSTER model used 
    16   ln_p4z    = .true.         !  PISCES model used 
    17   ln_p5z    = .false.        !  PISCES QUOTA model used 
     16  ln_p4z    = .false.        !  PISCES model used 
     17  ln_p5z    = .true.         !  PISCES QUOTA model used 
    1818  ln_ligand = .false.        !  Enable  organic ligands 
    1919  ln_sediment = .false.      !  Enable sediment module 
     
    3434!              !  file name   ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    3535!              !              !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
    36    sn_patm     = 'presatm'    ,     -1            , 'patm'    ,  .true.      , .true. , 'yearly'  , ''       , ''       , '' 
    37    sn_atmco2   = 'presatmco2' ,     -1            , 'xco2'    ,  .true.      , .true. , 'yearly'  , ''       , ''       , '' 
     36   sn_patm     = 'presatm'    ,     -1.           , 'patm'    ,  .true.      , .true. , 'yearly'  , ''       , ''       , '' 
     37   sn_atmco2   = 'presatmco2' ,     -1.           , 'xco2'    ,  .true.      , .true. , 'yearly'  , ''       , ''       , '' 
    3838   cn_dir      = './'     !  root directory for the location of the dynamical files 
    3939! 
     
    4444&nampisbio     !   biological parameters 
    4545!----------------------------------------------------------------------- 
    46    nrdttrc    =  1        ! time step frequency for biology 
    47    wsbio      =  2.       ! POC sinking speed 
    48    xkmort     =  2.E-7    ! half saturation constant for mortality 
    49    ferat3     =  10.E-6   ! Fe/C in zooplankton  
    50    wsbio2     =  50.      ! Big particles sinking speed 
    51    wsbio2max  =  50.      ! Big particles maximum sinking speed 
    52    wsbio2scale =  5000.    ! Big particles length scale of sinking 
     46   nrdttrc     =  1       ! time step frequency for biology 
     47   wsbio       =  2.      ! POC sinking speed 
     48   xkmort      =  2.E-7   ! half saturation constant for mortality 
     49   feratz      =  10.E-6  ! Fe/C in zooplankton  
     50   feratm      =  15.E-6  ! Fe/C in mesozooplankton 
     51   wsbio2      =  50.     ! Big particles sinking speed 
     52   wsbio2max   =  50.     ! Big particles maximum sinking speed 
     53   wsbio2scale =  5000.   ! Big particles length scale of sinking 
    5354!                         !  ln_ligand enabled 
    54    ldocp      =  1.E-4    ! Phyto ligand production per unit doc  
    55    ldocz      =  1.E-4    ! Zoo ligand production per unit doc  
    56    lthet      =  1.0      ! Proportional loss of ligands due to Fe uptake  
     55   ldocp       =  1.E-4   ! Phyto ligand production per unit doc  
     56   ldocz       =  1.E-4   ! Zoo ligand production per unit doc  
     57   lthet       =  1.0     ! Proportional loss of ligands due to Fe uptake  
    5758!                         !  ln_p5z enabled 
    58    no3rat3    =  0.182    ! N/C ratio in zooplankton 
    59    po4rat3    =  0.0094  ! P/C ratio in zooplankton 
     59   no3rat3     =  0.151   ! N/C ratio in zooplankton 
     60   po4rat3     =  0.00944 ! P/C ratio in zooplankton 
    6061/ 
    6162!----------------------------------------------------------------------- 
     
    6465   concnno3   =  1.e-6    ! Nitrate half saturation of nanophytoplankton 
    6566   concdno3   =  3.E-6    ! Nitrate half saturation for diatoms 
    66    concnnh4   =  1.E-7    ! NH4 half saturation for phyto 
    67    concdnh4   =  3.E-7    ! NH4 half saturation for diatoms 
    68    concnfer   =  1.E-9    ! Iron half saturation for phyto 
    69    concdfer   =  3.E-9    ! Iron half saturation for diatoms 
    70    concbfe    =  1.E-11   ! Iron half-saturation for DOC remin. 
    71    concbnh4   =  2.E-8    ! NH4 half saturation for DOC remin. 
    72    concbno3   =  2.E-7    ! Nitrate half saturation for DOC remin. 
     67   concnnh4   =  1.E-6    ! NH4 half saturation for phyto 
     68   concdnh4   =  3.E-6    ! NH4 half saturation for diatoms 
     69   concnfer   =  3.E-9    ! Iron half saturation for phyto 
     70   concdfer   =  9.E-9    ! Iron half saturation for diatoms 
     71   concbfe    =  3.E-11   ! Iron half-saturation for DOC remin. 
     72   concbnh4   =  3.E-7    ! NH4 half saturation for DOC remin. 
     73   concbno3   =  3.E-7    ! Nitrate half saturation for DOC remin. 
    7374   xsizedia   =  1.E-6    ! Minimum size criteria for diatoms 
    7475   xsizephy   =  1.E-6    ! Minimum size criteria for phyto 
    7576   xsizern    =  3.0      ! Size ratio for nanophytoplankton 
    76    xsizerd    =  3.0      ! Size ratio for diatoms 
    77    xksi1      =  2.E-6    ! half saturation constant for Si uptake 
     77   xsizerd    =  4.0      ! Size ratio for diatoms 
     78   xksi1      =  8.E-6    ! half saturation constant for Si uptake 
    7879   xksi2      =  20E-6    ! half saturation constant for Si/C 
    7980   xkdoc      =  417.E-6  ! half-saturation constant of DOC remineralization 
    80    qnfelim    =  7.E-6    ! Optimal quota of phyto 
    81    qdfelim    =  7.E-6    ! Optimal quota of diatoms 
    82    caco3r     =  0.3      ! mean rain ratio 
     81   qnfelim    =  10.E-6   ! Optimal quota of phyto 
     82   qdfelim    =  10.E-6   ! Optimal quota of diatoms 
     83   caco3r     =  0.28     ! mean rain ratio 
    8384   oxymin     =  1.E-6    ! Half-saturation constant for anoxia 
    8485/ 
     
    8687&namp5zlim     !   parameters for nutrient limitations PISCES QUOTA    - ln_p5z 
    8788!----------------------------------------------------------------------- 
    88    concnno3   =  3e-6     ! Nitrate half saturation of nanophytoplankton 
    89    concpno3   =  1e-6 
    90    concdno3   =  4E-6     ! Phosphate half saturation for diatoms 
    91    concnnh4   =  1.5E-6   ! NH4 half saturation for phyto 
    92    concpnh4   =  4E-7 
    93    concdnh4   =  2E-6     ! NH4 half saturation for diatoms 
    94    concnpo4   =  3E-6     ! PO4 half saturation for phyto 
    95    concppo4   =  1.5E-6 
    96    concdpo4   =  4E-6     ! PO4 half saturation for diatoms 
    97    concnfer   =  3E-9   ! Iron half saturation for phyto 
    98    concpfer   =  1.5E-9 
    99    concdfer   =  4E-9   ! Iron half saturation for diatoms 
    100    concbfe    =  1.E-11   ! Half-saturation for Fe limitation of Bacteria 
    101    concbnh4   =  1.E-7    ! NH4 half saturation for phyto 
    102    concbno3   =  5.E-7    ! Phosphate half saturation for diatoms 
    103    concbpo4   =  1E-7     ! Phosphate half saturation for bacteria 
     89   concnno3   =  2e-6     ! Nitrate half saturation of nanophytoplankton 
     90   concpno3   =  7e-7     ! Nitrate half saturation of picophytoplankton 
     91   concdno3   =  3E-6     ! Phosphate half saturation for diatoms 
     92   concnnh4   =  2E-6     ! NH4 half saturation for phyto 
     93   concpnh4   =  7E-7     ! NH4 half saturation for picophytoplankton 
     94   concdnh4   =  3E-6     ! NH4 half saturation for diatoms 
     95   concnpo4   =  2E-6     ! PO4 half saturation for phyto 
     96   concppo4   =  7E-7     ! PO4 half saturation for picophytoplankton 
     97   concdpo4   =  3E-6     ! PO4 half saturation for diatoms 
     98   concnfer   =  6E-9     ! Iron half saturation for phyto 
     99   concpfer   =  2E-9     ! Iron half saturation for picophytoplankton 
     100   concdfer   =  9E-9     ! Iron half saturation for diatoms 
     101   concbfe    =  3E-11    ! Half-saturation for Fe limitation of Bacteria 
     102   concbnh4   =  4.E-7    ! NH4 half saturation for phyto 
     103   concbno3   =  4.E-7    ! Phosphate half saturation for diatoms 
     104   concbpo4   =  4.E-7    ! Phosphate half saturation for bacteria 
    104105   xsizedia   =  1.E-6    ! Minimum size criteria for diatoms 
    105106   xsizephy   =  1.E-6    ! Minimum size criteria for phyto 
    106    xsizepic   =  1.E-6 
    107    xsizern    =  1.0      ! Size ratio for nanophytoplankton 
    108    xsizerp    =  1.0 
     107   xsizepic   =  5.E-7    ! Minimum size criteria for picophyto 
     108   xsizern    =  3.0      ! Size ratio for nanophytoplankton 
     109   xsizerp    =  2.0      ! Size ratio for picophytoplankton 
    109110   xsizerd    =  4.0      ! Size ratio for diatoms 
    110    xksi1      =  2.E-6    ! half saturation constant for Si uptake 
    111    xksi2      =  20E-6  ! half saturation constant for Si/C 
     111   xksi1      =  8.E-6    ! half saturation constant for Si uptake 
     112   xksi2      =  20E-6    ! half saturation constant for Si/C 
    112113   xkdoc      =  417.E-6  ! half-saturation constant of DOC remineralization 
    113    caco3r     =  0.35     ! mean rain ratio 
     114   caco3r     =  0.5      ! mean rain ratio 
    114115   oxymin     =  1.E-6    ! Half-saturation constant for anoxia 
    115116/ 
     
    117118&namp5zquota   !   parameters for nutrient limitations PISCES quota    - ln_p5z 
    118119!----------------------------------------------------------------------- 
    119    qfnopt     =  7.E-6    ! Optimal Fe quota of nanophyto 
    120    qfpopt     =  7.E-6    ! Optimal Fe quota of picophyto 
    121    qfdopt     =  7.E-6    ! Optimal quota of diatoms 
    122    qnnmin     =  0.29     ! Minimal N quota for nano 
    123    qnnmax     =  1.39     ! Maximal N quota for nano 
    124    qpnmin     =  0.28     ! Minimal P quota for nano 
    125    qpnmax     =  1.06     ! Maximal P quota for nano 
    126    qnpmin     =  0.42     ! Minimal N quota for pico 
     120   qfnopt     =  10.E-6   ! Optimal Fe quota of nanophyto 
     121   qfpopt     =  10.E-6   ! Optimal Fe quota of picophyto 
     122   qfdopt     =  10.E-6   ! Optimal quota of diatoms 
     123   qnnmin     =  0.61     ! Minimal N quota for nano 
     124   qnnmax     =  1.25     ! Maximal N quota for nano 
     125   qpnmin     =  0.24     ! Minimal P quota for nano 
     126   qpnmax     =  1.35     ! Maximal P quota for nano 
     127   qnpmin     =  1.02     ! Minimal N quota for pico 
    127128   qnpmax     =  1.39     ! Maximal N quota for pico 
    128    qppmin     =  0.25     ! Minimal P quota for pico 
    129    qppmax     =  0.7      ! Maximal P quota for pico 
    130    qndmin     =  0.25     ! Minimal N quota for diatoms 
    131    qndmax     =  1.39     ! Maximal N quota for diatoms 
    132    qpdmin     =  0.29     ! Minimal P quota for diatoms 
    133    qpdmax     =  1.32     ! Maximal P quota for diatoms 
    134    qfnmax     =  40E-6    ! Maximal Fe quota for nano 
    135    qfpmax     =  40E-6    ! Maximal Fe quota for pico 
    136    qfdmax     =  40E-6    ! Maximal Fe quota for diatoms 
     129   qppmin     =  0.19     ! Minimal P quota for pico 
     130   qppmax     =  1.15     ! Maximal P quota for pico 
     131   qndmin     =  0.51     ! Minimal N quota for diatoms 
     132   qndmax     =  1.25     ! Maximal N quota for diatoms 
     133   qpdmin     =  0.24     ! Minimal P quota for diatoms 
     134   qpdmax     =  1.525    ! Maximal P quota for diatoms 
     135   qfnmax     =  60E-6    ! Maximal Fe quota for nano 
     136   qfpmax     =  60E-6    ! Maximal Fe quota for pico 
     137   qfdmax     =  60E-6    ! Maximal Fe quota for diatoms 
    137138/ 
    138139!----------------------------------------------------------------------- 
     
    141142!              !  file name       ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    142143!              !                  !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
    143    sn_par      = 'par.orca'       ,     24            , 'fr_par'  ,  .true.      , .true. , 'yearly'  , ''       , ''       , '' 
     144   sn_par      = 'par.orca'       ,     24.           , 'fr_par'  ,  .true.      , .true. , 'yearly'  , ''       , ''       , '' 
    144145   cn_dir      = './'      !  root directory for the location of the dynamical files 
    145146   ln_varpar   =  .true.   ! boolean for PAR variable 
     
    149150&namp4zprod    !   parameters for phytoplankton growth for PISCES std  - ln_p4z 
    150151!----------------------------------------------------------------------- 
    151    pislopen   =  2.       ! P-I slope 
    152    pisloped   =  2.       ! P-I slope  for diatoms 
     152   pislopen   =  2.5      ! P-I slope 
     153   pisloped   =  2.5      ! P-I slope  for diatoms 
    153154   xadap      =  0.       ! Adaptation factor to low light 
    154155   excretn    =  0.05     ! excretion ratio of phytoplankton 
     
    157158   chlcnm     =  0.033    ! Maximum Chl/C in nanophytoplankton 
    158159   chlcdm     =  0.05     ! Maximum Chl/C in diatoms 
    159    chlcmin    =  0.004    ! Minimum Chl/c in phytoplankton 
    160    fecnm      =  40E-6    ! Maximum Fe/C in nanophytoplankton 
    161    fecdm      =  40E-6    ! Maximum Fe/C in diatoms 
    162    grosip     =  0.159    ! mean Si/C ratio 
     160   chlcmin    =  0.003    ! Minimum Chl/c in phytoplankton 
     161   fecnm      =  60E-6    ! Maximum Fe/C in nanophytoplankton 
     162   fecdm      =  60E-6    ! Maximum Fe/C in diatoms 
     163   grosip     =  0.13     ! mean Si/C ratio 
    163164/ 
    164165!----------------------------------------------------------------------- 
    165166&namp5zprod    !   parameters for phytoplankton growth for PISCES quota- ln_p5z 
    166167!----------------------------------------------------------------------- 
    167    pislopen   =  3.       ! P-I slope 
    168    pislopep   =  3.       ! P-I slope for picophytoplankton 
    169    pisloped   =  3.       ! P-I slope  for diatoms 
     168   pislopen   =  5        ! P-I slope of nanophytoplankton 
     169   pislopep   =  5        ! P-I slope for picophytoplankton 
     170   pisloped   =  5        ! P-I slope  for diatoms 
    170171   excretn    =  0.05     ! excretion ratio of phytoplankton 
    171172   excretp    =  0.05     ! excretion ratio of picophytoplankton 
     
    173174   xadap      =  0.       ! Adaptation factor to low light 
    174175   bresp      =  0.02     ! Basal respiration rate 
    175    thetannm   =  0.25     ! Maximum Chl/N in nanophytoplankton 
    176    thetanpm   =  0.25     ! Maximum Chl/N in picophytoplankton 
    177    thetandm   =  0.3      ! Maximum Chl/N in diatoms 
    178    chlcmin    =  0.004    ! Minimum Chl/c in phytoplankton 
    179    grosip     =  0.131    ! mean Si/C ratio 
     176   thetannm   =  0.3      ! Maximum Chl/N in nanophytoplankton 
     177   thetanpm   =  0.3      ! Maximum Chl/N in picophytoplankton 
     178   thetandm   =  0.4      ! Maximum Chl/N in diatoms 
     179   chlcmin    =  0.003    ! Minimum Chl/c in phytoplankton 
     180   grosip     =  0.12     ! mean Si/C ratio 
    180181/ 
    181182!----------------------------------------------------------------------- 
    182183&namp4zmort    !   parameters for phytoplankton sinks for PISCES std   - ln_p4z 
    183184!----------------------------------------------------------------------- 
    184    wchl       =  0.01     ! quadratic mortality of phytoplankton 
    185    wchld      =  0.01     ! maximum quadratic mortality of diatoms 
    186    wchldm     =  0.03     ! maximum quadratic mortality of diatoms 
    187    mprat      =  0.01     ! phytoplankton mortality rate 
    188    mprat2     =  0.01     ! Diatoms mortality rate 
     185   wchln      =  0.01     ! quadratic mortality of phytoplankton 
     186   wchld      =  0.03     ! maximum quadratic mortality of diatoms 
     187   mpratn     =  0.01     ! phytoplankton mortality rate 
     188   mpratd     =  0.01     ! Diatoms mortality rate 
    189189/ 
    190190!----------------------------------------------------------------------- 
     
    193193   wchln      =  0.01     ! quadratic mortality of nanophytoplankton 
    194194   wchlp      =  0.01     ! quadratic mortality of picophytoplankton 
    195    wchld      =  0.01     ! maximum quadratic mortality of diatoms 
    196    wchldm     =  0.02     ! maximum quadratic mortality of diatoms 
     195   wchld      =  0.03     ! maximum quadratic mortality of diatoms 
    197196   mpratn     =  0.01     ! nanophytoplankton mortality rate 
    198197   mpratp     =  0.01     ! picophytoplankton mortality rate 
    199    mprat2     =  0.01     ! Diatoms mortality rate 
     198   mpratd     =  0.01     ! Diatoms mortality rate 
    200199/ 
    201200!----------------------------------------------------------------------- 
    202201&namp4zmes     !   parameters for mesozooplankton for PISCES std       - ln_p4z 
    203202!----------------------------------------------------------------------- 
    204    part2      =  0.75     ! part of calcite not dissolved in mesozoo guts 
    205    grazrat2   =  0.75     ! maximal mesozoo grazing rate 
    206    resrat2    =  0.005    ! exsudation rate of mesozooplankton 
    207    mzrat2     =  0.03     ! mesozooplankton mortality rate 
    208    xpref2d    =  1.       ! mesozoo preference for diatoms 
    209    xpref2n    =  0.3      ! mesozoo preference for nanophyto. 
    210    xpref2z    =  1.       ! mesozoo preference for microzoo. 
    211    xpref2c    =  0.3      ! mesozoo preference for poc 
    212    xthresh2zoo = 1E-8     ! zoo feeding threshold for mesozooplankton  
    213    xthresh2dia = 1E-8     ! diatoms feeding threshold for mesozooplankton  
    214    xthresh2phy = 1E-8     ! nanophyto feeding threshold for mesozooplankton  
    215    xthresh2poc = 1E-8     ! poc feeding threshold for mesozooplankton  
    216    xthresh2   =  3E-7     ! Food threshold for grazing 
    217    xkgraz2    =  20.E-6   ! half saturation constant for meso grazing 
    218    epsher2    =  0.35     ! Efficicency of Mesozoo growth 
    219    epsher2min =  0.35     ! Minimum efficiency of mesozoo growth 
    220    sigma2     =  0.6      ! Fraction of mesozoo excretion as DOM 
    221    unass2     =  0.3      ! non assimilated fraction of P by mesozoo 
    222    grazflux   =  3.e3     ! flux-feeding rate 
     203   part2       =  0.75     ! part of calcite not dissolved in mesozoo guts 
     204   grazrat2    =  0.5      ! maximal mesozoo grazing rate 
     205   resrat2     =  0.005    ! exsudation rate of mesozooplankton 
     206   mzrat2      =  0.01     ! mesozooplankton mortality rate 
     207   xpref2d     =  1.       ! mesozoo preference for diatoms 
     208   xpref2n     =  0.3      ! mesozoo preference for nanophyto. 
     209   xpref2z     =  1.       ! mesozoo preference for microzoo. 
     210   xpref2c     =  0.3      ! mesozoo preference for poc 
     211   xthresh2zoo =  1E-8     ! zoo feeding threshold for mesozooplankton  
     212   xthresh2dia =  1E-8     ! diatoms feeding threshold for mesozooplankton  
     213   xthresh2phy =  1E-8     ! nanophyto feeding threshold for mesozooplankton  
     214   xthresh2poc =  1E-8     ! poc feeding threshold for mesozooplankton  
     215   xthresh2    =  3E-7     ! Food threshold for grazing 
     216   xkgraz2     =  20.E-6   ! half saturation constant for meso grazing 
     217   epsher2     =  0.4      ! Efficicency of Mesozoo growth 
     218   epsher2min  =  0.4      ! Minimum efficiency of mesozoo growth 
     219   sigma2      =  0.6      ! Fraction of mesozoo excretion as DOM 
     220   unass2      =  0.3      ! non assimilated fraction of P by mesozoo 
     221   grazflux    =  2.e3     ! flux-feeding rate 
     222   xsigma2     =  0.5      ! Predation window size 
     223   xsigma2del  =  1.0      ! Predation window size scaling 
     224   ln_dvm_meso =  .false.  ! Activates DVM for mesozooplankton 
     225   xfracmig    =  0.3      ! Fraction of mesozooplankton performing DVM 
    223226/ 
    224227!----------------------------------------------------------------------- 
    225228&namp5zmes     !   parameters for mesozooplankton 
    226229!----------------------------------------------------------------------- 
    227    part2      =  0.75     ! part of calcite not dissolved in mesozoo guts 
    228    grazrat2   =  0.85     ! maximal mesozoo grazing rate 
    229    bmetexc2   =  .true.   ! Metabolic use of excess carbon  
    230    resrat2    =  0.005    ! exsudation rate of mesozooplankton 
    231    mzrat2     =  0.02     ! mesozooplankton mortality rate 
    232    xpref2d    =  1.       ! zoo preference for phyto 
    233    xpref2p    =  1.       ! zoo preference for POC 
    234    xpref2z    =  1.       ! zoo preference for zoo 
    235    xpref2m    =  0.2      ! meso preference for zoo 
    236    xpref2c    =  0.3      ! zoo preference for poc 
    237    xthresh2zoo = 1E-8     ! zoo feeding threshold for mesozooplankton 
    238    xthresh2dia = 1E-8     ! diatoms feeding threshold for mesozooplankton 
    239    xthresh2phy = 1E-8     ! nanophyto feeding threshold for mesozooplankton 
    240    xthresh2mes = 1E-8     ! meso feeding threshold for mesozooplankton 
    241    xthresh2poc = 1E-8     ! poc feeding threshold for mesozooplankton 
     230   part2       =  0.75     ! part of calcite not dissolved in mesozoo guts 
     231   grazrat2    =  0.5      ! maximal mesozoo grazing rate 
     232   bmetexc2    =  .true.   ! Metabolic use of excess carbon  
     233   resrat2     =  0.005    ! exsudation rate of mesozooplankton 
     234   mzrat2      =  0.01     ! mesozooplankton mortality rate 
     235   xpref2d     =  1.       ! meso preference for diatoms 
     236   xpref2n     =  0.3      ! meso preference for nano 
     237   xpref2z     =  1.       ! meso preference for zoo 
     238   xpref2m     =  0.       ! meso preference for zoo 
     239   xpref2c     =  0.3      ! meso preference for poc 
     240   xthresh2zoo =  1E-8     ! zoo feeding threshold for mesozooplankton 
     241   xthresh2dia =  1E-8     ! diatoms feeding threshold for mesozooplankton 
     242   xthresh2phy =  1E-8     ! nanophyto feeding threshold for mesozooplankton 
     243   xthresh2mes =  1E-8     ! meso feeding threshold for mesozooplankton 
     244   xthresh2poc =  1E-8     ! poc feeding threshold for mesozooplankton 
    242245   xthresh2    =  3E-7     ! Food threshold for grazing 
    243246   xkgraz2     =  20.E-6   ! half sturation constant for meso grazing 
    244247   epsher2     =  0.5      ! Efficicency of Mesozoo growth 
    245    epsher2min  =  0.2     ! Minimum efficiency of mesozoo growth 
    246    ssigma2     =  0.5     ! Fraction excreted as semi-labile DOM 
    247    srespir2    =  0.2     ! Active respiration 
    248    unass2c     =  0.3     ! non assimilated fraction of P by mesozoo 
    249    unass2n     =  0.3     ! non assimilated fraction of N by mesozoo 
    250    unass2p     =  0.3     ! non assimilated fraction of P by mesozoo 
    251    grazflux   =  3.e3     ! flux-feeding rate 
     248   epsher2min  =  0.5      ! Minimum efficiency of mesozoo growth 
     249   ssigma2     =  0.5      ! Fraction excreted as semi-labile DOM 
     250   srespir2    =  0.2      ! Active respiration 
     251   unass2c     =  0.3      ! non assimilated fraction of C by mesozoo 
     252   unass2n     =  0.3      ! non assimilated fraction of N by mesozoo 
     253   unass2p     =  0.3      ! non assimilated fraction of P by mesozoo 
     254   xsigma2     =  0.5      ! Predation window size 
     255   xsigma2del  =  1.0      ! Predation window size scaling 
     256   grazflux    =  2.e3     ! flux-feeding rate 
     257   ln_dvm_meso =  .false.  ! Activates DVM for mesozooplankton 
     258   xfracmig    =  0.25     ! Fraction of mesozooplankton performing DVM 
    252259/ 
    253260!----------------------------------------------------------------------- 
    254261&namp4zzoo     !   parameters for microzooplankton for PISCES std      - ln_p4z 
    255262!----------------------------------------------------------------------- 
    256    part       =  0.5      ! part of calcite not dissolved in microzoo guts 
    257    grazrat    =  3.0      ! maximal zoo grazing rate 
    258    resrat     =  0.03     ! exsudation rate of zooplankton 
    259    mzrat      =  0.004    ! zooplankton mortality rate 
     263   part       =  0.75     ! part of calcite not dissolved in microzoo guts 
     264   grazrat    =  2.0      ! maximal zoo grazing rate 
     265   resrat     =  0.02     ! Linear mortality rate of zooplankton 
     266   mzrat      =  0.005    ! zooplankton mortality rate 
    260267   xprefc     =  0.1      ! Microzoo preference for POM 
    261268   xprefn     =  1.       ! Microzoo preference for Nanophyto 
    262    xprefd     =  0.6      ! Microzoo preference for Diatoms 
     269   xprefd     =  0.8      ! Microzoo preference for Diatoms 
    263270   xthreshdia =  1.E-8    ! Diatoms feeding threshold for microzooplankton  
    264271   xthreshphy =  1.E-8    ! Nanophyto feeding threshold for microzooplankton  
     
    266273   xthresh    =  3.E-7    ! Food threshold for feeding 
    267274   xkgraz     =  20.E-6   ! half sturation constant for grazing 
    268    epsher     =  0.3      ! Efficiency of microzoo growth 
    269    epshermin  =  0.3      ! Minimum efficiency of microzoo growth 
     275   epsher     =  0.4     ! Efficiency of microzoo growth 
     276   epshermin  =  0.4     ! Minimum efficiency of microzoo growth 
    270277   sigma1     =  0.6      ! Fraction of microzoo excretion as DOM 
    271278   unass      =  0.3      ! non assimilated fraction of phyto by zoo 
     279   xsigma     =  0.5      ! Predation window size 
     280   xsigmadel  =  1.0      ! Predation window size scaling 
    272281/ 
    273282!----------------------------------------------------------------------- 
    274283&namp5zzoo     !   parameters for microzooplankton 
    275284!----------------------------------------------------------------------- 
    276    part       =  0.5      ! part of calcite not dissolved in microzoo gutsa 
    277    grazrat    =  2.75     ! maximal zoo grazing rate 
     285   part       =  0.75     ! part of calcite not dissolved in microzoo gutsa 
     286   grazrat    =  2.0      ! maximal zoo grazing rate 
    278287   bmetexc    =  .true.   ! Metabolic use of excess carbon 
    279    resrat     =  0.03     ! exsudation rate of zooplankton 
     288   resrat     =  0.02     ! exsudation rate of zooplankton 
    280289   mzrat      =  0.005    ! zooplankton mortality rate 
    281290   xprefc     =  0.1      ! Microzoo preference for POM 
    282    xprefn     =  1.       ! Microzoo preference for Nanophyto 
    283    xprefp     =  1.6      ! Microzoo preference for picophyto 
    284    xprefd     =  1.0      ! Microzoo preference for Diatoms 
    285    xprefz     =  0.3      ! Microzoo preference for microzooplankton 
     291   xprefn     =  1.0      ! Microzoo preference for Nanophyto 
     292   xprefp     =  1.0      ! Microzoo preference for picophyto 
     293   xprefd     =  0.8      ! Microzoo preference for Diatoms 
     294   xprefz     =  0.       ! Microzoo preference for microzooplankton 
    286295   xthreshdia =  1.E-8    ! Diatoms feeding threshold for microzooplankton 
    287296   xthreshphy =  1.E-8    ! Nanophyto feeding threshold for microzooplankton 
    288    xthreshpic =  1.E-8 
    289    xthreshzoo =  1.E-8    ! Nanophyto feeding threshold for microzooplankton 
     297   xthreshpic =  1.E-8    ! Picophyto feeding threshold for microzooplankton 
     298   xthreshzoo =  1.E-8    ! Microzoo feeding threshold for microzooplankton 
    290299   xthreshpoc =  1.E-8    ! POC feeding threshold for microzooplankton 
    291300   xthresh    =  3.E-7    ! Food threshold for feeding 
    292    xkgraz     =  20.E-6   ! half sturation constant for grazing 
     301   xkgraz     =  20.E-6   ! half saturation constant for grazing 
    293302   epsher     =  0.5      ! Efficiency of microzoo growth 
    294    epshermin  =  0.2      ! Minimum efficiency of microzoo growth 
     303   epshermin  =  0.5      ! Minimum efficiency of microzoo growth 
    295304   ssigma     =  0.5      ! Fraction excreted as semi-labile DOM 
    296305   srespir    =  0.2      ! Active respiration 
    297306   unassc     =  0.3      ! non assimilated fraction of C by zoo 
    298    unassn     =  0.3      ! non assimilated fraction of C by zoo 
    299    unassp     =  0.3      ! non assimilated fraction of C by zoo 
     307   unassn     =  0.3      ! non assimilated fraction of N by zoo 
     308   unassp     =  0.3      ! non assimilated fraction of P by zoo 
     309   xsigma     =  0.5      ! Predation window size 
     310   xsigmadel  =  1.0      ! Predation window size scaling 
    300311/ 
    301312!----------------------------------------------------------------------- 
    302313&nampisfer     !   parameters for iron chemistry 
    303314!----------------------------------------------------------------------- 
    304    ln_ligvar =  .false.    ! variable ligand concentration 
    305    xlam1     =  0.005     ! scavenging rate of Iron 
    306    xlamdust  =  150.0     ! Scavenging rate of dust 
    307    ligand    =  0.7E-9    ! Ligands concentration  
     315   ln_ligvar =  .false.   ! variable ligand concentration 
     316   xlam1     =  0.05      ! scavenging rate of Iron by biogenic particles 
     317   xlamdust  =  150.0     ! Scavenging rate of Iron by dust 
     318   ligand    =  1E-9     ! Ligands concentration  
    308319   kfep      =  0.01      ! Nanoparticle formation rate constant 
     320   scaveff   =  1.0       ! Fraction of scavenged Fe that goes to POFe 
    309321/ 
    310322!-----------------------------------------------------------------------   
    311323&nampisrem     !   parameters for remineralization 
    312324!----------------------------------------------------------------------- 
    313    xremik    =  0.3       ! remineralization rate of DOC 
    314325   nitrif    =  0.05      ! NH4 nitrification rate 
    315326   xsirem    =  0.003     ! remineralization rate of Si 
    316327   xsiremlab =  0.03      ! fast remineralization rate of Si 
    317328   xsilab    =  0.5       ! Fraction of labile biogenic silica 
    318    feratb    =  10.E-6    ! Fe/C quota in bacteria 
     329   feratb    =  30.E-6    ! Fe/C quota in bacteria 
    319330   xkferb    =  3E-10     ! Half-saturation constant for bacteria Fe/C 
    320331!                         ! ln_p5z 
    321    xremikc   =  0.25      ! remineralization rate of DOC 
    322    xremikn   =  0.35      ! remineralization rate of DON 
    323    xremikp   =  0.4       ! remineralization rate of DOP 
    324 !   feratb    =  20E-6     ! Bacterial Fe/C ratio 
    325 !   xkferb    =  3E-10     ! Half-saturation constant for bact. Fe/C 
     332   xremikc   =  0.4       ! remineralization rate of DOC 
     333   xremikn   =  0.4       ! remineralization rate of DON 
     334   xremikp   =  0.5       ! remineralization rate of DOP 
    326335/ 
    327336!----------------------------------------------------------------------- 
    328337&nampispoc     !   parameters for organic particles 
    329338!----------------------------------------------------------------------- 
    330    xremip    =  0.035     ! remineralisation rate of PON 
     339   xremip    =  0.035     ! remineralisation rate of POC 
    331340   jcpoc     =  15        ! Number of lability classes 
    332341   rshape    =  1.0       ! Shape of the gamma function 
    333342!                         ! ln_p5z 
    334    xremipc   =  0.02      ! remineralisation rate of POC 
    335    xremipn   =  0.025     ! remineralisation rate of PON 
    336    xremipp   =  0.03      ! remineralisation rate of POP 
     343   xremipc   =  0.028     ! remineralisation rate of POC 
     344   xremipn   =  0.03      ! remineralisation rate of PON 
     345   xremipp   =  0.035     ! remineralisation rate of POP 
    337346/ 
    338347!----------------------------------------------------------------------- 
    339348&nampiscal     !   parameters for Calcite chemistry 
    340349!----------------------------------------------------------------------- 
    341    kdca       =  6.       ! calcite dissolution rate constant (1/time) 
    342    nca        =  1.       ! order of dissolution reaction (dimensionless) 
     350   kdca       =  3.       ! calcite dissolution rate constant (1/time) 
     351   nca        =  2.       ! order of dissolution reaction (dimensionless) 
    343352/ 
    344353!----------------------------------------------------------------------- 
     
    358367   distcoast   =  5.e3     ! Distance off the coast for Iron from sediments 
    359368   mfrac       =  0.035    ! Fe mineral fraction of dust 
    360    wdust       =  2.0      ! Dust sinking speed  
     369   wdust       =  2.0      ! Dust sinking speed 
    361370   icefeinput  =  15.e-9   ! Iron concentration in sea ice 
    362    hratio      =  1.e+7    ! Fe to 3He ratio assumed for vent iron supply  
     371   hratio      =  1.e+7    ! Fe to 3He ratio assumed for vent iron supply 
    363372!                          ! ln_ligand 
    364    lgw_rath    =  0.5      ! Weak ligand ratio from sed hydro sources  
    365 / 
    366 !----------------------------------------------------------------------- 
    367 &nampissed     !   parameters for sediments mobilization 
    368 !----------------------------------------------------------------------- 
    369    nitrfix     =  1.e-7    ! Nitrogen fixation rate 
    370    diazolight  =  50.      ! Diazotrophs sensitivity to light (W/m2) 
    371    concfediaz  =  1.e-10   ! Diazotrophs half-saturation Cste for Iron 
     373   lgw_rath    =  0.5      ! Weak ligand ratio from sed hydro sources 
    372374/ 
    373375!----------------------------------------------------------------------- 
    374376&nampislig     !   Namelist parameters for ligands, nampislig 
    375377!----------------------------------------------------------------------- 
    376    rlgw        =  100.     ! Lifetime (years) of weak ligands 
     378   rlgw        =  200.     ! Lifetime (years) of weak ligands 
    377379   rlig        =  1.E-4    ! Remin ligand production per unit C 
    378    prlgw       =  1.E-4    ! Photolysis of weak ligand 
     380   prlgw       =  5.E-4    ! Photolysis of weak ligand 
    379381   rlgs        =  1.       ! Lifetime (years) of strong ligands 
     382   xklig       =  1.E-9    ! 1/2 saturation constant of photolysis 
    380383/ 
    381384!----------------------------------------------------------------------- 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zagg.F90

    r13295 r14385  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p4zagg  *** 
    4    !! TOP :  PISCES  aggregation of particles 
     4   !! TOP :  PISCES  aggregation of particles (DOC, POC, GOC) 
     5   !!        This module is the same for both PISCES and PISCES-QUOTA 
    56   !!====================================================================== 
    67   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    3738      !!                     ***  ROUTINE p4z_agg  *** 
    3839      !! 
    39       !! ** Purpose :   Compute aggregation of particles 
     40      !! ** Purpose :   Compute aggregation of particle. Aggregation by  
     41      !!                brownian motion, differential settling and shear 
     42      !!                are considered. 
    4043      !! 
    41       !! ** Method  : - ??? 
     44      !! ** Method  : - Aggregation rates are computed assuming a fixed and  
     45      !!                constant size spectrum in the different particulate  
     46      !!                pools. The coagulation rates have been computed  
     47      !!                externally using dedicated programs (O. Aumont). They  
     48      !!                are hard-coded because they can't be changed  
     49      !!                independently of each other.  
    4250      !!--------------------------------------------------------------------- 
    4351      INTEGER, INTENT(in) ::   kt, knt   ! 
     
    5664      IF( ln_timing )   CALL timing_start('p4z_agg') 
    5765      ! 
    58       !  Exchange between organic matter compartments due to coagulation/disaggregation 
     66      !  Exchange between organic matter compartments due to  
     67      !  coagulation/disaggregation 
    5968      !  --------------------------------------------------- 
     69 
     70      ! PISCES part 
    6071      IF( ln_p4z ) THEN 
    6172         ! 
     
    6374            ! 
    6475            zfact = xstep * xdiss(ji,jj,jk) 
     76            ! Part I : Coagulation dependent on turbulence 
     77            !  The stickiness has been assumed to be 0.1 
    6578            !  Part I : Coagulation dependent on turbulence 
    66             zagg1 = 25.9  * zfact * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jppoc,Kbb) 
    67             zagg2 = 4452. * zfact * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jpgoc,Kbb) 
     79            zagg1 = 12.5  * zfact * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jppoc,Kbb) 
     80            zagg2 = 169.7 * zfact * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jpgoc,Kbb) 
    6881 
    6982            ! Part II : Differential settling 
    70  
    71             !  Aggregation of small into large particles 
    72             zagg3 =  47.1 * xstep * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jpgoc,Kbb) 
    73             zagg4 =  3.3  * xstep * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jppoc,Kbb) 
     83            ! Aggregation of small into large particles 
     84            ! The stickiness has been assumed to be 0.1 
     85            zagg3 =  8.63  * xstep * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jppoc,Kbb) 
     86            zagg4 =  132.8 * xstep * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jpgoc,Kbb) 
    7487 
    7588            zagg   = zagg1 + zagg2 + zagg3 + zagg4 
     
    8093            ! 2nd term is shear aggregation of DOC-POC 
    8194            ! 3rd term is differential settling of DOC-POC 
    82             zaggdoc  = ( ( 0.369 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 102.4 * tr(ji,jj,jk,jppoc,Kbb) ) * zfact       & 
    83             &            + 2.4 * xstep * tr(ji,jj,jk,jppoc,Kbb) ) * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 
     95            ! 1/3 of DOC is supposed to experience aggregation (HMW) 
     96            zaggdoc  = ( ( 12.0 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 9.05 * tr(ji,jj,jk,jppoc,Kbb) ) * zfact       & 
     97            &            + 2.49 * xstep * tr(ji,jj,jk,jppoc,Kbb) ) * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 
    8498            ! transfer of DOC to GOC :  
    8599            ! 1st term is shear aggregation 
    86             ! 2nd term is differential settling  
    87             zaggdoc2 = ( 3.53E3 * zfact + 0.1 * xstep ) * tr(ji,jj,jk,jpgoc,Kbb) * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 
     100            ! 1/3 of DOC is supposed to experience aggregation (HMW) 
     101            zaggdoc2 = ( 1.94 * zfact + 1.37 * xstep ) * tr(ji,jj,jk,jpgoc,Kbb) * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 
    88102            ! tranfer of DOC to POC due to brownian motion 
    89             zaggdoc3 =  114. * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) *xstep * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 
     103            ! The temperature dependency has been omitted. 
     104            zaggdoc3 =  ( 127.8 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 725.7 * tr(ji,jj,jk,jppoc,Kbb) ) * xstep * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 
    90105 
    91106            !  Update the trends 
     
    101116         END_3D 
    102117      ELSE    ! ln_p5z 
     118        ! PISCES-QUOTA part 
    103119        ! 
    104120         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     
    106122            zfact = xstep * xdiss(ji,jj,jk) 
    107123            !  Part I : Coagulation dependent on turbulence 
     124            ! The stickiness has been assumed to be 0.1 
    108125            zaggtmp = 25.9  * zfact * tr(ji,jj,jk,jppoc,Kbb) 
    109126            zaggpoc1 = zaggtmp * tr(ji,jj,jk,jppoc,Kbb) 
    110127            zaggtmp = 4452. * zfact * tr(ji,jj,jk,jpgoc,Kbb) 
    111128            zaggpoc2 = zaggtmp * tr(ji,jj,jk,jppoc,Kbb) 
    112  
     129                   
    113130            ! Part II : Differential settling 
    114  
     131            ! The stickiness has been assumed to be 0.1 
     132    
    115133            !  Aggregation of small into large particles 
    116134            zaggtmp =  47.1 * xstep * tr(ji,jj,jk,jpgoc,Kbb) 
     
    119137            zaggpoc4 = zaggtmp * tr(ji,jj,jk,jppoc,Kbb) 
    120138 
    121             zaggpoc   = zaggpoc1 + zaggpoc2 + zaggpoc3 + zaggpoc4 
     139            zaggpoc = zaggpoc1 + zaggpoc2 + zaggpoc3 + zaggpoc4 
    122140            zaggpon = zaggpoc * tr(ji,jj,jk,jppon,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 
    123141            zaggpop = zaggpoc * tr(ji,jj,jk,jppop,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 
    124             zaggfe = zaggpoc * tr(ji,jj,jk,jpsfe,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb)  + rtrn ) 
     142            zaggfe  = zaggpoc * tr(ji,jj,jk,jpsfe,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb)  + rtrn ) 
    125143 
    126144            ! Aggregation of DOC to POC :  
     
    128146            ! 2nd term is shear aggregation of DOC-POC 
    129147            ! 3rd term is differential settling of DOC-POC 
    130             zaggtmp = ( ( 0.369 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 102.4 * tr(ji,jj,jk,jppoc,Kbb) ) * zfact       & 
    131             &            + 2.4 * xstep * tr(ji,jj,jk,jppoc,Kbb) ) 
     148            ! 1/3 of DOC is supposed to experience aggregation (HMW) 
     149            zaggtmp = ( ( 0.37 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 20.5 * tr(ji,jj,jk,jppoc,Kbb) ) * zfact       & 
     150            &            + 0.15 * xstep * tr(ji,jj,jk,jppoc,Kbb) ) 
    132151            zaggdoc  = zaggtmp * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 
    133152            zaggdon  = zaggtmp * 0.3 * tr(ji,jj,jk,jpdon,Kbb) 
     
    137156            ! 1st term is shear aggregation 
    138157            ! 2nd term is differential settling  
    139             zaggtmp = ( 3.53E3 * zfact + 0.1 * xstep ) * tr(ji,jj,jk,jpgoc,Kbb) 
     158            ! 1/3 of DOC is supposed to experience aggregation (HMW) 
     159            zaggtmp = 655.4 * zfact * tr(ji,jj,jk,jpgoc,Kbb) 
    140160            zaggdoc2 = zaggtmp * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 
    141161            zaggdon2 = zaggtmp * 0.3 * tr(ji,jj,jk,jpdon,Kbb) 
     
    143163 
    144164            ! tranfer of DOC to POC due to brownian motion 
    145             zaggtmp = ( 114. * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) ) * xstep 
     165            ! 1/3 of DOC is supposed to experience aggregation (HMW) 
     166            zaggtmp = ( 260.2 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) +  418.5 * tr(ji,jj,jk,jppoc,Kbb) ) * xstep 
    146167            zaggdoc3 =  zaggtmp * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 
    147168            zaggdon3 =  zaggtmp * 0.3 * tr(ji,jj,jk,jpdon,Kbb) 
    148169            zaggdop3 =  zaggtmp * 0.3 * tr(ji,jj,jk,jpdop,Kbb) 
     170 
    149171 
    150172            !  Update the trends 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zbc.F90

    r13295 r14385  
    7171      ! 
    7272      INTEGER  ::  ji, jj, jk, jl  
    73       REAL(wp) ::  zcoef, zyyss 
    74       REAL(wp) ::  zdep, ztrfer, zwdust, zwflux, zrivdin 
     73      REAL(wp) ::  zdep, zwflux, zironice 
     74      REAL(wp) ::  zcoef, zwdust, zrivdin, zdustdep, zndep 
    7575      ! 
    7676      CHARACTER (len=25) :: charout 
    77       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zirondep 
    78       REAL(wp), ALLOCATABLE, DIMENSION(:,:  ) :: zironice, zndep 
    7977      !!--------------------------------------------------------------------- 
    8078      ! 
    8179      IF( ln_timing )   CALL timing_start('p4z_bc') 
    82       ! 
     80       
     81      ! Add the external input of nutrients from dust deposition in the water column 
     82      ! The inputs at surface have already been added 
     83      ! ---------------------------------------------------------- 
    8384      IF( ll_dust )  THEN 
    84          ALLOCATE(  zirondep(jpi,jpj,jpk) ) 
    8585         ! 
    8686         CALL fld_read( kt, 1, sf_dust ) 
    8787         dust(:,:) = MAX( rtrn, sf_dust(1)%fnow(:,:,1) ) 
    8888         ! 
    89          jl = n_trc_indsbc(jpfer) 
    90          zirondep(:,:,1) = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(:,:,1) / e3t(:,:,1,Kmm) / rn_sbc_time 
    91          !                                              ! Iron solubilization of particles in the water column 
    92          !                                              ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ;  wdust in m/j 
    93          zwdust = 0.03 / ( wdust / rday ) / ( 270. * rday ) 
    94          DO jk = 2, jpkm1 
    95             zirondep(:,:,jk) = ( mfrac * dust(:,:) * zwdust / mMass_Fe ) * rfact * EXP( -gdept(:,:,jk,Kmm) / 540. ) 
    96             tr(:,:,jk,jpfer,Krhs) = tr(:,:,jk,jpfer,Krhs) + zirondep(:,:,jk) 
    97             tr(:,:,jk,jppo4,Krhs) = tr(:,:,jk,jppo4,Krhs) + zirondep(:,:,jk) * 0.023 
    98          ENDDO 
     89         ! Iron solubilization of particles in the water column 
     90         ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ;  wdust in m/d 
     91         ! Dust are supposed to sink at wdust sinking speed. 3% of the iron  
     92         ! in dust is hypothesized to be soluble at a dissolution rate set to  
     93         ! 1/(250 days). The vertical distribution of iron in dust is computed  
     94         ! from a steady state assumption. Parameters are very uncertain and  
     95         ! are estimated from the literature quoted in Raiswell et al. (2011)  
     96         ! -------------------------------------------------------------------  
     97 
     98         zwdust = 0.03 / ( wdust / rday ) / ( 250. * rday ) 
     99         DO_3D( 1, 1, 1, 1, 2, jpkm1 ) 
     100            zdustdep = dust(ji,jj) * zwdust * rfact * EXP( -gdept(ji,jj,jk,Kmm) /( 250. * wdust ) ) 
     101            ! 
     102            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zdustdep * mfrac / mMass_Fe  
     103            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zdustdep * 1.e-3 / mMass_P 
     104            tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) + zdustdep * 0.269 / mMass_Si 
     105         END_3D 
    99106         ! 
    100107         IF( lk_iomput ) THEN 
    101              CALL iom_put( "Irondep", zirondep(:,:,1) * 1.e+3 * rfactr * e3t(:,:,1,Kmm) * tmask(:,:,1) ) ! surface downward dust depo of iron 
     108             ! surface downward dust depo of iron 
     109             jl = n_trc_indsbc(jpfer) 
     110             CALL iom_put( "Irondep", ( rf_trsfac(jl) * sf_trcsbc(jl)%fnow(:,:,1) / rn_sbc_time ) * 1.e+3 * rfactr * tmask(:,:,1) ) 
     111 
     112             ! dust concentration at surface 
    102113             CALL iom_put( "pdust"  , dust(:,:) / ( wdust * rday ) * tmask(:,:,1) ) ! dust concentration at surface 
    103114         ENDIF 
    104          DEALLOCATE( zirondep ) 
    105       ENDIF 
    106  
    107       ! N/P and Si releases due to coastal rivers 
    108       ! Compute river at nit000 or only if there is more than 1 time record in river file 
     115      ENDIF 
     116 
    109117      ! ----------------------------------------- 
    110             ! Add the external input of nutrients from river 
     118      ! Add the external input of nutrients from river 
    111119      ! ---------------------------------------------------------- 
    112120      IF( ll_river ) THEN 
     
    124132      ! ---------------------------------------------------------- 
    125133      IF( ll_ndepo ) THEN 
    126          ALLOCATE( zndep(jpi,jpj) ) 
    127134         IF( ln_trc_sbc(jpno3) ) THEN 
    128135            jl = n_trc_indsbc(jpno3) 
    129             zndep(:,:) = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(:,:,1) / e3t(:,:,1,Kmm) / rn_sbc_time 
    130             tr(:,:,1,jptal,Krhs) = tr(:,:,1,jptal,Krhs) - rno3 * zndep(:,:) * rfact 
     136            DO_2D( 1, 1, 1, 1 ) 
     137               zndep = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(ji,jj,1) / e3t(ji,jj,1,Kmm) / rn_sbc_time 
     138               tr(ji,jj,1,jptal,Krhs) = tr(ji,jj,1,jptal,Krhs) - rno3 * zndep * rfact 
     139            END_2D 
    131140         ENDIF 
    132141         IF( ln_trc_sbc(jpnh4) ) THEN 
    133142            jl = n_trc_indsbc(jpnh4) 
    134             zndep(:,:) = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(:,:,1) / e3t(:,:,1,Kmm) / rn_sbc_time 
    135             tr(:,:,1,jptal,Krhs) = tr(:,:,1,jptal,Krhs) - rno3 * zndep(:,:) * rfact 
    136          ENDIF 
    137          DEALLOCATE( zndep ) 
    138       ENDIF 
    139       ! 
    140       ! Iron input/uptake due to sea ice : Crude parameterization based on 
    141       ! Lancelot et al. 
     143            DO_2D( 1, 1, 1, 1 ) 
     144               zndep = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(ji,jj,1) / e3t(ji,jj,1,Kmm) / rn_sbc_time 
     145               tr(ji,jj,1,jptal,Krhs) = tr(ji,jj,1,jptal,Krhs) - rno3 * zndep * rfact 
     146            END_2D 
     147         ENDIF 
     148      ENDIF 
     149      ! 
     150      ! Iron input/uptake due to sea ice : Crude parameterization based on  
     151      ! Lancelot et al. Iron concentration in sea-ice is constant and set  
     152      ! in the namelist_pisces (icefeinput). ln_ironice is forced to false 
     153      ! when nn_ice_tr = 1 
    142154      ! ---------------------------------------------------- 
    143155      IF( ln_ironice ) THEN 
    144156         ! 
    145          ALLOCATE( zironice(jpi,jpj) ) 
    146          ! 
     157         ! Compute the iron flux between sea ice and sea water 
     158         ! Simple parameterization assuming a fixed constant concentration in 
     159         ! sea-ice (icefeinput) 
     160         ! ------------------------------------------------------------------          
    147161         DO_2D( 1, 1, 1, 1 ) 
    148             zdep    = rfact / e3t(ji,jj,1,Kmm) 
    149             zwflux  = fmmflx(ji,jj) / 1000._wp 
    150             zironice(ji,jj) =  MAX( -0.99 * tr(ji,jj,1,jpfer,Kbb), -zwflux * icefeinput * zdep ) 
     162            zdep     = rfact / e3t(ji,jj,1,Kmm) 
     163            zwflux   = fmmflx(ji,jj) / 1000._wp 
     164            zironice =  MAX( -0.99 * tr(ji,jj,1,jpfer,Kbb), -zwflux * icefeinput * zdep ) 
     165            tr(ji,jj,1,jpfer,Krhs) = tr(ji,jj,1,jpfer,Krhs) + zironice 
    151166         END_2D 
    152167         ! 
    153          tr(:,:,1,jpfer,Krhs) = tr(:,:,1,jpfer,Krhs) + zironice(:,:) 
    154          ! 
    155          IF( lk_iomput )  CALL iom_put( "Ironice", zironice(:,:) * 1.e+3 * rfactr * e3t(:,:,1,Kmm) * tmask(:,:,1) ) ! iron flux from ice 
    156          ! 
    157          DEALLOCATE( zironice ) 
     168         ! iron flux from ice 
     169         IF( lk_iomput ) & 
     170         & CALL iom_put( "Ironice", MAX( -0.99 * tr(:,:,1,jpfer,Kbb), (-1.*fmmflx(:,:)/1000._wp )*icefeinput*1.e+3*tmask(:,:,1)) ) 
    158171         ! 
    159172      ENDIF 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zbio.F90

    r13295 r14385  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p4zbio  *** 
    4    !! TOP :   PISCES bio-model 
     4   !! TOP :   PISCES biogeochemical model 
     5   !!         This module is for both PISCES and PISCES-QUOTA 
    56   !!====================================================================== 
    67   !! History :   1.0  !  2004     (O. Aumont) Original code 
    78   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
     9   !!             3.6  ! 2015 (O. Aumont) PISCES-QUOTA 
    810   !!---------------------------------------------------------------------- 
    911   !!   p4z_bio        :   computes the interactions between the different 
     
    5355      !! 
    5456      !! ** Purpose :   Ecosystem model in the whole ocean: computes the 
    55       !!              different interactions between the different compartments 
    56       !!              of PISCES 
     57      !!                different interactions between the different compartments 
     58      !!                of PISCES 
    5759      !! 
    5860      !! ** Method  : - ??? 
     
    6668      ! 
    6769      IF( ln_timing )   CALL timing_start('p4z_bio') 
    68       ! 
    69       !     ASSIGN THE SHEAR RATE THAT IS USED FOR AGGREGATION 
    70       !     OF PHYTOPLANKTON AND DETRITUS 
    7170 
     71      ! ASSIGN THE SHEAR RATE THAT IS USED FOR AGGREGATION 
     72      ! OF PHYTOPLANKTON AND DETRITUS. Shear rate is supposed to equal 1 
     73      ! in the mixed layer and 0.1 below the mixed layer. 
    7274      xdiss(:,:,:) = 1. 
    73 !!gm the use of nmld should be better here? 
    7475      DO_3D( 1, 1, 1, 1, 2, jpkm1 ) 
    75 !!gm  :  use nmln  and test on jk ...  less memory acces 
    7676         IF( gdepw(ji,jj,jk+1,Kmm) > hmld(ji,jj) )   xdiss(ji,jj,jk) = 0.01 
    7777      END_3D 
     
    8181      CALL p4z_fechem  ( kt, knt, Kbb, Kmm, Krhs )     ! Iron chemistry/scavenging 
    8282      ! 
    83       IF( ln_p4z ) THEN 
     83      IF( ln_p4z ) THEN  ! PISCES standard 
     84         ! Phytoplankton only sources/sinks terms 
    8485         CALL p4z_lim  ( kt, knt, Kbb, Kmm       )     ! co-limitations by the various nutrients 
    8586         CALL p4z_prod ( kt, knt, Kbb, Kmm, Krhs )     ! phytoplankton growth rate over the global ocean.  
    8687         !                                          ! (for each element : C, Si, Fe, Chl ) 
    8788         CALL p4z_mort ( kt,      Kbb,      Krhs )     ! phytoplankton mortality 
    88          !                                          ! zooplankton sources/sinks routines  
     89         ! zooplankton sources/sinks routines  
    8990         CALL p4z_micro( kt, knt, Kbb,      Krhs )     ! microzooplankton 
    90          CALL p4z_meso ( kt, knt, Kbb,      Krhs )     ! mesozooplankton 
    91       ELSE 
     91         CALL p4z_meso ( kt, knt, Kbb, Kmm, Krhs )     ! mesozooplankton 
     92      ELSE  ! PISCES-QUOTA 
     93         ! Phytoplankton only sources/sinks terms 
    9294         CALL p5z_lim  ( kt, knt, Kbb, Kmm       )     ! co-limitations by the various nutrients 
    9395         CALL p5z_prod ( kt, knt, Kbb, Kmm, Krhs )     ! phytoplankton growth rate over the global ocean.  
    9496         !                                          ! (for each element : C, Si, Fe, Chl ) 
    9597         CALL p5z_mort ( kt,      Kbb,      Krhs      )     ! phytoplankton mortality 
    96          !                                          ! zooplankton sources/sinks routines  
     98         !  zooplankton sources/sinks routines  
    9799         CALL p5z_micro( kt, knt, Kbb,      Krhs )           ! microzooplankton 
    98          CALL p5z_meso ( kt, knt, Kbb,     Krhs )           ! mesozooplankton 
     100         CALL p5z_meso ( kt, knt, Kbb, Kmm, Krhs )           ! mesozooplankton 
    99101      ENDIF 
    100102      ! 
     
    103105      CALL p4z_poc     ( kt, knt, Kbb, Kmm, Krhs )     ! Remineralization of organic particles 
    104106      ! 
     107      ! Ligand production. ln_ligand should be set .true. to activate 
    105108      IF( ln_ligand )  & 
    106109      & CALL p4z_ligand( kt, knt, Kbb,      Krhs ) 
     110 
     111      ! Update of the size of the different phytoplankton groups 
     112      sized(:,:,:) = MAX(1.0, sizeda(:,:,:) ) 
     113      sizen(:,:,:) = MAX(1.0, sizena(:,:,:) ) 
     114      IF (ln_p5z) THEN 
     115         sizep(:,:,:) = MAX(1.0, sizepa(:,:,:) ) 
     116      ENDIF 
    107117      !                                                             ! 
    108118      IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging) 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zfechem.F90

    r13472 r14385  
    3030   REAL(wp), PUBLIC ::   ligand       !: ligand concentration in the ocean  
    3131   REAL(wp), PUBLIC ::   kfep         !: rate constant for nanoparticle formation 
     32   REAL(wp), PUBLIC ::   scaveff      !: Fraction of scavenged iron that is considered as being subject to solubilization 
    3233 
    3334   !! * Substitutions 
     
    5455      ! 
    5556      INTEGER  ::   ji, jj, jk, jic, jn 
    56       REAL(wp) ::   zdep, zlam1a, zlam1b, zlamfac 
    57       REAL(wp) ::   zkeq, zfeequi, zfesatur, zfecoll, fe3sol 
    58       REAL(wp) ::   zdenom1, zscave, zaggdfea, zaggdfeb, zcoag 
    59       REAL(wp) ::   ztrc, zdust 
    60       REAL(wp) ::   zdenom2 
    61       REAL(wp) ::   zzFeL1, zzFeL2, zzFe2, zzFeP, zzFe3, zzstrn2 
    62       REAL(wp) ::   zrum, zcodel, zargu, zlight 
    63       REAL(wp) ::   zkox, zkph1, zkph2, zph, zionic, ztligand 
    64       REAL(wp) ::   za, zb, zc, zkappa1, zkappa2, za0, za1, za2 
    65       REAL(wp) ::   zxs, zfunc, zp, zq, zd, zr, zphi, zfff, zp3, zq2 
    66       REAL(wp) ::   ztfe, zoxy, zhplus, zxlam 
    67       REAL(wp) ::   zaggliga, zaggligb 
    68       REAL(wp) ::   dissol, zligco 
    69       REAL(wp) :: zrfact2 
     57      REAL(wp) ::   zlam1a, zlam1b 
     58      REAL(wp) ::   zkeq, zfesatur, zfecoll, fe3sol, zligco 
     59      REAL(wp) ::   zscave, zaggdfea, zaggdfeb, ztrc, zdust, zklight 
     60      REAL(wp) ::   ztfe, zhplus, zxlam, zaggliga, zaggligb 
     61      REAL(wp) ::   zrfact2 
    7062      CHARACTER (len=25) :: charout 
    71       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zTL1, zFe3, ztotlig, precip, zFeL1 
    72       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zcoll3d, zscav3d, zlcoll3d 
     63      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zTL1, zFe3, ztotlig, precip, precipno3, zFeL1 
     64      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zcoll3d, zscav3d, zlcoll3d, zprecip3d 
    7365      !!--------------------------------------------------------------------- 
    7466      ! 
    7567      IF( ln_timing )   CALL timing_start('p4z_fechem') 
    7668      ! 
     69      zFe3 (:,:,:) = 0. 
     70      zFeL1(:,:,:) = 0. 
     71      zTL1 (:,:,:) = 0. 
     72 
    7773      ! Total ligand concentration : Ligands can be chosen to be constant or variable 
    78       ! Parameterization from Tagliabue and Voelker (2011) 
     74      ! Parameterization from Pham and Ito (2018) 
    7975      ! ------------------------------------------------- 
    8076      IF( ln_ligvar ) THEN 
    81          ztotlig(:,:,:) =  0.09 * tr(:,:,:,jpdoc,Kbb) * 1E6 + ligand * 1E9 
     77         ztotlig(:,:,:) =  0.09 * 0.667 * tr(:,:,:,jpdoc,Kbb) * 1E6 + ligand * 1E9 + MAX(0., chemo2(:,:,:) - tr(:,:,:,jpoxy,Kbb) ) / 400.E-6 
    8278         ztotlig(:,:,:) =  MIN( ztotlig(:,:,:), 10. ) 
    8379      ELSE 
    8480        IF( ln_ligand ) THEN  ;   ztotlig(:,:,:) = tr(:,:,:,jplgw,Kbb) * 1E9 
    85         ELSE                  ;   ztotlig(:,:,:) = ligand * 1E9 
     81        ELSE                  ;   ztotlig(:,:,:) = ligand * 1E9  
    8682        ENDIF 
    8783      ENDIF 
     
    8985      ! ------------------------------------------------------------ 
    9086      !  from Aumont and Bopp (2006) 
    91       ! This model is based on one ligand and Fe'  
     87      ! This model is based on one ligand, Fe2+ and Fe3+  
    9288      ! Chemistry is supposed to be fast enough to be at equilibrium 
    9389      ! ------------------------------------------------------------ 
    9490      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    95          zTL1(ji,jj,jk)  = ztotlig(ji,jj,jk) 
    96          zkeq            = fekeq(ji,jj,jk) 
    97          zfesatur        = zTL1(ji,jj,jk) * 1E-9 
    98          ztfe            = tr(ji,jj,jk,jpfer,Kbb)  
    99          ! Fe' is the root of a 2nd order polynom 
    100          zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe )               & 
    101             &              + SQRT( ( 1. + zfesatur * zkeq - zkeq * ztfe )**2       & 
    102             &              + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 
    103          zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 
    104          zFeL1(ji,jj,jk) = MAX( 0., tr(ji,jj,jk,jpfer,Kbb) * 1E9 - zFe3(ji,jj,jk) ) 
     91          zTL1(ji,jj,jk)  = ztotlig(ji,jj,jk) 
     92          zkeq            = fekeq(ji,jj,jk) 
     93          zklight         = 4.77E-7 * etot(ji,jj,jk) * 0.5 / 10**-6.3 
     94          zfesatur        = zTL1(ji,jj,jk) * 1E-9 
     95          ztfe            = (1.0 + zklight) * tr(ji,jj,jk,jpfer,Kbb)  
     96          ! Fe' is the root of a 2nd order polynom 
     97          zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq + zklight + consfe3(ji,jj,jk)/10**-6.3 - zkeq * tr(ji,jj,jk,jpfer,Kbb) )               & 
     98             &              + SQRT( ( 1. + zfesatur * zkeq + zklight + consfe3(ji,jj,jk)/10**-6.3 - zkeq * tr(ji,jj,jk,jpfer,Kbb) )**2       & 
     99             &              + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 
     100          zFeL1(ji,jj,jk) = MAX( 0., tr(ji,jj,jk,jpfer,Kbb) - zFe3(ji,jj,jk) ) 
    105101      END_3D 
    106          ! 
    107  
     102      ! 
     103      plig(:,:,:) =  MAX( 0., ( zFeL1(:,:,:) / ( tr(:,:,:,jpfer,Kbb) + rtrn ) ) ) 
     104      ! 
    108105      zdust = 0.         ! if no dust available 
    109106      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     
    117114         &         + fesol(ji,jj,jk,5) / zhplus ) 
    118115         ! 
    119          zfeequi = zFe3(ji,jj,jk) * 1E-9 
    120116         zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 
    121117         ! precipitation of Fe3+, creation of nanoparticles 
    122          precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * 1E-9 - fe3sol ) ) * kfep * xstep 
     118         precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) - fe3sol ) ) * kfep * xstep * ( 1.0 - nitrfac(ji,jj,jk) )  
     119         ! Precipitation of Fe2+ due to oxidation by NO3 (Croot et al., 2019) 
     120         ! This occurs in anoxic waters only 
     121         precipno3(ji,jj,jk) = 2.0 * 130.0 * tr(ji,jj,jk,jpno3,Kbb) * nitrfac(ji,jj,jk) * xstep * zFe3(ji,jj,jk) 
    123122         ! 
    124123         ztrc   = ( tr(ji,jj,jk,jppoc,Kbb) + tr(ji,jj,jk,jpgoc,Kbb) + tr(ji,jj,jk,jpcal,Kbb) + tr(ji,jj,jk,jpgsi,Kbb) ) * 1.e6  
    125          IF( ll_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) & 
    126          &  * EXP( -gdept(ji,jj,jk,Kmm) / 540. ) 
    127          IF (ln_ligand) THEN 
    128             zxlam  = xlam1 * MAX( 1.E-3, EXP(-2 * etot(ji,jj,jk) / 10. ) * (1. - EXP(-2 * tr(ji,jj,jk,jpoxy,Kbb) / 100.E-6 ) )) 
    129          ELSE 
    130             zxlam  = xlam1 * 1.0 
    131          ENDIF 
    132          zlam1b = 3.e-5 + xlamdust * zdust + zxlam * ztrc 
    133          zscave = zfeequi * zlam1b * xstep 
    134  
    135          ! Compute the different ratios for scavenging of iron 
    136          ! to later allocate scavenged iron to the different organic pools 
    137          ! --------------------------------------------------------- 
    138          zdenom1 = zxlam * tr(ji,jj,jk,jppoc,Kbb) / zlam1b 
    139          zdenom2 = zxlam * tr(ji,jj,jk,jpgoc,Kbb) / zlam1b 
    140  
    141          !  Increased scavenging for very high iron concentrations found near the coasts  
    142          !  due to increased lithogenic particles and let say it is unknown processes (precipitation, ...) 
    143          !  ----------------------------------------------------------- 
    144          zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. ) 
    145          zlamfac = MIN( 1.  , zlamfac ) 
    146          zdep    = MIN( 1., 1000. / gdept(ji,jj,jk,Kmm) ) 
    147          zcoag   = 1E-4 * ( 1. - zlamfac ) * zdep * xstep * tr(ji,jj,jk,jpfer,Kbb) 
     124         ztrc = MAX( rtrn, ztrc ) 
     125         IF( ll_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) 
     126         zxlam  = MAX( 1.E-3, (1. - EXP(-2 * tr(ji,jj,jk,jpoxy,Kbb) / 100.E-6 ) )) 
     127         zlam1b = 3.e-5 + ( xlamdust * zdust + xlam1 * ztrc ) * zxlam 
     128         zscave = zFe3(ji,jj,jk) * zlam1b * xstep 
    148129 
    149130         !  Compute the coagulation of colloidal iron. This parameterization  
     
    151132         !  It requires certainly some more work as it is very poorly constrained. 
    152133         !  ---------------------------------------------------------------- 
    153          zlam1a   = ( 0.369  * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 102.4  * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk)    & 
    154              &      + ( 114.   * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) ) 
     134         zlam1a   = ( 12.0  * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 9.05  * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk)    & 
     135             &    + ( 2.49  * tr(ji,jj,jk,jppoc,Kbb) )     & 
     136             &    + ( 127.8 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 725.7 * tr(ji,jj,jk,jppoc,Kbb) ) 
    155137         zaggdfea = zlam1a * xstep * zfecoll 
    156          ! 
    157          zlam1b   = 3.53E3 * tr(ji,jj,jk,jpgoc,Kbb) * xdiss(ji,jj,jk) 
     138               ! 
     139         zlam1b   = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * tr(ji,jj,jk,jpgoc,Kbb) 
    158140         zaggdfeb = zlam1b * xstep * zfecoll 
     141 
    159142         ! 
    160143         tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zscave - zaggdfea - zaggdfeb & 
    161          &                     - zcoag - precip(ji,jj,jk) 
    162          tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zscave * zdenom1 + zaggdfea 
    163          tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zscave * zdenom2 + zaggdfeb 
    164          zscav3d(ji,jj,jk)   = zscave 
    165          zcoll3d(ji,jj,jk)   = zaggdfea + zaggdfeb 
     144         &                       - precip(ji,jj,jk) - precipno3(ji,jj,jk) 
     145 
     146         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zscave * scaveff * tr(ji,jj,jk,jppoc,Kbb) / ztrc 
     147         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zscave * scaveff * tr(ji,jj,jk,jppoc,Kbb) / ztrc 
     148 
     149 
     150          ! Precipitated iron is supposed to be permanently lost. 
     151          ! Scavenged iron is supposed to be released back to seawater 
     152          ! when POM is solubilized. This is highly uncertain as probably 
     153          ! a significant part of it may be rescavenged back onto  
     154          ! the particles. An efficiency factor is applied that is read 
     155          ! in the namelist.  
     156          ! See for instance Tagliabue et al. (2019). 
     157          ! Aggregated FeL is considered as biogenic Fe as it  
     158          ! probably remains  complexed when the particle is solubilized. 
     159          ! ------------------------------------------------------------- 
     160          tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zaggdfea 
     161          tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zaggdfeb 
     162          ! 
     163          zscav3d(ji,jj,jk)   = zscave  
     164          zcoll3d(ji,jj,jk)   = zaggdfea + zaggdfeb 
     165          zprecip3d(ji,jj,jk) = precip(ji,jj,jk) + precipno3(ji,jj,jk) 
    166166         ! 
    167167      END_3D 
     
    174174         ! 
    175175         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    176             zlam1a   = ( 0.369  * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 102.4  * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk)    & 
    177                 &    + ( 114.   * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) ) 
    178             ! 
    179             zlam1b   = 3.53E3 *   tr(ji,jj,jk,jpgoc,Kbb) * xdiss(ji,jj,jk) 
    180             zligco   = 0.5 * tr(ji,jj,jk,jplgw,Kmm) 
    181             zaggliga = zlam1a * xstep * zligco 
    182             zaggligb = zlam1b * xstep * zligco 
    183             tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) - zaggliga - zaggligb 
    184             zlcoll3d(ji,jj,jk)  = zaggliga + zaggligb 
     176             ! Coagulation of ligands due to various processes (Brownian, shear, diff. sedimentation 
     177             ! Coefficients are taken from p4zagg 
     178             ! ------------------------------------------------------------------------------------- 
     179             zlam1a   = ( 12.0  * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 9.05  * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk)    & 
     180                 &    + ( 2.49  * tr(ji,jj,jk,jppoc,Kbb) )     & 
     181                 &    + ( 127.8 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 725.7 * tr(ji,jj,jk,jppoc,Kbb) ) 
     182             ! 
     183             zlam1b   = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * tr(ji,jj,jk,jpgoc,Kbb) 
     184             ! 50% of the ligands are supposed to be in the colloidal size fraction 
     185             ! as for FeL 
     186             zligco   = 0.5 * tr(ji,jj,jk,jplgw,Kbb) 
     187             zaggliga = zlam1a * xstep * zligco  
     188             zaggligb = zlam1b * xstep * zligco 
     189             ! 
     190             tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs)  - zaggliga - zaggligb 
     191             zlcoll3d(ji,jj,jk)  = zaggliga + zaggligb 
    185192         END_3D 
    186          ! 
    187193         plig(:,:,:) =  MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( tr(:,:,:,jpfer,Kbb) +rtrn ) ) ) 
    188194         ! 
     
    190196      !  Output of some diagnostics variables 
    191197      !     --------------------------------- 
    192       IF( lk_iomput ) THEN 
    193          IF( knt == nrdttrc ) THEN 
    194             zrfact2 = 1.e3 * rfact2r  ! conversion from mol/L/timestep into mol/m3/s 
    195             IF( iom_use("Fe3")  )  THEN 
    196                zFe3(:,:,jpk) = 0.  ;  CALL iom_put("Fe3" , zFe3(:,:,:) * tmask(:,:,:) )   ! Fe3+ 
    197             ENDIF 
    198             IF( iom_use("FeL1") )  THEN 
    199               zFeL1(:,:,jpk) = 0.  ;  CALL iom_put("FeL1", zFeL1(:,:,:) * tmask(:,:,:) )   ! FeL1 
    200             ENDIF 
    201             IF( iom_use("TL1")  )  THEN 
    202               zTL1(:,:,jpk) = 0.   ;  CALL iom_put("TL1" , zTL1(:,:,:) * tmask(:,:,:) )   ! TL1 
    203             ENDIF 
    204             IF( iom_use("Totlig") )  CALL iom_put("Totlig" , ztotlig(:,:,:)       * tmask(:,:,:) )   ! TL 
    205             IF( iom_use("Biron")  )  CALL iom_put("Biron"  , biron  (:,:,:)  * 1e9 * tmask(:,:,:) )   ! biron 
    206             IF( iom_use("FESCAV") )  THEN 
    207                zscav3d (:,:,jpk) = 0.  ;  CALL iom_put("FESCAV" , zscav3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
    208             ENDIF 
    209             IF( iom_use("FECOLL") ) THEN 
    210                zcoll3d (:,:,jpk) = 0.  ;   CALL iom_put("FECOLL" , zcoll3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
    211             ENDIF 
    212             IF( iom_use("LGWCOLL")) THEN 
    213                zlcoll3d(:,:,jpk) = 0.  ;  CALL iom_put("LGWCOLL", zlcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 
    214             ENDIF 
    215           ENDIF 
     198      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
     199         zrfact2 = 1.e3 * rfact2r  ! conversion from mol/L/timestep into mol/m3/s 
     200         IF( iom_use("Fe3")    )  CALL iom_put("Fe3"    , zFe3   (:,:,:)       * tmask(:,:,:) )   ! Fe3+ 
     201         IF( iom_use("FeL1")   )  CALL iom_put("FeL1"   , zFeL1  (:,:,:)       * tmask(:,:,:) )   ! FeL1 
     202         IF( iom_use("TL1")    )  CALL iom_put("TL1"    , zTL1   (:,:,:)       * tmask(:,:,:) )   ! TL1 
     203         IF( iom_use("Totlig") )  CALL iom_put("Totlig" , ztotlig(:,:,:)       * tmask(:,:,:) )   ! TL 
     204         IF( iom_use("Biron")  )  CALL iom_put("Biron"  , biron  (:,:,:)  * 1e9 * tmask(:,:,:) )   ! biron 
     205         IF( iom_use("FESCAV") )  CALL iom_put("FESCAV" , zscav3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
     206         IF( iom_use("FECOLL") )  CALL iom_put("FECOLL" , zcoll3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
     207         IF( iom_use("FEPREC") )  CALL iom_put("FEPREC" , zprecip3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
     208         IF( iom_use("LGWCOLL"))  CALL iom_put("LGWCOLL", zlcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 
    216209      ENDIF 
    217210 
     
    241234      INTEGER ::   ios   ! Local integer  
    242235      !! 
    243       NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep  
     236      NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep, scaveff  
    244237      !!---------------------------------------------------------------------- 
    245238      ! 
     
    263256         WRITE(numout,*) '      ligand concentration in the ocean         ligand       =', ligand 
    264257         WRITE(numout,*) '      rate constant for nanoparticle formation  kfep         =', kfep 
     258         WRITE(numout,*) '      Scavenged iron that is added to POFe      scaveff      =', scaveff 
    265259      ENDIF 
    266260      !  
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zflx.F90

    r13295 r14385  
    336336      IF( ln_presatm ) THEN 
    337337         CALL fld_read( kt, 1, sf_patm )               !* input Patm provided at kt + 1/2 
    338          patm(:,:) = sf_patm(1)%fnow(:,:,1)                        ! atmospheric pressure 
     338         patm(:,:) = sf_patm(1)%fnow(:,:,1)/101325.0     ! atmospheric pressure 
    339339      ENDIF 
    340340      ! 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zint.F90

    r14086 r14385  
    11MODULE p4zint 
    2    !!====================================================================== 
     2   !!========================================================================= 
    33   !!                         ***  MODULE p4zint  *** 
    44   !! TOP :   PISCES interpolation and computation of various accessory fields 
    5    !!====================================================================== 
     5   !!========================================================================= 
    66   !! History :   1.0  !  2004-03 (O. Aumont) Original code 
    77   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
     
    3838      ! 
    3939      INTEGER  :: ji, jj                 ! dummy loop indices 
    40       REAL(wp) :: zvar                   ! local variable 
     40      REAL(wp) :: zrum, zcodel, zargu, zvar 
    4141      !!--------------------------------------------------------------------- 
    4242      ! 
     
    4545      ! Computation of phyto and zoo metabolic rate 
    4646      ! ------------------------------------------- 
    47       tgfunc (:,:,:) = EXP( 0.063913 * ts(:,:,:,jp_tem,Kmm) ) 
    48       tgfunc2(:,:,:) = EXP( 0.07608  * ts(:,:,:,jp_tem,Kmm) ) 
     47      ! Generic temperature dependence (Eppley, 1972) 
     48      tgfunc (:,:,:) = EXP( 0.0631 * ts(:,:,:,jp_tem,Kmm) ) 
     49      ! Temperature dependence of mesozooplankton (Buitenhuis et al. (2005)) 
     50      tgfunc2(:,:,:) = EXP( 0.0761 * ts(:,:,:,jp_tem,Kmm) ) 
     51 
    4952 
    5053      ! Computation of the silicon dependant half saturation  constant for silica uptake 
    51       ! --------------------------------------------------- 
     54      ! This is based on an old study by Pondaven et al. (1998) 
     55      ! -------------------------------------------------------------------------------- 
    5256      DO_2D( 1, 1, 1, 1 ) 
    5357         zvar = tr(ji,jj,1,jpsil,Kbb) * tr(ji,jj,1,jpsil,Kbb) 
     
    5559      END_2D 
    5660      ! 
     61      ! At the end of each year, the half saturation constant for silica is  
     62      ! updated as this is based on the highest concentration reached over  
     63      ! the year 
     64      ! ------------------------------------------------------------------- 
    5765      IF( nday_year == nyear_len(1) ) THEN 
    5866         xksi   (:,:) = xksimax(:,:) 
    5967         xksimax(:,:) = 0._wp 
    6068      ENDIF 
     69      ! 
     70      ! compute the day length depending on latitude and the day 
     71      ! Astronomical parameterization taken from HAMOCC3 
     72      zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 
     73      zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  ) 
     74 
     75      ! day length in hours 
     76      strn(:,:) = 0. 
     77      DO jj = 1, jpj 
     78         DO ji = 1, jpi 
     79            zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
     80            zargu = MAX( -1., MIN(  1., zargu ) ) 
     81            strn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
     82         END DO 
     83      END DO 
    6184      ! 
    6285      IF( ln_timing )   CALL timing_stop('p4z_int') 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zlim.F90

    r13434 r14385  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p4zlim  *** 
    4    !! TOP :   PISCES  
     4   !! TOP :   Computes the nutrient limitation terms of phytoplankton 
    55   !!====================================================================== 
    66   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    1414   USE trc             ! Tracers defined 
    1515   USE sms_pisces      ! PISCES variables 
    16    USE iom             !  I/O manager 
     16   USE iom             ! I/O manager 
    1717 
    1818   IMPLICIT NONE 
    1919   PRIVATE 
    2020 
    21    PUBLIC p4z_lim     
    22    PUBLIC p4z_lim_init     
    23    PUBLIC p4z_lim_alloc 
     21   PUBLIC p4z_lim           ! called in p4zbio.F90  
     22   PUBLIC p4z_lim_init      ! called in trcsms_pisces.F90  
     23   PUBLIC p4z_lim_alloc     ! called in trcini_pisces.F90 
    2424 
    2525   !! * Shared module variables 
    2626   REAL(wp), PUBLIC ::  concnno3    !:  NO3, PO4 half saturation    
    2727   REAL(wp), PUBLIC ::  concdno3    !:  Phosphate half saturation for diatoms   
    28    REAL(wp), PUBLIC ::  concnnh4    !:  NH4 half saturation for phyto   
     28   REAL(wp), PUBLIC ::  concnnh4    !:  NH4 half saturation for nanophyto   
    2929   REAL(wp), PUBLIC ::  concdnh4    !:  NH4 half saturation for diatoms 
    3030   REAL(wp), PUBLIC ::  concnfer    !:  Iron half saturation for nanophyto  
     
    4646 
    4747   !!* Phytoplankton limitation terms 
    48    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanono3   !: ??? 
    49    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatno3   !: ??? 
    50    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanonh4   !: ??? 
    51    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatnh4   !: ??? 
    52    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanopo4   !: ??? 
    53    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatpo4   !: ??? 
    54    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphy    !: ??? 
    55    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdia    !: ??? 
    56    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimnfe    !: ??? 
    57    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdfe    !: ??? 
    58    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimsi     !: ??? 
    59    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbac    !: ?? 
    60    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbacl   !: ?? 
    61    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concdfe    !: ??? 
    62    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concnfe    !: ??? 
    63  
    64    ! Coefficient for iron limitation 
     48   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanono3   !: Nanophyto limitation by NO3 
     49   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatno3   !: Diatoms limitation by NO3 
     50   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanonh4   !: Nanophyto limitation by NH4 
     51   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatnh4   !:  Diatoms limitation by NH4 
     52   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanopo4   !: Nanophyto limitation by PO4 
     53   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatpo4   !: Diatoms limitation by PO4 
     54   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphy    !: Nutrient limitation term of nanophytoplankton 
     55   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdia    !: Nutrient limitation term of diatoms 
     56   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimnfe    !: Nanophyto limitation by Iron 
     57   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdfe    !: Diatoms limitation by iron 
     58   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimsi     !: Diatoms limitation by Si 
     59   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbac    !: Bacterial limitation term 
     60   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbacl   !: Bacterial limitation term 
     61   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concdfe    !: Limitation of diatoms uptake of Fe 
     62   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concnfe    !: Limitation of Nano uptake of Fe 
     63   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanofer   !: Limitation of Fe uptake by nanophyto 
     64   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatfer   !: Limitation of Fe uptake by diatoms 
     65   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xqfuncfecd, xqfuncfecn 
     66 
     67   ! Coefficient for iron limitation following Flynn and Hipkin (1999) 
    6568   REAL(wp) ::  xcoef1   = 0.0016  / 55.85   
    6669   REAL(wp) ::  xcoef2   = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 
     
    8184      !! 
    8285      !! ** Purpose :   Compute the co-limitations by the various nutrients 
    83       !!              for the various phytoplankton species 
    84       !! 
    85       !! ** Method  : - ??? 
     86      !!                for the various phytoplankton species 
     87      !! 
     88      !! ** Method  : - Limitation follows the Liebieg law of the minimum 
     89      !!              - Monod approach for N, P and Si. Quota approach  
     90      !!                for Iron 
    8691      !!--------------------------------------------------------------------- 
    8792      INTEGER, INTENT(in)  :: kt, knt 
     
    8994      ! 
    9095      INTEGER  ::   ji, jj, jk 
    91       REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zno3, zferlim 
    92       REAL(wp) ::   zconcd, zconcd2, zconcn, zconcn2 
     96      REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zcoef 
    9397      REAL(wp) ::   z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 
    94       REAL(wp) ::   zdenom, zratio, zironmin 
     98      REAL(wp) ::   zdenom, zratio, zironmin, zbactno3, zbactnh4 
    9599      REAL(wp) ::   zconc1d, zconc1dnh4, zconc0n, zconc0nnh4    
     100      REAL(wp) ::   fananof, fadiatf, znutlim, zfalim 
     101      REAL(wp) ::   znutlimtot, zlimno3, zlimnh4, zbiron 
    96102      !!--------------------------------------------------------------------- 
    97103      ! 
    98104      IF( ln_timing )   CALL timing_start('p4z_lim') 
     105      ! 
     106      sizena(:,:,:) = 1.0  ;  sizeda(:,:,:) = 1.0 
    99107      ! 
    100108      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    101109          
    102          ! Tuning of the iron concentration to a minimum level that is set to the detection limit 
    103          !------------------------------------- 
    104          zno3    = tr(ji,jj,jk,jpno3,Kbb) / 40.e-6 
    105          zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 
    106          zferlim = MIN( zferlim, 7e-11 ) 
    107          tr(ji,jj,jk,jpfer,Kbb) = MAX( tr(ji,jj,jk,jpfer,Kbb), zferlim ) 
    108  
    109110         ! Computation of a variable Ks for iron on diatoms taking into account 
    110111         ! that increasing biomass is made of generally bigger cells 
     112         ! The allometric relationship is classical. 
    111113         !------------------------------------------------ 
    112          zconcd   = MAX( 0.e0 , tr(ji,jj,jk,jpdia,Kbb) - xsizedia ) 
    113          zconcd2  = tr(ji,jj,jk,jpdia,Kbb) - zconcd 
    114          zconcn   = MAX( 0.e0 , tr(ji,jj,jk,jpphy,Kbb) - xsizephy ) 
    115          zconcn2  = tr(ji,jj,jk,jpphy,Kbb) - zconcn 
    116114         z1_trbphy   = 1. / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 
    117115         z1_trbdia   = 1. / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 
    118116 
    119          concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trbdia ) 
    120          zconc1d           = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trbdia ) 
    121          zconc1dnh4        = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trbdia ) 
    122  
    123          concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trbphy ) 
    124          zconc0n           = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trbphy ) 
    125          zconc0nnh4        = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 
    126  
    127          ! Michaelis-Menten Limitation term for nutrients Small bacteria 
    128          ! ------------------------------------------------------------- 
    129          zdenom = 1. /  ( concbno3 * concbnh4 + concbnh4 * tr(ji,jj,jk,jpno3,Kbb) + concbno3 * tr(ji,jj,jk,jpnh4,Kbb) ) 
    130          xnanono3(ji,jj,jk) = tr(ji,jj,jk,jpno3,Kbb) * concbnh4 * zdenom 
    131          xnanonh4(ji,jj,jk) = tr(ji,jj,jk,jpnh4,Kbb) * concbno3 * zdenom 
    132          ! 
    133          zlim1    = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 
    134          zlim2    = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concbnh4 ) 
    135          zlim3    = tr(ji,jj,jk,jpfer,Kbb) / ( concbfe + tr(ji,jj,jk,jpfer,Kbb) ) 
    136          zlim4    = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc   + tr(ji,jj,jk,jpdoc,Kbb) ) 
    137          xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
    138          xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 
    139  
    140          ! Michaelis-Menten Limitation term for nutrients Small flagellates 
    141          ! ----------------------------------------------- 
    142          zdenom = 1. /  ( zconc0n * zconc0nnh4 + zconc0nnh4 * tr(ji,jj,jk,jpno3,Kbb) + zconc0n * tr(ji,jj,jk,jpnh4,Kbb) ) 
    143          xnanono3(ji,jj,jk) = tr(ji,jj,jk,jpno3,Kbb) * zconc0nnh4 * zdenom 
    144          xnanonh4(ji,jj,jk) = tr(ji,jj,jk,jpnh4,Kbb) * zconc0n    * zdenom 
    145          ! 
    146          zlim1    = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 
    147          zlim2    = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0nnh4 ) 
    148          zratio   = tr(ji,jj,jk,jpnfe,Kbb) * z1_trbphy  
    149          zironmin = xcoef1 * tr(ji,jj,jk,jpnch,Kbb) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 
    150          zlim3    = MAX( 0.,( zratio - zironmin ) / qnfelim ) 
    151          xnanopo4(ji,jj,jk) = zlim2 
    152          xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 
    153          xlimphy (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
    154          ! 
    155          !   Michaelis-Menten Limitation term for nutrients Diatoms 
    156          !   ---------------------------------------------- 
    157          zdenom   = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * tr(ji,jj,jk,jpno3,Kbb) + zconc1d * tr(ji,jj,jk,jpnh4,Kbb) ) 
    158          xdiatno3(ji,jj,jk) = tr(ji,jj,jk,jpno3,Kbb) * zconc1dnh4 * zdenom 
    159          xdiatnh4(ji,jj,jk) = tr(ji,jj,jk,jpnh4,Kbb) * zconc1d    * zdenom 
    160          ! 
    161          zlim1    = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 
    162          zlim2    = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc1dnh4  ) 
    163          zlim3    = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) + rtrn ) 
    164          zratio   = tr(ji,jj,jk,jpdfe,Kbb) * z1_trbdia 
    165          zironmin = xcoef1 * tr(ji,jj,jk,jpdch,Kbb) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 
    166          zlim4    = MAX( 0., ( zratio - zironmin ) / qdfelim ) 
    167          xdiatpo4(ji,jj,jk) = zlim2 
    168          xlimdfe (ji,jj,jk) = MIN( 1., zlim4 ) 
    169          xlimdia (ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 ) 
    170          xlimsi  (ji,jj,jk) = MIN( zlim1, zlim2, zlim4 ) 
     117         concnfe(ji,jj,jk) = concnfer * sizen(ji,jj,jk)**0.81 
     118         zconc0n           = concnno3 * sizen(ji,jj,jk)**0.81 
     119         zconc0nnh4        = concnnh4 * sizen(ji,jj,jk)**0.81 
     120 
     121         concdfe(ji,jj,jk) = concdfer * sized(ji,jj,jk)**0.81  
     122         zconc1d           = concdno3 * sized(ji,jj,jk)**0.81  
     123         zconc1dnh4        = concdnh4 * sized(ji,jj,jk)**0.81   
     124 
     125          ! Computation of the optimal allocation parameters 
     126          ! Based on the different papers by Pahlow et al., and  
     127          ! Smith et al. 
     128          ! --------------------------------------------------- 
     129 
     130          ! Nanophytoplankton 
     131          zbiron = ( 75.0 * ( 1.0 - plig(ji,jj,jk) ) + plig(ji,jj,jk) ) * biron(ji,jj,jk) 
     132          znutlim = zbiron / concnfe(ji,jj,jk) 
     133          fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     134 
     135          ! Diatoms 
     136          znutlim = zbiron / concdfe(ji,jj,jk) 
     137          fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     138 
     139          ! Michaelis-Menten Limitation term by nutrients of 
     140          ! heterotrophic bacteria 
     141          ! ------------------------------------------------- 
     142          zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concbno3 + tr(ji,jj,jk,jpnh4,Kbb) ) 
     143          zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) ) 
     144          znutlimtot = ( tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) / ( concbno3 + tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) 
     145          zbactnh4 = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     146          zbactno3 = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     147          ! 
     148          zlim1    = zbactno3 + zbactnh4 
     149          zlim2    = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concbnh4 ) 
     150          zlim3    = tr(ji,jj,jk,jpfer,Kbb) / ( concbfe + tr(ji,jj,jk,jpfer,Kbb) ) 
     151          zlim4    = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc   + tr(ji,jj,jk,jpdoc,Kbb) ) 
     152          ! Xlimbac is used for DOC solubilization whereas xlimbacl 
     153          ! is used for all the other bacterial-dependent terms 
     154          ! ------------------------------------------------------- 
     155          xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
     156          xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 
     157 
     158          ! Michaelis-Menten Limitation term by nutrients: Nanophyto 
     159          ! Optimal parameterization by Smith and Pahlow series of  
     160          ! papers is used. Optimal allocation is supposed independant 
     161          ! for all nutrients.  
     162          ! -------------------------------------------------------- 
     163 
     164          ! Limitation of Fe uptake (Quota formalism) 
     165          zfalim = (1.-fananof) / fananof 
     166          xnanofer(ji,jj,jk) = (1. - fananof) * zbiron / ( zbiron + zfalim * concnfe(ji,jj,jk) ) 
     167 
     168          ! Limitation of nanophytoplankton growth 
     169          zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc0n + tr(ji,jj,jk,jpnh4,Kbb) ) 
     170          zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc0n + tr(ji,jj,jk,jpno3,Kbb) ) 
     171          znutlimtot = ( tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) / ( zconc0n + tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) 
     172          xnanonh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     173          xnanono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     174          ! 
     175          zlim1    = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 
     176          zlim2    = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0nnh4 ) 
     177          zratio   = tr(ji,jj,jk,jpnfe,Kbb) * z1_trbphy  
     178 
     179          ! The minimum iron quota depends on the size of PSU, respiration 
     180          ! and the reduction of nitrate following the parameterization  
     181          ! proposed by Flynn and Hipkin (1999) 
     182          zironmin = xcoef1 * tr(ji,jj,jk,jpnch,Kbb) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 
     183          xqfuncfecn(ji,jj,jk) = zironmin + qnfelim 
     184          zlim3    = MAX( 0.,( zratio - zironmin ) / qnfelim ) 
     185          xnanopo4(ji,jj,jk) = zlim2 
     186          xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 
     187          xlimphy (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
     188                
     189          !   Michaelis-Menten Limitation term by nutrients : Diatoms 
     190          !   ------------------------------------------------------- 
     191          ! Limitation of Fe uptake (Quota formalism) 
     192          zfalim = (1.-fadiatf) / fadiatf 
     193          xdiatfer(ji,jj,jk) = (1. - fadiatf) * zbiron / ( zbiron + zfalim * concdfe(ji,jj,jk) ) 
     194 
     195          ! Limitation of diatoms growth 
     196          zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc1d + tr(ji,jj,jk,jpnh4,Kbb) ) 
     197          zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc1d + tr(ji,jj,jk,jpno3,Kbb) ) 
     198          znutlimtot = ( tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) / ( zconc1d + tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) 
     199          xdiatnh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn )  
     200          xdiatno3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     201          ! 
     202          zlim1    = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 
     203          zlim2    = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc1dnh4  ) 
     204          zlim3    = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) ) 
     205          zratio   = tr(ji,jj,jk,jpdfe,Kbb) * z1_trbdia 
     206 
     207          ! The minimum iron quota depends on the size of PSU, respiration 
     208          ! and the reduction of nitrate following the parameterization  
     209          ! proposed by Flynn and Hipkin (1999) 
     210          zironmin = xcoef1 * tr(ji,jj,jk,jpdch,Kbb) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 
     211          xqfuncfecd(ji,jj,jk) = zironmin + qdfelim 
     212          zlim4    = MAX( 0., ( zratio - zironmin ) / qdfelim ) 
     213          xdiatpo4(ji,jj,jk) = zlim2 
     214          xlimdfe (ji,jj,jk) = MIN( 1., zlim4 ) 
     215          xlimdia (ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 ) 
     216          xlimsi  (ji,jj,jk) = MIN( zlim1, zlim2, zlim4 ) 
    171217      END_3D 
    172218 
     219 
     220      ! Size estimation of phytoplankton based on total biomass 
     221      ! Assumes that larger biomass implies addition of larger cells 
     222      ! ------------------------------------------------------------ 
     223      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     224         zcoef = tr(ji,jj,jk,jpphy,Kbb) - MIN(xsizephy, tr(ji,jj,jk,jpphy,Kbb) ) 
     225         sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef ) 
     226         zcoef = tr(ji,jj,jk,jpdia,Kbb) - MIN(xsizedia, tr(ji,jj,jk,jpdia,Kbb) ) 
     227         sizeda(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 
     228      END_3D 
     229 
     230 
    173231      ! Compute the fraction of nanophytoplankton that is made of calcifiers 
     232      ! This is a purely adhoc formulation described in Aumont et al. (2015) 
     233      ! This fraction depends on nutrient limitation, light, temperature 
    174234      ! -------------------------------------------------------------------- 
    175235      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    176          zlim1 =  ( tr(ji,jj,jk,jpno3,Kbb) * concnnh4 + tr(ji,jj,jk,jpnh4,Kbb) * concnno3 )    & 
    177             &   / ( concnno3 * concnnh4 + concnnh4 * tr(ji,jj,jk,jpno3,Kbb) + concnno3 * tr(ji,jj,jk,jpnh4,Kbb) )  
     236         zlim1  = xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk)  
    178237         zlim2  = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concnnh4 ) 
    179          zlim3  = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) +  5.E-11   ) 
    180          ztem1  = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) ) 
     238         zlim3  = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) +  6.E-11   ) 
     239         ztem1  = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) + 1.8) 
    181240         ztem2  = ts(ji,jj,jk,jp_tem,Kmm) - 10. 
    182241         zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) )  
    183          zetot2 = 30. / ( 30. + etot_ndcy(ji,jj,jk) )  
     242         zetot2 = 30. / ( 30.0 + etot_ndcy(ji,jj,jk) ) 
    184243 
    185244         xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 )                  & 
     
    194253      ! 
    195254      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    196          ! denitrification factor computed from O2 levels 
     255        ! denitrification factor computed from O2 levels 
     256         ! This factor diagnoses below which level of O2 denitrification 
     257         ! is active 
    197258         nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - tr(ji,jj,jk,jpoxy,Kbb) )    & 
    198259            &                                / ( oxymin + tr(ji,jj,jk,jpoxy,Kbb) )  ) 
    199260         nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 
    200261         ! 
    201          ! denitrification factor computed from NO3 levels 
     262         ! redox factor computed from NO3 levels 
     263         ! This factor diagnoses below which level of NO3 additional redox 
     264         ! reactions are taking place. 
    202265         nitrfac2(ji,jj,jk) = MAX( 0.e0,       ( 1.E-6 - tr(ji,jj,jk,jpno3,Kbb) )  & 
    203266            &                                / ( 1.E-6 + tr(ji,jj,jk,jpno3,Kbb) ) ) 
     
    211274        CALL iom_put( "LNFe"   , xlimnfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    212275        CALL iom_put( "LDFe"   , xlimdfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     276        CALL iom_put( "SIZEN"  , sizen  (:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     277        CALL iom_put( "SIZED"  , sized  (:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    213278      ENDIF 
    214279      ! 
     
    222287      !!                  ***  ROUTINE p4z_lim_init  *** 
    223288      !! 
    224       !! ** Purpose :   Initialization of nutrient limitation parameters 
    225       !! 
    226       !! ** Method  :   Read the nampislim namelist and check the parameters 
     289      !! ** Purpose :   Initialization of the nutrient limitation parameters 
     290      !! 
     291      !! ** Method  :   Read the namp4zlim namelist and check the parameters 
    227292      !!      called at the first timestep (nittrc000) 
    228293      !! 
    229       !! ** input   :   Namelist nampislim 
     294      !! ** input   :   Namelist namp4zlim 
    230295      !! 
    231296      !!---------------------------------------------------------------------- 
    232297      INTEGER ::   ios   ! Local integer 
    233       ! 
     298 
     299      ! Namelist block 
    234300      NAMELIST/namp4zlim/ concnno3, concdno3, concnnh4, concdnh4, concnfer, concdfer, concbfe,   & 
    235301         &                concbno3, concbnh4, xsizedia, xsizephy, xsizern, xsizerd,          &  
     
    248314902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zlim in configuration namelist' ) 
    249315      IF(lwm) WRITE( numonp, namp4zlim ) 
     316 
    250317      ! 
    251318      IF(lwp) THEN                         ! control print 
     
    287354      !!---------------------------------------------------------------------- 
    288355      !!                     ***  ROUTINE p5z_lim_alloc  *** 
     356      !!  
     357      !            Allocation of the arrays used in this module 
    289358      !!---------------------------------------------------------------------- 
    290359      USE lib_mpp , ONLY: ctl_stop 
     
    295364         &      xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk),       & 
    296365         &      xnanopo4(jpi,jpj,jpk), xdiatpo4(jpi,jpj,jpk),       & 
     366         &      xnanofer(jpi,jpj,jpk), xdiatfer(jpi,jpj,jpk),       & 
    297367         &      xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk),       & 
    298368         &      xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk),       & 
    299369         &      xlimbac (jpi,jpj,jpk), xlimbacl(jpi,jpj,jpk),       & 
    300370         &      concnfe (jpi,jpj,jpk), concdfe (jpi,jpj,jpk),       & 
     371         &      xqfuncfecn(jpi,jpj,jpk), xqfuncfecd(jpi,jpj,jpk),   & 
    301372         &      xlimsi  (jpi,jpj,jpk), STAT=p4z_lim_alloc ) 
    302373      ! 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zmeso.F90

    r13295 r14385  
    88   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Quota model for iron 
    99   !!---------------------------------------------------------------------- 
    10    !!   p4z_meso       : Compute the sources/sinks for mesozooplankton 
    11    !!   p4z_meso_init  : Initialization of the parameters for mesozooplankton 
     10   !!   p4z_meso        : Compute the sources/sinks for mesozooplankton 
     11   !!   p4z_meso_init   : Initialization of the parameters for mesozooplankton 
     12   !!   p4z_meso_alloc  : Allocate variables for mesozooplankton  
    1213   !!---------------------------------------------------------------------- 
    1314   USE oce_trc         ! shared variables between ocean and passive tracers 
     
    2324   PUBLIC   p4z_meso              ! called in p4zbio.F90 
    2425   PUBLIC   p4z_meso_init         ! called in trcsms_pisces.F90 
    25  
     26   PUBLIC   p4z_meso_alloc        ! called in trcini_pisces.F90 
     27 
     28   !! * Shared module variables 
    2629   REAL(wp), PUBLIC ::  part2        !: part of calcite not dissolved in mesozoo guts 
    2730   REAL(wp), PUBLIC ::  xpref2d      !: mesozoo preference for diatoms 
     
    4245   REAL(wp), PUBLIC ::  epsher2      !: growth efficiency 
    4346   REAL(wp), PUBLIC ::  epsher2min   !: minimum growth efficiency at high food for grazing 2 
     47   REAL(wp), PUBLIC ::  xsigma2      !: Width of the predation window 
     48   REAL(wp), PUBLIC ::  xsigma2del   !: Maximum width of the predation window at low food density 
    4449   REAL(wp), PUBLIC ::  grazflux     !: mesozoo flux feeding rate 
     50   REAL(wp), PUBLIC ::  xfracmig     !: Fractional biomass of meso that performs DVM 
     51   LOGICAL , PUBLIC ::  ln_dvm_meso  !: Boolean to activate DVM of mesozooplankton 
     52   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig  !: DVM of mesozooplankton : migration depth 
     53   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig    !: Vertical indice of the the migration depth 
    4554 
    4655   !! * Substitutions 
     
    5362CONTAINS 
    5463 
    55    SUBROUTINE p4z_meso( kt, knt, Kbb, Krhs ) 
     64   SUBROUTINE p4z_meso( kt, knt, Kbb, Kmm, Krhs ) 
    5665      !!--------------------------------------------------------------------- 
    5766      !!                     ***  ROUTINE p4z_meso  *** 
    5867      !! 
    5968      !! ** Purpose :   Compute the sources/sinks for mesozooplankton 
     69      !!                This includes ingestion and assimilation, flux feeding 
     70      !!                and mortality. We use a passive prey switching   
     71      !!                parameterization. 
     72      !!                All living compartments smaller than mesozooplankton 
     73      !!                are potential preys of mesozooplankton as well as small 
     74      !!                sinking particles  
    6075      !! 
    6176      !! ** Method  : - ??? 
    6277      !!--------------------------------------------------------------------- 
    6378      INTEGER, INTENT(in) ::   kt, knt   ! ocean time step and ??? 
    64       INTEGER, INTENT(in)  ::  Kbb, Krhs ! time level indices 
    65       ! 
    66       INTEGER  :: ji, jj, jk 
     79      INTEGER, INTENT(in)  ::  Kbb, kmm, Krhs ! time level indices 
     80      ! 
     81      INTEGER  :: ji, jj, jk, jkt 
    6782      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 
    68       REAL(wp) :: zgraze2 , zdenom, zdenom2 
    69       REAL(wp) :: zfact   , zfood, zfoodlim, zproport, zbeta 
     83      REAL(wp) :: zgraze2 , zdenom, zdenom2, zfact   , zfood, zfoodlim, zproport, zbeta 
    7084      REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2, zfracal, zgrazcal 
    71       REAL(wp) :: zepsherf, zepshert, zepsherv, zepsherq  
    72       REAL(wp) :: zgrarsig, zgraztotc, zgraztotn, zgraztotf 
    73       REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz, zgrasrat, zgrasratn 
    74       REAL(wp) :: zrespz, ztortz, zgrazd, zgrazz, zgrazpof 
    75       REAL(wp) :: zgrazn, zgrazpoc, zgraznf, zgrazf 
    76       REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 
    77       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing2, zfezoo2, zz2ligprod 
     85      REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgraztotc, zgraztotn, zgraztotf 
     86      REAL(wp) :: zmigreltime, zprcaca, zmortz, zgrasratf, zgrasratn 
     87      REAL(wp) :: zrespz, ztortz, zgrazdc, zgrazz, zgrazpof, zgraznc, zgrazpoc, zgraznf, zgrazdf 
     88      REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg, zrum, zcodel, zargu, zval, zdep 
     89      REAL(wp) :: zsigma, zdiffdn, ztmp1, ztmp2, ztmp3, ztmp4, ztmptot, zmigthick  
    7890      CHARACTER (len=25) :: charout 
     91      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 
     92      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarem, zgraref, zgrapoc, zgrapof, zgrabsi 
     93      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigrem, zgramigref, zgramigpoc, zgramigpof 
     94      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigbsi 
    7995      !!--------------------------------------------------------------------- 
    8096      ! 
    8197      IF( ln_timing )   CALL timing_start('p4z_meso') 
     98      ! 
     99      zgrazing(:,:,:) = 0._wp   ;  zgrapoc(:,:,:) = 0._wp 
     100      zfezoo2 (:,:,:) = 0._wp   ;  zgrarem(:,:,:) = 0._wp 
     101      zgraref (:,:,:) = 0._wp   ;  zgrapof(:,:,:) = 0._wp 
     102      zgrabsi (:,:,:) = 0._wp 
     103      ! 
     104      ! 
     105      ! Diurnal vertical migration of mesozooplankton 
     106      ! Computation of the migration depth 
     107      ! --------------------------------------------- 
     108      IF (ln_dvm_meso) CALL p4z_meso_depmig( Kbb, Kmm ) 
    82109      ! 
    83110      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     
    85112         zfact     = xstep * tgfunc2(ji,jj,jk) * zcompam 
    86113 
    87          !  Respiration rates of both zooplankton 
    88          !  ------------------------------------- 
     114          
     115         !  linear mortality of mesozooplankton 
     116         !  A michaelis menten modulation term is used to avoid extinction of  
     117         !  mesozooplankton at very low food concentration. Mortality is 
     118 
     119         !  enhanced in low O2 waters 
     120         !  ----------------------------------------------------------------- 
    89121         zrespz    = resrat2 * zfact * ( tr(ji,jj,jk,jpmes,Kbb) / ( xkmort + tr(ji,jj,jk,jpmes,Kbb) )  & 
    90122         &           + 3. * nitrfac(ji,jj,jk) ) 
    91123 
    92          !  Zooplankton mortality. A square function has been selected with 
    93          !  no real reason except that it seems to be more stable and may mimic predation 
    94          !  --------------------------------------------------------------- 
     124         ! Zooplankton quadratic mortality. A square function has been selected with 
     125         !  to mimic predation and disease (density dependent mortality). It also tends 
     126         !  to stabilise the model 
     127         !  ------------------------------------------------------------------------- 
    95128         ztortz    = mzrat2 * 1.e6 * zfact * tr(ji,jj,jk,jpmes,Kbb)  * (1. - nitrfac(ji,jj,jk) ) 
    96129         ! 
     130  
     131         !   Computation of the abundance of the preys 
     132         !   A threshold can be specified in the namelist 
     133         !   -------------------------------------------- 
    97134         zcompadi  = MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthresh2dia ), 0.e0 ) 
    98135         zcompaz   = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - xthresh2zoo ), 0.e0 ) 
    99136         zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthresh2poc ), 0.e0 ) 
     137 
    100138         ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 
    101          ! it is to predation by mesozooplankton 
     139         ! it is to predation by mesozooplankton. We use a quota dependant parameterization 
     140         ! as a low quota indicates oligotrophic conditions which are charatcerized by 
     141         ! small cells 
    102142         ! ------------------------------------------------------------------------------- 
    103143         zcompaph  = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthresh2phy ), 0.e0 ) & 
    104144            &      * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 
    105145 
    106          !   Mesozooplankton grazing 
    107          !   ------------------------ 
     146 
     147         ! Mesozooplankton grazing 
     148         ! The total amount of food is the sum of all preys accessible to mesozooplankton  
     149         ! multiplied by their food preference 
     150         ! A threshold can be specified in the namelist (xthresh2). However, when food  
     151         ! concentration is close to this threshold, it is decreased to avoid the  
     152         ! accumulation of food in the mesozoopelagic domain 
     153         ! ------------------------------------------------------------------------------- 
    108154         zfood     = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc  
    109155         zfoodlim  = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) 
     
    112158         zgraze2   = grazrat2 * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk))  
    113159 
    114          zgrazd    = zgraze2  * xpref2d  * zcompadi  * zdenom2  
    115          zgrazz    = zgraze2  * xpref2z  * zcompaz   * zdenom2  
    116          zgrazn    = zgraze2  * xpref2n  * zcompaph  * zdenom2  
    117          zgrazpoc  = zgraze2  * xpref2c  * zcompapoc * zdenom2  
    118  
    119          zgraznf   = zgrazn   * tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn) 
    120          zgrazf    = zgrazd   * tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn) 
     160 
     161         ! An active switching parameterization is used here. 
     162         ! We don't use the KTW parameterization proposed by  
     163         ! Vallina et al. because it tends to produce too steady biomass 
     164         ! composition and the variance of Chl is too low as it grazes 
     165         ! too strongly on winning organisms. We use a generalized 
     166         ! switching parameterization proposed by Morozov and  
     167         ! Petrovskii (2013) 
     168         ! ------------------------------------------------------------   
     169         ! The width of the selection window is increased when preys 
     170         ! have low abundance, .i.e. zooplankton become less specific  
     171         ! to avoid starvation. 
     172         ! ---------------------------------------------------------- 
     173         zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 
     174         zsigma = xsigma2 + xsigma2del * zsigma 
     175         ! Nanophytoplankton and diatoms are the only preys considered 
     176         ! to be close enough to have potential interference 
     177         ! ----------------------------------------------------------- 
     178         zdiffdn = exp( -ABS(log(1.67 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 
     179         ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / ( 1.0 + zdiffdn ) 
     180         ztmp2 = xpref2c * zcompapoc**2 
     181         ztmp3 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) / ( 1.0 + zdiffdn ) 
     182         ztmp4 = xpref2z * zcompaz**2 
     183         ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + rtrn 
     184         ztmp1 = ztmp1 / ztmptot 
     185         ztmp2 = ztmp2 / ztmptot 
     186         ztmp3 = ztmp3 / ztmptot 
     187         ztmp4 = ztmp4 / ztmptot 
     188 
     189         !   Mesozooplankton regular grazing on the different preys 
     190         !   ------------------------------------------------------ 
     191         zgrazdc   = zgraze2  * ztmp3 * zdenom  ! diatoms 
     192         zgraznc   = zgraze2  * ztmp1 * zdenom  ! nanophytoplankton 
     193         zgrazpoc  = zgraze2  * ztmp2 * zdenom  ! small POC 
     194         zgrazz    = zgraze2  * ztmp4 * zdenom  ! microzooplankton 
     195 
     196         ! Ingestion rates of the Fe content of the different preys 
     197         zgraznf   = zgraznc  * tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn) 
     198         zgrazdf   = zgrazdc  * tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn) 
    121199         zgrazpof  = zgrazpoc * tr(ji,jj,jk,jpsfe,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 
    122200 
    123          !  Mesozooplankton flux feeding on GOC 
    124          !  ---------------------------------- 
     201         !  Mesozooplankton flux feeding on GOC and POC. The feeding pressure 
     202         ! is proportional to the flux 
     203         !  ------------------------------------------------------------------ 
    125204         zgrazffeg = grazflux  * xstep * wsbio4(ji,jj,jk)      & 
    126205         &           * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & 
     
    132211         zgrazfffp = zgrazffep * tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 
    133212         ! 
    134          zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 
    135          ! Compute the proportion of filter feeders 
     213         zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazpoc + zgrazffep + zgrazffeg 
     214         ! Compute the proportion of filter feeders. It is assumed steady state. 
     215         ! ---------------------------------------------------------------------   
    136216         zproport  = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 
     217 
     218         ! Compute fractionation of aggregates. It is assumed that  
     219         ! diatoms based aggregates are more prone to fractionation 
     220         ! since they are more porous (marine snow instead of fecal pellets) 
     221         ! ----------------------------------------------------------------- 
     222 
    137223         ! Compute fractionation of aggregates. It is assumed that  
    138224         ! diatoms based aggregates are more prone to fractionation 
     
    145231         zfracfe   = zfrac * tr(ji,jj,jk,jpbfe,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 
    146232 
     233         ! Flux feeding is multiplied by the fractional biomass of flux feeders 
    147234         zgrazffep = zproport * zgrazffep 
    148235         zgrazffeg = zproport * zgrazffeg 
    149236         zgrazfffp = zproport * zgrazfffp 
    150237         zgrazfffg = zproport * zgrazfffg 
    151          zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 
    152          zgraztotn = zgrazd * quotad(ji,jj,jk) + zgrazz + zgrazn * quotan(ji,jj,jk)   & 
     238 
     239         ! Total ingestion rates in C, N, Fe 
     240         zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazpoc + zgrazffep + zgrazffeg 
     241         zgraztotn = zgrazdc * quotad(ji,jj,jk) + zgrazz + zgraznc * quotan(ji,jj,jk)   & 
    153242         &   + zgrazpoc + zgrazffep + zgrazffeg 
    154          zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp + zgrazfffg 
     243         zgraztotf = zgrazdf + zgraznf + zgrazz * feratz + zgrazpof + zgrazfffp + zgrazfffg 
    155244 
    156245         ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 
    157          zgrazing2(ji,jj,jk) = zgraztotc 
     246         zgrazing(ji,jj,jk) = zgraztotc 
    158247 
    159248         ! Mesozooplankton efficiency.  
     
    165254         ! Fulton, 2012) 
    166255         ! ----------------------------------------------------------------------------------- 
    167          zgrasrat  =  ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 
     256 
     257         zgrasratf =  ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 
    168258         zgrasratn =  ( zgraztotn + rtrn )/ ( zgraztotc + rtrn ) 
    169          zepshert  = MIN( 1., zgrasratn, zgrasrat / ferat3) 
     259         zepshert  = MIN( 1., zgrasratn, zgrasratf / feratm) 
    170260         zbeta     = MAX(0., (epsher2 - epsher2min) ) 
     261         ! Food quantity deprivation of GGE 
    171262         zepsherf  = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta )  
     263         ! Food quality deprivation of GGE 
    172264         zepsherq  = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 
    173          zepsherv  = zepsherf * zepshert * zepsherq  
    174  
    175          zgrarem2  = zgraztotc * ( 1. - zepsherv - unass2 ) & 
    176          &         + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz 
    177          zgrafer2  = zgraztotc * MAX( 0. , ( 1. - unass2 ) * zgrasrat - ferat3 * zepsherv )    & 
    178          &         + ferat3 * ( ( 1. - epsher2 - unass2 ) /( 1. - epsher2 ) * ztortz ) 
    179          zgrapoc2  = zgraztotc * unass2 
    180  
    181  
    182          !   Update the arrays TRA which contain the biological sources and sinks 
    183          zgrarsig  = zgrarem2 * sigma2 
    184          tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarsig 
    185          tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgrarsig 
    186          tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgrarem2 - zgrarsig 
    187          ! 
    188          IF( ln_ligand ) THEN  
    189             tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + (zgrarem2 - zgrarsig) * ldocz 
    190             zz2ligprod(ji,jj,jk) = (zgrarem2 - zgrarsig) * ldocz 
    191          ENDIF 
    192          ! 
    193          tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarsig 
    194          tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgrafer2 
    195          zfezoo2(ji,jj,jk)   = zgrafer2 
    196          tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarsig 
    197          tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgrarsig               
    198  
     265         ! Actual GGE 
     266         zepsherv  = zepsherf * zepshert * zepsherq 
     267         !  
     268         ! Impact of grazing on the prognostic variables 
     269         ! --------------------------------------------- 
    199270         zmortz = ztortz + zrespz 
     271         ! Mortality induced by the upper trophic levels, ztortz, is allocated  
     272         ! according to a infinite chain of predators (ANderson et al., 2013) 
    200273         zmortzgoc = unass2 / ( 1. - epsher2 ) * ztortz + zrespz 
     274 
    201275         tr(ji,jj,jk,jpmes,Krhs) = tr(ji,jj,jk,jpmes,Krhs) - zmortz + zepsherv * zgraztotc  
    202          tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazd 
     276         tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc 
    203277         tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) - zgrazz 
    204          tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgrazn 
    205          tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgrazn * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 
    206          tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zgrazd * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 
    207          tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zgrazd * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 
    208          tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrazd * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 
     278         tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc 
     279         tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgraznc * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 
     280         tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zgrazdc * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 
     281         tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zgrazdc * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 
     282         tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrazdc * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 
     283         zgrabsi(ji,jj,jk)       = zgrazdc * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 
     284         ! 
    209285         tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zgraznf 
    210          tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazf 
    211  
     286         tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazdf 
     287         ! 
    212288         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zgrazpoc - zgrazffep + zfrac 
    213289         prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfrac 
    214290         conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep 
    215          tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac 
    216          prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zmortzgoc + zgrapoc2 
     291         ! 
     292         tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zgrazffeg - zfrac 
    217293         consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfrac 
     294         ! 
    218295         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) - zgrazpof - zgrazfffp + zfracfe 
    219          tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + ferat3 * zmortzgoc - zgrazfffg     & 
    220            &                + zgraztotf * unass2 - zfracfe 
    221          zfracal = tr(ji,jj,jk,jpcal,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) 
    222          zgrazcal = (zgrazffeg + zgrazpoc) * (1. - part2) * zfracal 
    223          ! calcite production 
    224          zprcaca = xfracal(ji,jj,jk) * zgrazn 
     296         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zgrazfffg - zfracfe 
     297 
     298         ! Calcite remineralization due to zooplankton activity 
     299         ! part2 of the ingested calcite is not dissolving in the  
     300         ! acidic gut 
     301         ! ------------------------------------------------------ 
     302         zfracal = tr(ji,jj,jk,jpcal,Kbb) / ( tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) 
     303         zgrazcal = zgrazffeg * (1. - part2) * zfracal 
     304         ! calcite production by zooplankton activity 
     305         zprcaca = xfracal(ji,jj,jk) * zgraznc 
    225306         prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
    226307         ! 
    227308         zprcaca = part2 * zprcaca 
    228309         tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrazcal - zprcaca 
    229          tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * ( zgrazcal + zprcaca ) 
     310         tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * ( zgrazcal - zprcaca ) 
    230311         tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) - zgrazcal + zprcaca 
     312 
     313         ! Computation of total excretion and egestion by mesozoo.  
     314         ! --------------------------------------------------------- 
     315         zgrarem(ji,jj,jk) = zgraztotc * ( 1. - zepsherv - unass2 ) & 
     316                 &         + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz 
     317         zgraref(ji,jj,jk) = zgraztotc * MAX( 0. , ( 1. - unass2 ) * zgrasratf - feratm * zepsherv )    & 
     318                 &         + feratm * ( ( 1. - epsher2 - unass2 ) /( 1. - epsher2 ) * ztortz ) 
     319         zgrapoc(ji,jj,jk) = zgraztotc * unass2 + zmortzgoc 
     320         zgrapof(ji,jj,jk) = zgraztotf * unass2 + feratm * zmortzgoc 
     321         ! 
    231322      END_3D 
    232       ! 
     323 
     324      ! Computation of the effect of DVM by mesozooplankton 
     325      ! This part is only activated if ln_dvm_meso is set to true 
     326      ! The parameterization has been published in Gorgues et al. (2019). 
     327      ! ----------------------------------------------------------------- 
     328      IF (ln_dvm_meso) THEN 
     329         ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) 
     330         ALLOCATE( zgramigbsi(jpi,jpj) ) 
     331         zgramigrem(:,:) = 0.0    ;   zgramigref(:,:) = 0.0 
     332         zgramigpoc(:,:) = 0.0    ;   zgramigpof(:,:) = 0.0 
     333         zgramigbsi(:,:) = 0.0 
     334 
     335        ! Compute the amount of materials that will go into vertical migration 
     336        ! This fraction is sumed over the euphotic zone and is removed from  
     337        ! the fluxes driven by mesozooplankton in the euphotic zone. 
     338        ! -------------------------------------------------------------------- 
     339        DO_3D( 1, 1, 1, 1, 1, jpk ) 
     340            zmigreltime = (1. - strn(ji,jj)) 
     341            zmigthick   = (1. - zmigreltime ) * e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 
     342            IF ( gdept(ji,jj,jk,Kmm) <= heup(ji,jj) ) THEN 
     343               zgramigrem(ji,jj) = zgramigrem(ji,jj) + xfracmig * zgrarem(ji,jj,jk) * zmigthick  
     344               zgramigref(ji,jj) = zgramigref(ji,jj) + xfracmig * zgraref(ji,jj,jk) * zmigthick  
     345               zgramigpoc(ji,jj) = zgramigpoc(ji,jj) + xfracmig * zgrapoc(ji,jj,jk) * zmigthick  
     346               zgramigpof(ji,jj) = zgramigpof(ji,jj) + xfracmig * zgrapof(ji,jj,jk) * zmigthick  
     347               zgramigbsi(ji,jj) = zgramigbsi(ji,jj) + xfracmig * zgrabsi(ji,jj,jk) * zmigthick  
     348 
     349               zgrarem(ji,jj,jk) = zgrarem(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 
     350               zgraref(ji,jj,jk) = zgraref(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 
     351               zgrapoc(ji,jj,jk) = zgrapoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 
     352               zgrapof(ji,jj,jk) = zgrapof(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 
     353               zgrabsi(ji,jj,jk) = zgrabsi(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 
     354            ENDIF 
     355         END_3D 
     356       
     357         ! The inorganic and organic fluxes induced by migrating organisms are added at the  
     358         ! the migration depth (corresponding indice is set by kmig) 
     359         ! -------------------------------------------------------------------------------- 
     360         DO_2D( 1, 1, 1, 1 ) 
     361            IF( tmask(ji,jj,1) == 1.) THEN 
     362               jkt = kmig(ji,jj) 
     363               zdep = 1. / e3t(ji,jj,jkt,Kmm) 
     364               zgrarem(ji,jj,jkt) = zgrarem(ji,jj,jkt) + zgramigrem(ji,jj) * zdep  
     365               zgraref(ji,jj,jkt) = zgraref(ji,jj,jkt) + zgramigref(ji,jj) * zdep 
     366               zgrapoc(ji,jj,jkt) = zgrapoc(ji,jj,jkt) + zgramigpoc(ji,jj) * zdep 
     367               zgrapof(ji,jj,jkt) = zgrapof(ji,jj,jkt) + zgramigpof(ji,jj) * zdep 
     368               zgrabsi(ji,jj,jkt) = zgrabsi(ji,jj,jkt) + zgramigbsi(ji,jj) * zdep 
     369            ENDIF 
     370         END_2D 
     371         ! 
     372         ! Deallocate temporary variables 
     373         ! ------------------------------ 
     374         DEALLOCATE( zgramigrem, zgramigref, zgramigpoc, zgramigpof, zgramigbsi ) 
     375      ! End of the ln_dvm_meso part 
     376      ENDIF 
     377 
     378      !   Update the arrays TRA which contain the biological sources and sinks 
     379      !   This only concerns the variables which are affected by DVM (inorganic  
     380      !   nutrients, DOC agands, and particulate organic carbon).  
     381      DO_3D( 1, 1, 1, 1, 1, jpk ) 
     382         tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarem(ji,jj,jk) * sigma2 
     383         tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgrarem(ji,jj,jk) * sigma2 
     384         tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgrarem(ji,jj,jk) * ( 1. - sigma2 ) 
     385         ! 
     386         IF( ln_ligand ) &  
     387          &  tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgrarem(ji,jj,jk) * ( 1. - sigma2 ) * ldocz 
     388         ! 
     389         tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem(ji,jj,jk) * sigma2 
     390         tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref(ji,jj,jk) 
     391         zfezoo2(ji,jj,jk)   = zgraref(ji,jj,jk) 
     392         tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem(ji,jj,jk) * sigma2 
     393         tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgrarem(ji,jj,jk) * sigma2              
     394         tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zgrapoc(ji,jj,jk) 
     395         prodgoc(ji,jj,jk)   = prodgoc(ji,jj,jk)   + zgrapoc(ji,jj,jk) 
     396         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zgrapof(ji,jj,jk) 
     397         tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrabsi(ji,jj,jk) 
     398      END_3D 
     399      ! 
     400      ! Write the output 
    233401      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
    234402        CALL iom_put( "PCAL"  , prodcal(:,:,:) * 1.e+3  * rfact2r * tmask(:,:,:) )  !  Calcite production  
    235         IF( iom_use("GRAZ2") ) THEN  !   Total grazing of phyto by zooplankton 
    236            zgrazing2(:,:,jpk) = 0._wp ;  CALL iom_put( "GRAZ2" , zgrazing2(:,:,:) * 1.e+3  * rfact2r * tmask(:,:,:) )  
    237          ENDIF 
    238          IF( iom_use("FEZOO2") ) THEN   
    239            zfezoo2 (:,:,jpk) = 0._wp ; CALL iom_put( "FEZOO2", zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 
    240          ENDIF 
    241          IF( ln_ligand ) THEN 
    242             zz2ligprod(:,:,jpk) = 0._wp ; CALL iom_put( "LPRODZ2", zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)  ) 
    243          ENDIF 
     403        CALL iom_put( "GRAZ2" , zgrazing(:,:,:) * 1.e+3  * rfact2r * tmask(:,:,:) ) ! Total grazing of phyto by zoo 
     404        CALL iom_put( "FEZOO2", zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 
     405        IF( ln_ligand ) & 
     406         & CALL iom_put( "LPRODZ2", zgrarem(ji,jj,jk) * ( 1. - sigma2 ) * ldocz * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)  ) 
    244407      ENDIF 
    245408      ! 
     
    261424      !! ** Purpose :   Initialization of mesozooplankton parameters 
    262425      !! 
    263       !! ** Method  :   Read the nampismes namelist and check the parameters 
     426      !! ** Method  :   Read the namp4zmes namelist and check the parameters 
    264427      !!      called at the first timestep (nittrc000) 
    265428      !! 
     
    270433      NAMELIST/namp4zmes/ part2, grazrat2, resrat2, mzrat2, xpref2n, xpref2d, xpref2z,   & 
    271434         &                xpref2c, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 
    272          &                xthresh2, xkgraz2, epsher2, epsher2min, sigma2, unass2, grazflux 
     435         &                xthresh2, xkgraz2, epsher2, epsher2min, sigma2, unass2, grazflux, ln_dvm_meso,  & 
     436         &                xsigma2, xsigma2del, xfracmig 
    273437      !!---------------------------------------------------------------------- 
    274438      ! 
     
    281445      READ  ( numnatp_ref, namp4zmes, IOSTAT = ios, ERR = 901) 
    282446901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zmes in reference namelist' ) 
     447 
    283448      READ  ( numnatp_cfg, namp4zmes, IOSTAT = ios, ERR = 902 ) 
    284449902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zmes in configuration namelist' ) 
     
    303468         WRITE(numout,*) '      non assimilated fraction of P by mesozoo       unass2       =', unass2 
    304469         WRITE(numout,*) '      Efficiency of Mesozoo growth                   epsher2      =', epsher2 
    305          WRITE(numout,*) '      Minimum Efficiency of Mesozoo growth           epsher2min  =', epsher2min 
     470         WRITE(numout,*) '      Minimum Efficiency of Mesozoo growth           epsher2min   =', epsher2min 
    306471         WRITE(numout,*) '      Fraction of mesozoo excretion as DOM           sigma2       =', sigma2 
    307472         WRITE(numout,*) '      half sturation constant for grazing 2          xkgraz2      =', xkgraz2 
     473         WRITE(numout,*) '      Width of the grazing window                     xsigma2     =', xsigma2 
     474         WRITE(numout,*) '      Maximum additional width of the grazing window  xsigma2del  =', xsigma2del 
     475         WRITE(numout,*) '      Diurnal vertical migration of mesozoo.         ln_dvm_meso  =', ln_dvm_meso 
     476         WRITE(numout,*) '      Fractional biomass of meso  that performs DVM  xfracmig     =', xfracmig 
    308477      ENDIF 
    309478      ! 
    310479   END SUBROUTINE p4z_meso_init 
     480 
     481   SUBROUTINE p4z_meso_depmig( Kbb, Kmm ) 
     482      !!---------------------------------------------------------------------- 
     483      !!                  ***  ROUTINE p4z_meso_depmig  *** 
     484      !! 
     485      !! ** Purpose :   Computation the migration depth of mesozooplankton 
     486      !! 
     487      !! ** Method  :   Computes the DVM depth of mesozooplankton from oxygen 
     488      !!      temperature and chlorophylle following the parameterization  
     489      !!      proposed by Bianchi et al. (2013) 
     490      !!---------------------------------------------------------------------- 
     491      INTEGER, INTENT(in)  ::  Kbb, kmm ! time level indices 
     492      ! 
     493      INTEGER  :: ji, jj, jk 
     494      ! 
     495      REAL(wp) :: ztotchl, z1dep 
     496      REAL(wp), DIMENSION(jpi,jpj) :: oxymoy, tempmoy, zdepmoy 
     497 
     498      !!--------------------------------------------------------------------- 
     499      ! 
     500      IF( ln_timing == 1 )  CALL timing_start('p4z_meso_zdepmig') 
     501      ! 
     502      oxymoy(:,:)  = 0. 
     503      tempmoy(:,:) = 0. 
     504      zdepmoy(:,:) = 0. 
     505      depmig (:,:) = 5. 
     506      kmig   (:,:) = 1 
     507      ! 
     508      ! Compute the averaged values of oxygen, temperature over the domain  
     509      ! 150m to 500 m depth. 
     510      ! ------------------------------------------------------------------ 
     511      DO_3D( 1, 1, 1, 1, 1, jpk ) 
     512         IF( tmask(ji,jj,jk) == 1.) THEN 
     513            IF( gdept(ji,jj,jk,Kmm) >= 150. .AND. gdept(ji,jj,jk,kmm) <= 500.) THEN 
     514               oxymoy(ji,jj)  = oxymoy(ji,jj)  + tr(ji,jj,jk,jpoxy,Kbb) * 1E6 * e3t(ji,jj,jk,Kmm) 
     515               tempmoy(ji,jj) = tempmoy(ji,jj) + ts(ji,jj,jk,jp_tem,kmm)      * e3t(ji,jj,jk,kmm) 
     516               zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t(ji,jj,jk,Kmm) 
     517            ENDIF 
     518         ENDIF 
     519      END_3D 
     520 
     521      ! Compute the difference between surface values and the mean values in the mesopelagic 
     522      ! domain 
     523      ! ------------------------------------------------------------------------------------ 
     524      DO_2D( 1, 1, 1, 1 ) 
     525         z1dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 
     526         oxymoy(ji,jj)  = tr(ji,jj,1,jpoxy,Kbb) * 1E6 - oxymoy(ji,jj)  * z1dep 
     527         tempmoy(ji,jj) = ts(ji,jj,1,jp_tem,Kmm)      - tempmoy(ji,jj) * z1dep 
     528      END_2D 
     529      ! 
     530      ! Computation of the migration depth based on the parameterization of  
     531      ! Bianchi et al. (2013) 
     532      ! ------------------------------------------------------------------- 
     533      DO_2D( 1, 1, 1, 1 ) 
     534         IF( tmask(ji,jj,1) == 1. ) THEN 
     535            ztotchl = ( tr(ji,jj,1,jpnch,Kbb) + tr(ji,jj,1,jpdch,Kbb) ) * 1E6 
     536            depmig(ji,jj) = 398. - 0.56 * oxymoy(ji,jj) -115. * log10(ztotchl) + 0.36 * hmld(ji,jj) -2.4 * tempmoy(ji,jj) 
     537         ENDIF 
     538      END_2D 
     539      !  
     540      ! Computation of the corresponding jk indice  
     541      ! ------------------------------------------ 
     542      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     543         IF( depmig(ji,jj) >= gdepw(ji,jj,jk,Kmm) .AND. depmig(ji,jj) < gdepw(ji,jj,jk+1,Kmm) ) THEN 
     544             kmig(ji,jj) = jk 
     545          ENDIF 
     546      END_3D 
     547      ! 
     548      ! Correction of the migration depth and indice based on O2 levels 
     549      ! If O2 is too low, imposing a migration depth at this low O2 levels 
     550      ! would lead to negative O2 concentrations (respiration while O2 is close 
     551      ! to 0. Thus, to avoid that problem, the migration depth is adjusted so 
     552      ! that it falls above the OMZ 
     553      ! ----------------------------------------------------------------------- 
     554      DO_2D( 1, 1, 1, 1 ) 
     555         IF( tr(ji,jj,kmig(ji,jj),jpoxy,Kbb) < 5E-6 ) THEN 
     556            DO jk = kmig(ji,jj),1,-1 
     557               IF( tr(ji,jj,jk,jpoxy,Kbb) >= 5E-6 .AND. tr(ji,jj,jk+1,jpoxy,Kbb)  < 5E-6) THEN 
     558                  kmig(ji,jj) = jk 
     559                  depmig(ji,jj) = gdept(ji,jj,jk,Kmm) 
     560               ENDIF 
     561            END DO 
     562         ENDIF 
     563      END_2D 
     564      ! 
     565      IF( ln_timing )   CALL timing_stop('p4z_meso_depmig') 
     566      ! 
     567   END SUBROUTINE p4z_meso_depmig 
     568 
     569   INTEGER FUNCTION p4z_meso_alloc() 
     570      !!---------------------------------------------------------------------- 
     571      !!                     ***  ROUTINE p4z_meso_alloc  *** 
     572      !!---------------------------------------------------------------------- 
     573      ! 
     574      ALLOCATE( depmig(jpi,jpj), kmig(jpi,jpj), STAT= p4z_meso_alloc  ) 
     575      ! 
     576      IF( p4z_meso_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p4z_meso_alloc : failed to allocate arrays.' ) 
     577      ! 
     578   END FUNCTION p4z_meso_alloc 
    311579 
    312580   !!====================================================================== 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zmicro.F90

    r13295 r14385  
    2222   PRIVATE 
    2323 
     24   !! * Shared module variables 
    2425   PUBLIC   p4z_micro         ! called in p4zbio.F90 
    2526   PUBLIC   p4z_micro_init    ! called in trcsms_pisces.F90 
     
    4142   REAL(wp), PUBLIC ::   epsher      !: growth efficiency for grazing 1  
    4243   REAL(wp), PUBLIC ::   epshermin   !: minimum growth efficiency for grazing 1 
     44   REAL(wp), PUBLIC ::   xsigma      !: Width of the grazing window 
     45   REAL(wp), PUBLIC ::   xsigmadel   !: Maximum additional width of the grazing window at low food density  
    4346 
    4447   !! * Substitutions 
     
    5659      !! 
    5760      !! ** Purpose :   Compute the sources/sinks for microzooplankton 
     61      !!                This includes ingestion and assimilation, flux feeding 
     62      !!                and mortality. We use a passive prey switching   
     63      !!                parameterization. 
     64      !!                All living compartments smaller than microzooplankton 
     65      !!                are potential preys of microzooplankton 
    5866      !! 
    5967      !! ** Method  : - ??? 
     
    6573      INTEGER  :: ji, jj, jk 
    6674      REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc 
    67       REAL(wp) :: zgraze  , zdenom, zdenom2 
    68       REAL(wp) :: zfact   , zfood, zfoodlim, zbeta 
    69       REAL(wp) :: zepsherf, zepshert, zepsherv, zepsherq 
    70       REAL(wp) :: zgrarsig, zgraztotc, zgraztotn, zgraztotf 
     75      REAL(wp) :: zgraze  , zdenom, zdenom2, zfact, zfood, zfoodlim, zbeta 
     76      REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf 
    7177      REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz 
    72       REAL(wp) :: zrespz, ztortz, zgrasrat, zgrasratn 
    73       REAL(wp) :: zgrazp, zgrazm, zgrazsd 
    74       REAL(wp) :: zgrazmf, zgrazsf, zgrazpf 
    75       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo, zzligprod 
     78      REAL(wp) :: zrespz, ztortz, zgrasratf, zgrasratn 
     79      REAL(wp) :: zgraznc, zgrazpoc, zgrazdc, zgrazpof, zgrazdf, zgraznf 
     80      REAL(wp) :: zsigma, zdiffdn, ztmp1, ztmp2, ztmp3, ztmptot, zproport 
     81      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo 
     82      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zzligprod 
    7683      CHARACTER (len=25) :: charout 
     84 
    7785      !!--------------------------------------------------------------------- 
    7886      ! 
    7987      IF( ln_timing )   CALL timing_start('p4z_micro') 
     88      ! 
     89      IF (ln_ligand) THEN 
     90         ALLOCATE( zzligprod(jpi,jpj,jpk) ) 
     91         zzligprod(:,:,:) = 0._wp 
     92      ENDIF 
    8093      ! 
    8194      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     
    8396         zfact   = xstep * tgfunc2(ji,jj,jk) * zcompaz 
    8497 
    85          !  Respiration rates of both zooplankton 
    86          !  ------------------------------------- 
     98         ! Proportion of diatoms that are within the size range 
     99         ! accessible to microzooplankton.  
     100         zproport  = min(1.0, exp(-1.1 * MAX(0., ( sized(ji,jj,jk) - 1.8 ))**0.8 )) 
     101 
     102         !  linear mortality of mesozooplankton 
     103         !  A michaelis menten modulation term is used to avoid extinction of  
     104         !  microzooplankton at very low food concentrations. Mortality is  
     105         !  enhanced in low O2 waters 
     106         !  ----------------------------------------------------------------- 
    87107         zrespz = resrat * zfact * tr(ji,jj,jk,jpzoo,Kbb) / ( xkmort + tr(ji,jj,jk,jpzoo,Kbb) )  & 
    88108            &   + resrat * zfact * 3. * nitrfac(ji,jj,jk) 
    89109 
    90          !  Zooplankton mortality. A square function has been selected with 
    91          !  no real reason except that it seems to be more stable and may mimic predation. 
    92          !  --------------------------------------------------------------- 
     110         !  Zooplankton quadratic mortality. A square function has been selected with 
     111         !  to mimic predation and disease (density dependent mortality). It also tends 
     112         !  to stabilise the model 
     113         !  ------------------------------------------------------------------------- 
    93114         ztortz = mzrat * 1.e6 * zfact * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 
    94115 
    95          zcompadi  = MIN( MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthreshdia ), 0.e0 ), xsizedia ) 
     116         !   Computation of the abundance of the preys 
     117         !   A threshold can be specified in the namelist 
     118         !   Diatoms have a specific treatment. WHen concentrations  
     119         !   exceed a certain value, diatoms are suppposed to be too  
     120         !   big for microzooplankton. 
     121         !   -------------------------------------------------------- 
     122         zcompadi  = zproport * MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthreshdia ), 0.e0 ) 
    96123         zcompaph  = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthreshphy ), 0.e0 ) 
    97124         zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthreshpoc ), 0.e0 ) 
    98           
    99          !     Microzooplankton grazing 
    100          !     ------------------------ 
     125  
     126         ! Microzooplankton grazing 
     127         ! The total amount of food is the sum of all preys accessible to mesozooplankton  
     128         ! multiplied by their food preference 
     129         ! A threshold can be specified in the namelist (xthresh). However, when food  
     130         ! concentration is close to this threshold, it is decreased to avoid the  
     131         ! accumulation of food in the mesozoopelagic domain 
     132         ! ------------------------------------------------------------------------------- 
    101133         zfood     = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi 
    102134         zfoodlim  = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) 
     
    105137         zgraze    = grazrat * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 
    106138 
    107          zgrazp    = zgraze  * xprefn * zcompaph  * zdenom2  
    108          zgrazm    = zgraze  * xprefc * zcompapoc * zdenom2  
    109          zgrazsd   = zgraze  * xprefd * zcompadi  * zdenom2  
    110  
    111          zgrazpf   = zgrazp  * tr(ji,jj,jk,jpnfe,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 
    112          zgrazmf   = zgrazm  * tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 
    113          zgrazsf   = zgrazsd * tr(ji,jj,jk,jpdfe,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 
    114          ! 
    115          zgraztotc = zgrazp  + zgrazm  + zgrazsd  
    116          zgraztotf = zgrazpf + zgrazsf + zgrazmf  
    117          zgraztotn = zgrazp * quotan(ji,jj,jk) + zgrazm + zgrazsd * quotad(ji,jj,jk) 
     139         ! An active switching parameterization is used here. 
     140         ! We don't use the KTW parameterization proposed by  
     141         ! Vallina et al. because it tends to produce too steady biomass 
     142         ! composition and the variance of Chl is too low as it grazes 
     143         ! too strongly on winning organisms. We use a generalized 
     144         ! switching parameterization proposed by Morozov and  
     145         ! Petrovskii (2013) 
     146         ! ------------------------------------------------------------   
     147         ! The width of the selection window is increased when preys 
     148         ! have low abundance, .i.e. zooplankton become less specific  
     149         ! to avoid starvation. 
     150         ! ---------------------------------------------------------- 
     151         zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 
     152         zsigma = xsigma + xsigmadel * zsigma 
     153         zdiffdn = exp( -ABS(log(1.67 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2) 
     154         ztmp1 = xprefn * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / ( 1.0 + zdiffdn ) 
     155         ztmp2 = xprefd * zcompadi * ( zdiffdn * zcompaph + zcompadi ) / ( 1.0 + zdiffdn ) 
     156         ztmp3 = xprefc * zcompapoc**2 
     157         ztmptot = ztmp1 + ztmp2 + ztmp3 + rtrn 
     158         ztmp1 = ztmp1 / ztmptot 
     159         ztmp2 = ztmp2 / ztmptot 
     160         ztmp3 = ztmp3 / ztmptot 
     161 
     162         ! Ingestion terms on the different preys of microzooplankton 
     163         zgraznc   = zgraze   * ztmp1 * zdenom  ! Nanophytoplankton 
     164         zgrazdc   = zgraze   * ztmp2 * zdenom  ! Diatoms 
     165         zgrazpoc  = zgraze   * ztmp3 * zdenom  ! POC 
     166 
     167         ! Ingestion terms on the iron content of the different preys 
     168         zgraznf   = zgraznc  * tr(ji,jj,jk,jpnfe,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 
     169         zgrazpof  = zgrazpoc * tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 
     170         zgrazdf   = zgrazdc  * tr(ji,jj,jk,jpdfe,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 
     171         ! 
     172         ! Total ingestion rate in C, Fe, N units 
     173         zgraztotc = zgraznc + zgrazpoc + zgrazdc 
     174         zgraztotf = zgraznf + zgrazdf  + zgrazpof  
     175         zgraztotn = zgraznc * quotan(ji,jj,jk) + zgrazpoc + zgrazdc * quotad(ji,jj,jk) 
    118176 
    119177         ! Grazing by microzooplankton 
     
    129187         ! Fulton, 2012) 
    130188         ! ----------------------------------------------------------------------------- 
    131          zgrasrat  = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 
     189 
     190         zgrasratf = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 
    132191         zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn ) 
    133          zepshert  =  MIN( 1., zgrasratn, zgrasrat / ferat3) 
     192         zepshert  =  MIN( 1., zgrasratn, zgrasratf / feratz) 
    134193         zbeta     = MAX(0., (epsher - epshermin) ) 
     194         ! Food quantity deprivation of the GGE 
    135195         zepsherf  = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 
     196         ! Food quality deprivation of the GGE 
    136197         zepsherq  = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 
    137          zepsherv  = zepsherf * zepshert * zepsherq  
    138  
    139          zgrafer   = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepsherv )  
     198         ! Actual GGE of microzooplankton 
     199         zepsherv  = zepsherf * zepshert * zepsherq 
     200         ! Excretion of Fe 
     201         zgrafer   = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasratf - feratz * zepsherv )  
     202         ! Excretion of C, N, P 
    140203         zgrarem   = zgraztotc * ( 1. - zepsherv - unass ) 
     204         ! Egestion of C, N, P 
    141205         zgrapoc   = zgraztotc * unass 
     206 
    142207 
    143208         !  Update of the TRA arrays 
    144209         !  ------------------------ 
     210         ! Fraction of excretion as inorganic nutrients and DIC 
    145211         zgrarsig  = zgrarem * sigma1 
    146212         tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarsig 
     
    165231         zmortz = ztortz + zrespz 
    166232         tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) - zmortz + zepsherv * zgraztotc  
    167          tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgrazp 
    168          tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazsd 
    169          tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgrazp * tr(ji,jj,jk,jpnch,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn) 
    170          tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zgrazsd * tr(ji,jj,jk,jpdch,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 
    171          tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zgrazsd * tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 
    172          tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrazsd * tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 
    173          tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zgrazpf 
    174          tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazsf 
    175          tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zmortz - zgrazm 
     233         tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc 
     234         tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc 
     235         tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgraznc * tr(ji,jj,jk,jpnch,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn) 
     236         tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zgrazdc * tr(ji,jj,jk,jpdch,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 
     237         tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zgrazdc * tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 
     238         tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrazdc * tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 
     239         tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zgraznf 
     240         tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazdf 
     241         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zmortz - zgrazpoc 
    176242         prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortz 
    177          conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazm 
    178          tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ferat3 * zmortz - zgrazmf 
    179          ! 
    180          ! calcite production 
    181          zprcaca = xfracal(ji,jj,jk) * zgrazp 
     243         conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc 
     244         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + feratz * zmortz - zgrazpof 
     245         ! 
     246         ! Calcite remineralization due to zooplankton activity 
     247         ! part of the ingested calcite is not dissolving in the acidic gut 
     248         ! ---------------------------------------------------------------- 
     249         zprcaca = xfracal(ji,jj,jk) * zgraznc 
    182250         prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
     251 
    183252         ! 
    184253         zprcaca = part * zprcaca 
     
    217286      !! ** Purpose :   Initialization of microzooplankton parameters 
    218287      !! 
    219       !! ** Method  :   Read the nampiszoo namelist and check the parameters 
     288      !! ** Method  :   Read the namp4zzoo namelist and check the parameters 
    220289      !!                called at the first timestep (nittrc000) 
    221290      !! 
    222       !! ** input   :   Namelist nampiszoo 
     291      !! ** input   :   Namelist namp4zzoo 
    223292      !! 
    224293      !!---------------------------------------------------------------------- 
     
    227296      NAMELIST/namp4zzoo/ part, grazrat, resrat, mzrat, xprefn, xprefc, & 
    228297         &                xprefd,  xthreshdia,  xthreshphy,  xthreshpoc, & 
    229          &                xthresh, xkgraz, epsher, epshermin, sigma1, unass 
     298         &                xthresh, xkgraz, epsher, epshermin, sigma1, unass,  & 
     299         &                xsigma, xsigmadel 
    230300      !!---------------------------------------------------------------------- 
    231301      ! 
     
    238308      READ  ( numnatp_ref, namp4zzoo, IOSTAT = ios, ERR = 901) 
    239309901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zzoo in reference namelist' ) 
     310 
    240311      READ  ( numnatp_cfg, namp4zzoo, IOSTAT = ios, ERR = 902 ) 
    241312902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zzoo in configuration namelist' ) 
     
    259330         WRITE(numout,*) '      Minimum efficicency of microzoo growth          epshermin   =', epshermin 
    260331         WRITE(numout,*) '      Fraction of microzoo excretion as DOM           sigma1      =', sigma1 
    261          WRITE(numout,*) '      half sturation constant for grazing 1           xkgraz      =', xkgraz 
     332         WRITE(numout,*) '      half saturation constant for grazing 1          xkgraz      =', xkgraz 
     333         WRITE(numout,*) '      Width of the grazing window                     xsigma      =', xsigma 
     334         WRITE(numout,*) '      Maximum additional width of the grazing window  xsigmadel   =', xsigmadel 
     335 
    262336      ENDIF 
    263337      ! 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zmort.F90

    r13295 r14385  
    2020   PRIVATE 
    2121 
    22    PUBLIC   p4z_mort     
    23    PUBLIC   p4z_mort_init     
    24  
    25    REAL(wp), PUBLIC ::   wchl     !: 
    26    REAL(wp), PUBLIC ::   wchld    !: 
    27    REAL(wp), PUBLIC ::   wchldm   !: 
    28    REAL(wp), PUBLIC ::   mprat    !: 
    29    REAL(wp), PUBLIC ::   mprat2   !: 
     22   PUBLIC   p4z_mort           ! Called from p4zbio.F90  
     23   PUBLIC   p4z_mort_init      ! Called from trcini_pisces.F90  
     24 
     25   REAL(wp), PUBLIC ::   wchln    !: Quadratic mortality rate of nanophytoplankton 
     26   REAL(wp), PUBLIC ::   wchld    !: Quadratic mortality rate of diatoms 
     27   REAL(wp), PUBLIC ::   mpratn   !: Linear mortality rate of nanophytoplankton 
     28   REAL(wp), PUBLIC ::   mpratd   !: Linear mortality rate of diatoms 
    3029 
    3130   !! * Substitutions 
     
    4241      !!                     ***  ROUTINE p4z_mort  *** 
    4342      !! 
    44       !! ** Purpose :   Calls the different subroutine to initialize and compute 
     43      !! ** Purpose :   Calls the different subroutine to compute 
    4544      !!                the different phytoplankton mortality terms 
    4645      !! 
     
    5150      !!--------------------------------------------------------------------- 
    5251      ! 
    53       CALL p4z_nano( Kbb, Krhs )            ! nanophytoplankton 
    54       ! 
    55       CALL p4z_diat( Kbb, Krhs )            ! diatoms 
     52      CALL p4z_mort_nano( Kbb, Krhs )            ! nanophytoplankton 
     53      CALL p4z_mort_diat( Kbb, Krhs )            ! diatoms 
    5654      ! 
    5755   END SUBROUTINE p4z_mort 
    5856 
    5957 
    60    SUBROUTINE p4z_nano( Kbb, Krhs ) 
    61       !!--------------------------------------------------------------------- 
    62       !!                     ***  ROUTINE p4z_nano  *** 
     58   SUBROUTINE p4z_mort_nano( Kbb, Krhs ) 
     59      !!--------------------------------------------------------------------- 
     60      !!                     ***  ROUTINE p4z_mort_nano  *** 
    6361      !! 
    6462      !! ** Purpose :   Compute the mortality terms for nanophytoplankton 
    6563      !! 
    66       !! ** Method  : - ??? 
     64      !! ** Method  :   Both quadratic and simili linear mortality terms 
    6765      !!--------------------------------------------------------------------- 
    6866      INTEGER, INTENT(in) ::   Kbb, Krhs  ! time level indices 
    6967      INTEGER  ::   ji, jj, jk 
    70       REAL(wp) ::   zsizerat, zcompaph 
     68      REAL(wp) ::   zcompaph 
    7169      REAL(wp) ::   zfactfe, zfactch, zprcaca, zfracal 
    72       REAL(wp) ::   ztortp , zrespp , zmortp  
     70      REAL(wp) ::   ztortp , zrespp , zmortp, zlim1, zlim2  
    7371      CHARACTER (len=25) ::   charout 
    7472      !!--------------------------------------------------------------------- 
    7573      ! 
    76       IF( ln_timing )   CALL timing_start('p4z_nano') 
     74      IF( ln_timing )   CALL timing_start('p4z_mort_nano') 
    7775      ! 
    7876      prodcal(:,:,:) = 0._wp   ! calcite production variable set to zero 
    7977      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    8078         zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - 1e-8 ), 0.e0 ) 
    81          !     When highly limited by macronutrients, very small cells  
    82          !     dominate the community. As a consequence, aggregation 
    83          !     due to turbulence is negligible. Mortality is also set 
    84          !     to 0 
    85          zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * tr(ji,jj,jk,jpphy,Kbb) 
    86          !     Squared mortality of Phyto similar to a sedimentation term during 
    87          !     blooms (Doney et al. 1996) 
    88          zrespp = wchl * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * zsizerat  
    89  
    90          !     Phytoplankton mortality. This mortality loss is slightly 
    91          !     increased when nutrients are limiting phytoplankton growth 
    92          !     as observed for instance in case of iron limitation. 
    93          ztortp = mprat * xstep * zcompaph / ( xkmort + tr(ji,jj,jk,jpphy,Kbb) ) * zsizerat 
     79 
     80         ! Quadratic mortality of nano due to aggregation during 
     81         ! blooms (Doney et al. 1996) 
     82         ! ----------------------------------------------------- 
     83         zlim2   = xlimphy(ji,jj,jk) * xlimphy(ji,jj,jk) 
     84         zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) * tr(ji,jj,jk,jpphy,Kbb) 
     85         zrespp  = wchln * 1.e6 * xstep * zlim1 * xdiss(ji,jj,jk) * zcompaph 
     86 
     87         ! Phytoplankton linear mortality 
     88         ! A michaelis-menten like term is introduced to avoid  
     89         ! extinction of nanophyto in highly limited areas 
     90         ! ---------------------------------------------------- 
     91         ztortp = mpratn * xstep * zcompaph / ( xkmort + tr(ji,jj,jk,jpphy,Kbb) ) * tr(ji,jj,jk,jpphy,Kbb) 
    9492 
    9593         zmortp = zrespp + ztortp 
    96  
     94          
    9795         !   Update the arrays TRA which contains the biological sources and sinks 
    98  
    9996         zfactfe = tr(ji,jj,jk,jpnfe,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn) 
    10097         zfactch = tr(ji,jj,jk,jpnch,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn) 
     
    10299         tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zmortp * zfactch 
    103100         tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zmortp * zfactfe 
     101 
     102         ! Production PIC particles due to mortality 
    104103         zprcaca = xfracal(ji,jj,jk) * zmortp 
    105          ! 
    106104         prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
    107          ! 
     105 
     106         ! POC associated with the shell is supposed to be routed to  
     107         ! big particles because of the ballasting effect 
    108108         zfracal = 0.5 * xfracal(ji,jj,jk) 
    109109         tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zprcaca 
     
    114114         prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ( 1. - zfracal ) * zmortp 
    115115         prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zfracal * zmortp 
     116 
     117         ! Update the arrays TRA which contains the biological sources and sinks 
    116118         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ( 1. - zfracal ) * zmortp * zfactfe 
    117119         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zfracal * zmortp * zfactfe 
     120         ! 
    118121      END_3D 
    119122      ! 
     
    124127       ENDIF 
    125128      ! 
    126       IF( ln_timing )   CALL timing_stop('p4z_nano') 
    127       ! 
    128    END SUBROUTINE p4z_nano 
    129  
    130  
    131    SUBROUTINE p4z_diat( Kbb, Krhs ) 
    132       !!--------------------------------------------------------------------- 
    133       !!                     ***  ROUTINE p4z_diat  *** 
     129      IF( ln_timing )   CALL timing_stop('p4z_mort_nano') 
     130      ! 
     131   END SUBROUTINE p4z_mort_nano 
     132 
     133 
     134   SUBROUTINE p4z_mort_diat( Kbb, Krhs ) 
     135      !!--------------------------------------------------------------------- 
     136      !!                     ***  ROUTINE p4z_mort_diat  *** 
    134137      !! 
    135138      !! ** Purpose :   Compute the mortality terms for diatoms 
    136139      !! 
    137       !! ** Method  : - ??? 
     140      !! ** Method  : - Both quadratic and simili linear mortality terms 
    138141      !!--------------------------------------------------------------------- 
    139142      INTEGER, INTENT(in) ::   Kbb, Krhs  ! time level indices 
     
    145148      !!--------------------------------------------------------------------- 
    146149      ! 
    147       IF( ln_timing )   CALL timing_start('p4z_diat') 
    148       ! 
    149       !    Aggregation term for diatoms is increased in case of nutrient 
    150       !    stress as observed in reality. The stressed cells become more 
    151       !    sticky and coagulate to sink quickly out of the euphotic zone 
    152       !     ------------------------------------------------------------ 
     150      IF( ln_timing )   CALL timing_start('p4z_mort_diat') 
     151      ! 
     152      ! Aggregation term for diatoms is increased in case of nutrient 
     153      ! stress as observed in reality. The stressed cells become more 
     154      ! sticky and coagulate to sink quickly out of the euphotic zone 
     155      ! This is due to the production of EPS by stressed cells 
     156      ! ------------------------------------------------------------- 
    153157 
    154158      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     
    156160         zcompadi = MAX( ( tr(ji,jj,jk,jpdia,Kbb) - 1e-9), 0. ) 
    157161 
    158          !    Aggregation term for diatoms is increased in case of nutrient 
    159          !    stress as observed in reality. The stressed cells become more 
    160          !    sticky and coagulate to sink quickly out of the euphotic zone 
    161          !     ------------------------------------------------------------ 
    162          !  Phytoplankton respiration  
    163          !     ------------------------ 
     162         ! Aggregation term for diatoms is increased in case of nutrient 
     163         ! stress as observed in reality. The stressed cells become more 
     164         ! sticky and coagulate to sink quickly out of the euphotic zone 
     165         ! ------------------------------------------------------------ 
    164166         zlim2   = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 
    165167         zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 )  
    166          zrespp2 = 1.e6 * xstep * (  wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * tr(ji,jj,jk,jpdia,Kbb) 
    167  
    168          !     Phytoplankton mortality.  
    169          !     ------------------------ 
    170          ztortp2 = mprat2 * xstep * tr(ji,jj,jk,jpdia,Kbb)  / ( xkmort + tr(ji,jj,jk,jpdia,Kbb) ) * zcompadi  
     168         zrespp2 = 1.e6 * xstep * wchld * zlim1 * xdiss(ji,jj,jk) * zcompadi * tr(ji,jj,jk,jpdia,Kbb) 
     169 
     170         ! Phytoplankton linear mortality 
     171         ! A michaelis-menten like term is introduced to avoid  
     172         ! extinction of diatoms in highly limited areas 
     173         !  --------------------------------------------------- 
     174         ztortp2 = mpratd * xstep * tr(ji,jj,jk,jpdia,Kbb)  / ( xkmort + tr(ji,jj,jk,jpdia,Kbb) ) * zcompadi  
    171175 
    172176         zmortp2 = zrespp2 + ztortp2 
    173177 
    174          !   Update the arrays tr(:,:,:,:,Krhs) which contains the biological sources and sinks 
     178         !   Update the arrays trends which contains the biological sources and sinks 
    175179         !   --------------------------------------------------------------------- 
    176180         zfactch = tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 
     
    182186         tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zmortp2 * zfactsi 
    183187         tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zmortp2 * zfactsi 
     188 
     189         ! Half of the linear mortality term is routed to big particles 
     190         ! becaue of the ballasting effect 
    184191         tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zrespp2 + 0.5 * ztortp2 
    185192         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + 0.5 * ztortp2 
     
    196203      ENDIF 
    197204      ! 
    198       IF( ln_timing )   CALL timing_stop('p4z_diat') 
    199       ! 
    200    END SUBROUTINE p4z_diat 
     205      IF( ln_timing )   CALL timing_stop('p4z_mort_diat') 
     206      ! 
     207   END SUBROUTINE p4z_mort_diat 
    201208 
    202209 
     
    207214      !! ** Purpose :   Initialization of phytoplankton parameters 
    208215      !! 
    209       !! ** Method  :   Read the nampismort namelist and check the parameters 
     216      !! ** Method  :   Read the namp4zmort namelist and check the parameters 
    210217      !!              called at the first timestep 
    211218      !! 
    212       !! ** input   :   Namelist nampismort 
     219      !! ** input   :   Namelist namp4zmort 
    213220      !! 
    214221      !!---------------------------------------------------------------------- 
    215222      INTEGER ::   ios   ! Local integer 
    216223      ! 
    217       NAMELIST/namp4zmort/ wchl, wchld, wchldm, mprat, mprat2 
     224      NAMELIST/namp4zmort/ wchln, wchld, mpratn, mpratd 
    218225      !!---------------------------------------------------------------------- 
    219226      ! 
     
    226233      READ  ( numnatp_ref, namp4zmort, IOSTAT = ios, ERR = 901) 
    227234901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zmort in reference namelist' ) 
     235 
    228236      READ  ( numnatp_cfg, namp4zmort, IOSTAT = ios, ERR = 902 ) 
    229237902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zmort in configuration namelist' ) 
     
    232240      IF(lwp) THEN                         ! control print 
    233241         WRITE(numout,*) '   Namelist : namp4zmort' 
    234          WRITE(numout,*) '      quadratic mortality of phytoplankton        wchl   =', wchl 
     242         WRITE(numout,*) '      quadratic mortality of phytoplankton        wchln  =', wchln 
    235243         WRITE(numout,*) '      maximum quadratic mortality of diatoms      wchld  =', wchld 
    236          WRITE(numout,*) '      maximum quadratic mortality of diatoms      wchldm =', wchldm 
    237          WRITE(numout,*) '      phytoplankton mortality rate                mprat  =', mprat 
    238          WRITE(numout,*) '      Diatoms mortality rate                      mprat2 =', mprat2 
     244         WRITE(numout,*) '      phytoplankton mortality rate                mpratn =', mpratn 
     245         WRITE(numout,*) '      Diatoms mortality rate                      mpratd =', mpratd 
    239246      ENDIF 
    240247      ! 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zopt.F90

    r14213 r14385  
    8080      ze3(:,:,:) = 0._wp 
    8181      ! 
    82       !                                        !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
    83       !                                        !  -------------------------------------------------------- 
     82      ! Attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
     83      ! Thus the light penetration scheme is based on a decomposition of PAR 
     84      ! into three wave length domains. This was first officially published 
     85      ! in Lengaigne et al. (2007). 
     86      ! -------------------------------------------------------- 
    8487                     zchl3d(:,:,:) = tr(:,:,:,jpnch,Kbb) + tr(:,:,:,jpdch,Kbb) 
    85       IF( ln_p5z )   zchl3d(:,:,:) = zchl3d(:,:,:)    + tr(:,:,:,jppch,Kbb) 
    86       ! 
     88      IF( ln_p5z )   zchl3d(:,:,:) = zchl3d(:,:,:)       + tr(:,:,:,jppch,Kbb) 
     89      ! 
     90      ! Computation of the light attenuation parameters based on a  
     91      ! look-up table 
    8792      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    8893         zchl = ( zchl3d(ji,jj,jk) + rtrn ) * 1.e6 
     
    9499         ekr(ji,jj,jk) = rkrgb(3,irgb) * e3t(ji,jj,jk,Kmm) 
    95100      END_3D 
    96       !                                        !* Photosynthetically Available Radiation (PAR) 
    97       !                                        !  -------------------------------------- 
     101 
     102      ! Photosynthetically Available Radiation (PAR) 
     103      ! Two cases are considered in the following :  
     104      ! (1) An explicit diunal cycle is activated. In that case, mean  
     105      ! QSR is used as PISCES in its current state has not been parameterized 
     106      ! for an explicit diurnal cycle 
     107      ! (2) no diurnal cycle of SW is active and in that case, QSR is used. 
     108      ! -------------------------------------------- 
    98109      IF( l_trcdm2dc ) THEN                     !  diurnal cycle 
    99110         ! 
     111          ! 
     112         ! SW over the ice free zone of the grid cell. This assumes that 
     113         ! SW is zero below sea ice which is a very crude assumption that is  
     114         ! not fully correct with LIM3 and SI3 but no information is  
     115         ! currently available to do a better job. SHould be improved in the  
     116         ! (near) future. 
    100117         zqsr_corr(:,:) = qsr_mean(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
    101118         ! 
    102119         CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 )  
    103120         ! 
     121         ! Used PAR is computed for each phytoplankton species 
     122         ! etot_ndcy is PAR at level jk averaged over 24h. 
     123         ! Due to their size, they have different light absorption characteristics 
    104124         DO jk = 1, nksr       
    105125            etot_ndcy(:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
     
    113133         ENDIF 
    114134         ! 
     135         ! SW over the ice free zone of the grid cell. This assumes that 
     136         ! SW is zero below sea ice which is a very crude assumption that is  
     137         ! not fully correct with LIM3 and SI3 but no information is  
     138         ! currently available to do a better job. SHould be improved in the  
     139         ! (near) future. 
     140 
    115141         zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
    116142         ! 
    117143         CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3 )  
    118144         ! 
     145         ! Total PAR computation at level jk that includes the diurnal cycle 
    119146         DO jk = 1, nksr       
    120147            etot(:,:,jk) =  ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 
    121148         END DO 
    122149         ! 
    123       ELSE 
    124          ! 
     150      ELSE   ! no diurnal cycle 
     151         ! 
     152         ! 
     153         ! SW over the ice free zone of the grid cell. This assumes that 
     154         ! SW is zero below sea ice which is a very crude assumption that is  
     155         ! not fully correct with LIM3 and SI3 but no information is  
     156         ! currently available to do a better job. SHould be improved in the  
     157         ! (near) future. 
    125158         zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
    126159         ! 
    127160         CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100  )  
    128161         ! 
     162 
     163         ! Used PAR is computed for each phytoplankton species 
     164         ! Due to their size, they have different light absorption characteristics 
    129165         DO jk = 1, nksr       
    130             etot (:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
    131             enano(:,:,jk) =  1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) 
    132             ediat(:,:,jk) =  1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) 
     166            etot (:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk)    ! Total PAR 
     167            enano(:,:,jk) =  1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk)  ! Nanophytoplankton 
     168            ediat(:,:,jk) =  1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk)  ! Diatoms 
    133169         END DO 
    134170         IF( ln_p5z ) THEN 
    135171            DO jk = 1, nksr       
    136               epico(:,:,jk) =  1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     172              epico(:,:,jk) =  1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk)  ! Picophytoplankton (PISCES-QUOTA) 
    137173            END DO 
    138174         ENDIF 
     
    141177 
    142178 
     179      ! Biophysical feedback part (computation of vertical penetration of SW) 
    143180      IF( ln_qsr_bio ) THEN                    !* heat flux accros w-level (used in the dynamics) 
    144181         !                                     !  ------------------------ 
     
    151188         !                                     !  ------------------------ 
    152189      ENDIF 
    153       !                                        !* Euphotic depth and level 
    154       neln   (:,:) = 1                            !  ------------------------ 
     190       
     191      ! Euphotic depth and level 
     192      ! Two definitions of the euphotic zone are used here.  
     193      ! (1) The classical definition based on the relative threshold value 
     194      ! (2) An alternative definition based on a absolute threshold value. 
     195      ! ------------------------------------------------------------------- 
     196      neln(:,:) = 1 
    155197      heup   (:,:) = gdepw(:,:,2,Kmm) 
    156198      heup_01(:,:) = gdepw(:,:,2,Kmm) 
     
    162204           heup(ji,jj) = gdepw(ji,jj,jk+1,Kmm)     ! Euphotic layer depth 
    163205        ENDIF 
    164         IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.50 )  THEN 
     206        IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.10 )  THEN 
    165207           heup_01(ji,jj) = gdepw(ji,jj,jk+1,Kmm)  ! Euphotic layer depth (light level definition) 
    166208        ENDIF 
    167209      END_3D 
    168210      ! 
     211      ! The euphotic depth can not exceed 300 meters. 
    169212      heup   (:,:) = MIN( 300., heup   (:,:) ) 
    170213      heup_01(:,:) = MIN( 300., heup_01(:,:) ) 
    171       !                                        !* mean light over the mixed layer 
    172       zdepmoy(:,:)   = 0.e0                    !  ------------------------------- 
     214       
     215      ! Mean PAR over the mixed layer 
     216      ! ----------------------------- 
     217      zdepmoy(:,:)   = 0.e0              
    173218      zetmp1 (:,:)   = 0.e0 
    174219      zetmp2 (:,:)   = 0.e0 
     
    176221      DO_3D( 1, 1, 1, 1, 1, nksr ) 
    177222         IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN 
    178             zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot     (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! remineralisation 
    179             zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! production 
     223            zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot     (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Actual PAR for remineralisation 
     224            zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Par averaged over 24h for production 
    180225            zdepmoy(ji,jj) = zdepmoy(ji,jj) +                       e3t(ji,jj,jk,Kmm) 
    181226         ENDIF 
     
    192237         ENDIF 
    193238      END_3D 
    194       ! 
     239 
     240      ! Computation of the mean usable light for the different phytoplankton 
     241      ! groups based on their absorption characteristics. 
    195242      zdepmoy(:,:)   = 0.e0 
    196243      zetmp3 (:,:)   = 0.e0 
     
    199246      DO_3D( 1, 1, 1, 1, 1, nksr ) 
    200247         IF( gdepw(ji,jj,jk+1,Kmm) <= MIN(hmld(ji,jj), heup_01(ji,jj)) ) THEN 
    201             zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano    (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! production 
    202             zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat    (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! production 
     248            zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano    (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Nanophytoplankton 
     249            zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat    (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Diatoms 
    203250            zdepmoy(ji,jj) = zdepmoy(ji,jj) +                       e3t(ji,jj,jk,Kmm) 
    204251         ENDIF 
     
    216263      ! 
    217264      IF( ln_p5z ) THEN 
     265         ! Picophytoplankton when using PISCES-QUOTA 
    218266         ALLOCATE( zetmp5(jpi,jpj) )  ;   zetmp5 (:,:) = 0.e0 
    219267         DO_3D( 1, 1, 1, 1, 1, nksr ) 
    220268            IF( gdepw(ji,jj,jk+1,Kmm) <= MIN(hmld(ji,jj), heup_01(ji,jj)) ) THEN 
    221                zetmp5(ji,jj)  = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! production 
     269               zetmp5(ji,jj)  = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t(ji,jj,jk,Kmm) 
    222270            ENDIF 
    223271         END_3D 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zpoc.F90

    r13295 r14385  
    33   !!                         ***  MODULE p4zpoc  *** 
    44   !! TOP :   PISCES Compute remineralization of organic particles 
     5   !!         Same module for both PISCES and PISCES-QUOTA 
    56   !!========================================================================= 
    67   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    89   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Quota model for iron 
    910   !!             3.6  !  2016-03  (O. Aumont) Quota model and diverse 
     11   !!             4.0  !  2018     (O. Aumont) Variable lability parameterization 
    1012   !!---------------------------------------------------------------------- 
    1113   !!   p4z_poc       :  Compute remineralization/dissolution of organic compounds 
    1214   !!   p4z_poc_init  :  Initialisation of parameters for remineralisation 
     15   !!   alngam and gamain : computation of the incomplete gamma function 
    1316   !!---------------------------------------------------------------------- 
    1417   USE oce_trc         !  shared variables between ocean and passive tracers 
     
    2225 
    2326   PUBLIC   p4z_poc         ! called in p4zbio.F90 
    24    PUBLIC   p4z_poc_init    ! called in trcsms_pisces.F90 
    25    PUBLIC   alngam          ! 
     27   PUBLIC   p4z_poc_init    ! called in trcini_pisces.F90 
     28   PUBLIC   alngam          !  
    2629   PUBLIC   gamain          ! 
    2730 
     
    3336   REAL(wp), PUBLIC ::   rshape     !: shape factor of the gamma distribution 
    3437 
    35    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::   alphan, reminp   !: 
    36    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   alphap           !: 
     38   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::   alphan, reminp   !: variable lability of POC and initial distribution 
     39   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   alphap           !: lability distribution of small particles 
    3740 
    3841 
     
    5255      !! 
    5356      !! ** Purpose :   Compute remineralization of organic particles 
     57      !!                A reactivity-continuum parameterization is chosen 
     58      !!                to describe the lability of the organic particles 
     59      !!                As a consequence, the remineralisation rates of the  
     60      !!                the different pools change with time as a function of  
     61      !!                the lability distribution 
    5462      !! 
    55       !! ** Method  : - ??? 
     63      !! ** Method  : - Computation of the remineralisation rates is performed 
     64      !!                according to reactivity continuum formalism described 
     65      !!                in Aumont et al. (2017).  
    5666      !!--------------------------------------------------------------------- 
    5767      INTEGER, INTENT(in) ::   kt, knt         ! ocean time step and ??? 
     
    8393      solgoc = 0.04/ 2.56 * 1./ ( 1.-50**(-0.04) ) 
    8494 
    85       ! Initialisation of temprary arrys 
     95      ! Initialisation of temporary arrays 
    8696      IF( ln_p4z ) THEN 
    8797         zremipoc(:,:,:) = xremip 
     
    96106      zfolimi (:,:,:) = 0. 
    97107 
     108      ! Initialisation of the lability distributions that are set to  
     109      ! the distribution of newly produced organic particles 
    98110      DO jn = 1, jcpoc 
    99111        alphag(:,:,:,jn) = alphan(jn) 
     
    101113      END DO 
    102114 
    103      ! ----------------------------------------------------------------------- 
    104115     ! Lability parameterization. This is the big particles part (GOC) 
    105      ! This lability parameterization can be activated only with the standard 
    106      ! particle scheme. Does not work with Kriest parameterization. 
     116     ! This lability parameterization is always active. However, if only one 
     117     ! lability class is specified in the namelist, this is equivalent to  
     118     ! a standard parameterisation with a constant lability 
    107119     ! ----------------------------------------------------------------------- 
    108120     ztremint(:,:,:) = zremigoc(:,:,:) 
     
    192204 
    193205      IF( ln_p4z ) THEN 
     206         ! The standard PISCES part 
    194207         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    195             ! POC disaggregation by turbulence and bacterial activity.  
    196             ! -------------------------------------------------------- 
     208            ! POC degradation by bacterial activity. It is a function  
     209            ! of the mean lability and of temperature. This also includes 
     210            ! shrinking of particles due to the bacterial activity 
     211            ! ----------------------------------------------------------- 
    197212            zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
    198213            zorem2  = zremig * tr(ji,jj,jk,jpgoc,Kbb) 
     
    202217            zofer3 = zremig * solgoc * tr(ji,jj,jk,jpbfe,Kbb) 
    203218 
    204             ! ------------------------------------- 
     219            ! update of the TRA arrays 
    205220            tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zorem3(ji,jj,jk) 
    206221            tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zorem2 - zorem3(ji,jj,jk) 
     
    212227         END_3D 
    213228      ELSE 
     229         ! PISCES-QUOTA part 
    214230         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    215              ! POC disaggregation by turbulence and bacterial activity.  
     231            ! POC degradation by bacterial activity. It is a function  
     232            ! of the mean lability and of temperature. This also includes 
     233            ! shrinking of particles due to the bacterial activity 
    216234            ! -------------------------------------------------------- 
    217235            zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
     
    223241            zofer2 = xremipn / xremipc * zremig * tr(ji,jj,jk,jpbfe,Kbb) 
    224242 
    225             ! ------------------------------------- 
     243            ! update of the TRA arrays 
    226244            tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zorem3(ji,jj,jk) 
    227245            tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + solgoc * zopon2  
     
    246264     ENDIF 
    247265 
    248      ! ------------------------------------------------------------------ 
    249266     ! Lability parameterization for the small OM particles. This param  
    250267     ! is based on the same theoretical background as the big particles. 
    251268     ! However, because of its low sinking speed, lability is not supposed 
    252269     ! to be equal to its initial value (the value of the freshly produced 
    253      ! organic matter). It is however uniform in the mixed layer. 
    254      ! ------------------------------------------------------------------- 
    255      ! 
     270     ! organic matter) in the MLD. It is however uniform in the mixed layer. 
     271     ! --------------------------------------------------------------------- 
    256272     totprod (:,:) = 0. 
    257273     totthick(:,:) = 0. 
    258274     totcons (:,:) = 0. 
     275 
    259276     ! intregrated production and consumption of POC in the mixed layer 
    260277     ! ---------------------------------------------------------------- 
    261      !  
    262278     DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    263279        zdep = hmld(ji,jj) 
     
    272288 
    273289     ! Computation of the lability spectrum in the mixed layer. In the mixed  
    274      ! layer, this spectrum is supposed to be uniform. 
     290     ! layer, this spectrum is supposed to be uniform as a result of intense 
     291     ! mixing. 
    275292     ! --------------------------------------------------------------------- 
    276293     ztremint(:,:,:) = zremipoc(:,:,:) 
     
    302319     ENDIF 
    303320 
    304      ! ----------------------------------------------------------------------- 
    305321     ! The lability parameterization is used here. The code is here  
    306322     ! almost identical to what is done for big particles. The only difference 
     
    309325     ! should be determined before. 
    310326     ! ----------------------------------------------------------------------- 
    311      ! 
    312327     DO_3D( 1, 1, 1, 1, 2, jpkm1 ) 
    313328        IF (tmask(ji,jj,jk) == 1.) THEN 
     
    384399 
    385400     IF( ln_p4z ) THEN 
     401         ! The standard PISCES part 
    386402         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    387403            IF (tmask(ji,jj,jk) == 1.) THEN 
    388               ! POC disaggregation by turbulence and bacterial activity.  
     404              ! POC disaggregation by turbulence and bacterial activity.It is a function 
     405              ! of the mean lability and of temperature   
    389406              ! -------------------------------------------------------- 
    390407              zremip          = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
    391408              zorem           = zremip * tr(ji,jj,jk,jppoc,Kbb) 
    392409              zofer           = zremip * tr(ji,jj,jk,jpsfe,Kbb) 
    393  
     410               
     411              ! Update of the TRA arrays 
    394412              tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zorem 
    395413              orem(ji,jj,jk)      = orem(ji,jj,jk) + zorem 
     
    401419         END_3D 
    402420     ELSE 
     421         ! PISCES-QUOTA part 
    403422       DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    404           ! POC disaggregation by turbulence and bacterial activity.  
    405           ! -------------------------------------------------------- 
     423          ! POC disaggregation by turbulence and bacterial activity.It is a function 
     424          ! of the mean lability and of temperature   
     425          !-------------------------------------------------------- 
    406426          zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
    407427          zopoc  = zremip * tr(ji,jj,jk,jppoc,Kbb) 
     
    410430          zopop  = xremipp / xremipc * zremip * tr(ji,jj,jk,jppop,Kbb) 
    411431          zofer  = xremipn / xremipc * zremip * tr(ji,jj,jk,jpsfe,Kbb) 
    412  
     432               
     433          ! Update of the TRA arrays 
    413434          tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zopoc 
    414435          tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) - zopon 
     
    426447        IF( knt == nrdttrc ) THEN 
    427448          zrfact2 = 1.e3 * rfact2r 
    428           CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) )  ! Remineralisation rate 
    429           CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) )  ! Remineralisation rate 
    430           CALL iom_put( "REMINF" , zfolimi(:,:,:)  * tmask(:,:,:)  * 1.e+9 * zrfact2 )  ! Remineralisation rate 
     449          CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) )  ! Remineralisation rate of small particles 
     450          CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) )  ! Remineralisation rate of large particles 
     451          CALL iom_put( "REMINF" , zfolimi(:,:,:)  * tmask(:,:,:)  * 1.e+9 * zrfact2 )  ! Remineralisation of biogenic particulate iron 
    431452        ENDIF 
    432453     ENDIF 
     
    493514      ALLOCATE( alphan(jcpoc) , reminp(jcpoc) , alphap(jpi,jpj,jpk,jcpoc) ) 
    494515      ! 
    495       IF (jcpoc > 1) THEN 
     516      IF (jcpoc > 1) THEN  ! Case when more than one lability class is used 
    496517         ! 
    497518         remindelta = LOG(4. * 1000. ) / REAL(jcpoc-1, wp) 
     
    517538         reminp(jcpoc) = reminp(jcpoc) * xremip / alphan(jcpoc) 
    518539 
    519       ELSE 
     540      ELSE  ! Only one lability class is used 
    520541         alphan(jcpoc) = 1. 
    521542         reminp(jcpoc) = xremip 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zprod.F90

    r13295 r14385  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p4zprod  *** 
    4    !! TOP :  Growth Rate of the two phytoplanktons groups  
     4   !! TOP :  Growth Rate of the two phytoplankton groups of PISCES  
    55   !!====================================================================== 
    66   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    2424   PUBLIC   p4z_prod         ! called in p4zbio.F90 
    2525   PUBLIC   p4z_prod_init    ! called in trcsms_pisces.F90 
    26    PUBLIC   p4z_prod_alloc 
    27  
    28    REAL(wp), PUBLIC ::   pislopen     !: 
    29    REAL(wp), PUBLIC ::   pisloped     !: 
    30    REAL(wp), PUBLIC ::   xadap        !: 
    31    REAL(wp), PUBLIC ::   excretn      !: 
    32    REAL(wp), PUBLIC ::   excretd      !: 
    33    REAL(wp), PUBLIC ::   bresp        !: 
    34    REAL(wp), PUBLIC ::   chlcnm       !: 
    35    REAL(wp), PUBLIC ::   chlcdm       !: 
    36    REAL(wp), PUBLIC ::   chlcmin      !: 
    37    REAL(wp), PUBLIC ::   fecnm        !: 
    38    REAL(wp), PUBLIC ::   fecdm        !: 
    39    REAL(wp), PUBLIC ::   grosip       !: 
     26   PUBLIC   p4z_prod_alloc   ! called in trcini_pisces.F90 
     27 
     28   REAL(wp), PUBLIC ::   pislopen     !:  P-I slope of nanophytoplankton 
     29   REAL(wp), PUBLIC ::   pisloped     !:  P-I slope of diatoms 
     30   REAL(wp), PUBLIC ::   xadap        !:  Adaptation factor to low light  
     31   REAL(wp), PUBLIC ::   excretn      !:  Excretion ratio of nanophyto 
     32   REAL(wp), PUBLIC ::   excretd      !:  Excretion ratio of diatoms 
     33   REAL(wp), PUBLIC ::   bresp        !:  Basal respiration rate 
     34   REAL(wp), PUBLIC ::   chlcnm       !:  Maximum Chl/C ratio of nano 
     35   REAL(wp), PUBLIC ::   chlcdm       !:  Maximum Chl/C ratio of diatoms 
     36   REAL(wp), PUBLIC ::   chlcmin      !:  Minimum Chl/C ratio of phytoplankton 
     37   REAL(wp), PUBLIC ::   fecnm        !:  Maximum Fe/C ratio of nano 
     38   REAL(wp), PUBLIC ::   fecdm        !:  Maximum Fe/C ratio of diatoms 
     39   REAL(wp), PUBLIC ::   grosip       !:  Mean Si/C ratio of diatoms 
    4040 
    4141   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotan   !: proxy of N quota in Nanophyto 
    42    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotad   !: proxy of N quota in diatomee 
     42   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotad   !: proxy of N quota in diatoms 
    4343    
    4444   REAL(wp) ::   r1_rday    ! 1 / rday 
     
    6060      !!                     ***  ROUTINE p4z_prod  *** 
    6161      !! 
    62       !! ** Purpose :   Compute the phytoplankton production depending on 
    63       !!              light, temperature and nutrient availability 
    64       !! 
    65       !! ** Method  : - ??? 
     62      !! ** Purpose :   Computes phytoplankton production depending on 
     63      !!                light, temperature and nutrient availability 
     64      !!                Computes also the uptake of Iron and Si as well  
     65      !!                as the chlorophyll content of the cells 
     66      !!                PISCES relies on a mixed Monod-Quota formalism  
    6667      !!--------------------------------------------------------------------- 
    6768      INTEGER, INTENT(in) ::   kt, knt   ! 
     
    7071      INTEGER  ::   ji, jj, jk 
    7172      REAL(wp) ::   zsilfac, znanotot, zdiattot, zconctemp, zconctemp2 
    72       REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap, zlim, zsilfac2, zsiborn 
    73       REAL(wp) ::   zprod, zproreg, zproreg2, zprochln, zprochld 
    74       REAL(wp) ::   zmaxday, zdocprod, zpislopen, zpisloped 
    75       REAL(wp) ::   zmxltst, zmxlday 
    76       REAL(wp) ::   zrum, zcodel, zargu, zval, zfeup, chlcnm_n, chlcdm_n 
    77       REAL(wp) ::   zfact 
     73      REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap, zlim, zsiborn 
     74      REAL(wp) ::   zpptot, zpnewtot, zpregtot, zprochln, zprochld 
     75      REAL(wp) ::   zproddoc, zprodsil, zprodfer, zprodlig 
     76      REAL(wp) ::   zpislopen, zpisloped, zfact 
     77      REAL(wp) ::   zratiosi, zmaxsi, zlimfac, zsizetmp, zfecnm, zfecdm 
     78      REAL(wp) ::   zprod, zval 
    7879      CHARACTER (len=25) :: charout 
    79       REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zw2d 
    80       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 
    81       REAL(wp), DIMENSION(jpi,jpj    ) :: zstrn, zmixnano, zmixdiat 
    8280      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprmaxn,zprmaxd 
    8381      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopeadn, zpislopeadd, zysopt   
    84       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprdia, zprbio, zprdch, zprnch    
     82      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprdia, zprbio, zprchld, zprchln    
     83      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprdch, zprnch 
    8584      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprorcan, zprorcad, zprofed, zprofen 
    8685      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpronewn, zpronewd 
    8786      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmxl_fac, zmxl_chl 
    88       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpligprod1, zpligprod2 
     87      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zpligprod 
    8988      !!--------------------------------------------------------------------- 
    9089      ! 
     
    9392      !  Allocate temporary workspace 
    9493      ! 
    95       zprorcan  (:,:,:) = 0._wp ; zprorcad  (:,:,:) = 0._wp ; zprofed (:,:,:) = 0._wp 
    96       zprofen   (:,:,:) = 0._wp ; zysopt    (:,:,:) = 0._wp 
    97       zpronewn  (:,:,:) = 0._wp ; zpronewd  (:,:,:) = 0._wp ; zprdia  (:,:,:) = 0._wp 
    98       zprbio    (:,:,:) = 0._wp ; zprdch    (:,:,:) = 0._wp ; zprnch  (:,:,:) = 0._wp  
    99       zmxl_fac  (:,:,:) = 0._wp ; zmxl_chl  (:,:,:) = 0._wp  
    100       zpligprod1(:,:,:) = 0._wp ; zpligprod2(:,:,:) = 0._wp  
    101  
    102       ! Computation of the optimal production 
     94      zprorcan(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp ; zprofed(:,:,:) = 0._wp 
     95      zprofen (:,:,:) = 0._wp ; zysopt  (:,:,:) = 0._wp 
     96      zpronewn(:,:,:) = 0._wp ; zpronewd(:,:,:) = 0._wp ; zprdia(:,:,:) = 0._wp 
     97      zprbio  (:,:,:) = 0._wp ; zprdch  (:,:,:) = 0._wp ; zprnch(:,:,:) = 0._wp  
     98      zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp  
     99      consfe3 (:,:,:) = 0._wp 
     100 
     101      ! Computation of the maximimum production. Based on a Q10 description 
     102      ! of the thermal dependency 
     103      ! Parameters are taken from Bissinger et al. (2008) 
    103104      zprmaxn(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 
    104105      zprmaxd(:,:,:) = zprmaxn(:,:,:) 
    105106 
    106       ! compute the day length depending on latitude and the day 
    107       zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 
    108       zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  ) 
    109  
    110       ! day length in hours 
    111       zstrn(:,:) = 0. 
    112       DO_2D( 1, 1, 1, 1 ) 
    113          zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
    114          zargu = MAX( -1., MIN(  1., zargu ) ) 
    115          zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
    116       END_2D 
    117  
    118       ! Impact of the day duration and light intermittency on phytoplankton growth 
    119       DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    120          IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    121             zval = MAX( 1., zstrn(ji,jj) ) 
    122             IF( gdept(ji,jj,jk,Kmm) <= hmld(ji,jj) ) THEN 
    123                zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 
    124             ENDIF 
    125             zmxl_chl(ji,jj,jk) = zval / 24. 
    126             zmxl_fac(ji,jj,jk) = 1.5 * zval / ( 12. + zval ) 
    127          ENDIF 
    128       END_3D 
     107      ! Intermittency is supposed to have a similar effect on production as  
     108      ! day length (Shatwell et al., 2012). The correcting factor is zmxl_fac.  
     109      ! zmxl_chl is the fractional day length and is used to compute the mean 
     110      ! PAR during daytime. The effect of mixing is computed using the  
     111      ! absolute light level definition of the euphotic zone 
     112      ! -------------------------------------------------------------------------  
     113      DO jk = 1, jpkm1 
     114         DO jj = 1 ,jpj 
     115            DO ji = 1, jpi 
     116               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     117                  zval = MAX( 1., strn(ji,jj) ) 
     118                  IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN 
     119                     zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 
     120                  ENDIF 
     121                  zmxl_chl(ji,jj,jk) = zval / 24. 
     122                  zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval ) 
     123               ENDIF 
     124            END DO 
     125         END DO 
     126      END DO 
    129127 
    130128      zprbio(:,:,:) = zprmaxn(:,:,:) * zmxl_fac(:,:,:) 
    131129      zprdia(:,:,:) = zprmaxd(:,:,:) * zmxl_fac(:,:,:) 
    132130 
    133       ! Maximum light intensity 
    134       WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 
    135  
    136       ! Computation of the P-I slope for nanos and diatoms 
     131      ! The formulation proposed by Geider et al. (1997) has been modified  
     132      ! to exclude the effect of nutrient limitation and temperature in the PI 
     133      ! curve following Vichi et al. (2007) 
     134      ! ----------------------------------------------------------------------- 
    137135      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    138136         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     
    142140            zconctemp2  = tr(ji,jj,jk,jpdia,Kbb) - zconctemp 
    143141            ! 
     142            ! The initial slope of the PI curve can be increased for nano 
     143            ! to account for photadaptation, for instance in the DCM 
     144            ! This parameterization is adhoc and should be either  
     145            ! improved or removed in future versions of the model 
     146 
     147            ! Nanophytoplankton 
    144148            zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap  * EXP( -0.25 * enano(ji,jj,jk) ) )  & 
    145149            &                   * tr(ji,jj,jk,jpnch,Kbb) /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn) 
    146             ! 
     150 
     151            ! Diatoms 
    147152            zpislopeadd(ji,jj,jk) = (pislopen * zconctemp2 + pisloped * zconctemp) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )   & 
    148153            &                   * tr(ji,jj,jk,jpdch,Kbb) /( tr(ji,jj,jk,jpdia,Kbb) * 12. + rtrn) 
     
    153158         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    154159             ! Computation of production function for Carbon 
    155              !  --------------------------------------------- 
     160             ! Actual light levels are used here  
     161             ! ---------------------------------------------- 
    156162             zpislopen = zpislopeadn(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 
    157163             &            * zmxl_fac(ji,jj,jk) * rday + rtrn) 
     
    160166             zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) )  ) 
    161167             zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) )  ) 
     168 
    162169             !  Computation of production function for Chlorophyll 
    163              !-------------------------------------------------- 
     170             !  Mean light level in the mixed layer (when appropriate) 
     171             !  is used here (acclimation is in general slower than  
     172             !  the characteristic time scales of vertical mixing) 
     173             !  ------------------------------------------------------ 
    164174             zpislopen = zpislopeadn(ji,jj,jk) / ( zprmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 
    165175             zpisloped = zpislopeadd(ji,jj,jk) / ( zprmaxd(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 
     
    169179      END_3D 
    170180 
    171       !  Computation of a proxy of the N/C ratio 
    172       !  --------------------------------------- 
     181      !  Computation of a proxy of the N/C quota from nutrient limitation  
     182      !  and light limitation. Steady state is assumed to allow the computation 
     183      !  ---------------------------------------------------------------------- 
    173184      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    174185          zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) )   & 
     
    184195 
    185196          IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    186              !    Si/C of diatoms 
    187              !    ------------------------ 
    188              !    Si/C increases with iron stress and silicate availability 
    189              !    Si/C is arbitrariliy increased for very high Si concentrations 
    190              !    to mimic the very high ratios observed in the Southern Ocean (silpot2) 
     197             ! Si/C of diatoms 
     198             ! ------------------------ 
     199             ! Si/C increases with iron stress and silicate availability 
     200             ! Si/C is arbitrariliy increased for very high Si concentrations 
     201             ! to mimic the very high ratios observed in the Southern Ocean (zsilfac) 
     202             ! A parameterization derived from Flynn (2003) is used for the control 
     203             ! when Si is not limiting which is similar to the parameterisation 
     204             ! proposed by Gurney and Davidson (1999). 
     205             ! ----------------------------------------------------------------------- 
    191206            zlim  = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi1 ) 
    192             zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 
    193             zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) )  ) + 1.e0 
     207            zsilim = xlimdia(ji,jj,jk) * zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 
    194208            zsiborn = tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) 
    195209            IF (gphit(ji,jj) < -30 ) THEN 
    196               zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
     210              zsilfac = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
    197211            ELSE 
    198               zsilfac2 = 1. +      zsiborn / ( zsiborn + xksi2**3 ) 
     212              zsilfac = 1. +      zsiborn / ( zsiborn + xksi2**3 ) 
    199213            ENDIF 
    200             zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 
     214            zratiosi = 1.0 - tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) / ( zsilfac * grosip * 3.0 + rtrn ) 
     215            zratiosi = MAX(0., MIN(1.0, zratiosi) ) 
     216            zmaxsi  = (1.0 + 0.1**4) * zratiosi**4 / ( zratiosi**4 + 0.1**4 ) 
     217            IF( xlimsi(ji,jj,jk) /= xlimdia(ji,jj,jk) ) THEN 
     218               zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zmaxsi 
     219            ELSE 
     220               zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zsilim**0.7 * zmaxsi 
     221            ENDIF 
    201222        ENDIF 
    202223      END_3D 
    203224 
    204       !  Mixed-layer effect on production  
    205       !  Sea-ice effect on production 
    206  
     225      ! Sea-ice effect on production 
     226      ! No production is assumed below sea ice 
     227      ! --------------------------------------  
    207228      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    208229         zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
     
    210231      END_3D 
    211232 
    212       ! Computation of the various production terms  
     233      ! Computation of the various production  and nutrient uptake terms 
     234      ! --------------------------------------------------------------- 
    213235      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    214236         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    215237            !  production terms for nanophyto. (C) 
    216238            zprorcan(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * tr(ji,jj,jk,jpphy,Kbb) * rfact2 
     239 
     240            !  New production (uptake of NO3) 
    217241            zpronewn(ji,jj,jk)  = zprorcan(ji,jj,jk)* xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 
    218242            ! 
    219             zratio = tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) * fecnm + rtrn ) 
    220             zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
    221             zprofen(ji,jj,jk) = fecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
    222             &             * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) )    & 
    223             &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) )  & 
    224             &             * zmax * tr(ji,jj,jk,jpphy,Kbb) * rfact2 
    225             !  production terms for diatoms (C) 
     243            ! Size computation 
     244            ! Size is made a function of the limitation of of phytoplankton growth 
     245            ! Strongly limited cells are supposed to be smaller. sizena is the  
     246            ! size at time step t+1 and is thus updated at the end of the  
     247            ! current time step 
     248            ! -------------------------------------------------------------------- 
     249            zlimfac = xlimphy(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn ) 
     250            zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 
     251            sizena(ji,jj,jk) = min(xsizern, max( sizena(ji,jj,jk), zsizetmp ) ) 
     252 
     253            ! Iron uptake rates of nanophytoplankton. Upregulation is   
     254            ! not parameterized at low iron concentrations as observations 
     255            ! do not suggest it for accimated cells. Uptake is 
     256            ! downregulated when the quota is close to the maximum quota 
     257            zfecnm = xqfuncfecn(ji,jj,jk) + ( fecnm - xqfuncfecn(ji,jj,jk) ) * ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) 
     258            zratio = 1.0 - MIN(1.0,tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) * zfecnm + rtrn ) ) 
     259            zmax   = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) )  
     260            zprofen(ji,jj,jk) = zfecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
     261            &          * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn + xnanono3(ji,jj,jk)  & 
     262            &          + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) )   & 
     263            &          * xnanofer(ji,jj,jk) * zmax * tr(ji,jj,jk,jpphy,Kbb) * rfact2 
     264 
     265            ! production terms of diatoms (C) 
    226266            zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tr(ji,jj,jk,jpdia,Kbb) * rfact2 
     267 
     268            ! New production (uptake of NO3) 
    227269            zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 
    228             ! 
    229             zratio = tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) * fecdm + rtrn ) 
    230             zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
    231             zprofed(ji,jj,jk) = fecdm * zprmaxd(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
    232             &             * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) )    & 
    233             &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) )  & 
    234             &             * zmax * tr(ji,jj,jk,jpdia,Kbb) * rfact2 
     270 
     271            ! Size computation 
     272            ! Size is made a function of the limitation of of phytoplankton growth 
     273            ! Strongly limited cells are supposed to be smaller. sizeda is 
     274            ! size at time step t+1 and is thus updated at the end of the  
     275            ! current time step.  
     276            ! -------------------------------------------------------------------- 
     277            zlimfac = zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 
     278            zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 
     279            sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) ) 
     280 
     281            ! Iron uptake rates of diatoms. Upregulation is   
     282            ! not parameterized at low iron concentrations as observations 
     283            ! do not suggest it for accimated cells. Uptake is 
     284            ! downregulated when the quota is close to the maximum quota 
     285            zfecdm = xqfuncfecd(ji,jj,jk) + ( fecdm - xqfuncfecd(ji,jj,jk) ) * ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) 
     286            zratio = 1.0 - MIN(1.0, tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) * zfecdm + rtrn ) ) 
     287            zmax   = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) )  
     288            zprofed(ji,jj,jk) = zfecdm * zprmaxd(ji,jj,jk) * (1.0 - fr_i(ji,jj) )  & 
     289            &          * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn + xdiatno3(ji,jj,jk)  & 
     290            &          + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) )   & 
     291            &          * xdiatfer(ji,jj,jk) * zmax * tr(ji,jj,jk,jpdia,Kbb) * rfact2 
    235292         ENDIF 
    236293      END_3D 
    237294 
    238295      ! Computation of the chlorophyll production terms 
     296      ! The parameterization is taken from Geider et al. (1997) 
     297      ! ------------------------------------------------------- 
    239298      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    240299         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     
    243302            zprod    = rday * zprorcan(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk) 
    244303            zprochln = chlcmin * 12. * zprorcan (ji,jj,jk) 
    245             chlcnm_n   = MIN ( chlcnm, ( chlcnm / (1. - 1.14 / 43.4 *ts(ji,jj,jk,jp_tem,Kmm))) * (1. - 1.14 / 43.4 * 20.)) 
    246             zprochln = zprochln + (chlcnm_n-chlcmin) * 12. * zprod / & 
     304            zprochln = zprochln + (chlcnm - chlcmin) * 12. * zprod / & 
    247305                                  & (  zpislopeadn(ji,jj,jk) * znanotot +rtrn) 
     306 
    248307            !  production terms for diatoms ( chlorophyll ) 
    249308            zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
    250309            zprod    = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk) 
    251310            zprochld = chlcmin * 12. * zprorcad(ji,jj,jk) 
    252             chlcdm_n   = MIN ( chlcdm, ( chlcdm / (1. - 1.14 / 43.4 * ts(ji,jj,jk,jp_tem,Kmm))) * (1. - 1.14 / 43.4 * 20.)) 
    253             zprochld = zprochld + (chlcdm_n-chlcmin) * 12. * zprod / & 
     311            zprochld = zprochld + (chlcdm - chlcmin) * 12. * zprod / & 
    254312                                  & ( zpislopeadd(ji,jj,jk) * zdiattot +rtrn ) 
     313 
    255314            !   Update the arrays TRA which contain the Chla sources and sinks 
    256315            tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) + zprochln * texcretn 
     
    262321      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    263322        IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    264            zproreg  = zprorcan(ji,jj,jk) - zpronewn(ji,jj,jk) 
    265            zproreg2 = zprorcad(ji,jj,jk) - zpronewd(ji,jj,jk) 
    266            zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 
    267            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 
    268            tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpronewn(ji,jj,jk) - zpronewd(ji,jj,jk) 
    269            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zproreg - zproreg2 
     323           zpptot   = zprorcan(ji,jj,jk) + zprorcad(ji,jj,jk) 
     324           zpnewtot = zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) 
     325           zpregtot = zpptot - zpnewtot 
     326           zprodsil  = zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * tr(ji,jj,jk,jpdia,Kbb) 
     327           zproddoc  = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 
     328           zprodfer  = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
     329           ! 
     330           tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zpptot 
     331           tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpnewtot 
     332           tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zpregtot 
    270333           tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) + zprorcan(ji,jj,jk) * texcretn 
    271            tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) + zprofen(ji,jj,jk) * texcretn 
     334           tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) + zprofen(ji,jj,jk)  * texcretn 
    272335           tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) + zprorcad(ji,jj,jk) * texcretd 
    273            tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) + zprofed(ji,jj,jk) * texcretd 
    274            tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcretd 
    275            tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zdocprod 
    276            tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + o2ut * ( zproreg + zproreg2) & 
    277            &                   + ( o2ut + o2nit ) * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) 
     336           tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) + zprofed(ji,jj,jk)  * texcretd 
     337           tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) + zprodsil 
     338           tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - zprodsil 
     339           tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zproddoc 
     340           tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + o2ut * zpregtot + ( o2ut + o2nit ) * zpnewtot 
    278341           ! 
    279            zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
    280            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zfeup 
    281            tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - texcretd * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 
    282            tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 
    283            tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) & 
    284            &                                         - rno3 * ( zproreg + zproreg2 ) 
     342           tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zprodfer 
     343           consfe3(ji,jj,jk)   = zprodfer * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) )   & 
     344           &                   * tr(ji,jj,jk,jpfer,Kbb) ) / rfact2 
     345            
     346           ! 
     347           tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zpptot 
     348           tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpnewtot - zpregtot ) 
    285349        ENDIF 
    286350      END_3D 
    287      ! 
     351 
     352     ! Production and uptake of ligands by phytoplankton. This part is activated  
     353     ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small  
     354     ! and based on the FeL model by Morel et al. (2008) and on the study of 
     355     ! Shaked et al. (2020) 
     356     ! ------------------------------------------------------------------------- 
    288357     IF( ln_ligand ) THEN 
    289          zpligprod1(:,:,:) = 0._wp    ;    zpligprod2(:,:,:) = 0._wp 
    290358         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    291359           IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    292               zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 
    293               zfeup    = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
    294               tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet 
    295               zpligprod1(ji,jj,jk) = zdocprod * ldocp 
    296               zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 
     360              zproddoc = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 
     361              zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
     362              zprodlig = plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
     363              ! 
     364              tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zproddoc * ldocp - zprodfer * zprodlig 
    297365           ENDIF 
    298366         END_3D 
     
    300368 
    301369 
     370    ! Output of the diagnostics 
    302371    ! Total primary production per year 
    303372    IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
     
    312381       CALL iom_put( "PPNEWD"  , zpronewd(:,:,:) * zfact * tmask(:,:,:)   ) ! new primary production by diatomes 
    313382       CALL iom_put( "PBSi"    , zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:)  ) ! biogenic silica production 
    314        CALL iom_put( "PFeN"    , zprofen(:,:,:) * zfact * tmask(:,:,:)  ) ! biogenic iron production by nanophyto 
    315        CALL iom_put( "PFeD"    , zprofed(:,:,:) * zfact * tmask(:,:,:)  ) ! biogenic iron production by  diatomes 
    316        IF( ln_ligand ) THEN 
    317          CALL iom_put( "LPRODP"  , zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) ) 
    318          CALL iom_put( "LDETP"   , zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) ) 
     383       CALL iom_put( "PFeN"    , zprofen(:,:,:)  * zfact * tmask(:,:,:)  ) ! biogenic iron production by nanophyto 
     384       CALL iom_put( "PFeD"    , zprofed(:,:,:)  * zfact * tmask(:,:,:)  ) ! biogenic iron production by  diatomes 
     385       IF( ln_ligand .AND. ( iom_use( "LPRODP" ) .OR. iom_use( "LDETP" ) ) ) THEN 
     386           ALLOCATE(  zpligprod(jpi,jpj,jpk) ) 
     387           zpligprod(:,:,:) = excretd * zprorcad(:,:,:) + excretn * zprorcan(:,:,:) 
     388           CALL iom_put( "LPRODP"  , zpligprod(:,:,:) * ldocp * 1e9 * zfact * tmask(:,:,:) ) 
     389           ! 
     390           zpligprod(:,:,:) = ( texcretn * zprofen(:,:,:) + texcretd * zprofed(:,:,:) ) &  
     391             &                  * plig(:,:,:) / ( rtrn + plig(:,:,:) + 75.0 * (1.0 - plig(:,:,:) ) ) 
     392           CALL iom_put( "LDETP"   , zpligprod(:,:,:)  * lthet * 1e9 * zfact * tmask(:,:,:) ) 
     393           DEALLOCATE(  zpligprod ) 
    319394       ENDIF 
    320395       CALL iom_put( "Mumax"   , zprmaxn(:,:,:) * tmask(:,:,:)  ) ! Maximum growth rate 
     
    346421      !! ** Purpose :   Initialization of phytoplankton production parameters 
    347422      !! 
    348       !! ** Method  :   Read the nampisprod namelist and check the parameters 
     423      !! ** Method  :   Read the namp4zprod namelist and check the parameters 
    349424      !!      called at the first timestep (nittrc000) 
    350425      !! 
    351       !! ** input   :   Namelist nampisprod 
     426      !! ** input   :   Namelist namp4zprod 
    352427      !!---------------------------------------------------------------------- 
    353428      INTEGER ::   ios   ! Local integer 
    354429      ! 
     430      ! Namelist block 
    355431      NAMELIST/namp4zprod/ pislopen, pisloped, xadap, bresp, excretn, excretd,  & 
    356432         &                 chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip 
     
    365441      READ  ( numnatp_ref, namp4zprod, IOSTAT = ios, ERR = 901) 
    366442901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zprod in reference namelist' ) 
     443 
    367444      READ  ( numnatp_cfg, namp4zprod, IOSTAT = ios, ERR = 902 ) 
    368445902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zprod in configuration namelist' ) 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zrem.F90

    r13295 r14385  
    33   !!                         ***  MODULE p4zrem  *** 
    44   !! TOP :   PISCES Compute remineralization/dissolution of organic compounds 
     5   !!         except for POC which is treated in p4zpoc.F90 
     6   !!         This module is common to both PISCES and PISCES-QUOTA 
    57   !!========================================================================= 
    68   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    1719   USE p4zche          !  chemical model 
    1820   USE p4zprod         !  Growth rate of the 2 phyto groups 
    19    USE p4zlim 
     21   USE p4zlim          !  Nutrient limitation terms 
    2022   USE prtctl          !  print control for debugging 
    2123   USE iom             !  I/O manager 
     
    2628 
    2729   PUBLIC   p4z_rem         ! called in p4zbio.F90 
    28    PUBLIC   p4z_rem_init    ! called in trcsms_pisces.F90 
    29    PUBLIC   p4z_rem_alloc 
    30  
    31    REAL(wp), PUBLIC ::   xremikc    !: remineralisation rate of DOC  
    32    REAL(wp), PUBLIC ::   xremikn    !: remineralisation rate of DON  
    33    REAL(wp), PUBLIC ::   xremikp    !: remineralisation rate of DOP  
    34    REAL(wp), PUBLIC ::   xremik     !: remineralisation rate of POC  
     30   PUBLIC   p4z_rem_init    ! called in trcini_pisces.F90 
     31   PUBLIC   p4z_rem_alloc   ! called in trcini_pisces.F90 
     32 
     33   !! * Shared module variables 
     34   REAL(wp), PUBLIC ::   xremikc    !: remineralisation rate of DOC (p5z)  
     35   REAL(wp), PUBLIC ::   xremikn    !: remineralisation rate of DON (p5z)  
     36   REAL(wp), PUBLIC ::   xremikp    !: remineralisation rate of DOP (p5z)  
    3537   REAL(wp), PUBLIC ::   nitrif     !: NH4 nitrification rate  
    36    REAL(wp), PUBLIC ::   xsirem     !: remineralisation rate of POC  
    37    REAL(wp), PUBLIC ::   xsiremlab  !: fast remineralisation rate of POC  
     38   REAL(wp), PUBLIC ::   xsirem     !: remineralisation rate of biogenic silica 
     39   REAL(wp), PUBLIC ::   xsiremlab  !: fast remineralisation rate of BSi 
    3840   REAL(wp), PUBLIC ::   xsilab     !: fraction of labile biogenic silica  
    3941   REAL(wp), PUBLIC ::   feratb     !: Fe/C quota in bacteria 
    40    REAL(wp), PUBLIC ::   xkferb     !: Half-saturation constant for bacteria Fe/C 
     42   REAL(wp), PUBLIC ::   xkferb     !: Half-saturation constant for bacterial Fe/C 
    4143 
    4244   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   denitr   !: denitrification array 
     
    5658      !!                     ***  ROUTINE p4z_rem  *** 
    5759      !! 
    58       !! ** Purpose :   Compute remineralization/scavenging of organic compounds 
    59       !! 
    60       !! ** Method  : - ??? 
     60      !! ** Purpose :   Compute remineralization/dissolution of organic compounds 
     61      !!                Computes also nitrification of ammonium  
     62      !!                The solubilization/remineralization of POC is treated  
     63      !!                in p4zpoc.F90. The dissolution of calcite is processed 
     64      !!                in p4zlys.F90.  
     65      !! 
     66      !! ** Method  : - Bacterial biomass is computed implicitely based on a  
     67      !!                parameterization developed from an explicit modeling 
     68      !!                of PISCES in an alternative version  
    6169      !!--------------------------------------------------------------------- 
    6270      INTEGER, INTENT(in) ::   kt, knt         ! ocean time step 
     
    6674      REAL(wp) ::   zremik, zremikc, zremikn, zremikp, zsiremin, zfact  
    6775      REAL(wp) ::   zsatur, zsatur2, znusil, znusil2, zdep, zdepmin, zfactdep 
    68       REAL(wp) ::   zbactfer, zolimit, zonitr, zrfact2 
    69       REAL(wp) ::   zammonic, zoxyremc, zoxyremn, zoxyremp 
    70       REAL(wp) ::   zosil, ztem, zdenitnh4, zolimic, zolimin, zolimip, zdenitrn, zdenitrp 
     76      REAL(wp) ::   zbactfer, zonitr, zrfact2 
     77      REAL(wp) ::   zammonic, zoxyremc, zosil, ztem, zdenitnh4, zolimic 
    7178      CHARACTER (len=25) :: charout 
    72       REAL(wp), DIMENSION(jpi,jpj    ) :: ztempbac 
    73       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zdepprod, zfacsi, zfacsib, zdepeff, zfebact 
     79      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zfacsi, zfacsib, zdepeff, zfebact 
    7480      !!--------------------------------------------------------------------- 
    7581      ! 
    7682      IF( ln_timing )   CALL timing_start('p4z_rem') 
    7783      ! 
    78       ! Initialisation of arrys 
    79       zdepprod(:,:,:) = 1._wp 
     84      ! Initialisation of arrays 
    8085      zdepeff (:,:,:) = 0.3_wp 
    81       ztempbac(:,:)   = 0._wp 
    8286      zfacsib(:,:,:)  = xsilab / ( 1.0 - xsilab ) 
    8387      zfebact(:,:,:)  = 0._wp 
    8488      zfacsi(:,:,:)   = xsilab 
    8589 
    86       ! Computation of the mean phytoplankton concentration as 
    87       ! a crude estimate of the bacterial biomass 
     90      ! Computation of the mean bacterial concentration 
    8891      ! this parameterization has been deduced from a model version 
    89       ! that was modeling explicitely bacteria 
    90       ! ------------------------------------------------------- 
    91       DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    92          zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 
     92      ! that was modeling explicitely bacteria. This is a very old param  
     93      ! that will be very soon updated based on results from a much more 
     94      ! recent version of PISCES with bacteria. 
     95      ! ---------------------------------------------------------------- 
     96      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     97         zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 
     98         zdepbac(ji,jj,jk) = 0.6 * ( MAX(0.0, tr(ji,jj,jk,jpzoo,Kbb) + tr(ji,jj,jk,jpmes,Kbb) ) * 1.0E6 )**0.6 * 1.E-6 
    9399         IF( gdept(ji,jj,jk,Kmm) < zdep ) THEN 
    94             zdepbac(ji,jj,jk) = MIN( 0.7 * ( tr(ji,jj,jk,jpzoo,Kbb) + 2.* tr(ji,jj,jk,jpmes,Kbb) ), 4.e-6 ) 
    95             ztempbac(ji,jj)   = zdepbac(ji,jj,jk) 
    96          ELSE 
    97100            zdepmin = MIN( 1., zdep / gdept(ji,jj,jk,Kmm) ) 
    98             zdepbac (ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj) 
    99             zdepprod(ji,jj,jk) = zdepmin**0.273 
    100             zdepeff (ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.3 
     101            zdepeff(ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.3 
    101102         ENDIF 
    102103      END_3D 
    103104 
    104       IF( ln_p4z ) THEN 
    105          DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    106             ! DOC ammonification. Depends on depth, phytoplankton biomass 
    107             ! and a limitation term which is supposed to be a parameterization of the bacterial activity.  
    108             zremik = xremik * xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)  
    109             zremik = MAX( zremik, 2.74e-4 * xstep ) 
    110             ! Ammonification in oxic waters with oxygen consumption 
    111             ! ----------------------------------------------------- 
    112             zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * tr(ji,jj,jk,jpdoc,Kbb)  
    113             zolimi(ji,jj,jk) = MIN( ( tr(ji,jj,jk,jpoxy,Kbb) - rtrn ) / o2ut, zolimit )  
    114             ! Ammonification in suboxic waters with denitrification 
    115             ! ------------------------------------------------------- 
    116             zammonic = zremik * nitrfac(ji,jj,jk) * tr(ji,jj,jk,jpdoc,Kbb) 
    117             denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 
    118             denitr(ji,jj,jk)  = MIN( ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenit, denitr(ji,jj,jk) ) 
    119             zoxyremc          = zammonic - denitr(ji,jj,jk) 
    120             ! 
    121             zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 
    122             denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 
    123             zoxyremc          = MAX( 0.e0, zoxyremc ) 
    124  
    125             ! 
    126             tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 
    127             tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 
    128             tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - denitr (ji,jj,jk) * rdenit 
    129             tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) - zolimi (ji,jj,jk) - denitr(ji,jj,jk) - zoxyremc 
    130             tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - zolimi (ji,jj,jk) * o2ut 
    131             tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 
    132             tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zolimi(ji,jj,jk) + zoxyremc    & 
    133             &                     + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
    134          END_3D 
    135       ELSE 
    136          DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    137             ! DOC ammonification. Depends on depth, phytoplankton biomass 
    138             ! and a limitation term which is supposed to be a parameterization of the bacterial activity.  
    139             ! ----------------------------------------------------------------- 
    140             zremik = xstep / 1.e-6 * MAX(0.01, xlimbac(ji,jj,jk)) * zdepbac(ji,jj,jk)  
    141             zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 
    142  
    143             zremikc = xremikc * zremik 
    144             zremikn = xremikn / xremikc 
    145             zremikp = xremikp / xremikc 
    146  
    147             ! Ammonification in oxic waters with oxygen consumption 
    148             ! ----------------------------------------------------- 
    149             zolimit = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * tr(ji,jj,jk,jpdoc,Kbb)  
    150             zolimic = MAX( 0.e0, MIN( ( tr(ji,jj,jk,jpoxy,Kbb) - rtrn ) / o2ut, zolimit ) )  
    151             zolimi(ji,jj,jk) = zolimic 
    152             zolimin = zremikn * zolimic * tr(ji,jj,jk,jpdon,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 
    153             zolimip = zremikp * zolimic * tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn )  
    154  
    155             ! Ammonification in suboxic waters with denitrification 
    156             ! ------------------------------------------------------- 
    157             zammonic = zremikc * nitrfac(ji,jj,jk) * tr(ji,jj,jk,jpdoc,Kbb) 
    158             denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 
    159             denitr(ji,jj,jk)  = MAX(0., MIN(  ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenit, denitr(ji,jj,jk) ) ) 
    160             zoxyremc          = MAX(0., zammonic - denitr(ji,jj,jk)) 
    161             zdenitrn  = zremikn * denitr(ji,jj,jk) * tr(ji,jj,jk,jpdon,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 
    162             zdenitrp  = zremikp * denitr(ji,jj,jk) * tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 
    163             zoxyremn  = zremikn * zoxyremc * tr(ji,jj,jk,jpdon,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 
    164             zoxyremp  = zremikp * zoxyremc * tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 
    165  
    166             tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zolimip + zdenitrp + zoxyremp 
    167             tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zolimin + zdenitrn + zoxyremn 
    168             tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - denitr(ji,jj,jk) * rdenit 
    169             tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) - zolimic - denitr(ji,jj,jk) - zoxyremc 
    170             tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) - zolimin - zdenitrn - zoxyremn 
    171             tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) - zolimip - zdenitrp - zoxyremp 
    172             tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - zolimic * o2ut 
    173             tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 
    174             tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zolimin + zoxyremn + ( rdenit + 1.) * zdenitrn ) 
    175          END_3D 
    176          ! 
    177       ENDIF 
    178  
     105      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     106         ! DOC ammonification. Depends on depth, phytoplankton biomass 
     107         ! and a limitation term which is supposed to be a parameterization of the bacterial activity.  
     108         ! -------------------------------------------------------------------------- 
     109         zremik = xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)  
     110         zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 
     111         zremikc = xremikc * zremik 
     112 
     113         ! Ammonification in oxic waters with oxygen consumption 
     114         ! ----------------------------------------------------- 
     115         zolimic = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * tr(ji,jj,jk,jpdoc,Kbb)  
     116         zolimic = MIN( ( tr(ji,jj,jk,jpoxy,Kbb) - rtrn ) / o2ut, zolimic )  
     117         zolimi(ji,jj,jk) = zolimic 
     118 
     119         ! Ammonification in suboxic waters with denitrification 
     120         ! ----------------------------------------------------- 
     121         zammonic = zremikc * nitrfac(ji,jj,jk) * tr(ji,jj,jk,jpdoc,Kbb) 
     122         denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 
     123         denitr(ji,jj,jk)  = MAX(0., MIN(  ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenit, denitr(ji,jj,jk) ) ) 
     124 
     125         ! Ammonification in waters depleted in O2 and NO3 based on  
     126         ! other redox processes 
     127         ! -------------------------------------------------------- 
     128         zoxyremc          = MAX(0., zammonic - denitr(ji,jj,jk) ) 
     129 
     130         ! Update of the the trends arrays 
     131         tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - denitr (ji,jj,jk) * rdenit 
     132         tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) - ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     133         tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - zolimic * o2ut 
     134         tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 
     135         IF( ln_p4z ) THEN ! PISCES-std 
     136            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 
     137            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 
     138            tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zolimic + zoxyremc + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
     139         ELSE  ! PISCES-QUOTA (p5z) 
     140            zremikn = xremikn / xremikc * tr(ji,jj,jk,jpdon,kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 
     141            zremikp = xremikp / xremikc * tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 
     142            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zremikp * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     143            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zremikn * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     144            tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) - zremikn * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     145            tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) - zremikp * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     146            tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zremikn * ( zolimic + zoxyremc + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
     147         ENDIF 
     148      END_3D 
    179149 
    180150      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     
    194164      END_3D 
    195165 
    196        IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging) 
     166      IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging) 
    197167         WRITE(charout, FMT="('rem1')") 
    198168         CALL prt_ctl_info( charout, cdcomp = 'top' ) 
    199169         CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm) 
    200        ENDIF 
     170      ENDIF 
    201171 
    202172      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     
    206176         ! studies (especially at Papa) have shown this uptake to be significant 
    207177         ! ---------------------------------------------------------- 
    208          zbactfer = feratb *  rfact2 * 0.6_wp / rday * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk)     & 
    209             &              * tr(ji,jj,jk,jpfer,Kbb) / ( xkferb + tr(ji,jj,jk,jpfer,Kbb) )    & 
    210             &              * zdepprod(ji,jj,jk) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 
    211          tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zbactfer*0.33 
    212          tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zbactfer*0.25 
    213          tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zbactfer*0.08 
    214          zfebact(ji,jj,jk)   = zbactfer * 0.33 
    215          blim(ji,jj,jk)      = xlimbacl(ji,jj,jk)  * zdepbac(ji,jj,jk) / 1.e-6 * zdepprod(ji,jj,jk) 
     178         zbactfer = feratb * 0.6_wp * xstep * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) * tr(ji,jj,jk,jpfer,Kbb)    & 
     179           &       / ( xkferb + tr(ji,jj,jk,jpfer,Kbb) ) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 
     180          
     181         ! Only the transfer of iron from its dissolved form to particles 
     182         ! is treated here. The GGE of bacteria supposed to be equal to  
     183         ! 0.33. This is hard-coded.  
     184         tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zbactfer*0.18 
     185         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zbactfer*0.15 
     186         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zbactfer*0.03 
     187         zfebact(ji,jj,jk)   = zbactfer * 0.18 
     188         blim(ji,jj,jk)      = xlimbacl(ji,jj,jk)  * zdepbac(ji,jj,jk) / 1.e-6 
    216189      END_3D 
    217190 
     
    225198      ! of bSi. Set to a constant in the upper ocean 
    226199      ! --------------------------------------------------------------- 
    227  
    228       DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     200      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     201 
     202         ! Remineralization rate of BSi dependent on T and saturation 
     203         ! The parameterization is taken from Ridgwell et al. (2002)  
     204         ! --------------------------------------------------------- 
    229205         zdep     = MAX( hmld(ji,jj), heup_01(ji,jj) ) 
    230206         zsatur   = MAX( rtrn, ( sio3eq(ji,jj,jk) - tr(ji,jj,jk,jpsil,Kbb) ) / ( sio3eq(ji,jj,jk) + rtrn ) ) 
    231207         zsatur2  = ( 1. + ts(ji,jj,jk,jp_tem,Kmm) / 400.)**37 
    232208         znusil   = 0.225  * ( 1. + ts(ji,jj,jk,jp_tem,Kmm) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 
    233          ! Remineralization rate of BSi depedant on T and saturation 
    234          ! --------------------------------------------------------- 
     209  
     210         ! Two fractions of bSi are considered : a labile one and a more 
     211         ! refractory one based on the commonly observed two step  
     212         ! dissolution of bSi (initial rapid dissolution followed by  
     213         ! more slowly dissolution). 
     214         ! Computation of the vertical evolution of the labile fraction 
     215         ! of bSi. This is computed assuming steady state. 
     216         ! -------------------------------------------------------------- 
    235217         IF ( gdept(ji,jj,jk,Kmm) > zdep ) THEN 
    236218            zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk-1) * EXP( -0.5 * ( xsiremlab - xsirem )  & 
     
    283265      !! 
    284266      !!---------------------------------------------------------------------- 
    285       NAMELIST/nampisrem/ xremik, nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, &  
     267      NAMELIST/nampisrem/ nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, &  
    286268         &                xremikc, xremikn, xremikp 
    287269      INTEGER :: ios                 ! Local integer output status for namelist read 
     
    303285         WRITE(numout,*) '   Namelist parameters for remineralization, nampisrem' 
    304286         IF( ln_p4z ) THEN 
    305             WRITE(numout,*) '      remineralization rate of DOC              xremik    =', xremik 
     287            WRITE(numout,*) '      remineralization rate of DOC              xremikc   =', xremikc 
    306288         ELSE 
    307289            WRITE(numout,*) '      remineralization rate of DOC              xremikc   =', xremikc 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zsed.F90

    r13546 r14385  
    6666      REAL(wp) ::  zsiloss, zcaloss, zws3, zws4, zwsc, zdep 
    6767      REAL(wp) ::  zwstpoc, zwstpon, zwstpop 
    68       REAL(wp) ::  ztrfer, ztrpo4s, ztrdp, zwdust, zmudia, ztemp 
     68      REAL(wp) ::  ztrfer, ztrpo4, ztrdop, zmudia, ztemp 
    6969      REAL(wp) ::  xdiano3, xdianh4 
     70      REAL(wp) ::  zsoufer, zlight 
    7071      ! 
    7172      CHARACTER (len=25) :: charout 
    72       REAL(wp), DIMENSION(jpi,jpj    ) :: zdenit2d, zbureff, zwork 
     73      REAL(wp), DIMENSION(jpi,jpj    ) :: zdenit2d, zbureff 
    7374      REAL(wp), DIMENSION(jpi,jpj    ) :: zwsbio3, zwsbio4 
    7475      REAL(wp), DIMENSION(jpi,jpj    ) :: zsedcal, zsedsi, zsedc 
    75       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsoufer, zlight 
    76       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrpo4, ztrdop, zirondep, zpdep 
    7776      !!--------------------------------------------------------------------- 
    7877      ! 
     
    8180 
    8281      ! Allocate temporary workspace 
    83       ALLOCATE( ztrpo4(jpi,jpj,jpk) ) 
    84       IF( ln_p5z )    ALLOCATE( ztrdop(jpi,jpj,jpk) ) 
    85  
    8682      zdenit2d(:,:) = 0.e0 
    8783      zbureff (:,:) = 0.e0 
    88       zwork   (:,:) = 0.e0 
    8984      zsedsi  (:,:) = 0.e0 
    9085      zsedcal (:,:) = 0.e0 
    9186      zsedc   (:,:) = 0.e0 
    9287 
     88      ! OA: Warning, the following part is necessary to avoid CFL problems  
     89      ! above the sediments. Vertical sinking speed is limited using the  
     90      ! typical CFL criterion 
     91      ! -------------------------------------------------------------------- 
     92      DO_2D( 1, 1, 1, 1 ) 
     93         ikt  = mbkt(ji,jj) 
     94         zdep = e3t(ji,jj,ikt,Kmm) / xstep 
     95         zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) ) 
     96         zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) ) 
     97      END_2D 
     98 
    9399      IF( .NOT.lk_sed ) THEN 
    94          ! OA: Warning, the following part is necessary to avoid CFL problems above the sediments 
    95          ! -------------------------------------------------------------------- 
    96          DO_2D( 1, 1, 1, 1 ) 
    97             ikt  = mbkt(ji,jj) 
    98             zdep = e3t(ji,jj,ikt,Kmm) / xstep 
    99             zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) ) 
    100             zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) ) 
    101          END_2D 
    102  
    103          ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used 
    104          ! Computation of the fraction of organic matter that is permanently buried from Dunne's model 
     100 
     101         ! Computation of the sediment denitrification proportion: The metamodel  
     102         ! from Middleburg (2006) is used 
     103         ! Computation of the fraction of organic matter that is permanently  
     104         ! buried from Dunne's model (2007) 
    105105         ! ------------------------------------------------------- 
    106106         DO_2D( 1, 1, 1, 1 ) 
     
    125125      ENDIF 
    126126 
    127       ! This loss is scaled at each bottom grid cell for equilibrating the total budget of silica in the ocean. 
    128       ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers) 
    129       ! ------------------------------------------------------ 
     127      ! Fraction of dSi that is dissolved in the sediments. This fraction is   
     128      ! set to a constant value in p4zsbc 
     129      ! -------------------------------------------------------------------- 
    130130      IF( .NOT.lk_sed )  zrivsil = 1._wp - sedsilfrac 
    131131 
     132      ! Loss of bSi and CaCO3 to the sediments 
    132133      DO_2D( 1, 1, 1, 1 ) 
    133134         ikt  = mbkt(ji,jj) 
     
    142143      ! 
    143144      IF( .NOT.lk_sed ) THEN 
     145         ! Dissolution of CaCO3 and bSi in the sediments. This is  
     146         ! instantaneous since here sediments are not explicitly  
     147         ! modeled. The amount of CaCO3 that dissolves in the sediments 
     148         ! is computed using a metamodel constructed from Archer (1996) 
     149         ! A minimum set to sedcalfrac is preserved. This value is defined in p4zbc 
     150         ! ---------------------------------------------------------------              
    144151         DO_2D( 1, 1, 1, 1 ) 
    145152            ikt  = mbkt(ji,jj) 
     
    160167      ENDIF 
    161168      ! 
     169      ! Loss of particulate organic carbon and Fe to the sediments 
    162170      DO_2D( 1, 1, 1, 1 ) 
    163171         ikt  = mbkt(ji,jj) 
     
    171179      END_2D 
    172180      ! 
     181      ! Loss of particulate organic N and P to the sediments (p5z) 
    173182      IF( ln_p5z ) THEN 
    174183         DO_2D( 1, 1, 1, 1 ) 
     
    185194 
    186195      IF( .NOT.lk_sed ) THEN 
     196         ! Degradation of organic matter in the sediments. The metamodel of  
     197         ! Middleburg (2006) is used here to mimic the diagenetic reactions.  
    187198         ! The 0.5 factor in zpdenit is to avoid negative NO3 concentration after 
    188199         ! denitrification in the sediments. Not very clever, but simpliest option. 
     200         ! ------------------------------------------------------------------------ 
    189201         DO_2D( 1, 1, 1, 1 ) 
    190202            ikt  = mbkt(ji,jj) 
     
    192204            zws4 = zwsbio4(ji,jj) * zdep 
    193205            zws3 = zwsbio3(ji,jj) * zdep 
     206            ! Fraction that is permanently buried in the sediments             
    194207            zrivno3 = 1. - zbureff(ji,jj) 
    195208            zwstpoc = tr(ji,jj,ikt,jpgoc,Kbb) * zws4 + tr(ji,jj,ikt,jppoc,Kbb) * zws3 
     209            ! Denitrification in the sediments             
    196210            zpdenit  = MIN( 0.5 * ( tr(ji,jj,ikt,jpno3,Kbb) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
     211            ! Fraction that is not denitrified 
    197212            z1pdenit = zwstpoc * zrivno3 - zpdenit 
     213            ! Oxic remineralization of organic matter in the sediments 
    198214            zolimit = MIN( ( tr(ji,jj,ikt,jpoxy,Kbb) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 
     215            ! The fraction that cannot be denitrified nor oxidized by O2 
     216            ! is released back to the water column as DOC            
    199217            tr(ji,jj,ikt,jpdoc,Krhs) = tr(ji,jj,ikt,jpdoc,Krhs) + z1pdenit - zolimit 
     218            ! Update of the tracers concentrations             
    200219            tr(ji,jj,ikt,jppo4,Krhs) = tr(ji,jj,ikt,jppo4,Krhs) + zpdenit + zolimit 
    201220            tr(ji,jj,ikt,jpnh4,Krhs) = tr(ji,jj,ikt,jpnh4,Krhs) + zpdenit + zolimit 
     
    206225            sdenit(ji,jj) = rdenit * zpdenit * e3t(ji,jj,ikt,Kmm) 
    207226            zsedc(ji,jj)   = (1. - zrivno3) * zwstpoc * e3t(ji,jj,ikt,Kmm) 
     227            ! PISCES-QUOTA (p5z)             
    208228            IF( ln_p5z ) THEN 
    209229               zwstpop              = tr(ji,jj,ikt,jpgop,Kbb) * zws4 + tr(ji,jj,ikt,jppop,Kbb) * zws3 
     
    215235       ENDIF 
    216236 
    217  
    218       ! Nitrogen fixation process 
    219       ! Small source iron from particulate inorganic iron 
    220       !----------------------------------- 
    221       DO jk = 1, jpkm1 
    222          zlight (:,:,jk) =  ( 1.- EXP( -etot_ndcy(:,:,jk) / diazolight ) ) * ( 1. - fr_i(:,:) )  
    223          zsoufer(:,:,jk) = zlight(:,:,jk) * 2E-11 / ( 2E-11 + biron(:,:,jk) ) 
    224       ENDDO 
     237      ! Nitrogen fixation process : light limitation of diazotrophy 
     238      ! Small source of iron from particulate inorganic iron (photochemistry) 
     239      ! This is a purely adhoc param. 
     240      !---------------------------------------------------------------------- 
     241 
     242      ! Diazotrophy (nitrogen fixation) is modeled according to an empirical 
     243      ! formulation. This is described in Aumont et al. (2015). Limitation  
     244      ! by P and Fe is computed. Inhibition by high N concentrations is imposed. 
     245      ! Diazotrophy sensitivity to temperature is parameterized as in  
     246      ! Ye et al. (2012)   
     247      ! ------------------------------------------------------------------------     
    225248      IF( ln_p4z ) THEN 
     249         ! PISCES part               
    226250         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    227             !                      ! Potential nitrogen fixation dependant on temperature and iron 
     251            ! Potential nitrogen fixation dependant on temperature and iron 
    228252            ztemp = ts(ji,jj,jk,jp_tem,Kmm) 
    229             zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 
    230             !       Potential nitrogen fixation dependant on temperature and iron 
     253            zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) / rno3 
     254            ! Nitrogen fixation is inhibited when enough NO3 and/or NH4 
     255            zlim = ( 1.- xnanonh4(ji,jj,jk) - xnanono3(ji,jj,jk) ) 
     256            zfact = zlim * rfact2 
     257            ! Nitrogen fixation limitation by PO4 and Fe             
     258            ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 
     259            ztrpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) ) 
     260            zlight =  ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) * ( 1. - fr_i(ji,jj) )  
     261            nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrpo4 ) * zlight 
     262         END_3D 
     263      ELSE       
     264         ! PISCES-QUOTA part 
     265         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     266            !  Potential nitrogen fixation dependant on temperature and iron 
     267            ztemp = ts(ji,jj,jk,jp_tem,Kmm) 
     268            zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) / rno3 
     269            ! Nitrogen fixation is inhibited when enough NO3 and/or NH4 
    231270            xdianh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concnnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 
    232271            xdiano3 = tr(ji,jj,jk,jpno3,Kbb) / ( concnno3 + tr(ji,jj,jk,jpno3,Kbb) ) * (1. - xdianh4) 
     
    234273            IF( zlim <= 0.1 )   zlim = 0.01 
    235274            zfact = zlim * rfact2 
     275            ! Nitrogen fixation limitation by PO4/DOP and Fe             
    236276            ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 
    237             ztrpo4(ji,jj,jk) = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) ) 
    238             ztrdp = ztrpo4(ji,jj,jk) 
    239             nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrdp ) * zlight(ji,jj,jk) 
    240          END_3D 
    241       ELSE       ! p5z 
    242          DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    243             !                      ! Potential nitrogen fixation dependant on temperature and iron 
    244             ztemp = ts(ji,jj,jk,jp_tem,Kmm) 
    245             zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 
    246             !       Potential nitrogen fixation dependant on temperature and iron 
    247             xdianh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concnnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 
    248             xdiano3 = tr(ji,jj,jk,jpno3,Kbb) / ( concnno3 + tr(ji,jj,jk,jpno3,Kbb) ) * (1. - xdianh4) 
    249             zlim = ( 1.- xdiano3 - xdianh4 ) 
    250             IF( zlim <= 0.1 )   zlim = 0.01 
    251             zfact = zlim * rfact2 
    252             ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 
    253             ztrpo4(ji,jj,jk) = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) ) 
    254             ztrdop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( 1E-6 + tr(ji,jj,jk,jpdop,Kbb) ) * (1. - ztrpo4(ji,jj,jk)) 
    255             ztrdp = ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) 
    256             nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrdp ) * zlight(ji,jj,jk) 
     277            ztrpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) ) 
     278            ztrdop = tr(ji,jj,jk,jpdop,Kbb) / ( 1E-6 + tr(ji,jj,jk,jpdop,Kbb) ) * (1. - ztrpo4) 
     279            zlight =  ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) * ( 1. - fr_i(ji,jj) )  
     280            nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrpo4 + ztrdop ) * zlight 
    257281         END_3D 
    258282      ENDIF 
     
    261285      ! ---------------------------------------- 
    262286      IF( ln_p4z ) THEN 
     287         ! PISCES part               
    263288         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    264289            zfact = nitrpot(ji,jj,jk) * nitrfix 
     290            ! 1/3 of the diazotrophs growth is supposed to be excreted 
     291            ! as NH4. 1/3 as DOC and the rest is routed to POC/GOC as  
     292            ! a result of mortality by predation. Completely adhoc param             
    265293            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zfact / 3.0 
    266294            tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zfact / 3.0 
     
    270298            tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zfact * 1.0 / 3.0 * 1.0 / 3.0 
    271299            tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0 
     300            ! Fe/c of diazotrophs is assumed to be 30umol Fe/mol C at max             
     301            zlight  =  ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) * ( 1. - fr_i(ji,jj) )  
     302            zsoufer = zlight * 2E-11 / ( 2E-11 + biron(ji,jj,jk) ) 
    272303            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - 30E-6 * zfact * 1.0 / 3.0 
    273304            tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0 
    274305            tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0 
    275             tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 
     306            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.002 * 4E-10 * zsoufer * rfact2 / rday 
    276307            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + concdnh4 / ( concdnh4 + tr(ji,jj,jk,jppo4,Kbb) ) & 
    277308            &                     * 0.001 * tr(ji,jj,jk,jpdoc,Kbb) * xstep 
    278309         END_3D 
    279310      ELSE    ! p5z 
     311         ! PISCES-QUOTA part               
    280312         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    281313            zfact = nitrpot(ji,jj,jk) * nitrfix 
     314            ! 1/3 of the diazotrophs growth is supposed to be excreted 
     315            ! as NH4. 1/3 as DOC and the rest is routed POC and GOC as  
     316            ! a result of mortality by predation. Completely adhoc param              
    282317            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zfact / 3.0 
    283318            tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zfact / 3.0 
     319            ! N/P ratio of diazotrophs is supposed to be 46     
     320            ztrpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) ) 
     321            ztrdop = tr(ji,jj,jk,jpdop,Kbb) / ( 1E-6 + tr(ji,jj,jk,jpdop,Kbb) ) * (1. - ztrpo4) 
     322         
    284323            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - 16.0 / 46.0 * zfact * ( 1.0 - 1.0 / 3.0 ) & 
    285             &                     * ztrpo4(ji,jj,jk) / (ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) + rtrn) 
     324            &                     * ztrpo4 / (ztrpo4 + ztrdop + rtrn) 
    286325            tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zfact * 1.0 / 3.0 
    287326            tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zfact * 1.0 / 3.0 
    288327            tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + 16.0 / 46.0 * zfact / 3.0  & 
    289             &                     - 16.0 / 46.0 * zfact * ztrdop(ji,jj,jk)   & 
    290             &                     / (ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) + rtrn) 
     328            &                     - 16.0 / 46.0 * zfact * ztrdop / (ztrpo4 + ztrdop + rtrn) 
    291329            tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zfact * 1.0 / 3.0 * 2.0 / 3.0 
    292330            tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + zfact * 1.0 / 3.0 * 2.0 /3.0 
     
    296334            tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 1.0 /3.0 
    297335            tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0 
     336            ! Fe/c of diazotrophs is assumed to be 30umol Fe/mol C at max            
     337            zlight  =  ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) * ( 1. - fr_i(ji,jj) )  
     338            zsoufer = zlight * 2E-11 / ( 2E-11 + biron(ji,jj,jk) ) 
    298339            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - 30E-6 * zfact * 1.0 / 3.0  
    299340            tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0 
    300341            tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0 
    301             tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 
     342            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.002 * 4E-10 * zsoufer * rfact2 / rday 
    302343         END_3D 
    303344         ! 
     
    319360      ENDIF 
    320361      ! 
    321       IF( ln_p5z )    DEALLOCATE( ztrpo4, ztrdop ) 
    322       ! 
    323362      IF( ln_timing )  CALL timing_stop('p4z_sed') 
    324363      ! 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zsink.F90

    r13295 r14385  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p4zsink  *** 
    4    !! TOP :  PISCES  vertical flux of particulate matter due to gravitational sinking 
     4   !! TOP :  PISCES  vertical flux of particulate matter due to  
     5   !!        gravitational sinking 
     6   !!        This module is the same for both PISCES and PISCES-QUOTA 
    57   !!====================================================================== 
    68   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    810   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Change aggregation formula 
    911   !!             3.5  !  2012-07  (O. Aumont) Introduce potential time-splitting 
     12   !!             4.0  !  2019     (O. Aumont) an external subroutine is called 
     13   !!                                          to compute the impact of sinking 
    1014   !!---------------------------------------------------------------------- 
    1115   !!   p4z_sink       :  Compute vertical flux of particulate matter due to gravitational sinking 
     
    2529 
    2630   PUBLIC   p4z_sink         ! called in p4zbio.F90 
    27    PUBLIC   p4z_sink_init    ! called in trcsms_pisces.F90 
    28    PUBLIC   p4z_sink_alloc 
     31   PUBLIC   p4z_sink_init    ! called in trcini_pisces.F90 
     32   PUBLIC   p4z_sink_alloc   ! called in trcini_pisces.F90 
    2933 
    3034   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinking, sinking2  !: POC sinking fluxes  
    3135   !                                                          !  (different meanings depending on the parameterization) 
    32    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkingn, sinking2n  !: POC sinking fluxes  
    33    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkingp, sinking2p  !: POC sinking fluxes  
     36   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkingn, sinking2n  !: PON sinking fluxes  
     37   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkingp, sinking2p  !: POP sinking fluxes  
    3438   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkcal, sinksil   !: CaCO3 and BSi sinking fluxes 
    3539   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkfer            !: Small BFe sinking fluxes 
     
    4852CONTAINS 
    4953 
    50    !!---------------------------------------------------------------------- 
    51    !!   'standard sinking parameterisation'                  ??? 
    52    !!---------------------------------------------------------------------- 
    53  
    5454   SUBROUTINE p4z_sink ( kt, knt, Kbb, Kmm, Krhs ) 
    5555      !!--------------------------------------------------------------------- 
     
    5757      !! 
    5858      !! ** Purpose :   Compute vertical flux of particulate matter due to  
    59       !!                gravitational sinking 
    60       !! 
    61       !! ** Method  : - ??? 
     59      !!                gravitational sinking.  
     60      !! 
     61      !! ** Method  : - An external advection subroutine is called to compute 
     62      !!                the impact of sinking on the particles. The tracers 
     63      !!                concentrations are updated in this subroutine which 
     64      !!                is mandatory to deal with negative concentrations 
    6265      !!--------------------------------------------------------------------- 
    6366      INTEGER, INTENT(in) :: kt, knt 
     
    7780      consgoc(:,:,:) = 0. 
    7881 
    79       ! 
    80       !    Sinking speeds of detritus is increased with depth as shown 
    81       !    by data and from the coagulation theory 
    82       !    ----------------------------------------------------------- 
     82      ! Sinking speeds of big detritus is increased with depth as shown 
     83      ! by data and from the coagulation theory. This is controled by 
     84      ! wsbio2max and wsbio2scale. If wsbio2max is set to wsbio2, then 
     85      ! sinking speed is constant with depth. 
     86      ! CaCO3 and bSi are supposed to sink at the big particles speed  
     87      ! due to their high density 
     88      ! --------------------------------------------------------------- 
    8389      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    8490         zmax  = MAX( heup_01(ji,jj), hmld(ji,jj) ) 
     
    8793      END_3D 
    8894 
    89       ! limit the values of the sinking speeds to avoid numerical instabilities   
     95      ! Sinking speed of the small particles is always constant 
    9096      wsbio3(:,:,:) = wsbio 
    9197 
    92       ! 
    93       !  Initializa to zero all the sinking arrays  
    94       !   ----------------------------------------- 
     98      ! Initialize to zero all the sinking arrays  
     99      ! ----------------------------------------- 
    95100      sinking (:,:,:) = 0.e0 
    96101      sinking2(:,:,:) = 0.e0 
     
    100105      sinkfer2(:,:,:) = 0.e0 
    101106 
    102       !   Compute the sedimentation term using p4zsink2 for all the sinking particles 
    103       !   ----------------------------------------------------- 
     107      ! Compute the sedimentation term using trc_sink for all the sinking particles 
     108      ! --------------------------------------------------------------------------- 
    104109      CALL trc_sink( kt, Kbb, Kmm, wsbio3, sinking , jppoc, rfact2 ) 
    105110      CALL trc_sink( kt, Kbb, Kmm, wsbio3, sinkfer , jpsfe, rfact2 ) 
     
    109114      CALL trc_sink( kt, Kbb, Kmm, wsbio4, sinkcal , jpcal, rfact2 ) 
    110115 
     116      ! PISCES-QUOTA part 
    111117      IF( ln_p5z ) THEN 
    112118         sinkingn (:,:,:) = 0.e0 
     
    115121         sinking2p(:,:,:) = 0.e0 
    116122 
    117          !   Compute the sedimentation term using p4zsink2 for all the sinking particles 
    118          !   ----------------------------------------------------- 
     123         ! Compute the sedimentation term using trc_sink for all the sinking particles 
     124         ! --------------------------------------------------------------------------- 
    119125         CALL trc_sink( kt, Kbb, Kmm, wsbio3, sinkingn , jppon, rfact2 ) 
    120126         CALL trc_sink( kt, Kbb, Kmm, wsbio3, sinkingp , jppop, rfact2 ) 
     
    156162      !!---------------------------------------------------------------------- 
    157163      !!                  ***  ROUTINE p4z_sink_init  *** 
     164      !! 
     165      !! ** Purpose :   Initialization of sinking parameters 
     166      !! 
     167      !! ** Method  :    
     168      !! 
     169      !! ** input   :    
    158170      !!---------------------------------------------------------------------- 
    159171      INTEGER :: jk 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zsms.F90

    r14086 r14385  
    2929   PRIVATE 
    3030 
    31    PUBLIC   p4z_sms_init   ! called in p4zsms.F90 
    32    PUBLIC   p4z_sms        ! called in p4zsms.F90 
     31   PUBLIC   p4z_sms_init   ! called in trcini_pisces.F90 
     32   PUBLIC   p4z_sms        ! called in trcsms_pisces.F90 
    3333 
    3434   INTEGER ::    numco2, numnut, numnit      ! logical unit for co2 budget 
    35    REAL(wp) ::   alkbudget, no3budget, silbudget, ferbudget, po4budget 
     35   REAL(wp) ::   alkbudget, no3budget, silbudget, ferbudget, po4budget ! total budget of the different conservative elements 
    3636   REAL(wp) ::   xfact, xfact1, xfact2, xfact3 
    3737 
     
    5555      !!              routines of PISCES bio-model 
    5656      !! 
    57       !! ** Method  : - at each new day ... 
    58       !!              - several calls of bio and sed ??? 
    59       !!              - ... 
     57      !! ** Method  : - calls the various SMS subroutines 
     58      !!              - calls the sediment module (if ln_sediment)   
     59      !!              - several calls of bio and sed (possible time-splitting) 
     60      !!              - handles the potential negative concentrations (xnegtr) 
    6061      !!--------------------------------------------------------------------- 
    6162      ! 
     
    9091      IF( ln_pisdmp .AND. MOD( kt - 1, nn_pisdmp ) == 0 )   CALL p4z_dmp( kt, Kbb, Kmm )      ! Relaxation of some tracers 
    9192      ! 
    92       rfact = rDt_trc 
     93      rfact = rDt_trc  ! time step of PISCES 
    9394      ! 
    9495      IF( ( ln_top_euler .AND. kt == nittrc000 )  .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + 1 ) ) THEN 
    95          rfactr  = 1. / rfact 
    96          rfact2  = rfact / REAL( nrdttrc, wp ) 
    97          rfact2r = 1. / rfact2 
    98          xstep = rfact2 / rday         ! Time step duration for biology 
     96         rfactr  = 1. / rfact  ! inverse of the time step 
     97         rfact2  = rfact / REAL( nrdttrc, wp )  ! time step of the biological SMS 
     98         rfact2r = 1. / rfact2  ! Inverse of the biological time step 
     99         xstep = rfact2 / rday         ! Time step duration for biology relative to a day 
    99100         xfact = 1.e+3 * rfact2r 
    100101         IF(lwp) WRITE(numout,*)  
     
    128129  &