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

Changeset 15459


Ignore:
Timestamp:
2021-10-29T10:19:18+02:00 (7 months ago)
Author:
cetlod
Message:

Various bug fixes and more comments in PISCES routines ; sette test OK in debug mode, nn_hls=1/2, with tiling ; run.stat unchanged ; of course tracer.stat different

Location:
NEMO/trunk
Files:
1 added
31 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/cfgs/SHARED/axis_def_nemo.xml

    r14072 r15459  
    2929  <axis id="section_ice" n_glo="4" /> 
    3030  <axis id="gau" /> 
     31  <!-- PISCES Sediment vertical axis definition --> 
     32  <axis id="profsed" long_name="Vertical S levels" unit="cm" positive="down"/> 
    3133</axis_definition> 
  • NEMO/trunk/cfgs/SHARED/field_def_nemo-oce.xml

    r15457 r15459  
    11221122  <!-- shared variables available with TOP interface --> 
    11231123  <field_group id="top_shared" grid_ref="grid_T_3D"> 
    1124     <field id="xbla"           long_name="Broadband light attenuation"                     unit="-"                            /> 
     1124    <field id="xeps"           long_name="Broadband light attenuation"                     unit="-"                            /> 
    11251125    <field id="Heup"           long_name="Euphotic layer depth"                            unit="m"     grid_ref="grid_T_2D"   /> 
    11261126  </field_group> 
  • NEMO/trunk/cfgs/SHARED/field_def_nemo-pisces.xml

    r14209 r15459  
    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="FlxLig"      long_name="Ligand sediment flux"                    unit="mol/cm2/s"     /> 
     155       <field id="dzdep"       long_name="Sedimentation rate"                      unit="cm/s"     /> 
     156       <field id="sflxclay"    long_name="Clay sedimentation rate"                 unit="g/cm2/s"     /> 
     157       <field id="sflxbsi"     long_name="BSi sedimentation rate"                  unit="g/cm2/s"     /> 
     158       <field id="sflxpoc"     long_name="POC sedimentation rate"                  unit="g/cm2/s"     /> 
     159       <field id="sflxcal"     long_name="Calcite sedimentation rate"              unit="g/cm2/s"     /> 
     160       <field id="sflxfeo"     long_name="Fe(OH)3 Sedimentation rate"              unit="mol/cm2/s"     /> 
     161       <field id="FlxClay"     long_name="Clay burial rate"                        unit="g/cm2/s"     /> 
     162       <field id="FlxCaCO3"    long_name="Calcite burial rate"                     unit="g/cm2/s"     /> 
     163       <field id="FlxBSi"      long_name="BSi burial rate"                         unit="g/cm2/s"     /> 
     164       <field id="FlxPOC"      long_name="POC burial rate"                         unit="g/cm2/s"     /> 
     165       <field id="FlxFeO"      long_name="Fe(OH)3 burial rate"                     unit="g/cm2/s"     /> 
     166       <field id="FlxFeS"      long_name="FeS burial rate"                         unit="g/cm2/s"     /> 
     167       <field id="FlxPOR"      long_name="POR burial rate"                         unit="g/cm2/s"     /> 
     168       <field id="FlxPOS"      long_name="POS burial rate"                         unit="g/cm2/s"     /> 
     169       <field id="Flxtot"      long_name="total burial flux"                       unit="g/cm2/s"     /> 
     170       <field id="Rstepros"    long_name="Number of iterations"                    unit="-"     /> 
    159171  </field_group> 
    160172 
     
    205217    <field id="SIZEP"       long_name="Mean relative size of picophyto."        unit="-"          grid_ref="grid_T_3D" /> 
    206218    <field id="SIZED"       long_name="Mean relative size of diatoms"           unit="-"          grid_ref="grid_T_3D" /> 
     219    <field id="RASSD"       long_name="Size of the protein machinery (Diat.)"   unit="-"          grid_ref="grid_T_3D" /> 
     220    <field id="RASSN"       long_name="Size of the protein machinery (Nano.)"   unit="-"          grid_ref="grid_T_3D" /> 
     221    <field id="RASSP"       long_name="Size of the protein machinery (Pico.)"   unit="-"          grid_ref="grid_T_3D" /> 
    207222    <field id="Fe3"         long_name="Iron III concentration"                  unit="nmol/m3"    grid_ref="grid_T_3D" /> 
    208223    <field id="FeL1"        long_name="Complexed Iron concentration with L1"    unit="nmol/m3"    grid_ref="grid_T_3D" /> 
     
    241256    <field id="BACT"        long_name="Bacterial Biomass"                       unit="mmol/m3"  grid_ref="grid_T_3D" /> 
    242257    <field id="FEBACT"      long_name="Bacterial uptake of Fe"                  unit="molFe/m3/s"  grid_ref="grid_T_3D" /> 
     258    <field id="FEPREC"      long_name="Precipitation of Fe"                     unit="molFe/m3/s"  grid_ref="grid_T_3D" /> 
    243259    <field id="LPRODR"      long_name="OM remineralisation ligand production rate" unit="nmol-L/m3/s"  grid_ref="grid_T_3D" /> 
    244260    <field id="LPRODP"      long_name="phytoplankton ligand production rate"    unit="nmol-L/m3/s"  grid_ref="grid_T_3D" /> 
  • NEMO/trunk/cfgs/SHARED/namelist_pisces_ref

    r15287 r15459  
    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    = .true.        !  PISCES model used 
     17  ln_p5z    = .false.         !  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.orca2'    ,     24.           , 'presatm'    ,  .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      =  1.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.00943 ! 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   =  1.7E-9   ! Iron half saturation for phyto 
     70   concdfer   =  5.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 
     81   qnfelim    =  10.E-6   ! Optimal quota of phyto 
     82   qdfelim    =  10.E-6   ! Optimal quota of diatoms 
     83   caco3r     =  0.2      ! mean rain ratio 
     84   oxymin     =  1.E-6    ! Half-saturation constant for anoxia 
     85/ 
     86!----------------------------------------------------------------------- 
     87&namp5zlim     !   parameters for nutrient limitations PISCES QUOTA    - ln_p5z 
     88!----------------------------------------------------------------------- 
     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   =  3E-9     ! Iron half saturation for phyto 
     99   concpfer   =  1E-9     ! Iron half saturation for picophytoplankton 
     100   concdfer   =  4.5E-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 
     105   xsizedia   =  1.E-6    ! Minimum size criteria for diatoms 
     106   xsizephy   =  1.E-6    ! Minimum size criteria for phyto 
     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 
     110   xsizerd    =  4.0      ! Size ratio for diatoms 
     111   xksi1      =  8.E-6    ! half saturation constant for Si uptake 
     112   xksi2      =  20E-6    ! half saturation constant for Si/C 
     113   xkdoc      =  417.E-6  ! half-saturation constant of DOC remineralization 
    82114   caco3r     =  0.3      ! mean rain ratio 
    83115   oxymin     =  1.E-6    ! Half-saturation constant for anoxia 
    84116/ 
    85117!----------------------------------------------------------------------- 
    86 &namp5zlim     !   parameters for nutrient limitations PISCES QUOTA    - ln_p5z 
    87 !----------------------------------------------------------------------- 
    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 
    104    xsizedia   =  1.E-6    ! Minimum size criteria for diatoms 
    105    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 
    109    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 
    112    xkdoc      =  417.E-6  ! half-saturation constant of DOC remineralization 
    113    caco3r     =  0.35     ! mean rain ratio 
    114    oxymin     =  1.E-6    ! Half-saturation constant for anoxia 
    115 / 
    116 !----------------------------------------------------------------------- 
    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     =  12.E-6   ! Optimal Fe quota of nanophyto 
     121   qfpopt     =  12.E-6   ! Optimal Fe quota of picophyto 
     122   qfdopt     =  12.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 
    146147   parlux      =  0.43      ! Fraction of shortwave as PAR 
     148   ln_p4z_dcyc =  .false.  ! Diurnal cycle in PISCES 
    147149/  
    148150!----------------------------------------------------------------------- 
     
    157159   chlcnm     =  0.033    ! Maximum Chl/C in nanophytoplankton 
    158160   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 
     161   chlcmin    =  0.003    ! Minimum Chl/c in phytoplankton 
     162   fecnm      =  60E-6    ! Maximum Fe/C in nanophytoplankton 
     163   fecdm      =  60E-6    ! Maximum Fe/C in diatoms 
     164   grosip     =  0.13     ! mean Si/C ratio 
    163165/ 
    164166!----------------------------------------------------------------------- 
    165167&namp5zprod    !   parameters for phytoplankton growth for PISCES quota- ln_p5z 
    166168!----------------------------------------------------------------------- 
    167    pislopen   =  3.       ! P-I slope 
    168    pislopep   =  3.       ! P-I slope for picophytoplankton 
    169    pisloped   =  3.       ! P-I slope  for diatoms 
     169   pislopen   =  5        ! P-I slope of nanophytoplankton 
     170   pislopep   =  5        ! P-I slope for picophytoplankton 
     171   pisloped   =  5        ! P-I slope  for diatoms 
    170172   excretn    =  0.05     ! excretion ratio of phytoplankton 
    171173   excretp    =  0.05     ! excretion ratio of picophytoplankton 
     
    173175   xadap      =  0.       ! Adaptation factor to low light 
    174176   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 
     177   thetannm   =  0.3      ! Maximum Chl/N in nanophytoplankton 
     178   thetanpm   =  0.3      ! Maximum Chl/N in picophytoplankton 
     179   thetandm   =  0.4      ! Maximum Chl/N in diatoms 
     180   chlcmin    =  0.003    ! Minimum Chl/c in phytoplankton 
     181   grosip     =  0.12     ! mean Si/C ratio 
    180182/ 
    181183!----------------------------------------------------------------------- 
    182184&namp4zmort    !   parameters for phytoplankton sinks for PISCES std   - ln_p4z 
    183185!----------------------------------------------------------------------- 
    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 
     186   wchln      =  0.01     ! quadratic mortality of phytoplankton 
     187   wchld      =  0.03     ! maximum quadratic mortality of diatoms 
     188   mpratn     =  0.01     ! phytoplankton mortality rate 
     189   mpratd     =  0.01     ! Diatoms mortality rate 
    189190/ 
    190191!----------------------------------------------------------------------- 
     
    193194   wchln      =  0.01     ! quadratic mortality of nanophytoplankton 
    194195   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 
     196   wchld      =  0.03     ! maximum quadratic mortality of diatoms 
    197197   mpratn     =  0.01     ! nanophytoplankton mortality rate 
    198198   mpratp     =  0.01     ! picophytoplankton mortality rate 
    199    mprat2     =  0.01     ! Diatoms mortality rate 
     199   mpratd     =  0.01     ! Diatoms mortality rate 
    200200/ 
    201201!----------------------------------------------------------------------- 
    202202&namp4zmes     !   parameters for mesozooplankton for PISCES std       - ln_p4z 
    203203!----------------------------------------------------------------------- 
    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 
     204   part2       =  0.75     ! part of calcite not dissolved in mesozoo guts 
     205   grazrat2    =  0.5      ! maximal mesozoo grazing rate 
     206   resrat2     =  0.005    ! exsudation rate of mesozooplankton 
     207   mzrat2      =  0.01     ! 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.4      ! Efficicency of Mesozoo growth 
     219   epsher2min  =  0.4      ! 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 
     223   xsigma2     =  0.5      ! Predation window size 
     224   xsigma2del  =  1.0      ! Predation window size scaling 
     225   ln_dvm_meso =  .false.  ! Activates DVM for mesozooplankton 
     226   xfracmig    =  0.3      ! Fraction of mesozooplankton performing DVM 
    223227/ 
    224228!----------------------------------------------------------------------- 
    225229&namp5zmes     !   parameters for mesozooplankton 
    226230!----------------------------------------------------------------------- 
    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 
     231   part2       =  0.75     ! part of calcite not dissolved in mesozoo guts 
     232   grazrat2    =  0.5      ! maximal mesozoo grazing rate 
     233   bmetexc2    =  .true.   ! Metabolic use of excess carbon  
     234   resrat2     =  0.005    ! exsudation rate of mesozooplankton 
     235   mzrat2      =  0.01     ! mesozooplankton mortality rate 
     236   xpref2d     =  1.       ! meso preference for diatoms 
     237   xpref2n     =  0.3      ! meso preference for nano 
     238   xpref2z     =  1.       ! meso preference for zoo 
     239   xpref2m     =  0.       ! meso preference for zoo 
     240   xpref2c     =  0.3      ! meso preference for poc 
     241   xthresh2zoo =  1E-8     ! zoo feeding threshold for mesozooplankton 
     242   xthresh2dia =  1E-8     ! diatoms feeding threshold for mesozooplankton 
     243   xthresh2phy =  1E-8     ! nanophyto feeding threshold for mesozooplankton 
     244   xthresh2mes =  1E-8     ! meso feeding threshold for mesozooplankton 
     245   xthresh2poc =  1E-8     ! poc feeding threshold for mesozooplankton 
    242246   xthresh2    =  3E-7     ! Food threshold for grazing 
    243247   xkgraz2     =  20.E-6   ! half sturation constant for meso grazing 
    244248   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 
     249   epsher2min  =  0.5      ! Minimum efficiency of mesozoo growth 
     250   ssigma2     =  0.5      ! Fraction excreted as semi-labile DOM 
     251   srespir2    =  0.2      ! Active respiration 
     252   unass2c     =  0.3      ! non assimilated fraction of C by mesozoo 
     253   unass2n     =  0.3      ! non assimilated fraction of N by mesozoo 
     254   unass2p     =  0.3      ! non assimilated fraction of P by mesozoo 
     255   xsigma2     =  0.5      ! Predation window size 
     256   xsigma2del  =  1.0      ! Predation window size scaling 
     257   grazflux    =  3.e3     ! flux-feeding rate 
     258   ln_dvm_meso =  .false.  ! Activates DVM for mesozooplankton 
     259   xfracmig    =  0.25     ! Fraction of mesozooplankton performing DVM 
    252260/ 
    253261!----------------------------------------------------------------------- 
    254262&namp4zzoo     !   parameters for microzooplankton for PISCES std      - ln_p4z 
    255263!----------------------------------------------------------------------- 
    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 
    260    xprefc     =  0.1      ! Microzoo preference for POM 
     264   part       =  0.75     ! part of calcite not dissolved in microzoo guts 
     265   grazrat    =  2.0      ! maximal zoo grazing rate 
     266   resrat     =  0.02     ! Linear mortality rate of zooplankton 
     267   mzrat      =  0.005    ! zooplankton mortality rate 
     268   xprefc     =  0.15      ! Microzoo preference for POM 
    261269   xprefn     =  1.       ! Microzoo preference for Nanophyto 
    262    xprefd     =  0.6      ! Microzoo preference for Diatoms 
     270   xprefd     =  0.8      ! Microzoo preference for Diatoms 
    263271   xthreshdia =  1.E-8    ! Diatoms feeding threshold for microzooplankton  
    264272   xthreshphy =  1.E-8    ! Nanophyto feeding threshold for microzooplankton  
     
    266274   xthresh    =  3.E-7    ! Food threshold for feeding 
    267275   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 
     276   epsher     =  0.4     ! Efficiency of microzoo growth 
     277   epshermin  =  0.4     ! Minimum efficiency of microzoo growth 
    270278   sigma1     =  0.6      ! Fraction of microzoo excretion as DOM 
    271279   unass      =  0.3      ! non assimilated fraction of phyto by zoo 
     280   xsigma     =  0.5      ! Predation window size 
     281   xsigmadel  =  1.0      ! Predation window size scaling 
    272282/ 
    273283!----------------------------------------------------------------------- 
    274284&namp5zzoo     !   parameters for microzooplankton 
    275285!----------------------------------------------------------------------- 
    276    part       =  0.5      ! part of calcite not dissolved in microzoo gutsa 
    277    grazrat    =  2.75     ! maximal zoo grazing rate 
     286   part       =  0.75     ! part of calcite not dissolved in microzoo gutsa 
     287   grazrat    =  2.0      ! maximal zoo grazing rate 
    278288   bmetexc    =  .true.   ! Metabolic use of excess carbon 
    279    resrat     =  0.03     ! exsudation rate of zooplankton 
     289   resrat     =  0.02     ! exsudation rate of zooplankton 
    280290   mzrat      =  0.005    ! zooplankton mortality rate 
    281    xprefc     =  0.1      ! Microzoo preference for POM 
    282    xprefn     =  1.       ! Microzoo preference for Nanophyto 
    283    xprefp     =  1.6      ! Microzoo preference for picophyto 
     291   xprefc     =  0.15     ! Microzoo preference for POM 
     292   xprefn     =  1.0      ! Microzoo preference for Nanophyto 
     293   xprefp     =  1.0      ! Microzoo preference for picophyto 
    284294   xprefd     =  1.0      ! Microzoo preference for Diatoms 
    285    xprefz     =  0.3      ! Microzoo preference for microzooplankton 
     295   xprefz     =  0.       ! Microzoo preference for microzooplankton 
    286296   xthreshdia =  1.E-8    ! Diatoms feeding threshold for microzooplankton 
    287297   xthreshphy =  1.E-8    ! Nanophyto feeding threshold for microzooplankton 
    288    xthreshpic =  1.E-8 
    289    xthreshzoo =  1.E-8    ! Nanophyto feeding threshold for microzooplankton 
     298   xthreshpic =  1.E-8    ! Picophyto feeding threshold for microzooplankton 
     299   xthreshzoo =  1.E-8    ! Microzoo feeding threshold for microzooplankton 
    290300   xthreshpoc =  1.E-8    ! POC feeding threshold for microzooplankton 
    291301   xthresh    =  3.E-7    ! Food threshold for feeding 
    292    xkgraz     =  20.E-6   ! half sturation constant for grazing 
     302   xkgraz     =  20.E-6   ! half saturation constant for grazing 
    293303   epsher     =  0.5      ! Efficiency of microzoo growth 
    294    epshermin  =  0.2      ! Minimum efficiency of microzoo growth 
     304   epshermin  =  0.5      ! Minimum efficiency of microzoo growth 
    295305   ssigma     =  0.5      ! Fraction excreted as semi-labile DOM 
    296306   srespir    =  0.2      ! Active respiration 
    297307   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 
     308   unassn     =  0.3      ! non assimilated fraction of N by zoo 
     309   unassp     =  0.3      ! non assimilated fraction of P by zoo 
     310   xsigma     =  0.5      ! Predation window size 
     311   xsigmadel  =  1.0      ! Predation window size scaling 
    300312/ 
    301313!----------------------------------------------------------------------- 
    302314&nampisfer     !   parameters for iron chemistry 
    303315!----------------------------------------------------------------------- 
    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  
     316   ln_ligvar =  .false.   ! variable ligand concentration 
     317   xlam1     =  0.02      ! scavenging rate of Iron by biogenic particles 
     318   xlamdust  =  150.0     ! Scavenging rate of Iron by dust 
     319   ligand    =  1E-9     ! Ligands concentration  
    308320   kfep      =  0.01      ! Nanoparticle formation rate constant 
     321   scaveff   =  1.0       ! Fraction of scavenged Fe that goes to POFe 
    309322/ 
    310323!-----------------------------------------------------------------------   
    311324&nampisrem     !   parameters for remineralization 
    312325!----------------------------------------------------------------------- 
    313    xremik    =  0.3       ! remineralization rate of DOC 
    314326   nitrif    =  0.05      ! NH4 nitrification rate 
    315327   xsirem    =  0.003     ! remineralization rate of Si 
    316328   xsiremlab =  0.03      ! fast remineralization rate of Si 
    317329   xsilab    =  0.5       ! Fraction of labile biogenic silica 
    318    feratb    =  10.E-6    ! Fe/C quota in bacteria 
    319    xkferb    =  3E-10     ! Half-saturation constant for bacteria Fe/C 
     330   feratb    =  60.E-6    ! Fe/C quota in bacteria 
     331   xkferb    =  4E-10     ! Half-saturation constant for bacteria Fe/C 
    320332!                         ! 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 
     333   xremikc   =  0.4       ! remineralization rate of DOC 
     334   xremikn   =  0.4       ! remineralization rate of DON 
     335   xremikp   =  0.5       ! remineralization rate of DOP 
    326336/ 
    327337!----------------------------------------------------------------------- 
    328338&nampispoc     !   parameters for organic particles 
    329339!----------------------------------------------------------------------- 
    330    xremip    =  0.035     ! remineralisation rate of PON 
     340   xremip    =  0.035     ! remineralisation rate of POC 
    331341   jcpoc     =  15        ! Number of lability classes 
    332342   rshape    =  1.0       ! Shape of the gamma function 
    333343!                         ! 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 
     344   xremipc   =  0.028     ! remineralisation rate of POC 
     345   xremipn   =  0.03      ! remineralisation rate of PON 
     346   xremipp   =  0.035     ! remineralisation rate of POP 
    337347/ 
    338348!----------------------------------------------------------------------- 
     
    358368   distcoast   =  5.e3     ! Distance off the coast for Iron from sediments 
    359369   mfrac       =  0.035    ! Fe mineral fraction of dust 
    360    wdust       =  2.0      ! Dust sinking speed  
     370   wdust       =  2.0      ! Dust sinking speed 
    361371   icefeinput  =  15.e-9   ! Iron concentration in sea ice 
    362    hratio      =  1.e+7    ! Fe to 3He ratio assumed for vent iron supply  
     372   hratio      =  1.e+7    ! Fe to 3He ratio assumed for vent iron supply 
    363373!                          ! 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) 
     374   lgw_rath    =  0.2      ! Weak ligand ratio from sed hydro sources 
     375/ 
     376!----------------------------------------------------------------------- 
     377&nampislig     !   Namelist parameters for ligands, nampislig 
     378!----------------------------------------------------------------------- 
     379   rlgw        =  300.     ! Lifetime (years) of weak ligands 
     380   rlig        =  1.E-4    ! Remin ligand production per unit C 
     381   prlgw       =  3.E-4    ! Photolysis of weak ligand 
     382   rlgs        =  1.       ! Lifetime (years) of strong ligands 
     383   xklig       =  1.E-9    ! 1/2 saturation constant of photolysis 
     384/ 
     385!----------------------------------------------------------------------- 
     386&nampissed     !   Namelist parameters for sediment mobilisation 
     387!----------------------------------------------------------------------- 
     388   nitrfix     =  2.e-7    ! Nitrogen fixation rate 
     389   diazolight  =  30.      ! Diazotrophs sensitivity to light (W/m2) 
    371390   concfediaz  =  1.e-10   ! Diazotrophs half-saturation Cste for Iron 
    372 / 
    373 !----------------------------------------------------------------------- 
    374 &nampislig     !   Namelist parameters for ligands, nampislig 
    375 !----------------------------------------------------------------------- 
    376    rlgw        =  100.     ! Lifetime (years) of weak ligands 
    377    rlig        =  1.E-4    ! Remin ligand production per unit C 
    378    prlgw       =  1.E-4    ! Photolysis of weak ligand 
    379    rlgs        =  1.       ! Lifetime (years) of strong ligands 
    380391/ 
    381392!----------------------------------------------------------------------- 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zagg.F90

    r15090 r15459  
    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( nn_hls, nn_hls, nn_hls, nn_hls, 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/trunk/src/TOP/PISCES/P4Z/p4zbc.F90

    r15090 r15459  
    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 
     100         ! Atmospheric input of Iron dissolves in the water column 
     101         IF ( ln_trc_sbc(jpfer) ) THEN 
     102            DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 2, jpkm1 ) 
     103               zdustdep = dust(ji,jj) * zwdust * rfact * EXP( -gdept(ji,jj,jk,Kmm) /( 250. * wdust ) ) 
     104               ! 
     105               tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zdustdep * mfrac / mMass_Fe  
     106            END_3D 
     107 
     108            IF( lk_iomput ) THEN 
     109                ! surface downward dust depo of iron 
     110                jl = n_trc_indsbc(jpfer) 
     111                CALL iom_put( "Irondep", ( rf_trsfac(jl) * sf_trcsbc(jl)%fnow(:,:,1) / rn_sbc_time ) * 1.e+3 * tmask(:,:,1) ) 
     112 
     113            ENDIF 
     114 
     115         ENDIF 
     116 
     117         ! Atmospheric input of PO4 dissolves in the water column 
     118         IF ( ln_trc_sbc(jppo4) ) THEN 
     119            DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 2, jpkm1 ) 
     120               zdustdep = dust(ji,jj) * zwdust * rfact * EXP( -gdept(ji,jj,jk,Kmm) /( 250. * wdust ) ) 
     121               ! 
     122               tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zdustdep * 1.e-3 / mMass_P 
     123            END_3D 
     124         ENDIF 
     125 
     126         ! Atmospheric input of Si dissolves in the water column 
     127         IF ( ln_trc_sbc(jpsil) ) THEN 
     128            DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 2, jpkm1 ) 
     129               zdustdep = dust(ji,jj) * zwdust * rfact * EXP( -gdept(ji,jj,jk,Kmm) /( 250. * wdust ) ) 
     130               ! 
     131               tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) + zdustdep * 0.269 / mMass_Si 
     132            END_3D 
     133         ENDIF 
     134 
    99135         ! 
    100136         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 
    102              CALL iom_put( "pdust"  , dust(:,:) / ( wdust * rday ) * tmask(:,:,1) ) ! dust concentration at surface 
    103          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 
     137             ! dust concentration at surface 
     138             CALL iom_put( "pdust"  , dust(:,:) / ( wdust / rday ) * tmask(:,:,1) ) ! dust concentration at surface 
     139         ENDIF 
     140      ENDIF 
     141 
    109142      ! ----------------------------------------- 
    110             ! Add the external input of nutrients from river 
     143      ! Add the external input of nutrients from river 
    111144      ! ---------------------------------------------------------- 
    112145      IF( ll_river ) THEN 
     
    124157      ! ---------------------------------------------------------- 
    125158      IF( ll_ndepo ) THEN 
    126          ALLOCATE( zndep(jpi,jpj) ) 
    127159         IF( ln_trc_sbc(jpno3) ) THEN 
    128160            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 
     161            DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
     162               zndep = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(ji,jj,1) / e3t(ji,jj,1,Kmm) / rn_sbc_time 
     163               tr(ji,jj,1,jptal,Krhs) = tr(ji,jj,1,jptal,Krhs) - rno3 * zndep * rfact 
     164            END_2D 
    131165         ENDIF 
    132166         IF( ln_trc_sbc(jpnh4) ) THEN 
    133167            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. 
     168            DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
     169               zndep = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(ji,jj,1) / e3t(ji,jj,1,Kmm) / rn_sbc_time 
     170               tr(ji,jj,1,jptal,Krhs) = tr(ji,jj,1,jptal,Krhs) + rno3 * zndep * rfact 
     171            END_2D 
     172         ENDIF 
     173      ENDIF 
     174      ! 
     175      ! Iron input/uptake due to sea ice : Crude parameterization based on  
     176      ! Lancelot et al. Iron concentration in sea-ice is constant and set  
     177      ! in the namelist_pisces (icefeinput). ln_ironice is forced to false 
     178      ! when nn_ice_tr = 1 
    142179      ! ---------------------------------------------------- 
    143180      IF( ln_ironice ) THEN 
    144181         ! 
    145          ALLOCATE( zironice(jpi,jpj) ) 
    146          ! 
     182         ! Compute the iron flux between sea ice and sea water 
     183         ! Simple parameterization assuming a fixed constant concentration in 
     184         ! sea-ice (icefeinput) 
     185         ! ------------------------------------------------------------------          
    147186         DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
    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 ) 
     187            zdep     = rfact / e3t(ji,jj,1,Kmm) 
     188            zwflux   = fmmflx(ji,jj) / 1000._wp 
     189            zironice =  MAX( -0.99 * tr(ji,jj,1,jpfer,Kbb), -zwflux * icefeinput * zdep ) 
     190            tr(ji,jj,1,jpfer,Krhs) = tr(ji,jj,1,jpfer,Krhs) + zironice 
    151191         END_2D 
    152192         ! 
    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 ) 
     193         ! iron flux from ice 
     194         IF( lk_iomput ) & 
     195         & CALL iom_put( "Ironice", MAX( -0.99 * tr(:,:,1,jpfer,Kbb), (-1.*fmmflx(:,:)/1000._wp )*icefeinput*1.e+3*tmask(:,:,1)) ) 
    158196         ! 
    159197      ENDIF 
     
    212250      !! 
    213251      NAMELIST/nampisbc/cn_dir, sn_dust, sn_ironsed, sn_hydrofe, & 
    214         &                ln_ironsed, ln_ironice, ln_hydrofe,    & 
    215         &                sedfeinput, distcoast, icefeinput, wdust, mfrac,  & 
     252        &                ln_ironsed, ln_ironice, ln_hydrofe,     & 
     253        &                sedfeinput, distcoast, icefeinput, wdust, mfrac,   & 
    216254        &                hratio, lgw_rath 
    217255      !!---------------------------------------------------------------------- 
     
    254292      END IF 
    255293 
    256       ll_bc    = ( ln_trcbc .AND. lltrcbc )  .OR. ln_hydrofe .OR. ln_ironsed .OR. ln_ironice 
    257       ll_dust  =  ln_trc_sbc(jpfer)    
     294      ll_bc    = ( ln_trcbc .AND. lltrcbc )  .OR. ln_hydrofe .OR. ln_ironsed .OR. ln_ironice  
     295      ll_dust  =  ln_trc_sbc(jpfer) .OR. ln_trc_sbc(jppo4) .OR. ln_trc_sbc(jpsil) .OR. ln_sediment 
    258296      ll_ndepo =  ln_trc_sbc(jpno3) .OR. ln_trc_sbc(jpnh4)    
    259297      ll_river =  ln_trc_cbc(jpno3)   
     
    269307         ! 
    270308         ALLOCATE( sf_dust(1), STAT=ierr )           !* allocate and fill sf_sst (forcing structure) with sn_sst 
    271          IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'p4z_sed_init: unable to allocate sf_dust structure' ) 
    272          ! 
    273          CALL fld_fill( sf_dust, (/ sn_dust /), cn_dir, 'p4z_sed_init', 'Atmospheric dust deposition', 'nampissed' ) 
     309         IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'p4z_bc_init: unable to allocate sf_dust structure' ) 
     310         ! 
     311         CALL fld_fill( sf_dust, (/ sn_dust /), cn_dir, 'p4z_bc_init', 'Atmospheric dust deposition', 'nampisbc' ) 
    274312                                   ALLOCATE( sf_dust(1)%fnow(jpi,jpj,1)   ) 
    275313         IF( sn_dust%ln_tint )     ALLOCATE( sf_dust(1)%fdta(jpi,jpj,1,2) ) 
     
    337375         ! 
    338376         ALLOCATE( sf_hydrofe(1), STAT=ierr )           !* allocate and fill sf_sst (forcing structure) with sn_sst 
    339          IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'p4z_sed_init: unable to allocate sf_hydro structure' ) 
    340          ! 
    341          CALL fld_fill( sf_hydrofe, (/ sn_hydrofe /), cn_dir, 'p4z_sed_init', 'Input of iron from hydrothermal vents', 'nampisbc' ) 
     377         IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'p4z_bc_init: unable to allocate sf_hydro structure' ) 
     378         ! 
     379         CALL fld_fill( sf_hydrofe, (/ sn_hydrofe /), cn_dir, 'p4z_bc_init', 'Input of iron from hydrothermal vents', 'nampisbc' ) 
    342380                                   ALLOCATE( sf_hydrofe(1)%fnow(jpi,jpj,jpk)   ) 
    343381         IF( sn_hydrofe%ln_tint )    ALLOCATE( sf_hydrofe(1)%fdta(jpi,jpj,jpk,2) ) 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zbio.F90

    r15090 r15459  
    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( nn_hls, nn_hls, nn_hls, nn_hls, 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/trunk/src/TOP/PISCES/P4Z/p4zche.F90

    r15090 r15459  
    195195         !                             ! LN(K0) OF SOLUBILITY OF CO2 (EQ. 12, WEISS, 1980) 
    196196         !                             !     AND FOR THE ATMOSPHERE FOR NON IDEAL GAS 
    197          zcek1 = 9345.17/ztkel - 60.2409 + 23.3585 * LOG(zt) + zsal*(0.023517 - 0.00023656*ztkel    & 
    198          &       + 0.0047036e-4*ztkel**2) 
    199          chemc(ji,jj,1) = EXP( zcek1 ) * 1E-6 * rhop(ji,jj,1) / 1000. ! mol/(L atm) 
     197         zcek1 = 9050.69/ztkel - 58.0931 + 22.2940 * LOG(zt) + zsal*(0.027766 - 0.00025888*ztkel    & 
     198         &       + 0.0050578e-4*ztkel**2) 
     199         chemc(ji,jj,1) = EXP( zcek1 ) * 1E-6   ! mol/(L atm) 
    200200         chemc(ji,jj,2) = -1636.75 + 12.0408*ztkel - 0.0327957*ztkel**2 + 0.0000316528*ztkel**3 
    201201         chemc(ji,jj,3) = 57.7 - 0.118*ztkel 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zfechem.F90

    r15090 r15459  
    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, fe3sol, zligco 
     59      REAL(wp) ::   zscave, zaggdfea, zaggdfeb, ztrc, zdust, zklight 
     60      REAL(wp) ::   ztfe, zhplus, zxlam, zaggliga, zaggligb 
     61      REAL(wp) ::   zprecip, zprecipno3,  zconsfe, za1 
     62      REAL(wp) ::   zrfact2 
    7063      CHARACTER (len=25) :: charout 
    71       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zTL1, zFe3, ztotlig, precip, zFeL1 
     64      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zTL1, zFe3, ztotlig, zfeprecip, zFeL1, zfecoll 
    7265      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zcoll3d, zscav3d, zlcoll3d 
    7366      !!--------------------------------------------------------------------- 
     
    7568      IF( ln_timing )   CALL timing_start('p4z_fechem') 
    7669      ! 
     70      zFe3     (:,:,jpk) = 0. 
     71      zFeL1    (:,:,jpk) = 0. 
     72      zTL1     (:,:,jpk) = 0. 
     73      zfeprecip(:,:,jpk) = 0. 
     74      zcoll3d  (:,:,jpk) = 0. 
     75      zscav3d  (:,:,jpk) = 0. 
     76      zlcoll3d (:,:,jpk) = 0. 
     77      zfecoll  (:,:,jpk) = 0. 
     78      xfecolagg(:,:,jpk) = 0. 
     79      xcoagfe  (:,:,jpk) = 0. 
     80      ! 
    7781      ! Total ligand concentration : Ligands can be chosen to be constant or variable 
    78       ! Parameterization from Tagliabue and Voelker (2011) 
     82      ! Parameterization from Pham and Ito (2018) 
    7983      ! ------------------------------------------------- 
     84      xfecolagg(:,:,:) = ligand * 1E9 + MAX(0., chemo2(:,:,:) - tr(:,:,:,jpoxy,Kbb) ) / 400.E-6 
    8085      IF( ln_ligvar ) THEN 
    81          ztotlig(:,:,:) =  0.09 * tr(:,:,:,jpdoc,Kbb) * 1E6 + ligand * 1E9 
     86         ztotlig(:,:,:) =  0.09 * 0.667 * tr(:,:,:,jpdoc,Kbb) * 1E6 + xfecolagg(:,:,:) 
    8287         ztotlig(:,:,:) =  MIN( ztotlig(:,:,:), 10. ) 
    8388      ELSE 
    8489        IF( ln_ligand ) THEN  ;   ztotlig(:,:,:) = tr(:,:,:,jplgw,Kbb) * 1E9 
    85         ELSE                  ;   ztotlig(:,:,:) = ligand * 1E9 
     90        ELSE                  ;   ztotlig(:,:,:) = ligand * 1E9  
    8691        ENDIF 
    8792      ENDIF 
     
    8994      ! ------------------------------------------------------------ 
    9095      !  from Aumont and Bopp (2006) 
    91       ! This model is based on one ligand and Fe'  
     96      ! This model is based on one ligand, Fe2+ and Fe3+  
    9297      ! Chemistry is supposed to be fast enough to be at equilibrium 
    9398      ! ------------------------------------------------------------ 
    9499      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 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) ) 
     100          zTL1(ji,jj,jk)  = ztotlig(ji,jj,jk) 
     101          zkeq            = fekeq(ji,jj,jk) 
     102          zklight         = 4.77E-7 * etot(ji,jj,jk) * 0.5 / ( 10**(-6.3) ) 
     103          zconsfe         = consfe3(ji,jj,jk) / ( 10**(-6.3) ) 
     104          zfesatur        = zTL1(ji,jj,jk) * 1E-9 
     105          ztfe            = (1.0 + zklight) * tr(ji,jj,jk,jpfer,Kbb)  
     106          ! Fe' is the root of a 2nd order polynom 
     107          za1 =  1. + zfesatur * zkeq + zklight +  zconsfe - zkeq * tr(ji,jj,jk,jpfer,Kbb) 
     108          zFe3 (ji,jj,jk) = ( -1 * za1 + SQRT( za1**2 + 4. * ztfe * zkeq) ) / ( 2. * zkeq + rtrn ) 
     109          zFeL1(ji,jj,jk) = MAX( 0., tr(ji,jj,jk,jpfer,Kbb) - zFe3(ji,jj,jk) ) 
    105110      END_3D 
    106          ! 
    107  
     111      ! 
     112      plig(:,:,:) =  MAX( 0., ( zFeL1(:,:,:) / ( tr(:,:,:,jpfer,Kbb) + rtrn ) ) ) 
     113      ! 
    108114      zdust = 0.         ! if no dust available 
     115 
     116      ! Computation of the colloidal fraction that is subjecto to coagulation 
     117      ! The assumption is that 50% of complexed iron is colloidal. Furthermore 
     118      ! The refractory part is supposed to be non sticky. The refractory 
     119      ! fraction is supposed to equal to the background concentration +  
     120      ! the fraction that accumulates in the deep ocean. AOU is taken as a  
     121      ! proxy of that accumulation following numerous studies showing  
     122      ! some relationship between weak ligands and AOU. 
     123      ! An issue with that parameterization is that when ligands are not 
     124      ! prognostic or non variable, all the colloidal fraction is supposed 
     125      ! to coagulate 
     126      ! ---------------------------------------------------------------------- 
     127      IF (ln_ligand) THEN 
     128         zfecoll(:,:,:) = 0.5 * zFeL1(:,:,:) * MAX(0., tr(:,:,:,jplgw,Kbb) - xfecolagg(:,:,:) * 1.0E-9 ) / ( tr(:,:,:,jplgw,Kbb) + rtrn )  
     129      ELSE 
     130         IF (ln_ligvar) THEN 
     131            zfecoll(:,:,:) = 0.5 * zFeL1(:,:,:) * MAX(0., tr(:,:,:,jplgw,Kbb) - xfecolagg(:,:,:) * 1.0E-9 ) / ( tr(:,:,:,jplgw,Kbb) + rtrn )    
     132         ELSE 
     133            zfecoll(:,:,:) = 0.5 * zFeL1(:,:,:) 
     134         ENDIF 
     135      ENDIF 
     136 
    109137      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    110138         ! Scavenging rate of iron. This scavenging rate depends on the load of particles of sea water.  
     
    117145         &         + fesol(ji,jj,jk,5) / zhplus ) 
    118146         ! 
    119          zfeequi = zFe3(ji,jj,jk) * 1E-9 
    120          zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 
    121147         ! precipitation of Fe3+, creation of nanoparticles 
    122          precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * 1E-9 - fe3sol ) ) * kfep * xstep 
     148         zprecip = MAX( 0., ( zFe3(ji,jj,jk) - fe3sol ) ) * kfep * xstep * ( 1.0 - nitrfac(ji,jj,jk) )  
     149         ! Precipitation of Fe2+ due to oxidation by NO3 (Croot et al., 2019) 
     150         ! This occurs in anoxic waters only 
     151         zprecipno3 = 2.0 * 130.0 * tr(ji,jj,jk,jpno3,Kbb) * nitrfac(ji,jj,jk) * xstep * zFe3(ji,jj,jk) 
     152         ! 
     153         zfeprecip(ji,jj,jk) = zprecip + zprecipno3 
    123154         ! 
    124155         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) 
     156         ztrc = MAX( rtrn, ztrc ) 
     157         IF( ll_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) 
     158         zxlam  = MAX( 1.E-3, (1. - EXP(-2 * tr(ji,jj,jk,jpoxy,Kbb) / 100.E-6 ) )) 
     159         zlam1b = 3.e-5 + ( xlamdust * zdust + xlam1 * ztrc ) * zxlam 
     160         zscave = zFe3(ji,jj,jk) * zlam1b * xstep 
    148161 
    149162         !  Compute the coagulation of colloidal iron. This parameterization  
     
    151164         !  It requires certainly some more work as it is very poorly constrained. 
    152165         !  ---------------------------------------------------------------- 
    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) ) 
    155          zaggdfea = zlam1a * xstep * zfecoll 
    156          ! 
    157          zlam1b   = 3.53E3 * tr(ji,jj,jk,jpgoc,Kbb) * xdiss(ji,jj,jk) 
    158          zaggdfeb = zlam1b * xstep * zfecoll 
     166         zlam1a   = ( 12.0  * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 9.05  * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk)    & 
     167             &    + ( 2.49  * tr(ji,jj,jk,jppoc,Kbb) )     & 
     168             &    + ( 127.8 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 725.7 * tr(ji,jj,jk,jppoc,Kbb) ) 
     169         zaggdfea = zlam1a * xstep * zfecoll(ji,jj,jk) 
     170               ! 
     171         zlam1b   = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * tr(ji,jj,jk,jpgoc,Kbb) 
     172         zaggdfeb = zlam1b * xstep * zfecoll(ji,jj,jk) 
     173         xcoagfe(ji,jj,jk) = zlam1a + zlam1b 
    159174         ! 
    160175         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 
     176         &                       - zfeprecip(ji,jj,jk) 
     177 
     178         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zscave * scaveff * tr(ji,jj,jk,jppoc,Kbb) / ztrc 
     179         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zscave * scaveff * tr(ji,jj,jk,jppoc,Kbb) / ztrc 
     180 
     181 
     182          ! Precipitated iron is supposed to be permanently lost. 
     183          ! Scavenged iron is supposed to be released back to seawater 
     184          ! when POM is solubilized. This is highly uncertain as probably 
     185          ! a significant part of it may be rescavenged back onto  
     186          ! the particles. An efficiency factor is applied that is read 
     187          ! in the namelist.  
     188          ! See for instance Tagliabue et al. (2019). 
     189          ! Aggregated FeL is considered as biogenic Fe as it  
     190          ! probably remains  complexed when the particle is solubilized. 
     191          ! ------------------------------------------------------------- 
     192          tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zaggdfea 
     193          tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zaggdfeb 
     194          ! 
     195          zscav3d(ji,jj,jk)   = zscave  
     196          zcoll3d(ji,jj,jk)   = zaggdfea + zaggdfeb 
    166197         ! 
    167198      END_3D 
     
    171202      biron(:,:,:) = tr(:,:,:,jpfer,Kbb)  
    172203      ! 
    173       IF( ln_ligand ) THEN 
    174          ! 
    175          DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 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 
    185          END_3D 
    186          ! 
    187          plig(:,:,:) =  MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( tr(:,:,:,jpfer,Kbb) +rtrn ) ) ) 
    188          ! 
    189       ENDIF 
    190204      !  Output of some diagnostics variables 
    191205      !     --------------------------------- 
    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 
     206      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
     207         zrfact2 = 1.e3 * rfact2r  ! conversion from mol/L/timestep into mol/m3/s 
     208         IF( iom_use("Fe3")    )  CALL iom_put("Fe3"    , zFe3   (:,:,:)       * tmask(:,:,:) )   ! Fe3+ 
     209         IF( iom_use("FeL1")   )  CALL iom_put("FeL1"   , zFeL1  (:,:,:)       * tmask(:,:,:) )   ! FeL1 
     210         IF( iom_use("TL1")    )  CALL iom_put("TL1"    , zTL1   (:,:,:)       * tmask(:,:,:) )   ! TL1 
     211         IF( iom_use("Totlig") )  CALL iom_put("Totlig" , ztotlig(:,:,:)       * tmask(:,:,:) )   ! TL 
     212         IF( iom_use("Biron")  )  CALL iom_put("Biron"  , biron  (:,:,:)  * 1e9 * tmask(:,:,:) )   ! biron 
     213         IF( iom_use("FESCAV") )  CALL iom_put("FESCAV" , zscav3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
     214         IF( iom_use("FECOLL") )  CALL iom_put("FECOLL" , zcoll3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
     215         IF( iom_use("FEPREC") )  CALL iom_put("FEPREC" , zfeprecip(:,:,:) *1e9*tmask(:,:,:)*zrfact2 ) 
    216216      ENDIF 
    217217 
     
    241241      INTEGER ::   ios   ! Local integer  
    242242      !! 
    243       NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep  
     243      NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep, scaveff  
    244244      !!---------------------------------------------------------------------- 
    245245      ! 
     
    263263         WRITE(numout,*) '      ligand concentration in the ocean         ligand       =', ligand 
    264264         WRITE(numout,*) '      rate constant for nanoparticle formation  kfep         =', kfep 
    265       ENDIF 
    266       !  
     265         WRITE(numout,*) '      Scavenged iron that is added to POFe      scaveff      =', scaveff 
     266      ENDIF 
     267      ! 
    267268   END SUBROUTINE p4z_fechem_init 
    268269    
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zflx.F90

    r15090 r15459  
    8383      REAL(wp) ::   zyr_dec, zdco2dt 
    8484      CHARACTER (len=25) ::   charout 
    85       REAL(wp), DIMENSION(jpi,jpj) ::   zkgco2, zkgo2, zh2co3, zoflx,  zpco2atm   
     85      REAL(wp), DIMENSION(jpi,jpj) ::   zkgco2, zkgo2, zh2co3, zoflx,  zpco2atm, zpco2oce   
    8686      !!--------------------------------------------------------------------- 
    8787      ! 
     
    158158         zfld = zfco2 * chemc(ji,jj,1) * zkgco2(ji,jj)  ! (mol/L) * (m/s) 
    159159         zflu = zh2co3(ji,jj) * zkgco2(ji,jj)                                   ! (mol/L) (m/s) ? 
    160          oce_co2(ji,jj) = ( zfld - zflu ) * tmask(ji,jj,1)  
     160         zpco2oce(ji,jj) = zh2co3(ji,jj) / ( chemc(ji,jj,1) * zfugcoeff + rtrn ) 
     161         oce_co2(ji,jj)  = ( zfld - zflu ) * tmask(ji,jj,1)  
    161162         ! compute the trend 
    162163         tr(ji,jj,1,jpdic,Krhs) = tr(ji,jj,1,jpdic,Krhs) + oce_co2(ji,jj) * rfact2 / e3t(ji,jj,1,Kmm) 
     
    187188         CALL iom_put( "Oflx"    , zoflx(:,:) * 1000.  ) 
    188189         CALL iom_put( "Kg"      , zkgco2(:,:) * tmask(:,:,1)  ) 
    189          CALL iom_put( "Dpco2"   , ( zpco2atm(:,:) - zh2co3(:,:) / ( chemc(:,:,1) + rtrn ) ) * tmask(:,:,1) ) 
    190          CALL iom_put( "pCO2sea" , ( zh2co3(:,:) / ( chemc(:,:,1) + rtrn ) ) * tmask(:,:,1) ) 
     190         CALL iom_put( "Dpco2"   , ( zpco2atm(:,:) - zpco2oce(:,:) ) * tmask(:,:,1) ) 
     191         CALL iom_put( "pCO2sea" , zpco2oce(:,:) * tmask(:,:,1) ) 
    191192         CALL iom_put( "Dpo2"    , ( atcox * patm(:,:) - atcox * tr(:,:,1,jpoxy,Kbb) / ( chemo2(:,:,1) + rtrn ) ) * tmask(:,:,1) ) 
    192193         CALL iom_put( "tcflx"   , t_oce_co2_flx     )   ! molC/s 
     
    336337      IF( ln_presatm ) THEN 
    337338         CALL fld_read( kt, 1, sf_patm )               !* input Patm provided at kt + 1/2 
    338          patm(:,:) = sf_patm(1)%fnow(:,:,1)                        ! atmospheric pressure 
     339         patm(:,:) = sf_patm(1)%fnow(:,:,1)/101325.0     ! atmospheric pressure 
    339340      ENDIF 
    340341      ! 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zint.F90

    r15090 r15459  
    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 
     
    3737      INTEGER, INTENT( in ) ::   Kbb, Kmm ! time level indices 
    3838      ! 
    39       INTEGER  :: ji, jj                 ! dummy loop indices 
    40       REAL(wp) :: zvar                   ! local variable 
     39      INTEGER  :: ji, jj, jk              ! dummy loop indices 
     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( nn_hls, nn_hls, nn_hls, nn_hls ) 
    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_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
     78         zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
     79         zargu = MAX( -1., MIN(  1., zargu ) ) 
     80         strn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
     81      END_2D 
     82      ! 
     83      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1 ) 
     84        ! denitrification factor computed from O2 levels 
     85         ! This factor diagnoses below which level of O2 denitrification 
     86         ! is active 
     87         nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - tr(ji,jj,jk,jpoxy,Kbb) )    & 
     88            &                                / ( oxymin + tr(ji,jj,jk,jpoxy,Kbb) )  ) 
     89         nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 
     90         ! 
     91         ! redox factor computed from NO3 levels 
     92         ! This factor diagnoses below which level of NO3 additional redox 
     93         ! reactions are taking place. 
     94         nitrfac2(ji,jj,jk) = MAX( 0.e0,       ( 1.E-6 - tr(ji,jj,jk,jpno3,Kbb) )  & 
     95            &                                / ( 1.E-6 + tr(ji,jj,jk,jpno3,Kbb) ) ) 
     96         nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) ) 
     97      END_3D 
    6198      ! 
    6299      IF( ln_timing )   CALL timing_stop('p4z_int') 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zligand.F90

    r15090 r15459  
    2525   REAL(wp), PUBLIC ::  rlig     !: Remin ligand production 
    2626   REAL(wp), PUBLIC ::  prlgw    !: Photochemical of weak ligand 
     27   REAL(wp), PUBLIC ::  xklig    !: 1/2 saturation constant of photolysis 
    2728 
    2829   !! * Substitutions 
     
    4546      ! 
    4647      INTEGER  ::   ji, jj, jk 
    47       REAL(wp) ::   zlgwp, zlgwpr, zlgwr, zlablgw 
    48       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zligrem, zligpr, zligprod 
     48      REAL(wp) ::   zlgwp, zlgwpr, zlgwr, zlablgw  
     49      REAL(wp) ::   zlam1a, zlam1b, zaggliga, zligco 
     50      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zligrem, zligpr, zligprod, zlcoll3d 
    4951      CHARACTER (len=25) ::   charout 
    5052      !!--------------------------------------------------------------------- 
     
    6264         ! This is based on the idea that as LGW is lower 
    6365         ! there is a larger fraction of refractory OM 
    64          zlgwr = max( rlgs , rlgw * exp( -2 * (tr(ji,jj,jk,jplgw,Kbb)*1e9) ) ) ! years 
    65          zlgwr = 1. / zlgwr * tgfunc(ji,jj,jk) * ( xstep / nyear_len(1) ) * blim(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb) 
     66         zlgwr = ( 1.0 / rlgs * MAX(0., tr(ji,jj,jk,jplgw,Kbb) - xfecolagg(ji,jj,jk) * 1.0E-9 )    & 
     67         &       + 1.0 / rlgw * xfecolagg(ji,jj,jk) * 1.0E-9 ) / ( rtrn + tr(ji,jj,jk,jplgw,Kbb) ) 
     68         zlgwr = zlgwr * tgfunc(ji,jj,jk) * ( xstep / nyear_len(1) ) * blim(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb) 
    6669         ! photochem loss of weak ligand 
    67          zlgwpr = prlgw * xstep * etot(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb) * (1. - fr_i(ji,jj)) 
    68          tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zlgwp - zlgwr - zlgwpr 
     70         zlgwpr = prlgw * xstep * etot(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb)**3 * (1. - fr_i(ji,jj))   & 
     71         &        / ( tr(ji,jj,jk,jplgw,Kbb)**2 + (xklig)**2) 
     72         ! Coagulation of ligands due to various processes (Brownian, shear, diff. sedimentation 
     73         ! xcoagfe is computed in p4zfechem 
     74         ! ------------------------------------------------------------------------------------- 
     75         ! 50% of the ligands are supposed to be in the colloidal size fraction 
     76         ! as for FeL 
     77         zligco   = 0.5 * MAX(0., tr(ji,jj,jk,jplgw,Kbb) - xfecolagg(ji,jj,jk) * 1.0E-9 ) 
     78         zaggliga = xcoagfe(ji,jj,jk) * xstep * zligco 
     79 
     80         tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zlgwp - zlgwr - zlgwpr - zaggliga 
     81         ! 
    6982         zligrem(ji,jj,jk)   = zlgwr 
    7083         zligpr(ji,jj,jk)    = zlgwpr 
    71          zligprod(ji,jj,jk) = zlgwp 
    72          ! 
     84         zligprod(ji,jj,jk)  = zlgwp 
     85         zlcoll3d(ji,jj,jk)  = zaggliga 
    7386      END_3D 
    7487      ! 
     
    8497         IF( iom_use( "LPRODR" ) ) THEN 
    8598           zligprod(:,:,jpk) = 0. ; CALL iom_put( "LPRODR", zligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 
     99         ENDIF 
     100         IF( iom_use( "LGWCOLL" ) ) THEN 
     101            zlcoll3d(:,:,jpk) = 0. ; CALL iom_put( "LGWCOLL", zlcoll3d(:,:,:) * 1.e9 *  1.e+3 * rfact2r * tmask(:,:,:) ) 
    86102         ENDIF 
    87103      ENDIF 
     
    110126      INTEGER ::   ios   ! Local integer  
    111127      ! 
    112       NAMELIST/nampislig/ rlgw, prlgw, rlgs, rlig 
     128      NAMELIST/nampislig/ rlgw, prlgw, rlgs, rlig, xklig 
    113129      !!---------------------------------------------------------------------- 
    114130      ! 
     
    130146         WRITE(numout,*) '      Photolysis of weak ligand                    prlgw =', prlgw 
    131147         WRITE(numout,*) '      Lifetime (years) of strong ligands           rlgs  =', rlgs 
     148         WRITE(numout,*) '      1/2 saturation for photolysis                xklig =', xklig 
    132149      ENDIF 
    133150      ! 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zlim.F90

    r15090 r15459  
    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  
     
    4040   REAL(wp), PUBLIC ::  xkdoc       !:  2nd half-sat. of DOC remineralization   
    4141   REAL(wp), PUBLIC ::  concbfe     !:  Fe half saturation for bacteria  
    42    REAL(wp), PUBLIC ::  oxymin      !:  half saturation constant for anoxia 
    4342   REAL(wp), PUBLIC ::  qnfelim     !:  optimal Fe quota for nanophyto 
    4443   REAL(wp), PUBLIC ::  qdfelim     !:  optimal Fe quota for diatoms 
     
    4645 
    4746   !!* 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 
     47   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanono3   !: Nanophyto limitation by NO3 
     48   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatno3   !: Diatoms limitation by NO3 
     49   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanonh4   !: Nanophyto limitation by NH4 
     50   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatnh4   !:  Diatoms limitation by NH4 
     51   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanopo4   !: Nanophyto limitation by PO4 
     52   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatpo4   !: Diatoms limitation by PO4 
     53   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphy    !: Nutrient limitation term of nanophytoplankton 
     54   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdia    !: Nutrient limitation term of diatoms 
     55   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimnfe    !: Nanophyto limitation by Iron 
     56   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdfe    !: Diatoms limitation by iron 
     57   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimsi     !: Diatoms limitation by Si 
     58   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbac    !: Bacterial limitation term 
     59   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbacl   !: Bacterial limitation term 
     60   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concdfe    !: Limitation of diatoms uptake of Fe 
     61   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concnfe    !: Limitation of Nano uptake of Fe 
     62   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanofer   !: Limitation of Fe uptake by nanophyto 
     63   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatfer   !: Limitation of Fe uptake by diatoms 
     64   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xqfuncfecd, xqfuncfecn 
     65 
     66   ! Coefficient for iron limitation following Flynn and Hipkin (1999) 
    6567   REAL(wp) ::  xcoef1   = 0.0016  / 55.85   
    66    REAL(wp) ::  xcoef2   = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 
    67    REAL(wp) ::  xcoef3   = 1.15E-4 * 14. / 55.85 / 7.625 * 0.5  
     68   REAL(wp) ::  xcoef2   = 1.21E-5 * 14. / 55.85 / 7.3125 * 0.5 * 1.5 
     69   REAL(wp) ::  xcoef3   = 1.15E-4 * 14. / 55.85 / 7.3125 * 0.5  
    6870 
    6971   !! * Substitutions 
     
    8183      !! 
    8284      !! ** Purpose :   Compute the co-limitations by the various nutrients 
    83       !!              for the various phytoplankton species 
    84       !! 
    85       !! ** Method  : - ??? 
     85      !!                for the various phytoplankton species 
     86      !! 
     87      !! ** Method  : - Limitation follows the Liebieg law of the minimum 
     88      !!              - Monod approach for N, P and Si. Quota approach  
     89      !!                for Iron 
    8690      !!--------------------------------------------------------------------- 
    8791      INTEGER, INTENT(in)  :: kt, knt 
     
    8993      ! 
    9094      INTEGER  ::   ji, jj, jk 
    91       REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zno3, zferlim 
    92       REAL(wp) ::   zconcd, zconcd2, zconcn, zconcn2 
     95      REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zcoef 
    9396      REAL(wp) ::   z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 
    94       REAL(wp) ::   zdenom, zratio, zironmin 
     97      REAL(wp) ::   zdenom, zratio, zironmin, zbactno3, zbactnh4 
    9598      REAL(wp) ::   zconc1d, zconc1dnh4, zconc0n, zconc0nnh4    
     99      REAL(wp) ::   fananof, fadiatf, znutlim, zfalim 
     100      REAL(wp) ::   znutlimtot, zlimno3, zlimnh4, zbiron 
    96101      !!--------------------------------------------------------------------- 
    97102      ! 
    98103      IF( ln_timing )   CALL timing_start('p4z_lim') 
     104      ! 
     105      sizena(:,:,:) = 1.0  ;  sizeda(:,:,:) = 1.0 
    99106      ! 
    100107      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    101108          
    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  
    109109         ! Computation of a variable Ks for iron on diatoms taking into account 
    110110         ! that increasing biomass is made of generally bigger cells 
     111         ! The allometric relationship is classical. 
    111112         !------------------------------------------------ 
    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 
    116113         z1_trbphy   = 1. / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 
    117114         z1_trbdia   = 1. / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 
    118115 
    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 ) 
     116         concnfe(ji,jj,jk) = concnfer * sizen(ji,jj,jk)**0.81 
     117         zconc0n           = concnno3 * sizen(ji,jj,jk)**0.81 
     118         zconc0nnh4        = concnnh4 * sizen(ji,jj,jk)**0.81 
     119 
     120         concdfe(ji,jj,jk) = concdfer * sized(ji,jj,jk)**0.81  
     121         zconc1d           = concdno3 * sized(ji,jj,jk)**0.81  
     122         zconc1dnh4        = concdnh4 * sized(ji,jj,jk)**0.81   
     123 
     124          ! Computation of the optimal allocation parameters 
     125          ! Based on the different papers by Pahlow et al., and  
     126          ! Smith et al. 
     127          ! --------------------------------------------------- 
     128 
     129          ! Nanophytoplankton 
     130          zbiron = ( 75.0 * ( 1.0 - plig(ji,jj,jk) ) + plig(ji,jj,jk) ) * biron(ji,jj,jk) 
     131          znutlim = zbiron / concnfe(ji,jj,jk) 
     132          fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     133 
     134          ! Diatoms 
     135          znutlim = zbiron / concdfe(ji,jj,jk) 
     136          fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     137 
     138          ! Michaelis-Menten Limitation term by nutrients of 
     139          ! heterotrophic bacteria 
     140          ! ------------------------------------------------- 
     141          zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concbno3 + tr(ji,jj,jk,jpnh4,Kbb) ) 
     142          zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) ) 
     143          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) ) 
     144          zbactnh4 = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     145          zbactno3 = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     146          ! 
     147          zlim1    = zbactno3 + zbactnh4 
     148          zlim2    = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concbnh4 ) 
     149          zlim3    = tr(ji,jj,jk,jpfer,Kbb) / ( concbfe + tr(ji,jj,jk,jpfer,Kbb) ) 
     150          zlim4    = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc   + tr(ji,jj,jk,jpdoc,Kbb) ) 
     151          ! Xlimbac is used for DOC solubilization whereas xlimbacl 
     152          ! is used for all the other bacterial-dependent terms 
     153          ! ------------------------------------------------------- 
     154          xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
     155          xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 
     156 
     157          ! Michaelis-Menten Limitation term by nutrients: Nanophyto 
     158          ! Optimal parameterization by Smith and Pahlow series of  
     159          ! papers is used. Optimal allocation is supposed independant 
     160          ! for all nutrients.  
     161          ! -------------------------------------------------------- 
     162 
     163          ! Limitation of Fe uptake (Quota formalism) 
     164          zfalim = (1.-fananof) / fananof 
     165          xnanofer(ji,jj,jk) = (1. - fananof) * zbiron / ( zbiron + zfalim * concnfe(ji,jj,jk) ) 
     166 
     167          ! Limitation of nanophytoplankton growth 
     168          zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc0n + tr(ji,jj,jk,jpnh4,Kbb) ) 
     169          zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc0n + tr(ji,jj,jk,jpno3,Kbb) ) 
     170          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) ) 
     171          xnanonh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     172          xnanono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     173          ! 
     174          zlim1    = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 
     175          zlim2    = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0nnh4 ) 
     176          zratio   = tr(ji,jj,jk,jpnfe,Kbb) * z1_trbphy  
     177 
     178          ! The minimum iron quota depends on the size of PSU, respiration 
     179          ! and the reduction of nitrate following the parameterization  
     180          ! proposed by Flynn and Hipkin (1999) 
     181          zironmin = xcoef1 * tr(ji,jj,jk,jpnch,Kbb) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 
     182          xqfuncfecn(ji,jj,jk) = zironmin + qnfelim 
     183          zlim3    = MAX( 0.,( zratio - zironmin ) / qnfelim ) 
     184          xnanopo4(ji,jj,jk) = zlim2 
     185          xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 
     186          xlimphy (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
     187                
     188          !   Michaelis-Menten Limitation term by nutrients : Diatoms 
     189          !   ------------------------------------------------------- 
     190          ! Limitation of Fe uptake (Quota formalism) 
     191          zfalim = (1.-fadiatf) / fadiatf 
     192          xdiatfer(ji,jj,jk) = (1. - fadiatf) * zbiron / ( zbiron + zfalim * concdfe(ji,jj,jk) ) 
     193 
     194          ! Limitation of diatoms growth 
     195          zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc1d + tr(ji,jj,jk,jpnh4,Kbb) ) 
     196          zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc1d + tr(ji,jj,jk,jpno3,Kbb) ) 
     197          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) ) 
     198          xdiatnh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn )  
     199          xdiatno3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     200          ! 
     201          zlim1    = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 
     202          zlim2    = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc1dnh4  ) 
     203          zlim3    = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) + rtrn ) 
     204          zratio   = tr(ji,jj,jk,jpdfe,Kbb) * z1_trbdia 
     205 
     206          ! The minimum iron quota depends on the size of PSU, respiration 
     207          ! and the reduction of nitrate following the parameterization  
     208          ! proposed by Flynn and Hipkin (1999) 
     209          zironmin = xcoef1 * tr(ji,jj,jk,jpdch,Kbb) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 
     210          xqfuncfecd(ji,jj,jk) = zironmin + qdfelim 
     211          zlim4    = MAX( 0., ( zratio - zironmin ) / qdfelim ) 
     212          xdiatpo4(ji,jj,jk) = zlim2 
     213          xlimdfe (ji,jj,jk) = MIN( 1., zlim4 ) 
     214          xlimdia (ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 ) 
     215          xlimsi  (ji,jj,jk) = MIN( zlim1, zlim2, zlim4 ) 
    171216      END_3D 
    172217 
     218 
     219      ! Size estimation of phytoplankton based on total biomass 
     220      ! Assumes that larger biomass implies addition of larger cells 
     221      ! ------------------------------------------------------------ 
     222      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     223         zcoef = tr(ji,jj,jk,jpphy,Kbb) - MIN(xsizephy, tr(ji,jj,jk,jpphy,Kbb) ) 
     224         sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef ) 
     225         zcoef = tr(ji,jj,jk,jpdia,Kbb) - MIN(xsizedia, tr(ji,jj,jk,jpdia,Kbb) ) 
     226         sizeda(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 
     227      END_3D 
     228 
     229 
    173230      ! Compute the fraction of nanophytoplankton that is made of calcifiers 
     231      ! This is a purely adhoc formulation described in Aumont et al. (2015) 
     232      ! This fraction depends on nutrient limitation, light, temperature 
    174233      ! -------------------------------------------------------------------- 
    175234      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 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) )  
     235         zlim1  = xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk)  
    178236         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) ) 
     237         zlim3  = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) +  6.E-11   ) 
     238         ztem1  = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) + 1.8) 
    181239         ztem2  = ts(ji,jj,jk,jp_tem,Kmm) - 10. 
    182240         zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) )  
    183          zetot2 = 30. / ( 30. + etot_ndcy(ji,jj,jk) )  
     241         zetot2 = 30. / ( 30.0 + etot_ndcy(ji,jj,jk) ) 
    184242 
    185243         xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 )                  & 
     
    211269        CALL iom_put( "LNFe"   , xlimnfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    212270        CALL iom_put( "LDFe"   , xlimdfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     271        CALL iom_put( "SIZEN"  , sizen  (:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     272        CALL iom_put( "SIZED"  , sized  (:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    213273      ENDIF 
    214274      ! 
     
    222282      !!                  ***  ROUTINE p4z_lim_init  *** 
    223283      !! 
    224       !! ** Purpose :   Initialization of nutrient limitation parameters 
    225       !! 
    226       !! ** Method  :   Read the nampislim namelist and check the parameters 
     284      !! ** Purpose :   Initialization of the nutrient limitation parameters 
     285      !! 
     286      !! ** Method  :   Read the namp4zlim namelist and check the parameters 
    227287      !!      called at the first timestep (nittrc000) 
    228288      !! 
    229       !! ** input   :   Namelist nampislim 
     289      !! ** input   :   Namelist namp4zlim 
    230290      !! 
    231291      !!---------------------------------------------------------------------- 
    232292      INTEGER ::   ios   ! Local integer 
    233       ! 
     293 
     294      ! Namelist block 
    234295      NAMELIST/namp4zlim/ concnno3, concdno3, concnnh4, concdnh4, concnfer, concdfer, concbfe,   & 
    235296         &                concbno3, concbnh4, xsizedia, xsizephy, xsizern, xsizerd,          &  
     
    248309902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zlim in configuration namelist' ) 
    249310      IF(lwm) WRITE( numonp, namp4zlim ) 
     311 
    250312      ! 
    251313      IF(lwp) THEN                         ! control print 
     
    287349      !!---------------------------------------------------------------------- 
    288350      !!                     ***  ROUTINE p5z_lim_alloc  *** 
     351      !!  
     352      !            Allocation of the arrays used in this module 
    289353      !!---------------------------------------------------------------------- 
    290354      USE lib_mpp , ONLY: ctl_stop 
     
    295359         &      xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk),       & 
    296360         &      xnanopo4(jpi,jpj,jpk), xdiatpo4(jpi,jpj,jpk),       & 
     361         &      xnanofer(jpi,jpj,jpk), xdiatfer(jpi,jpj,jpk),       & 
    297362         &      xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk),       & 
    298363         &      xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk),       & 
    299364         &      xlimbac (jpi,jpj,jpk), xlimbacl(jpi,jpj,jpk),       & 
    300365         &      concnfe (jpi,jpj,jpk), concdfe (jpi,jpj,jpk),       & 
     366         &      xqfuncfecn(jpi,jpj,jpk), xqfuncfecd(jpi,jpj,jpk),   & 
    301367         &      xlimsi  (jpi,jpj,jpk), STAT=p4z_lim_alloc ) 
    302368      ! 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zmeso.F90

    r15090 r15459  
    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 
    4756#  include "do_loop_substitute.h90" 
     57#  include "domzgr_substitute.h90" 
    4858   !!---------------------------------------------------------------------- 
    4959   !! NEMO/TOP 4.0 , NEMO Consortium (2018) 
     
    5363CONTAINS 
    5464 
    55    SUBROUTINE p4z_meso( kt, knt, Kbb, Krhs ) 
     65   SUBROUTINE p4z_meso( kt, knt, Kbb, Kmm, Krhs ) 
    5666      !!--------------------------------------------------------------------- 
    5767      !!                     ***  ROUTINE p4z_meso  *** 
    5868      !! 
    5969      !! ** Purpose :   Compute the sources/sinks for mesozooplankton 
     70      !!                This includes ingestion and assimilation, flux feeding 
     71      !!                and mortality. We use a passive prey switching   
     72      !!                parameterization. 
     73      !!                All living compartments smaller than mesozooplankton 
     74      !!                are potential preys of mesozooplankton as well as small 
     75      !!                sinking particles  
    6076      !! 
    6177      !! ** Method  : - ??? 
    6278      !!--------------------------------------------------------------------- 
    6379      INTEGER, INTENT(in) ::   kt, knt   ! ocean time step and ??? 
    64       INTEGER, INTENT(in)  ::  Kbb, Krhs ! time level indices 
    65       ! 
    66       INTEGER  :: ji, jj, jk 
     80      INTEGER, INTENT(in)  ::  Kbb, kmm, Krhs ! time level indices 
     81      ! 
     82      INTEGER  :: ji, jj, jk, jkt 
    6783      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 
    68       REAL(wp) :: zgraze2 , zdenom, zdenom2 
    69       REAL(wp) :: zfact   , zfood, zfoodlim, zproport, zbeta 
     84      REAL(wp) :: zgraze2 , zdenom, zdenom2, zfact   , zfood, zfoodlim, zproport, zbeta 
    7085      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 
     86      REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgraztotc, zgraztotn, zgraztotf 
     87      REAL(wp) :: zmigreltime, zprcaca, zmortz, zgrasratf, zgrasratn 
     88      REAL(wp) :: zrespz, ztortz, zgrazdc, zgrazz, zgrazpof, zgraznc, zgrazpoc, zgraznf, zgrazdf 
     89      REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg, zrum, zcodel, zargu, zval, zdep 
     90      REAL(wp) :: zsigma, zdiffdn, ztmp1, ztmp2, ztmp3, ztmp4, ztmptot, zmigthick  
    7891      CHARACTER (len=25) :: charout 
     92      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 
     93      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarem, zgraref, zgrapoc, zgrapof, zgrabsi 
     94      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigrem, zgramigref, zgramigpoc, zgramigpof 
     95      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigbsi 
    7996      !!--------------------------------------------------------------------- 
    8097      ! 
    8198      IF( ln_timing )   CALL timing_start('p4z_meso') 
     99      ! 
     100      zgrazing(:,:,:) = 0._wp   ;  zgrapoc(:,:,:) = 0._wp 
     101      zfezoo2 (:,:,:) = 0._wp   ;  zgrarem(:,:,:) = 0._wp 
     102      zgraref (:,:,:) = 0._wp   ;  zgrapof(:,:,:) = 0._wp 
     103      zgrabsi (:,:,:) = 0._wp 
     104      ! 
     105      ! 
     106      ! Diurnal vertical migration of mesozooplankton 
     107      ! Computation of the migration depth 
     108      ! --------------------------------------------- 
     109      IF (ln_dvm_meso) CALL p4z_meso_depmig( Kbb, Kmm ) 
    82110      ! 
    83111      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     
    85113         zfact     = xstep * tgfunc2(ji,jj,jk) * zcompam 
    86114 
    87          !  Respiration rates of both zooplankton 
    88          !  ------------------------------------- 
     115          
     116         !  linear mortality of mesozooplankton 
     117         !  A michaelis menten modulation term is used to avoid extinction of  
     118         !  mesozooplankton at very low food concentration. Mortality is 
     119 
     120         !  enhanced in low O2 waters 
     121         !  ----------------------------------------------------------------- 
    89122         zrespz    = resrat2 * zfact * ( tr(ji,jj,jk,jpmes,Kbb) / ( xkmort + tr(ji,jj,jk,jpmes,Kbb) )  & 
    90123         &           + 3. * nitrfac(ji,jj,jk) ) 
    91124 
    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          !  --------------------------------------------------------------- 
     125         ! Zooplankton quadratic mortality. A square function has been selected with 
     126         !  to mimic predation and disease (density dependent mortality). It also tends 
     127         !  to stabilise the model 
     128         !  ------------------------------------------------------------------------- 
    95129         ztortz    = mzrat2 * 1.e6 * zfact * tr(ji,jj,jk,jpmes,Kbb)  * (1. - nitrfac(ji,jj,jk) ) 
    96130         ! 
     131  
     132         !   Computation of the abundance of the preys 
     133         !   A threshold can be specified in the namelist 
     134         !   -------------------------------------------- 
    97135         zcompadi  = MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthresh2dia ), 0.e0 ) 
    98136         zcompaz   = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - xthresh2zoo ), 0.e0 ) 
    99137         zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthresh2poc ), 0.e0 ) 
     138 
    100139         ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 
    101          ! it is to predation by mesozooplankton 
     140         ! it is to predation by mesozooplankton. We use a quota dependant parameterization 
     141         ! as a low quota indicates oligotrophic conditions which are charatcerized by 
     142         ! small cells 
    102143         ! ------------------------------------------------------------------------------- 
    103          zcompaph  = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthresh2phy ), 0.e0 ) & 
    104             &      * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 
    105  
    106          !   Mesozooplankton grazing 
    107          !   ------------------------ 
     144         zcompaph  = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthresh2phy ), 0.e0 ) 
     145 
     146         ! Mesozooplankton grazing 
     147         ! The total amount of food is the sum of all preys accessible to mesozooplankton  
     148         ! multiplied by their food preference 
     149         ! A threshold can be specified in the namelist (xthresh2). However, when food  
     150         ! concentration is close to this threshold, it is decreased to avoid the  
     151         ! accumulation of food in the mesozoopelagic domain 
     152         ! ------------------------------------------------------------------------------- 
    108153         zfood     = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc  
    109154         zfoodlim  = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) 
     
    112157         zgraze2   = grazrat2 * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk))  
    113158 
    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) 
     159 
     160         ! An active switching parameterization is used here. 
     161         ! We don't use the KTW parameterization proposed by  
     162         ! Vallina et al. because it tends to produce too steady biomass 
     163         ! composition and the variance of Chl is too low as it grazes 
     164         ! too strongly on winning organisms. We use a generalized 
     165         ! switching parameterization proposed by Morozov and  
     166         ! Petrovskii (2013) 
     167         ! ------------------------------------------------------------   
     168         ! The width of the selection window is increased when preys 
     169         ! have low abundance, .i.e. zooplankton become less specific  
     170         ! to avoid starvation. 
     171         ! ---------------------------------------------------------- 
     172         zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 
     173         zsigma = xsigma2 + xsigma2del * zsigma 
     174         ! Nanophytoplankton and diatoms are the only preys considered 
     175         ! to be close enough to have potential interference 
     176         ! ----------------------------------------------------------- 
     177         zdiffdn = exp( -ABS(log(1.67 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 
     178         ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / ( 1.0 + zdiffdn ) 
     179         ztmp2 = xpref2c * zcompapoc**2 
     180         ztmp3 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) / ( 1.0 + zdiffdn ) 
     181         ztmp4 = xpref2z * zcompaz**2 
     182         ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + rtrn 
     183         ztmp1 = ztmp1 / ztmptot 
     184         ztmp2 = ztmp2 / ztmptot 
     185         ztmp3 = ztmp3 / ztmptot 
     186         ztmp4 = ztmp4 / ztmptot 
     187 
     188         !   Mesozooplankton regular grazing on the different preys 
     189         !   ------------------------------------------------------ 
     190         zgrazdc   = zgraze2  * ztmp3 * zdenom  ! diatoms 
     191         zgraznc   = zgraze2  * ztmp1 * zdenom  ! nanophytoplankton 
     192         zgrazpoc  = zgraze2  * ztmp2 * zdenom  ! small POC 
     193         zgrazz    = zgraze2  * ztmp4 * zdenom  ! microzooplankton 
     194 
     195         ! Ingestion rates of the Fe content of the different preys 
     196         zgraznf   = zgraznc  * tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn) 
     197         zgrazdf   = zgrazdc  * tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn) 
    121198         zgrazpof  = zgrazpoc * tr(ji,jj,jk,jpsfe,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 
    122199 
    123          !  Mesozooplankton flux feeding on GOC 
    124          !  ---------------------------------- 
     200         !  Mesozooplankton flux feeding on GOC and POC. The feeding pressure 
     201         ! is proportional to the flux 
     202         !  ------------------------------------------------------------------ 
    125203         zgrazffeg = grazflux  * xstep * wsbio4(ji,jj,jk)      & 
    126204         &           * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & 
     
    132210         zgrazfffp = zgrazffep * tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 
    133211         ! 
    134          zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 
    135          ! Compute the proportion of filter feeders 
    136          zproport  = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 
     212         zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazpoc + zgrazffep + zgrazffeg 
     213         ! Compute the proportion of filter feeders. It is assumed steady state. 
     214         ! ---------------------------------------------------------------------   
     215         zproport  = 0._wp 
     216         IF( gdepw(ji,jj,jk+1,Kmm) > MAX(hmld(ji,jj), heup_01(ji,jj) ) ) THEN 
     217            zproport  = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 
     218         ENDIF 
     219 
     220         ! Compute fractionation of aggregates. It is assumed that  
     221         ! diatoms based aggregates are more prone to fractionation 
     222         ! since they are more porous (marine snow instead of fecal pellets) 
     223         ! ----------------------------------------------------------------- 
     224 
    137225         ! Compute fractionation of aggregates. It is assumed that  
    138226         ! diatoms based aggregates are more prone to fractionation 
     
    142230         zfrac     = zproport * grazflux  * xstep * wsbio4(ji,jj,jk)      & 
    143231         &          * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb)          & 
    144          &          * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 
     232         &          * ( 0.4 + 3.6 * zratio2 / ( 1.**2 + zratio2 ) ) 
    145233         zfracfe   = zfrac * tr(ji,jj,jk,jpbfe,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 
    146234 
     235         ! Flux feeding is multiplied by the fractional biomass of flux feeders 
    147236         zgrazffep = zproport * zgrazffep 
    148237         zgrazffeg = zproport * zgrazffeg 
    149238         zgrazfffp = zproport * zgrazfffp 
    150239         zgrazfffg = zproport * zgrazfffg 
    151          zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 
    152          zgraztotn = zgrazd * quotad(ji,jj,jk) + zgrazz + zgrazn * quotan(ji,jj,jk)   & 
     240         zgrazdc   = (1.0 - zproport) * zgrazdc 
     241         zgraznc   = (1.0 - zproport) * zgraznc 
     242         zgrazz    = (1.0 - zproport) * zgrazz 
     243         zgrazpoc  = (1.0 - zproport) * zgrazpoc 
     244         zgrazdf   = (1.0 - zproport) * zgrazdf 
     245         zgraznf   = (1.0 - zproport) * zgraznf 
     246         zgrazpof  = (1.0 - zproport) * zgrazpof 
     247 
     248 
     249         ! Total ingestion rates in C, N, Fe 
     250         zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazpoc + zgrazffep + zgrazffeg 
     251         zgraztotn = zgrazdc * quotad(ji,jj,jk) + zgrazz + zgraznc * quotan(ji,jj,jk)   & 
    153252         &   + zgrazpoc + zgrazffep + zgrazffeg 
    154          zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp + zgrazfffg 
     253         zgraztotf = zgrazdf + zgraznf + zgrazz * feratz + zgrazpof + zgrazfffp + zgrazfffg 
    155254 
    156255         ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 
    157          zgrazing2(ji,jj,jk) = zgraztotc 
     256         zgrazing(ji,jj,jk) = zgraztotc 
    158257 
    159258         ! Mesozooplankton efficiency.  
     
    165264         ! Fulton, 2012) 
    166265         ! ----------------------------------------------------------------------------------- 
    167          zgrasrat  =  ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 
     266 
     267         zgrasratf =  ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 
    168268         zgrasratn =  ( zgraztotn + rtrn )/ ( zgraztotc + rtrn ) 
    169          zepshert  = MIN( 1., zgrasratn, zgrasrat / ferat3) 
     269         zepshert  = MIN( 1., zgrasratn, zgrasratf / feratm) 
    170270         zbeta     = MAX(0., (epsher2 - epsher2min) ) 
     271         ! Food quantity deprivation of GGE 
    171272         zepsherf  = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta )  
     273         ! Food quality deprivation of GGE 
    172274         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  
     275         ! Actual GGE 
     276         zepsherv  = zepsherf * zepshert * zepsherq 
     277         !  
     278         ! Impact of grazing on the prognostic variables 
     279         ! --------------------------------------------- 
    199280         zmortz = ztortz + zrespz 
     281         ! Mortality induced by the upper trophic levels, ztortz, is allocated  
     282         ! according to a infinite chain of predators (ANderson et al., 2013) 
    200283         zmortzgoc = unass2 / ( 1. - epsher2 ) * ztortz + zrespz 
     284 
    201285         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 
     286         tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc 
    203287         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 ) 
     288         tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc 
     289         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 ) 
     290         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 ) 
     291         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 ) 
     292         zgrabsi(ji,jj,jk)       = zgrazdc * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 
     293         ! 
    209294         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  
     295         tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazdf 
     296         ! 
    212297         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zgrazpoc - zgrazffep + zfrac 
    213298         prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfrac 
    214299         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 
     300         ! 
     301         tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zgrazffeg - zfrac 
    217302         consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfrac 
     303         ! 
    218304         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 
     305         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zgrazfffg - zfracfe 
     306 
     307         ! Calcite remineralization due to zooplankton activity 
     308         ! part2 of the ingested calcite is not dissolving in the  
     309         ! acidic gut 
     310         ! ------------------------------------------------------ 
     311         zfracal = tr(ji,jj,jk,jpcal,Kbb) / ( tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) 
     312         zgrazcal = zgrazffeg * (1. - part2) * zfracal 
     313         ! calcite production by zooplankton activity 
     314         zprcaca = xfracal(ji,jj,jk) * zgraznc 
    225315         prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
    226316         ! 
    227317         zprcaca = part2 * zprcaca 
    228318         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 ) 
     319         tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + 2. * ( zgrazcal - zprcaca ) 
    230320         tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) - zgrazcal + zprcaca 
     321 
     322         ! Computation of total excretion and egestion by mesozoo.  
     323         ! --------------------------------------------------------- 
     324         zgrarem(ji,jj,jk) = zgraztotc * ( 1. - zepsherv - unass2 ) & 
     325                 &         + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz 
     326         zgraref(ji,jj,jk) = zgraztotc * MAX( 0. , ( 1. - unass2 ) * zgrasratf - feratm * zepsherv )    & 
     327                 &         + feratm * ( ( 1. - epsher2 - unass2 ) /( 1. - epsher2 ) * ztortz ) 
     328         zgrapoc(ji,jj,jk) = zgraztotc * unass2 + zmortzgoc 
     329         zgrapof(ji,jj,jk) = zgraztotf * unass2 + feratm * zmortzgoc 
     330         ! 
    231331      END_3D 
    232       ! 
     332 
     333      ! Computation of the effect of DVM by mesozooplankton 
     334      ! This part is only activated if ln_dvm_meso is set to true 
     335      ! The parameterization has been published in Gorgues et al. (2019). 
     336      ! ----------------------------------------------------------------- 
     337      IF (ln_dvm_meso) THEN 
     338         ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) 
     339         ALLOCATE( zgramigbsi(jpi,jpj) ) 
     340         zgramigrem(:,:) = 0.0    ;   zgramigref(:,:) = 0.0 
     341         zgramigpoc(:,:) = 0.0    ;   zgramigpof(:,:) = 0.0 
     342         zgramigbsi(:,:) = 0.0 
     343 
     344        ! Compute the amount of materials that will go into vertical migration 
     345        ! This fraction is sumed over the euphotic zone and is removed from  
     346        ! the fluxes driven by mesozooplankton in the euphotic zone. 
     347        ! -------------------------------------------------------------------- 
     348        DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpk) 
     349            zmigreltime = (1. - strn(ji,jj)) 
     350            zmigthick   = (1. - zmigreltime ) * e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 
     351            IF ( gdept(ji,jj,jk,Kmm) <= heup(ji,jj) ) THEN 
     352               zgramigrem(ji,jj) = zgramigrem(ji,jj) + xfracmig * zgrarem(ji,jj,jk) * zmigthick  
     353               zgramigref(ji,jj) = zgramigref(ji,jj) + xfracmig * zgraref(ji,jj,jk) * zmigthick  
     354               zgramigpoc(ji,jj) = zgramigpoc(ji,jj) + xfracmig * zgrapoc(ji,jj,jk) * zmigthick  
     355               zgramigpof(ji,jj) = zgramigpof(ji,jj) + xfracmig * zgrapof(ji,jj,jk) * zmigthick  
     356               zgramigbsi(ji,jj) = zgramigbsi(ji,jj) + xfracmig * zgrabsi(ji,jj,jk) * zmigthick  
     357 
     358               zgrarem(ji,jj,jk) = zgrarem(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 
     359               zgraref(ji,jj,jk) = zgraref(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 
     360               zgrapoc(ji,jj,jk) = zgrapoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 
     361               zgrapof(ji,jj,jk) = zgrapof(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 
     362               zgrabsi(ji,jj,jk) = zgrabsi(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 
     363            ENDIF 
     364         END_3D 
     365       
     366         ! The inorganic and organic fluxes induced by migrating organisms are added at the  
     367         ! the migration depth (corresponding indice is set by kmig) 
     368         ! -------------------------------------------------------------------------------- 
     369         DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
     370            IF( tmask(ji,jj,1) == 1.) THEN 
     371               jkt = kmig(ji,jj) 
     372               zdep = 1. / e3t(ji,jj,jkt,Kmm) 
     373               zgrarem(ji,jj,jkt) = zgrarem(ji,jj,jkt) + zgramigrem(ji,jj) * zdep  
     374               zgraref(ji,jj,jkt) = zgraref(ji,jj,jkt) + zgramigref(ji,jj) * zdep 
     375               zgrapoc(ji,jj,jkt) = zgrapoc(ji,jj,jkt) + zgramigpoc(ji,jj) * zdep 
     376               zgrapof(ji,jj,jkt) = zgrapof(ji,jj,jkt) + zgramigpof(ji,jj) * zdep 
     377               zgrabsi(ji,jj,jkt) = zgrabsi(ji,jj,jkt) + zgramigbsi(ji,jj) * zdep 
     378            ENDIF 
     379         END_2D 
     380         ! 
     381         ! Deallocate temporary variables 
     382         ! ------------------------------ 
     383         DEALLOCATE( zgramigrem, zgramigref, zgramigpoc, zgramigpof, zgramigbsi ) 
     384      ! End of the ln_dvm_meso part 
     385      ENDIF 
     386 
     387      !   Update the arrays TRA which contain the biological sources and sinks 
     388      !   This only concerns the variables which are affected by DVM (inorganic  
     389      !   nutrients, DOC agands, and particulate organic carbon).  
     390      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpk) 
     391         tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarem(ji,jj,jk) * sigma2 
     392         tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgrarem(ji,jj,jk) * sigma2 
     393         tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgrarem(ji,jj,jk) * ( 1. - sigma2 ) 
     394         ! 
     395         IF( ln_ligand ) &  
     396          &  tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgrarem(ji,jj,jk) * ( 1. - sigma2 ) * ldocz 
     397         ! 
     398         tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem(ji,jj,jk) * sigma2 
     399         tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref(ji,jj,jk) 
     400         zfezoo2(ji,jj,jk)   = zgraref(ji,jj,jk) 
     401         tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem(ji,jj,jk) * sigma2 
     402         tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgrarem(ji,jj,jk) * sigma2              
     403         tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zgrapoc(ji,jj,jk) 
     404         prodgoc(ji,jj,jk)   = prodgoc(ji,jj,jk)   + zgrapoc(ji,jj,jk) 
     405         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zgrapof(ji,jj,jk) 
     406         tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrabsi(ji,jj,jk) 
     407      END_3D 
     408      ! 
     409      ! Write the output 
    233410      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
    234411        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 
     412        CALL iom_put( "GRAZ2" , zgrazing(:,:,:) * 1.e+3  * rfact2r * tmask(:,:,:) ) ! Total grazing of phyto by zoo 
     413        CALL iom_put( "FEZOO2", zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 
     414        IF( ln_ligand ) & 
     415         & CALL iom_put( "LPRODZ2", zgrarem(ji,jj,jk) * ( 1. - sigma2 ) * ldocz * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)  ) 
    244416      ENDIF 
    245417      ! 
     
    261433      !! ** Purpose :   Initialization of mesozooplankton parameters 
    262434      !! 
    263       !! ** Method  :   Read the nampismes namelist and check the parameters 
     435      !! ** Method  :   Read the namp4zmes namelist and check the parameters 
    264436      !!      called at the first timestep (nittrc000) 
    265437      !! 
     
    270442      NAMELIST/namp4zmes/ part2, grazrat2, resrat2, mzrat2, xpref2n, xpref2d, xpref2z,   & 
    271443         &                xpref2c, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 
    272          &                xthresh2, xkgraz2, epsher2, epsher2min, sigma2, unass2, grazflux 
     444         &                xthresh2, xkgraz2, epsher2, epsher2min, sigma2, unass2, grazflux, ln_dvm_meso,  & 
     445         &                xsigma2, xsigma2del, xfracmig 
    273446      !!---------------------------------------------------------------------- 
    274447      ! 
     
    281454      READ  ( numnatp_ref, namp4zmes, IOSTAT = ios, ERR = 901) 
    282455901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zmes in reference namelist' ) 
     456 
    283457      READ  ( numnatp_cfg, namp4zmes, IOSTAT = ios, ERR = 902 ) 
    284458902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zmes in configuration namelist' ) 
     
    303477         WRITE(numout,*) '      non assimilated fraction of P by mesozoo       unass2       =', unass2 
    304478         WRITE(numout,*) '      Efficiency of Mesozoo growth                   epsher2      =', epsher2 
    305          WRITE(numout,*) '      Minimum Efficiency of Mesozoo growth           epsher2min  =', epsher2min 
     479         WRITE(numout,*) '      Minimum Efficiency of Mesozoo growth           epsher2min   =', epsher2min 
    306480         WRITE(numout,*) '      Fraction of mesozoo excretion as DOM           sigma2       =', sigma2 
    307481         WRITE(numout,*) '      half sturation constant for grazing 2          xkgraz2      =', xkgraz2 
     482         WRITE(numout,*) '      Width of the grazing window                     xsigma2     =', xsigma2 
     483         WRITE(numout,*) '      Maximum additional width of the grazing window  xsigma2del  =', xsigma2del 
     484         WRITE(numout,*) '      Diurnal vertical migration of mesozoo.         ln_dvm_meso  =', ln_dvm_meso 
     485         WRITE(numout,*) '      Fractional biomass of meso  that performs DVM  xfracmig     =', xfracmig 
    308486      ENDIF 
    309487      ! 
    310488   END SUBROUTINE p4z_meso_init 
     489 
     490   SUBROUTINE p4z_meso_depmig( Kbb, Kmm ) 
     491      !!---------------------------------------------------------------------- 
     492      !!                  ***  ROUTINE p4z_meso_depmig  *** 
     493      !! 
     494      !! ** Purpose :   Computation the migration depth of mesozooplankton 
     495      !! 
     496      !! ** Method  :   Computes the DVM depth of mesozooplankton from oxygen 
     497      !!      temperature and chlorophylle following the parameterization  
     498      !!      proposed by Bianchi et al. (2013) 
     499      !!---------------------------------------------------------------------- 
     500      INTEGER, INTENT(in)  ::  Kbb, kmm ! time level indices 
     501      ! 
     502      INTEGER  :: ji, jj, jk 
     503      ! 
     504      REAL(wp) :: ztotchl, z1dep 
     505      REAL(wp), DIMENSION(jpi,jpj) :: oxymoy, tempmoy, zdepmoy 
     506 
     507      !!--------------------------------------------------------------------- 
     508      ! 
     509      IF( ln_timing == 1 )  CALL timing_start('p4z_meso_zdepmig') 
     510      ! 
     511      oxymoy(:,:)  = 0. 
     512      tempmoy(:,:) = 0. 
     513      zdepmoy(:,:) = 0. 
     514      depmig (:,:) = 5. 
     515      kmig   (:,:) = 1 
     516      ! 
     517      ! Compute the averaged values of oxygen, temperature over the domain  
     518      ! 150m to 500 m depth. 
     519      ! ------------------------------------------------------------------ 
     520      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpk) 
     521         IF( tmask(ji,jj,jk) == 1.) THEN 
     522            IF( gdept(ji,jj,jk,Kmm) >= 150. .AND. gdept(ji,jj,jk,kmm) <= 500.) THEN 
     523               oxymoy(ji,jj)  = oxymoy(ji,jj)  + tr(ji,jj,jk,jpoxy,Kbb) * 1E6 * e3t(ji,jj,jk,Kmm) 
     524               tempmoy(ji,jj) = tempmoy(ji,jj) + ts(ji,jj,jk,jp_tem,kmm)      * e3t(ji,jj,jk,kmm) 
     525               zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t(ji,jj,jk,Kmm) 
     526            ENDIF 
     527         ENDIF 
     528      END_3D 
     529 
     530      ! Compute the difference between surface values and the mean values in the mesopelagic 
     531      ! domain 
     532      ! ------------------------------------------------------------------------------------ 
     533      DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
     534         z1dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 
     535         oxymoy(ji,jj)  = tr(ji,jj,1,jpoxy,Kbb) * 1E6 - oxymoy(ji,jj)  * z1dep 
     536         tempmoy(ji,jj) = ts(ji,jj,1,jp_tem,Kmm)      - tempmoy(ji,jj) * z1dep 
     537      END_2D 
     538      ! 
     539      ! Computation of the migration depth based on the parameterization of  
     540      ! Bianchi et al. (2013) 
     541      ! ------------------------------------------------------------------- 
     542      DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
     543         IF( tmask(ji,jj,1) == 1. ) THEN 
     544            ztotchl = ( tr(ji,jj,1,jpnch,Kbb) + tr(ji,jj,1,jpdch,Kbb) ) * 1E6 
     545            depmig(ji,jj) = 398. - 0.56 * oxymoy(ji,jj) -115. * log10(ztotchl) + 0.36 * hmld(ji,jj) -2.4 * tempmoy(ji,jj) 
     546         ENDIF 
     547      END_2D 
     548      !  
     549      ! Computation of the corresponding jk indice  
     550      ! ------------------------------------------ 
     551      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     552         IF( depmig(ji,jj) >= gdepw(ji,jj,jk,Kmm) .AND. depmig(ji,jj) < gdepw(ji,jj,jk+1,Kmm) ) THEN 
     553             kmig(ji,jj) = jk 
     554          ENDIF 
     555      END_3D 
     556      ! 
     557      ! Correction of the migration depth and indice based on O2 levels 
     558      ! If O2 is too low, imposing a migration depth at this low O2 levels 
     559      ! would lead to negative O2 concentrations (respiration while O2 is close 
     560      ! to 0. Thus, to avoid that problem, the migration depth is adjusted so 
     561      ! that it falls above the OMZ 
     562      ! ----------------------------------------------------------------------- 
     563      DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
     564         IF( tr(ji,jj,kmig(ji,jj),jpoxy,Kbb) < 5E-6 ) THEN 
     565            DO jk = kmig(ji,jj),1,-1 
     566               IF( tr(ji,jj,jk,jpoxy,Kbb) >= 5E-6 .AND. tr(ji,jj,jk+1,jpoxy,Kbb)  < 5E-6) THEN 
     567                  kmig(ji,jj) = jk 
     568                  depmig(ji,jj) = gdept(ji,jj,jk,Kmm) 
     569               ENDIF 
     570            END DO 
     571         ENDIF 
     572      END_2D 
     573      ! 
     574      IF( ln_timing )   CALL timing_stop('p4z_meso_depmig') 
     575      ! 
     576   END SUBROUTINE p4z_meso_depmig 
     577 
     578   INTEGER FUNCTION p4z_meso_alloc() 
     579      !!---------------------------------------------------------------------- 
     580      !!                     ***  ROUTINE p4z_meso_alloc  *** 
     581      !!---------------------------------------------------------------------- 
     582      ! 
     583      ALLOCATE( depmig(jpi,jpj), kmig(jpi,jpj), STAT= p4z_meso_alloc  ) 
     584      ! 
     585      IF( p4z_meso_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p4z_meso_alloc : failed to allocate arrays.' ) 
     586      ! 
     587   END FUNCTION p4z_meso_alloc 
    311588 
    312589   !!====================================================================== 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zmicro.F90

    r15090 r15459  
    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( nn_hls, nn_hls, nn_hls, nn_hls, 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/trunk/src/TOP/PISCES/P4Z/p4zmort.F90

    r15090 r15459  
    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( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    80          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 
     78         zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - 1e-9 ), 0.e0 ) 
     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 
    110110         tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * zprcaca 
    111111         tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) + zprcaca 
    112          tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zfracal * zmortp 
    113          tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + ( 1. - zfracal ) * zmortp 
    114          prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ( 1. - zfracal ) * zmortp 
    115          prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zfracal * zmortp 
    116          tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ( 1. - zfracal ) * zmortp * zfactfe 
    117          tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zfracal * zmortp * zfactfe 
     112         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zmortp 
     113         prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortp 
     114 
     115         ! Update the arrays TRA which contains the biological sources and sinks 
     116         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zmortp * zfactfe 
     117         ! 
    118118      END_3D 
    119119      ! 
     
    124124       ENDIF 
    125125      ! 
    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  *** 
     126      IF( ln_timing )   CALL timing_stop('p4z_mort_nano') 
     127      ! 
     128   END SUBROUTINE p4z_mort_nano 
     129 
     130 
     131   SUBROUTINE p4z_mort_diat( Kbb, Krhs ) 
     132      !!--------------------------------------------------------------------- 
     133      !!                     ***  ROUTINE p4z_mort_diat  *** 
    134134      !! 
    135135      !! ** Purpose :   Compute the mortality terms for diatoms 
    136136      !! 
    137       !! ** Method  : - ??? 
     137      !! ** Method  : - Both quadratic and simili linear mortality terms 
    138138      !!--------------------------------------------------------------------- 
    139139      INTEGER, INTENT(in) ::   Kbb, Krhs  ! time level indices 
     
    145145      !!--------------------------------------------------------------------- 
    146146      ! 
    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       !     ------------------------------------------------------------ 
     147      IF( ln_timing )   CALL timing_start('p4z_mort_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      ! This is due to the production of EPS by stressed cells 
     153      ! ------------------------------------------------------------- 
    153154 
    154155      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     
    156157         zcompadi = MAX( ( tr(ji,jj,jk,jpdia,Kbb) - 1e-9), 0. ) 
    157158 
    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          !     ------------------------ 
     159         ! Aggregation term for diatoms is increased in case of nutrient 
     160         ! stress as observed in reality. The stressed cells become more 
     161         ! sticky and coagulate to sink quickly out of the euphotic zone 
     162         ! ------------------------------------------------------------ 
    164163         zlim2   = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 
    165164         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  
     165         zrespp2 = 1.e6 * xstep * wchld * zlim1 * xdiss(ji,jj,jk) * zcompadi * tr(ji,jj,jk,jpdia,Kbb) 
     166 
     167         ! Phytoplankton linear mortality 
     168         ! A michaelis-menten like term is introduced to avoid  
     169         ! extinction of diatoms in highly limited areas 
     170         !  --------------------------------------------------- 
     171         ztortp2 = mpratd * xstep * tr(ji,jj,jk,jpdia,Kbb)  / ( xkmort + tr(ji,jj,jk,jpdia,Kbb) ) * zcompadi  
    171172 
    172173         zmortp2 = zrespp2 + ztortp2 
    173174 
    174          !   Update the arrays tr(:,:,:,:,Krhs) which contains the biological sources and sinks 
     175         !   Update the arrays trends which contains the biological sources and sinks 
    175176         !   --------------------------------------------------------------------- 
    176177         zfactch = tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 
     
    182183         tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zmortp2 * zfactsi 
    183184         tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zmortp2 * zfactsi 
    184          tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zrespp2 + 0.5 * ztortp2 
    185          tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + 0.5 * ztortp2 
    186          prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + 0.5 * ztortp2 
    187          prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zrespp2 + 0.5 * ztortp2 
    188          tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + 0.5 * ztortp2 * zfactfe 
    189          tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + ( zrespp2 + 0.5 * ztortp2 ) * zfactfe 
     185 
     186         ! Half of the linear mortality term is routed to big particles 
     187         ! becaue of the ballasting effect 
     188         tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zrespp2 
     189         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + ztortp2 
     190         prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortp2 
     191         prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zrespp2 
     192         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ztortp2 * zfactfe 
     193         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zrespp2 * zfactfe 
    190194      END_3D 
    191195      ! 
     
    196200      ENDIF 
    197201      ! 
    198       IF( ln_timing )   CALL timing_stop('p4z_diat') 
    199       ! 
    200    END SUBROUTINE p4z_diat 
     202      IF( ln_timing )   CALL timing_stop('p4z_mort_diat') 
     203      ! 
     204   END SUBROUTINE p4z_mort_diat 
    201205 
    202206 
     
    207211      !! ** Purpose :   Initialization of phytoplankton parameters 
    208212      !! 
    209       !! ** Method  :   Read the nampismort namelist and check the parameters 
     213      !! ** Method  :   Read the namp4zmort namelist and check the parameters 
    210214      !!              called at the first timestep 
    211215      !! 
    212       !! ** input   :   Namelist nampismort 
     216      !! ** input   :   Namelist namp4zmort 
    213217      !! 
    214218      !!---------------------------------------------------------------------- 
    215219      INTEGER ::   ios   ! Local integer 
    216220      ! 
    217       NAMELIST/namp4zmort/ wchl, wchld, wchldm, mprat, mprat2 
     221      NAMELIST/namp4zmort/ wchln, wchld, mpratn, mpratd 
    218222      !!---------------------------------------------------------------------- 
    219223      ! 
     
    226230      READ  ( numnatp_ref, namp4zmort, IOSTAT = ios, ERR = 901) 
    227231901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zmort in reference namelist' ) 
     232 
    228233      READ  ( numnatp_cfg, namp4zmort, IOSTAT = ios, ERR = 902 ) 
    229234902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zmort in configuration namelist' ) 
     
    232237      IF(lwp) THEN                         ! control print 
    233238         WRITE(numout,*) '   Namelist : namp4zmort' 
    234          WRITE(numout,*) '      quadratic mortality of phytoplankton        wchl   =', wchl 
     239         WRITE(numout,*) '      quadratic mortality of phytoplankton        wchln  =', wchln 
    235240         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 
     241         WRITE(numout,*) '      phytoplankton mortality rate                mpratn =', mpratn 
     242         WRITE(numout,*) '      Diatoms mortality rate                      mpratd =', mpratd 
    239243      ENDIF 
    240244      ! 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zopt.F90

    r15090 r15459  
    6767      REAL(wp), DIMENSION(jpi,jpj    ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 
    6868      REAL(wp), DIMENSION(jpi,jpj    ) :: zqsr100, zqsr_corr 
    69       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpar, ze0, ze1, ze2, ze3, zchl3d 
     69      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpar, ze0, ze1, ze2, ze3 
    7070      !!--------------------------------------------------------------------- 
    7171      ! 
     
    7979      ze2(:,:,:) = 0._wp 
    8080      ze3(:,:,:) = 0._wp 
    81       ! 
    82       !                                        !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
    83       !                                        !  -------------------------------------------------------- 
    84                      zchl3d(:,:,:) = tr(:,:,:,jpnch,Kbb) + tr(:,:,:,jpdch,Kbb) 
    85       IF( ln_p5z )   zchl3d(:,:,:) = zchl3d(:,:,:)    + tr(:,:,:,jppch,Kbb) 
    86       ! 
     81 
     82      ! 
     83      ! Attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
     84      ! Thus the light penetration scheme is based on a decomposition of PAR 
     85      ! into three wave length domains. This was first officially published 
     86      ! in Lengaigne et al. (2007). 
     87      ! -------------------------------------------------------- 
     88      ! 
     89      ! Computation of the light attenuation parameters based on a  
     90      ! look-up table 
    8791      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    88          zchl = ( zchl3d(ji,jj,jk) + rtrn ) * 1.e6 
     92         zchl =  ( tr(ji,jj,jk,jpnch,Kbb) + tr(ji,jj,jk,jpdch,Kbb) + rtrn ) * 1.e6 
     93         IF( ln_p5z )   zchl = zchl + tr(ji,jj,jk,jppch,Kbb) * 1.e6 
    8994         zchl = MIN(  10. , MAX( 0.05, zchl )  ) 
    9095         irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn ) 
     
    9499         ekr(ji,jj,jk) = rkrgb(3,irgb) * e3t(ji,jj,jk,Kmm) 
    95100      END_3D 
    96       !                                        !* Photosynthetically Available Radiation (PAR) 
    97       !                                        !  -------------------------------------- 
     101 
     102 
     103      ! Photosynthetically Available Radiation (PAR) 
     104      ! Two cases are considered in the following :  
     105      ! (1) An explicit diunal cycle is activated. In that case, mean  
     106      ! QSR is used as PISCES in its current state has not been parameterized 
     107      ! for an explicit diurnal cycle 
     108      ! (2) no diurnal cycle of SW is active and in that case, QSR is used. 
     109      ! -------------------------------------------- 
    98110      IF( l_trcdm2dc ) THEN                     !  diurnal cycle 
    99          ! 
    100          zqsr_corr(:,:) = qsr_mean(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
    101          ! 
    102          CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 )  
    103          ! 
     111         IF ( ln_p4z_dcyc ) THEN   ! Diurnal cycle in PISCES 
     112            ! 
     113            ! 
     114            ! SW over the ice free zone of the grid cell. This assumes that 
     115            ! SW is zero below sea ice which is a very crude assumption that is  
     116            ! not fully correct with LIM3 and SI3 but no information is  
     117            ! currently available to do a better job. SHould be improved in the  
     118            ! (near) future. 
     119            zqsr_corr(:,:) = qsr_mean(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
     120            ! 
     121            CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 
     122            ! 
     123            ! Used PAR is computed for each phytoplankton species 
     124            ! etot_ndcy is PAR at level jk averaged over 24h. 
     125            ! Due to their size, they have different light absorption characteristics 
     126            DO jk = 1, nksr 
     127               etot_ndcy(:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
     128            END DO 
     129            ! 
     130            ! SW over the ice free zone of the grid cell. This assumes that 
     131            ! SW is zero below sea ice which is a very crude assumption that is  
     132            ! not fully correct with LIM3 and SI3 but no information is  
     133            ! currently available to do a better job. SHould be improved in the  
     134            ! (near) future. 
     135            zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
     136            ! 
     137            CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3 ) 
     138            ! 
     139            ! Total PAR computation at level jk that includes the diurnal cycle 
     140            DO jk = 1, nksr 
     141               etot (:,:,jk) =  ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 
     142               enano(:,:,jk) =  1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) 
     143               ediat(:,:,jk) =  1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) 
     144            END DO 
     145            IF( ln_p5z ) THEN 
     146               DO jk = 1, nksr 
     147                  epico  (:,:,jk) =  1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     148               END DO 
     149            ENDIF 
     150 
     151         ELSE ! No diurnal cycle in PISCES 
     152 
     153            ! 
     154            ! 
     155            ! SW over the ice free zone of the grid cell. This assumes that 
     156            ! SW is zero below sea ice which is a very crude assumption that is  
     157            ! not fully correct with LIM3 and SI3 but no information is  
     158            ! currently available to do a better job. SHould be improved in the  
     159            ! (near) future. 
     160            zqsr_corr(:,:) = qsr_mean(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
     161            ! 
     162            CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 )  
     163            ! 
     164            ! Used PAR is computed for each phytoplankton species 
     165            ! etot_ndcy is PAR at level jk averaged over 24h. 
     166            ! Due to their size, they have different light absorption characteristics 
     167            DO jk = 1, nksr       
     168               etot_ndcy(:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
     169               enano    (:,:,jk) =  1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) 
     170               ediat    (:,:,jk) =  1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) 
     171            END DO 
     172            IF( ln_p5z ) THEN 
     173               DO jk = 1, nksr       
     174                  epico  (:,:,jk) =  1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     175               END DO 
     176            ENDIF 
     177            ! 
     178            ! SW over the ice free zone of the grid cell. This assumes that 
     179            ! SW is zero below sea ice which is a very crude assumption that is  
     180            ! not fully correct with LIM3 and SI3 but no information is  
     181            ! currently available to do a better job. SHould be improved in the  
     182            ! (near) future. 
     183            zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
     184            ! 
     185            CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3 )  
     186            ! 
     187            ! Total PAR computation at level jk that includes the diurnal cycle 
     188            DO jk = 1, nksr       
     189               etot(:,:,jk) =  ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 
     190            END DO 
     191         ENDIF 
     192         ! 
     193      ELSE   ! no diurnal cycle 
     194         ! 
     195         ! 
     196         ! SW over the ice free zone of the grid cell. This assumes that 
     197         ! SW is zero below sea ice which is a very crude assumption that is  
     198         ! not fully correct with LIM3 and SI3 but no information is  
     199         ! currently available to do a better job. SHould be improved in the  
     200         ! (near) future. 
     201         zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
     202         ! 
     203         CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100  )  
     204         ! 
     205 
     206         ! Used PAR is computed for each phytoplankton species 
     207         ! Due to their size, they have different light absorption characteristics 
    104208         DO jk = 1, nksr       
    105             etot_ndcy(:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
    106             enano    (:,:,jk) =  1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) 
    107             ediat    (:,:,jk) =  1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) 
     209            etot (:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk)    ! Total PAR 
     210            enano(:,:,jk) =  1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk)  ! Nanophytoplankton 
     211            ediat(:,:,jk) =  1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk)  ! Diatoms 
    108212         END DO 
    109213         IF( ln_p5z ) THEN 
    110214            DO jk = 1, nksr       
    111               epico  (:,:,jk) =  1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     215              epico(:,:,jk) =  1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk)  ! Picophytoplankton (PISCES-QUOTA) 
    112216            END DO 
    113217         ENDIF 
    114          ! 
    115          zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
    116          ! 
    117          CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3 )  
    118          ! 
    119          DO jk = 1, nksr       
    120             etot(:,:,jk) =  ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 
    121          END DO 
    122          ! 
    123       ELSE 
    124          ! 
    125          zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 
    126          ! 
    127          CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100  )  
    128          ! 
    129          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) 
    133          END DO 
    134          IF( ln_p5z ) THEN 
    135             DO jk = 1, nksr       
    136               epico(:,:,jk) =  1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
    137             END DO 
    138          ENDIF 
    139218         etot_ndcy(:,:,:) =  etot(:,:,:)  
    140219      ENDIF 
    141220 
    142221 
     222      ! Biophysical feedback part (computation of vertical penetration of SW) 
    143223      IF( ln_qsr_bio ) THEN                    !* heat flux accros w-level (used in the dynamics) 
    144224         !                                     !  ------------------------ 
     
    151231         !                                     !  ------------------------ 
    152232      ENDIF 
    153       !                                        !* Euphotic depth and level 
    154       neln   (:,:) = 1                            !  ------------------------ 
     233       
     234      ! Euphotic depth and level 
     235      ! Two definitions of the euphotic zone are used here.  
     236      ! (1) The classical definition based on the relative threshold value 
     237      ! (2) An alternative definition based on a absolute threshold value. 
     238      ! ------------------------------------------------------------------- 
     239      neln(:,:) = 1 
    155240      heup   (:,:) = gdepw(:,:,2,Kmm) 
    156241      heup_01(:,:) = gdepw(:,:,2,Kmm) 
     
    162247           heup(ji,jj) = gdepw(ji,jj,jk+1,Kmm)     ! Euphotic layer depth 
    163248        ENDIF 
    164         IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.50 )  THEN 
     249        IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.10 )  THEN 
    165250           heup_01(ji,jj) = gdepw(ji,jj,jk+1,Kmm)  ! Euphotic layer depth (light level definition) 
    166251        ENDIF 
    167252      END_3D 
    168253      ! 
     254      ! The euphotic depth can not exceed 300 meters. 
    169255      heup   (:,:) = MIN( 300., heup   (:,:) ) 
    170256      heup_01(:,:) = MIN( 300., heup_01(:,:) ) 
    171       !                                        !* mean light over the mixed layer 
    172       zdepmoy(:,:)   = 0.e0                    !  ------------------------------- 
     257       
     258      ! Mean PAR over the mixed layer 
     259      ! ----------------------------- 
     260      zdepmoy(:,:)   = 0.e0              
    173261      zetmp1 (:,:)   = 0.e0 
    174262      zetmp2 (:,:)   = 0.e0 
     
    176264      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, nksr) 
    177265         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 
     266            zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot     (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Actual PAR for remineralisation 
     267            zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Par averaged over 24h for production 
    180268            zdepmoy(ji,jj) = zdepmoy(ji,jj) +                       e3t(ji,jj,jk,Kmm) 
    181269         ENDIF 
     
    192280         ENDIF 
    193281      END_3D 
    194       ! 
     282 
     283      ! Computation of the mean usable light for the different phytoplankton 
     284      ! groups based on their absorption characteristics. 
    195285      zdepmoy(:,:)   = 0.e0 
    196286      zetmp3 (:,:)   = 0.e0 
     
    199289      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, nksr) 
    200290         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 
     291            zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano    (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Nanophytoplankton 
     292            zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat    (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Diatoms 
    203293            zdepmoy(ji,jj) = zdepmoy(ji,jj) +                       e3t(ji,jj,jk,Kmm) 
    204294         ENDIF 
     
    216306      ! 
    217307      IF( ln_p5z ) THEN 
     308         ! Picophytoplankton when using PISCES-QUOTA 
    218309         ALLOCATE( zetmp5(jpi,jpj) )  ;   zetmp5 (:,:) = 0.e0 
    219310         DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, nksr) 
    220311            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 
     312               zetmp5(ji,jj)  = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t(ji,jj,jk,Kmm) 
    222313            ENDIF 
    223314         END_3D 
     
    281372         pe3(:,:,1) = zqsr(:,:) 
    282373         ! 
    283          DO jk = 2, nksr + 1 
    284             DO jj = 1, jpj 
    285                DO ji = 1, jpi 
    286                   pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -e3t(ji,jj,jk-1,Kmm) * xsi0r ) 
    287                   pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb  (ji,jj,jk-1 )        ) 
    288                   pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg  (ji,jj,jk-1 )        ) 
    289                   pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr  (ji,jj,jk-1 )        ) 
    290                END DO 
    291               ! 
    292             END DO 
    293             ! 
    294          END DO 
     374         DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 2, nksr + 1) 
     375            pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -e3t(ji,jj,jk-1,Kmm) * xsi0r ) 
     376            pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb  (ji,jj,jk-1 )        ) 
     377            pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg  (ji,jj,jk-1 )        ) 
     378            pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr  (ji,jj,jk-1 )        ) 
     379        END_3D 
    295380        ! 
    296381      ELSE   ! T- level 
     
    358443      TYPE(FLD_N) ::   sn_par                ! informations about the fields to be read 
    359444      ! 
    360       NAMELIST/nampisopt/cn_dir, sn_par, ln_varpar, parlux 
     445      NAMELIST/nampisopt/cn_dir, sn_par, ln_varpar, parlux, ln_p4z_dcyc 
    361446      !!---------------------------------------------------------------------- 
    362447      IF(lwp) THEN 
     
    373458      IF(lwp) THEN 
    374459         WRITE(numout,*) '   Namelist : nampisopt ' 
    375          WRITE(numout,*) '      PAR as a variable fraction of SW     ln_varpar      = ', ln_varpar 
    376          WRITE(numout,*) '      Default value for the PAR fraction   parlux         = ', parlux 
     460         WRITE(numout,*) '      PAR as a variable fraction of SW       ln_varpar      = ', ln_varpar 
     461         WRITE(numout,*) '      Default value for the PAR fraction     parlux         = ', parlux 
     462         WRITE(numout,*) '      Activate the diurnal cycle in PISCES   ln_p4z_dcyc    = ', ln_p4z_dcyc 
    377463      ENDIF 
    378464      ! 
    379465      xparsw = parlux / 3.0 
    380466      xsi0r  = 1.e0 / rn_si0 
     467 
     468      ! Warning : activate the diurnal cycle with no diurnal cycle in the forcing fields makes no sense 
     469      ! That does not produce a bug because the model does not use the flag but a warning is necessary 
     470      ! ---------------------------------------------------------------------------------------------- 
     471      IF ( ln_p4z_dcyc .AND. l_trcdm2dc ) THEN 
     472         IF (lwp) WRITE(numout,*) 'No diurnal cycle in the PAR forcing field ' 
     473         IF (lwp) WRITE(numout,*) 'Activating the diurnal cycle in PISCES has no effect' 
     474      ENDIF 
    381475      ! 
    382476      ! Variable PAR at the surface of the ocean 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zpoc.F90

    r15090 r15459  
    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( nn_hls, nn_hls, nn_hls, nn_hls, 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) 
     
    213228      ELSE 
    214229         DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    215              ! POC disaggregation by turbulence and bacterial activity.  
     230            ! POC degradation by bacterial activity. It is a function  
     231            ! of the mean lability and of temperature. This also includes 
     232            ! shrinking of particles due to the bacterial activity 
    216233            ! -------------------------------------------------------- 
    217234            zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
     
    223240            zofer2 = xremipn / xremipc * zremig * tr(ji,jj,jk,jpbfe,Kbb) 
    224241 
    225             ! ------------------------------------- 
     242            ! update of the TRA arrays 
    226243            tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zorem3(ji,jj,jk) 
    227244            tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + solgoc * zopon2  
     
    246263     ENDIF 
    247264 
    248      ! ------------------------------------------------------------------ 
    249265     ! Lability parameterization for the small OM particles. This param  
    250266     ! is based on the same theoretical background as the big particles. 
    251267     ! However, because of its low sinking speed, lability is not supposed 
    252268     ! 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      ! 
     269     ! organic matter) in the MLD. It is however uniform in the mixed layer. 
     270     ! --------------------------------------------------------------------- 
    256271     totprod (:,:) = 0. 
    257272     totthick(:,:) = 0. 
    258273     totcons (:,:) = 0. 
     274 
    259275     ! intregrated production and consumption of POC in the mixed layer 
    260276     ! ---------------------------------------------------------------- 
    261      !  
    262277     DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    263278        zdep = hmld(ji,jj) 
     
    272287 
    273288     ! Computation of the lability spectrum in the mixed layer. In the mixed  
    274      ! layer, this spectrum is supposed to be uniform. 
     289     ! layer, this spectrum is supposed to be uniform as a result of intense 
     290     ! mixing. 
    275291     ! --------------------------------------------------------------------- 
    276292     ztremint(:,:,:) = zremipoc(:,:,:) 
     
    302318     ENDIF 
    303319 
    304      ! ----------------------------------------------------------------------- 
    305320     ! The lability parameterization is used here. The code is here  
    306321     ! almost identical to what is done for big particles. The only difference 
     
    309324     ! should be determined before. 
    310325     ! ----------------------------------------------------------------------- 
    311      ! 
    312326     DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 2, jpkm1) 
    313327        IF (tmask(ji,jj,jk) == 1.) THEN 
     
    386400         DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    387401            IF (tmask(ji,jj,jk) == 1.) THEN 
    388               ! POC disaggregation by turbulence and bacterial activity.  
     402              ! POC disaggregation by turbulence and bacterial activity.It is a function 
     403              ! of the mean lability and of temperature   
    389404              ! -------------------------------------------------------- 
    390405              zremip          = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
    391406              zorem           = zremip * tr(ji,jj,jk,jppoc,Kbb) 
    392407              zofer           = zremip * tr(ji,jj,jk,jpsfe,Kbb) 
    393  
     408               
     409              ! Update of the TRA arrays 
    394410              tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zorem 
    395411              orem(ji,jj,jk)      = orem(ji,jj,jk) + zorem 
     
    402418     ELSE 
    403419       DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    404           ! POC disaggregation by turbulence and bacterial activity.  
    405           ! -------------------------------------------------------- 
     420          ! POC disaggregation by turbulence and bacterial activity.It is a function 
     421          ! of the mean lability and of temperature   
     422          !-------------------------------------------------------- 
    406423          zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
    407424          zopoc  = zremip * tr(ji,jj,jk,jppoc,Kbb) 
     
    410427          zopop  = xremipp / xremipc * zremip * tr(ji,jj,jk,jppop,Kbb) 
    411428          zofer  = xremipn / xremipc * zremip * tr(ji,jj,jk,jpsfe,Kbb) 
    412  
     429               
     430          ! Update of the TRA arrays 
    413431          tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zopoc 
    414432          tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) - zopon 
     
    426444        IF( knt == nrdttrc ) THEN 
    427445          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 
     446          CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) )  ! Remineralisation rate of small particles 
     447          CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) )  ! Remineralisation rate of large particles 
     448          CALL iom_put( "REMINF" , zfolimi(:,:,:)  * tmask(:,:,:)  * 1.e+9 * zrfact2 )  ! Remineralisation of biogenic particulate iron 
    431449        ENDIF 
    432450     ENDIF 
     
    493511      ALLOCATE( alphan(jcpoc) , reminp(jcpoc) , alphap(jpi,jpj,jpk,jcpoc) ) 
    494512      ! 
    495       IF (jcpoc > 1) THEN 
     513      IF (jcpoc > 1) THEN  ! Case when more than one lability class is used 
    496514         ! 
    497515         remindelta = LOG(4. * 1000. ) / REAL(jcpoc-1, wp) 
     
    517535         reminp(jcpoc) = reminp(jcpoc) * xremip / alphan(jcpoc) 
    518536 
    519       ELSE 
     537      ELSE  ! Only one lability class is used 
    520538         alphan(jcpoc) = 1. 
    521539         reminp(jcpoc) = xremip 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zprod.F90

    r15090 r15459  
    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    
    8583      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprorcan, zprorcad, zprofed, zprofen 
    8684      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpronewn, zpronewd 
    8785      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmxl_fac, zmxl_chl 
    88       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpligprod1, zpligprod2 
     86      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zpligprod 
    8987      !!--------------------------------------------------------------------- 
    9088      ! 
     
    9391      !  Allocate temporary workspace 
    9492      ! 
    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 
    103       zprmaxn(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 
     93      zprorcan(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp ; zprofed(:,:,:) = 0._wp 
     94      zprofen (:,:,:) = 0._wp ; zysopt  (:,:,:) = 0._wp 
     95      zpronewn(:,:,:) = 0._wp ; zpronewd(:,:,:) = 0._wp ; zprdia(:,:,:) = 0._wp 
     96      zprbio  (:,:,:) = 0._wp ; zprchld (:,:,:) = 0._wp ; zprchln(:,:,:) = 0._wp  
     97      zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp  
     98 
     99      ! Computation of the maximimum production. Based on a Q10 description 
     100      ! of the thermal dependency 
     101      ! Parameters are taken from Bissinger et al. (2008) 
     102      zprmaxn(:,:,:) = 0.65_wp * r1_rday * tgfunc(:,:,:) 
    104103      zprmaxd(:,:,:) = zprmaxn(:,:,:) 
    105104 
    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( nn_hls, nn_hls, nn_hls, nn_hls ) 
    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( nn_hls, nn_hls, nn_hls, nn_hls, 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 )) 
     105      ! Intermittency is supposed to have a similar effect on production as  
     106      ! day length (Shatwell et al., 2012). The correcting factor is zmxl_fac.  
     107      ! zmxl_chl is the fractional day length and is used to compute the mean 
     108      ! PAR during daytime. The effect of mixing is computed using the  
     109      ! absolute light level definition of the euphotic zone 
     110      ! -------------------------------------------------------------------------  
     111      IF ( ln_p4z_dcyc ) THEN    ! Diurnal cycle in PISCES 
     112 
     113         DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     114            IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     115               IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN 
     116                  zval = MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 
     117               ENDIF 
     118               zmxl_chl(ji,jj,jk) = zval / 24. 
     119               zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval ) 
    124120            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 
     121         END_3D 
     122  
     123      ELSE ! No diurnal cycle in PISCES 
     124         DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     125            IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     126               zval = MAX( 1., strn(ji,jj) ) 
     127               IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN 
     128                  zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 
     129               ENDIF 
     130               zmxl_chl(ji,jj,jk) = zval / 24. 
     131               zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval ) 
     132            ENDIF 
     133         END_3D 
     134 
     135      ENDIF 
    129136 
    130137      zprbio(:,:,:) = zprmaxn(:,:,:) * zmxl_fac(:,:,:) 
    131138      zprdia(:,:,:) = zprmaxd(:,:,:) * zmxl_fac(:,:,:) 
    132139 
    133       ! Maximum light intensity 
    134       WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 
    135  
    136       ! Computation of the P-I slope for nanos and diatoms 
     140      ! The formulation proposed by Geider et al. (1997) has been modified  
     141      ! to exclude the effect of nutrient limitation and temperature in the PI 
     142      ! curve following Vichi et al. (2007) 
     143      ! ----------------------------------------------------------------------- 
    137144      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    138145         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     
    142149            zconctemp2  = tr(ji,jj,jk,jpdia,Kbb) - zconctemp 
    143150            ! 
     151            ! The initial slope of the PI curve can be increased for nano 
     152            ! to account for photadaptation, for instance in the DCM 
     153            ! This parameterization is adhoc and should be either  
     154            ! improved or removed in future versions of the model 
     155 
     156            ! Nanophytoplankton 
    144157            zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap  * EXP( -0.25 * enano(ji,jj,jk) ) )  & 
    145158            &                   * tr(ji,jj,jk,jpnch,Kbb) /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn) 
    146             ! 
     159 
     160            ! Diatoms 
    147161            zpislopeadd(ji,jj,jk) = (pislopen * zconctemp2 + pisloped * zconctemp) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )   & 
    148162            &                   * tr(ji,jj,jk,jpdch,Kbb) /( tr(ji,jj,jk,jpdia,Kbb) * 12. + rtrn) 
     
    153167         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    154168             ! Computation of production function for Carbon 
    155              !  --------------------------------------------- 
     169             ! Actual light levels are used here  
     170             ! ---------------------------------------------- 
    156171             zpislopen = zpislopeadn(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 
    157172             &            * zmxl_fac(ji,jj,jk) * rday + rtrn) 
     
    160175             zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) )  ) 
    161176             zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) )  ) 
     177 
    162178             !  Computation of production function for Chlorophyll 
    163              !-------------------------------------------------- 
     179             !  Mean light level in the mixed layer (when appropriate) 
     180             !  is used here (acclimation is in general slower than  
     181             !  the characteristic time scales of vertical mixing) 
     182             !  ------------------------------------------------------ 
    164183             zpislopen = zpislopeadn(ji,jj,jk) / ( zprmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 
    165184             zpisloped = zpislopeadd(ji,jj,jk) / ( zprmaxd(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 
    166              zprnch(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) ) 
    167              zprdch(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) ) 
     185             zprchln(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) ) 
     186             zprchld(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) ) 
    168187         ENDIF 
    169188      END_3D 
    170189 
    171       !  Computation of a proxy of the N/C ratio 
    172       !  --------------------------------------- 
     190      !  Computation of a proxy of the N/C quota from nutrient limitation  
     191      !  and light limitation. Steady state is assumed to allow the computation 
     192      !  ---------------------------------------------------------------------- 
    173193      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    174194          zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) )   & 
    175195          &      * zprmaxn(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn ) 
    176           quotan(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 
     196          quotan(ji,jj,jk) = MIN( 1., 0.3 + 0.7 * zval ) 
    177197          zval = MIN( xdiatpo4(ji,jj,jk), ( xdiatnh4(ji,jj,jk) + xdiatno3(ji,jj,jk) ) )   & 
    178198          &      * zprmaxd(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn ) 
    179           quotad(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 
     199          quotad(ji,jj,jk) = MIN( 1., 0.3 + 0.7 * zval ) 
    180200      END_3D 
    181201 
     
    184204 
    185205          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) 
     206             ! Si/C of diatoms 
     207             ! ------------------------ 
     208             ! Si/C increases with iron stress and silicate availability 
     209             ! Si/C is arbitrariliy increased for very high Si concentrations 
     210             ! to mimic the very high ratios observed in the Southern Ocean (zsilfac) 
     211             ! A parameterization derived from Flynn (2003) is used for the control 
     212             ! when Si is not limiting which is similar to the parameterisation 
     213             ! proposed by Gurney and Davidson (1999). 
     214             ! ----------------------------------------------------------------------- 
    191215            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 
     216            zsilim = xlimdia(ji,jj,jk) * zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 
    194217            zsiborn = tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) 
    195218            IF (gphit(ji,jj) < -30 ) THEN 
    196               zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
     219              zsilfac = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
    197220            ELSE 
    198               zsilfac2 = 1. +      zsiborn / ( zsiborn + xksi2**3 ) 
     221              zsilfac = 1. +      zsiborn / ( zsiborn + xksi2**3 ) 
    199222            ENDIF 
    200             zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 
     223            zratiosi = 1.0 - tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) / ( zsilfac * grosip * 3.0 + rtrn ) 
     224            zratiosi = MAX(0., MIN(1.0, zratiosi) ) 
     225            zmaxsi  = (1.0 + 0.1**4) * zratiosi**4 / ( zratiosi**4 + 0.1**4 ) 
     226            IF( xlimsi(ji,jj,jk) /= xlimdia(ji,jj,jk) ) THEN 
     227               zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zmaxsi 
     228            ELSE 
     229               zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zsilim**0.7 * zmaxsi 
     230            ENDIF 
    201231        ENDIF 
    202232      END_3D 
    203233 
    204       !  Mixed-layer effect on production  
    205       !  Sea-ice effect on production 
    206  
     234      ! Sea-ice effect on production 
     235      ! No production is assumed below sea ice 
     236      ! --------------------------------------  
    207237      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    208238         zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
     
    210240      END_3D 
    211241 
    212       ! Computation of the various production terms  
     242      ! Computation of the various production  and nutrient uptake terms 
     243      ! --------------------------------------------------------------- 
    213244      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    214245         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    215246            !  production terms for nanophyto. (C) 
    216247            zprorcan(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * tr(ji,jj,jk,jpphy,Kbb) * rfact2 
     248 
     249            !  New production (uptake of NO3) 
    217250            zpronewn(ji,jj,jk)  = zprorcan(ji,jj,jk)* xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 
    218251            ! 
    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) 
     252            ! Size computation 
     253            ! Size is made a function of the limitation of of phytoplankton growth 
     254            ! Strongly limited cells are supposed to be smaller. sizena is the  
     255            ! size at time step t+1 and is thus updated at the end of the  
     256            ! current time step 
     257            ! -------------------------------------------------------------------- 
     258            zlimfac = xlimphy(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn ) 
     259            zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 
     260            sizena(ji,jj,jk) = min(xsizern, max( sizena(ji,jj,jk), zsizetmp ) ) 
     261 
     262            ! Iron uptake rates of nanophytoplankton. Upregulation is   
     263            ! not parameterized at low iron concentrations as observations 
     264            ! do not suggest it for accimated cells. Uptake is 
     265            ! downregulated when the quota is close to the maximum quota 
     266            zfecnm = xqfuncfecn(ji,jj,jk) + ( fecnm - xqfuncfecn(ji,jj,jk) ) * ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) 
     267            zratio = 1.0 - MIN(1.0,tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) * zfecnm + rtrn ) ) 
     268            zmax   = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) )  
     269            zprofen(ji,jj,jk) = zfecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
     270            &          * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn + xnanono3(ji,jj,jk)  & 
     271            &          + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) )   & 
     272            &          * xnanofer(ji,jj,jk) * zmax * tr(ji,jj,jk,jpphy,Kbb) * rfact2 
     273            ! production terms of diatoms (C) 
    226274            zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tr(ji,jj,jk,jpdia,Kbb) * rfact2 
     275 
     276            ! New production (uptake of NO3) 
    227277            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 
     278 
     279            ! Size computation 
     280            ! Size is made a function of the limitation of of phytoplankton growth 
     281            ! Strongly limited cells are supposed to be smaller. sizeda is 
     282            ! size at time step t+1 and is thus updated at the end of the  
     283            ! current time step.  
     284            ! -------------------------------------------------------------------- 
     285            zlimfac = zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 
     286            zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 
     287            sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) ) 
     288 
     289            ! Iron uptake rates of diatoms. Upregulation is   
     290            ! not parameterized at low iron concentrations as observations 
     291            ! do not suggest it for accimated cells. Uptake is 
     292            ! downregulated when the quota is close to the maximum quota 
     293            zfecdm = xqfuncfecd(ji,jj,jk) + ( fecdm - xqfuncfecd(ji,jj,jk) ) * ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) 
     294            zratio = 1.0 - MIN(1.0, tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) * zfecdm + rtrn ) ) 
     295            zmax   = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) )  
     296            zprofed(ji,jj,jk) = zfecdm * zprmaxd(ji,jj,jk) * (1.0 - fr_i(ji,jj) )  & 
     297            &          * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn + xdiatno3(ji,jj,jk)  & 
     298            &          + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) )   & 
     299            &          * xdiatfer(ji,jj,jk) * zmax * tr(ji,jj,jk,jpdia,Kbb) * rfact2 
    235300         ENDIF 
    236301      END_3D 
    237302 
    238303      ! Computation of the chlorophyll production terms 
     304      ! The parameterization is taken from Geider et al. (1997) 
     305      ! ------------------------------------------------------- 
    239306      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    240307         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    241308            !  production terms for nanophyto. ( chlorophyll ) 
    242309            znanotot = enanom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
    243             zprod    = rday * zprorcan(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk) 
     310            zprod    = rday * zprorcan(ji,jj,jk) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk) 
    244311            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 / & 
     312            zprochln = zprochln + (chlcnm - chlcmin) * 12. * zprod / & 
    247313                                  & (  zpislopeadn(ji,jj,jk) * znanotot +rtrn) 
     314 
    248315            !  production terms for diatoms ( chlorophyll ) 
    249316            zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
    250             zprod    = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk) 
     317            zprod    = rday * zprorcad(ji,jj,jk) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) 
    251318            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 / & 
     319            zprochld = zprochld + (chlcdm - chlcmin) * 12. * zprod / & 
    254320                                  & ( zpislopeadd(ji,jj,jk) * zdiattot +rtrn ) 
     321 
    255322            !   Update the arrays TRA which contain the Chla sources and sinks 
    256323            tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) + zprochln * texcretn 
     
    262329      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    263330        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 
     331           zpptot   = zprorcan(ji,jj,jk) + zprorcad(ji,jj,jk) 
     332           zpnewtot = zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) 
     333           zpregtot = zpptot - zpnewtot 
     334           zprodsil  = zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * tr(ji,jj,jk,jpdia,Kbb) 
     335           zproddoc  = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 
     336           zprodfer  = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
     337           ! 
     338           tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zpptot 
     339           tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpnewtot 
     340           tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zpregtot 
    270341           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 
     342           tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) + zprofen(ji,jj,jk)  * texcretn 
    272343           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) ) 
     344           tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) + zprofed(ji,jj,jk)  * texcretd 
     345           tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) + zprodsil 
     346           tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - zprodsil 
     347           tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zproddoc 
     348           tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + o2ut * zpregtot + ( o2ut + o2nit ) * zpnewtot 
    278349           ! 
    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 ) 
     350           tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zprodfer 
     351           consfe3(ji,jj,jk)   = zprodfer * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) )   & 
     352           &                   * tr(ji,jj,jk,jpfer,Kbb) ) / rfact2 
     353           ! 
     354           tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zpptot 
     355           tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpnewtot - zpregtot ) 
    285356        ENDIF 
    286357      END_3D 
    287      ! 
     358 
     359     ! Production and uptake of ligands by phytoplankton. This part is activated  
     360     ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small  
     361     ! and based on the FeL model by Morel et al. (2008) and on the study of 
     362     ! Shaked et al. (2020) 
     363     ! ------------------------------------------------------------------------- 
    288364     IF( ln_ligand ) THEN 
    289          zpligprod1(:,:,:) = 0._wp    ;    zpligprod2(:,:,:) = 0._wp 
    290365         DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    291366           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 
     367              zproddoc = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 
     368              zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
     369              zprodlig = plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
     370              ! 
     371              tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zproddoc * ldocp - zprodfer * zprodlig 
    297372           ENDIF 
    298373         END_3D 
     
    300375 
    301376 
     377    ! Output of the diagnostics 
    302378    ! Total primary production per year 
    303379    IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
     
    312388       CALL iom_put( "PPNEWD"  , zpronewd(:,:,:) * zfact * tmask(:,:,:)   ) ! new primary production by diatomes 
    313389       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(:,:,:) ) 
     390       CALL iom_put( "PFeN"    , zprofen(:,:,:)  * zfact * tmask(:,:,:)  ) ! biogenic iron production by nanophyto 
     391       CALL iom_put( "PFeD"    , zprofed(:,:,:)  * zfact * tmask(:,:,:)  ) ! biogenic iron production by  diatomes 
     392       IF( ln_ligand .AND. ( iom_use( "LPRODP" ) .OR. iom_use( "LDETP" ) ) ) THEN 
     393           ALLOCATE(  zpligprod(jpi,jpj,jpk) ) 
     394           zpligprod(:,:,:) = excretd * zprorcad(:,:,:) + excretn * zprorcan(:,:,:) 
     395           CALL iom_put( "LPRODP"  , zpligprod(:,:,:) * ldocp * 1e9 * zfact * tmask(:,:,:) ) 
     396           ! 
     397           zpligprod(:,:,:) = ( texcretn * zprofen(:,:,:) + texcretd * zprofed(:,:,:) ) &  
     398             &                  * plig(:,:,:) / ( rtrn + plig(:,:,:) + 75.0 * (1.0 - plig(:,:,:) ) ) 
     399           CALL iom_put( "LDETP"   , zpligprod(:,:,:)  * lthet * 1e9 * zfact * tmask(:,:,:) ) 
     400           DEALLOCATE(  zpligprod ) 
    319401       ENDIF 
    320402       CALL iom_put( "Mumax"   , zprmaxn(:,:,:) * tmask(:,:,:)  ) ! Maximum growth rate 
     
    346428      !! ** Purpose :   Initialization of phytoplankton production parameters 
    347429      !! 
    348       !! ** Method  :   Read the nampisprod namelist and check the parameters 
     430      !! ** Method  :   Read the namp4zprod namelist and check the parameters 
    349431      !!      called at the first timestep (nittrc000) 
    350432      !! 
    351       !! ** input   :   Namelist nampisprod 
     433      !! ** input   :   Namelist namp4zprod 
    352434      !!---------------------------------------------------------------------- 
    353435      INTEGER ::   ios   ! Local integer 
    354436      ! 
     437      ! Namelist block 
    355438      NAMELIST/namp4zprod/ pislopen, pisloped, xadap, bresp, excretn, excretd,  & 
    356439         &                 chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip 
     
    365448      READ  ( numnatp_ref, namp4zprod, IOSTAT = ios, ERR = 901) 
    366449901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zprod in reference namelist' ) 
     450 
    367451      READ  ( numnatp_cfg, namp4zprod, IOSTAT = ios, ERR = 902 ) 
    368452902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zprod in configuration namelist' ) 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zrem.F90

    r15090 r15459  
    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 
     79      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zfacsi, zfacsib, zdepeff, zfebact 
    7280      REAL(wp), DIMENSION(jpi,jpj    ) :: ztempbac 
    73       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zdepprod, zfacsi, zfacsib, zdepeff, zfebact 
    7481      !!--------------------------------------------------------------------- 
    7582      ! 
    7683      IF( ln_timing )   CALL timing_start('p4z_rem') 
    7784      ! 
    78       ! Initialisation of arrys 
    79       zdepprod(:,:,:) = 1._wp 
     85      ! Initialisation of arrays 
    8086      zdepeff (:,:,:) = 0.3_wp 
    81       ztempbac(:,:)   = 0._wp 
    8287      zfacsib(:,:,:)  = xsilab / ( 1.0 - xsilab ) 
    8388      zfebact(:,:,:)  = 0._wp 
    8489      zfacsi(:,:,:)   = xsilab 
    8590 
    86       ! Computation of the mean phytoplankton concentration as 
    87       ! a crude estimate of the bacterial biomass 
     91      ! Computation of the mean bacterial concentration 
    8892      ! this parameterization has been deduced from a model version 
    89       ! that was modeling explicitely bacteria 
    90       ! ------------------------------------------------------- 
    91       DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    92          zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 
    93          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 ) 
     93      ! that was modeling explicitely bacteria. This is a very old param  
     94      ! that will be very soon updated based on results from a much more 
     95      ! recent version of PISCES with bacteria. 
     96      ! ---------------------------------------------------------------- 
     97      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     98         zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 
     99         IF ( gdept(ji,jj,jk,Kmm) < zdep ) THEN 
     100            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 
    95101            ztempbac(ji,jj)   = zdepbac(ji,jj,jk) 
     102!         IF( gdept(ji,jj,jk,Kmm) >= zdep ) THEN 
    96103         ELSE 
    97104            zdepmin = MIN( 1., zdep / gdept(ji,jj,jk,Kmm) ) 
    98105            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 
     106!            zdepeff(ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.3 
     107            zdepeff(ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.6 
    101108         ENDIF 
    102109      END_3D 
    103110 
    104       IF( ln_p4z ) THEN 
    105          DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 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( nn_hls, nn_hls, nn_hls, nn_hls, 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  
     111      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     112         ! DOC ammonification. Depends on depth, phytoplankton biomass 
     113         ! and a limitation term which is supposed to be a parameterization of the bacterial activity.  
     114         ! -------------------------------------------------------------------------- 
     115         zremik = xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)  
     116         zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 
     117         zremikc = xremikc * zremik 
     118         ! Ammonification in oxic waters with oxygen consumption 
     119         ! ----------------------------------------------------- 
     120         zolimic = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * tr(ji,jj,jk,jpdoc,Kbb)  
     121         zolimic = MAX(0., MIN( ( tr(ji,jj,jk,jpoxy,Kbb) - rtrn ) / o2ut, zolimic ) )  
     122         zolimi(ji,jj,jk) = zolimic 
     123 
     124         ! Ammonification in suboxic waters with denitrification 
     125         ! ----------------------------------------------------- 
     126         zammonic = zremikc * nitrfac(ji,jj,jk) * tr(ji,jj,jk,jpdoc,Kbb) 
     127         denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 
     128         denitr(ji,jj,jk)  = MAX(0., MIN(  ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenit, denitr(ji,jj,jk) ) ) 
     129 
     130         ! Ammonification in waters depleted in O2 and NO3 based on  
     131         ! other redox processes 
     132         ! -------------------------------------------------------- 
     133         zoxyremc          = MAX(0., zammonic - denitr(ji,jj,jk) ) 
     134 
     135         ! Update of the the trends arrays 
     136         tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - denitr (ji,jj,jk) * rdenit 
     137         tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) - ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     138         tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - zolimic * o2ut 
     139         tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 
     140         IF( ln_p4z ) THEN ! PISCES-std 
     141            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 
     142            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 
     143            tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zolimic + zoxyremc + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
     144         ELSE  ! PISCES-QUOTA (p5z) 
     145            zremikn = xremikn / xremikc * tr(ji,jj,jk,jpdon,kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 
     146            zremikp = xremikp / xremikc * tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 
     147            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zremikp * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     148            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zremikn * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     149            tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) - zremikn * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     150            tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) - zremikp * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     151            tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zremikn * ( zolimic + zoxyremc + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
     152         ENDIF 
     153      END_3D 
    179154 
    180155      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     
    185160         &         / ( 1.+ emoy(ji,jj,jk) ) * ( 1. + fr_i(ji,jj) * emoy(ji,jj,jk) )  
    186161         zdenitnh4 = nitrif * xstep * tr(ji,jj,jk,jpnh4,Kbb) * nitrfac(ji,jj,jk) 
    187          zdenitnh4 = MIN(  ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenita, zdenitnh4 )  
     162         zdenitnh4 = MAX(0., MIN(  ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenita, zdenitnh4 ) ) 
    188163         ! Update of the tracers trends 
    189164         ! ---------------------------- 
     
    194169      END_3D 
    195170 
    196        IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging) 
     171      IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging) 
    197172         WRITE(charout, FMT="('rem1')") 
    198173         CALL prt_ctl_info( charout, cdcomp = 'top' ) 
    199174         CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm) 
    200        ENDIF 
     175      ENDIF 
    201176 
    202177      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     
    206181         ! studies (especially at Papa) have shown this uptake to be significant 
    207182         ! ---------------------------------------------------------- 
    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) 
     183         zbactfer = feratb * 0.6_wp * xstep * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) * tr(ji,jj,jk,jpfer,Kbb)    & 
     184           &       / ( xkferb + tr(ji,jj,jk,jpfer,Kbb) ) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 
     185          
     186         ! Only the transfer of iron from its dissolved form to particles 
     187         ! is treated here. The GGE of bacteria supposed to be equal to  
     188         ! 0.33. This is hard-coded.  
     189         tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zbactfer*0.1 
     190         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zbactfer*0.08 
     191         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zbactfer*0.02 
     192         zfebact(ji,jj,jk)   = zbactfer * 0.1 
     193         blim(ji,jj,jk)      = xlimbacl(ji,jj,jk)  * zdepbac(ji,jj,jk) / 1.e-6 
    216194      END_3D 
    217195 
     
    225203      ! of bSi. Set to a constant in the upper ocean 
    226204      ! --------------------------------------------------------------- 
    227  
    228       DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     205      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     206         ! Remineralization rate of BSi dependent on T and saturation 
     207         ! The parameterization is taken from Ridgwell et al. (2002)  
     208         ! --------------------------------------------------------- 
    229209         zdep     = MAX( hmld(ji,jj), heup_01(ji,jj) ) 
    230210         zsatur   = MAX( rtrn, ( sio3eq(ji,jj,jk) - tr(ji,jj,jk,jpsil,Kbb) ) / ( sio3eq(ji,jj,jk) + rtrn ) ) 
    231211         zsatur2  = ( 1. + ts(ji,jj,jk,jp_tem,Kmm) / 400.)**37 
    232212         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          ! --------------------------------------------------------- 
     213  
     214         ! Two fractions of bSi are considered : a labile one and a more 
     215         ! refractory one based on the commonly observed two step  
     216         ! dissolution of bSi (initial rapid dissolution followed by  
     217         ! more slowly dissolution). 
     218         ! Computation of the vertical evolution of the labile fraction 
     219         ! of bSi. This is computed assuming steady state. 
     220         ! -------------------------------------------------------------- 
    235221         IF ( gdept(ji,jj,jk,Kmm) > zdep ) THEN 
    236222            zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk-1) * EXP( -0.5 * ( xsiremlab - xsirem )  & 
     
    283269      !! 
    284270      !!---------------------------------------------------------------------- 
    285       NAMELIST/nampisrem/ xremik, nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, &  
     271      NAMELIST/nampisrem/ nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, &  
    286272         &                xremikc, xremikn, xremikp 
    287273      INTEGER :: ios                 ! Local integer output status for namelist read 
     
    303289         WRITE(numout,*) '   Namelist parameters for remineralization, nampisrem' 
    304290         IF( ln_p4z ) THEN 
    305             WRITE(numout,*) '      remineralization rate of DOC              xremik    =', xremik 
     291            WRITE(numout,*) '      remineralization rate of DOC              xremikc   =', xremikc 
    306292         ELSE 
    307293            WRITE(numout,*) '      remineralization rate of DOC              xremikc   =', xremikc 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zsink.F90

    r15090 r15459  
    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( nn_hls, nn_hls, nn_hls, nn_hls, 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