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 7162 for branches – NEMO

Changeset 7162 for branches


Ignore:
Timestamp:
2016-11-01T14:23:51+01:00 (7 years ago)
Author:
cetlod
Message:

new top interface : Add PISCES quota model

Location:
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM
Files:
9 added
40 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/iodef.xml

    r5385 r7162  
    176176          <field field_ref="CO3sat"   /> 
    177177          <field field_ref="PAR"      /> 
    178           <field field_ref="PPPHY"    /> 
    179           <field field_ref="PPPHY2"   /> 
     178          <field field_ref="PPPHYN"    /> 
     179          <field field_ref="PPPHYD"   /> 
    180180          <field field_ref="PPNEWN"   /> 
    181181          <field field_ref="PPNEWD"   /> 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_pisces_cfg

    r7050 r7162  
    11!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    2 !! PISCES  (key_pisces) reference namelist (see below for key_pisces_reduced) 
     2!! PISCES reference namelist  
    33!!              1  - air-sea exchange                         (nampisext) 
    44!!              2  - biological parameters                    (nampisbio) 
     
    1010!!              8  - parameters for inputs deposition         (nampissed) 
    1111!!              11 - Damping                                  (nampisdmp) 
    12 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     12!----------------------------------------------------------------------- 
     13&nampismod     !  Model used  
     14!----------------------------------------------------------------------- 
     15/ 
     16!----------------------------------------------------------------------- 
     17&nampisext     !   air-sea exchange 
     18!----------------------------------------------------------------------- 
     19/ 
     20!----------------------------------------------------------------------- 
     21&nampisatm     !  Atmospheric prrssure  
     22!----------------------------------------------------------------------- 
     23/ 
     24!----------------------------------------------------------------------- 
     25&nampisbio     !   biological parameters 
     26!----------------------------------------------------------------------- 
     27/ 
     28!----------------------------------------------------------------------- 
     29&namp4zlim     !   parameters for nutrient limitations for PISCES std - ln_p4z 
     30!----------------------------------------------------------------------- 
     31/ 
     32!----------------------------------------------------------------------- 
     33&namp5zlim     !   parameters for nutrient limitations PISCES QUOTA - ln_p5z 
     34!----------------------------------------------------------------------- 
     35/ 
     36!----------------------------------------------------------------------- 
     37&namp5zquota    !   parameters for nutrient limitations PISCES quota - ln_p5z 
     38!----------------------------------------------------------------------- 
     39/ 
     40!----------------------------------------------------------------------- 
     41&nampisopt     !   parameters for optics 
     42!----------------------------------------------------------------------- 
     43/  
     44!----------------------------------------------------------------------- 
     45&namp4zprod     !   parameters for phytoplankton growth for PISCES std - ln_p4z 
     46!----------------------------------------------------------------------- 
     47/ 
    1348!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    14 &nampismod     !  Model used  
     49&namp5zprod     !   parameters for phytoplankton growth for PISCES quota - ln_p5z 
    1550!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    1651/ 
    17 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    18 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    19 &nampisext     !   air-sea exchange 
    20 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     52!----------------------------------------------------------------------- 
     53&namp4zmort     !   parameters for phytoplankton sinks for PISCES std - ln_p4z 
     54!----------------------------------------------------------------------- 
    2155/ 
    22 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    23 &nampisatm     !  Atmospheric prrssure  
    24 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     56!----------------------------------------------------------------------- 
     57&namp5zmort     !   parameters for phytoplankton sinks for PISCES quota - ln_p5z 
     58!----------------------------------------------------------------------- 
    2559/ 
    26 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    27 &nampisbio     !   biological parameters 
    28 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     60!----------------------------------------------------------------------- 
     61&namp4zmes     !   parameters for mesozooplankton for PISCES std - ln_p4z 
     62!----------------------------------------------------------------------- 
    2963/ 
    30 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    31 &nampislim     !   parameters for nutrient limitations 
    32 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     64!----------------------------------------------------------------------- 
     65&namp5zmes     !   parameters for mesozooplankton 
     66!----------------------------------------------------------------------- 
    3367/ 
    34 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    35 &nampisopt     !   parameters for optics 
    36 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    37 /  
    38 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    39 &nampisprod     !   parameters for phytoplankton growth 
    40 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     68!----------------------------------------------------------------------- 
     69&namp4zzoo     !   parameters for microzooplankton for PISCES std - ln_p4z 
     70!----------------------------------------------------------------------- 
    4171/ 
    42 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    43 &nampismort     !   parameters for phytoplankton sinks 
    44 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     72!----------------------------------------------------------------------- 
     73&namp5zzoo     !   parameters for microzooplankton 
     74!----------------------------------------------------------------------- 
    4575/ 
    46 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    47 &nampismes     !   parameters for mesozooplankton 
    48 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     76!----------------------------------------------------------------------- 
     77&nampisfer     !   parameters for iron chemistry 
     78!----------------------------------------------------------------------- 
    4979/ 
    50 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    51 &nampiszoo     !   parameters for microzooplankton 
    52 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     80!-----------------------------------------------------------------------   
     81&nampisrem     !   parameters for remineralization 
     82!----------------------------------------------------------------------- 
    5383/ 
    54 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    55 &nampisfer     !   parameters for iron chemistry 
    56 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    57  
    58 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    59 &nampisrem     !   parameters for remineralization 
    60 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     84!----------------------------------------------------------------------- 
     85&nampispoc     !   parameters for organic particles 
     86!----------------------------------------------------------------------- 
    6187/ 
    62 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     88!----------------------------------------------------------------------- 
    6389&nampiscal     !   parameters for Calcite chemistry 
    64 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     90!----------------------------------------------------------------------- 
    6591/ 
    66 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     92!----------------------------------------------------------------------- 
    6793&nampissbc     !   parameters for inputs deposition 
    68 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     94!----------------------------------------------------------------------- 
    6995/ 
    70 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     96!----------------------------------------------------------------------- 
    7197&nampisice      !  Prescribed sea ice tracers 
    72 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     98!----------------------------------------------------------------------- 
    7399/ 
    74 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     100!----------------------------------------------------------------------- 
    75101&nampisdmp     !  Damping  
    76 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     102!----------------------------------------------------------------------- 
    77103/ 
    78 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     104!----------------------------------------------------------------------- 
    79105&nampismass     !  Mass conservation 
    80 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     106!----------------------------------------------------------------------- 
    81107/ 
    82108!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     
    91117!!              8  - optical parameters                         (namlobopt) 
    92118!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    93 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     119!----------------------------------------------------------------------- 
    94120&namlobphy     !   biological parameters for phytoplankton 
    95 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     121!----------------------------------------------------------------------- 
    96122/ 
    97 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     123!----------------------------------------------------------------------- 
    98124&namlobnut     !   biological parameters for nutrients 
    99 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     125!----------------------------------------------------------------------- 
    100126/ 
    101 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     127!----------------------------------------------------------------------- 
    102128&namlobzoo     !   biological parameters for zooplankton 
    103 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     129!----------------------------------------------------------------------- 
    104130/ 
    105 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     131!----------------------------------------------------------------------- 
    106132&namlobdet     !   biological parameters for detritus 
    107 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     133!----------------------------------------------------------------------- 
    108134/ 
    109 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     135!----------------------------------------------------------------------- 
    110136&namlobdom     !   biological parameters for DOM 
    111 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     137!----------------------------------------------------------------------- 
    112138/ 
    113 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     139!----------------------------------------------------------------------- 
    114140&namlobsed     !   parameters from aphotic layers to sediment 
    115 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     141!----------------------------------------------------------------------- 
    116142/ 
    117 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     143!----------------------------------------------------------------------- 
    118144&namlobrat     !   general coefficients 
    119 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     145!----------------------------------------------------------------------- 
    120146/ 
    121 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     147!----------------------------------------------------------------------- 
    122148&namlobopt     !   optical parameters 
    123 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     149!----------------------------------------------------------------------- 
    124150/ 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/iodef.xml

    r5385 r7162  
    108108          <field field_ref="CO3sat"   /> 
    109109          <field field_ref="PAR"      /> 
    110           <field field_ref="PPPHY"    /> 
    111           <field field_ref="PPPHY2"   /> 
     110          <field field_ref="PPPHYN"    /> 
     111          <field field_ref="PPPHYD"   /> 
    112112          <field field_ref="PPNEWN"   /> 
    113113          <field field_ref="PPNEWD"   /> 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_pisces_cfg

    r7050 r7162  
    11!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    2 !! PISCES  (key_pisces) reference namelist (see below for key_pisces_reduced) 
     2!! PISCES reference namelist  
    33!!              1  - air-sea exchange                         (nampisext) 
    44!!              2  - biological parameters                    (nampisbio) 
     
    1010!!              8  - parameters for inputs deposition         (nampissed) 
    1111!!              11 - Damping                                  (nampisdmp) 
    12 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     12!----------------------------------------------------------------------- 
     13&nampismod     !  Model used  
     14!----------------------------------------------------------------------- 
     15/ 
     16!----------------------------------------------------------------------- 
     17&nampisext     !   air-sea exchange 
     18!----------------------------------------------------------------------- 
     19/ 
     20!----------------------------------------------------------------------- 
     21&nampisatm     !  Atmospheric prrssure  
     22!----------------------------------------------------------------------- 
     23/ 
     24!----------------------------------------------------------------------- 
     25&nampisbio     !   biological parameters 
     26!----------------------------------------------------------------------- 
     27   nrdttrc    =  4        ! time step frequency for biology 
     28/ 
     29!----------------------------------------------------------------------- 
     30&namp4zlim     !   parameters for nutrient limitations for PISCES std - ln_p4z 
     31!----------------------------------------------------------------------- 
     32/ 
     33!----------------------------------------------------------------------- 
     34&namp5zlim     !   parameters for nutrient limitations PISCES QUOTA - ln_p5z 
     35!----------------------------------------------------------------------- 
     36/ 
     37!----------------------------------------------------------------------- 
     38&namp5zquota    !   parameters for nutrient limitations PISCES quota - ln_p5z 
     39!----------------------------------------------------------------------- 
     40/ 
     41!----------------------------------------------------------------------- 
     42&nampisopt     !   parameters for optics 
     43!----------------------------------------------------------------------- 
     44/  
     45!----------------------------------------------------------------------- 
     46&namp4zprod     !   parameters for phytoplankton growth for PISCES std - ln_p4z 
     47!----------------------------------------------------------------------- 
     48/ 
    1349!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    14 &nampismod     !  Model used  
     50&namp5zprod     !   parameters for phytoplankton growth for PISCES quota - ln_p5z 
    1551!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    1652/ 
    17 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    18 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    19 &nampisext     !   air-sea exchange 
    20 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     53!----------------------------------------------------------------------- 
     54&namp4zmort     !   parameters for phytoplankton sinks for PISCES std - ln_p4z 
     55!----------------------------------------------------------------------- 
    2156/ 
    22 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    23 &nampisatm     !  Atmospheric prrssure  
    24 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     57!----------------------------------------------------------------------- 
     58&namp5zmort     !   parameters for phytoplankton sinks for PISCES quota - ln_p5z 
     59!----------------------------------------------------------------------- 
    2560/ 
    26 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    27 &nampisbio     !   biological parameters 
    28 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    29    nrdttrc    =  4        ! time step frequency for biology 
     61!----------------------------------------------------------------------- 
     62&namp4zmes     !   parameters for mesozooplankton for PISCES std - ln_p4z 
     63!----------------------------------------------------------------------- 
    3064/ 
    31 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    32 &nampislim     !   parameters for nutrient limitations 
    33 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     65!----------------------------------------------------------------------- 
     66&namp5zmes     !   parameters for mesozooplankton 
     67!----------------------------------------------------------------------- 
    3468/ 
    35 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    36 &nampisopt     !   parameters for optics 
    37 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    38 /  
    39 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    40 &nampisprod     !   parameters for phytoplankton growth 
    41 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     69!----------------------------------------------------------------------- 
     70&namp4zzoo     !   parameters for microzooplankton for PISCES std - ln_p4z 
     71!----------------------------------------------------------------------- 
    4272/ 
    43 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    44 &nampismort     !   parameters for phytoplankton sinks 
    45 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     73!----------------------------------------------------------------------- 
     74&namp5zzoo     !   parameters for microzooplankton 
     75!----------------------------------------------------------------------- 
    4676/ 
    47 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    48 &nampismes     !   parameters for mesozooplankton 
    49 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     77!----------------------------------------------------------------------- 
     78&nampisfer     !   parameters for iron chemistry 
     79!----------------------------------------------------------------------- 
    5080/ 
    51 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    52 &nampiszoo     !   parameters for microzooplankton 
    53 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     81!-----------------------------------------------------------------------   
     82&nampisrem     !   parameters for remineralization 
     83!----------------------------------------------------------------------- 
    5484/ 
    55 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    56 &nampisfer     !   parameters for iron chemistry 
    57 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    58  
    59 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    60 &nampisrem     !   parameters for remineralization 
    61 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     85!----------------------------------------------------------------------- 
     86&nampispoc     !   parameters for organic particles 
     87!----------------------------------------------------------------------- 
    6288/ 
    63 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     89!----------------------------------------------------------------------- 
    6490&nampiscal     !   parameters for Calcite chemistry 
    65 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     91!----------------------------------------------------------------------- 
    6692/ 
    67 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     93!----------------------------------------------------------------------- 
    6894&nampissbc     !   parameters for inputs deposition 
    69 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     95!----------------------------------------------------------------------- 
    7096/ 
    71 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     97!----------------------------------------------------------------------- 
    7298&nampisice      !  Prescribed sea ice tracers 
    73 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     99!----------------------------------------------------------------------- 
    74100/ 
    75 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     101!----------------------------------------------------------------------- 
    76102&nampisdmp     !  Damping  
    77 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     103!----------------------------------------------------------------------- 
    78104   nn_pisdmp    =  1460       !  Frequency of Relaxation 
    79105/ 
    80 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     106!----------------------------------------------------------------------- 
    81107&nampismass     !  Mass conservation 
    82 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     108!----------------------------------------------------------------------- 
    83109/ 
    84110!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     
    93119!!              8  - optical parameters                         (namlobopt) 
    94120!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    95 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     121!----------------------------------------------------------------------- 
    96122&namlobphy     !   biological parameters for phytoplankton 
    97 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     123!----------------------------------------------------------------------- 
    98124/ 
    99 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     125!----------------------------------------------------------------------- 
    100126&namlobnut     !   biological parameters for nutrients 
    101 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     127!----------------------------------------------------------------------- 
    102128/ 
    103 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     129!----------------------------------------------------------------------- 
    104130&namlobzoo     !   biological parameters for zooplankton 
    105 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     131!----------------------------------------------------------------------- 
    106132/ 
    107 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     133!----------------------------------------------------------------------- 
    108134&namlobdet     !   biological parameters for detritus 
    109 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     135!----------------------------------------------------------------------- 
    110136/ 
    111 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     137!----------------------------------------------------------------------- 
    112138&namlobdom     !   biological parameters for DOM 
    113 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     139!----------------------------------------------------------------------- 
    114140/ 
    115 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     141!----------------------------------------------------------------------- 
    116142&namlobsed     !   parameters from aphotic layers to sediment 
    117 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     143!----------------------------------------------------------------------- 
    118144/ 
    119 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     145!----------------------------------------------------------------------- 
    120146&namlobrat     !   general coefficients 
    121 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     147!----------------------------------------------------------------------- 
    122148/ 
    123 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     149!----------------------------------------------------------------------- 
    124150&namlobopt     !   optical parameters 
    125 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     151!----------------------------------------------------------------------- 
    126152/ 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/CONFIG/SHARED/field_def.xml

    r7041 r7162  
    785785 
    786786     <field_group id="ptrc_T" grid_ref="grid_T_3D"> 
     787       <!-- PISCES standard : variables available with ln_p4z  --> 
    787788       <field id="DIC"          long_name="Dissolved inorganic Concentration"        unit="mmol/m3" /> 
    788789       <field id="DIC_e3t"      long_name="DIC * e3t"                                unit="mmol/m2" > DIC * e3t </field > 
     
    834835       <field id="NH4_e3t"      long_name="NH4 * e3t"                                unit="mmol/m2"  > NH4 * e3t </field > 
    835836 
    836        <!-- PISCES with Kriest parametisation : variables available with key_kriest --> 
    837        <field id="Num"         long_name="Number of organic particles"              unit="1" /> 
    838        <field id="Num_e3t"     long_name="Num * e3t"                                unit="m"  > Num * e3t </field > 
    839  
    840        <!-- PISCES light : variables available with key_pisces_reduced --> 
     837       <!-- PISCES quota : variables available with ln_p5z  --> 
     838 
     839       <field id="DON"          long_name="Dissolved organic N Concentration"        unit="mmol/m3" /> 
     840       <field id="DON_e3t"      long_name="DON * e3t"                                unit="mmol/m2"  > DON * e3t </field > 
     841       <field id="DOP"          long_name="Dissolved organic P Concentration"        unit="mmol/m3" /> 
     842       <field id="DOP_e3t"      long_name="DOP * e3t"                                unit="mmol/m2"  > DOP * e3t </field > 
     843       <field id="PON"          long_name="Small PON Concentration"                  unit="mmol/m3" /> 
     844       <field id="PON_e3t"      long_name="PON * e3t"                                unit="mmol/m2"  > PON * e3t </field > 
     845       <field id="POP"          long_name="Small POP Concentration"                  unit="mmol/m3" /> 
     846       <field id="POP_e3t"      long_name="POP * e3t"                                unit="mmol/m2"  > POP * e3t </field > 
     847       <field id="GON"          long_name="Big PON Concentration"                    unit="mmol/m3" /> 
     848       <field id="GON_e3t"      long_name="GON * e3t"                                unit="mmol/m2"  > GON * e3t </field > 
     849       <field id="GOP"          long_name="Big POP Concentration"                    unit="mmol/m3" /> 
     850       <field id="GOP_e3t"      long_name="GOP * e3t"                                unit="mmol/m2"  > GOP * e3t </field > 
     851       <field id="PHYN"         long_name="Nanophytoplankton N biomass"              unit="mmol/m3" /> 
     852       <field id="PHYN_e3t"     long_name="PHYN * e3t"                               unit="mmol/m2"  > PHYN * e3t </field > 
     853       <field id="PHYP"         long_name="Nanophytoplankton P biomass"              unit="mmol/m3" /> 
     854       <field id="PHYP_e3t"     long_name="PHYP * e3t"                               unit="mmol/m2"  > PHYP * e3t </field > 
     855       <field id="DIAN"         long_name="Diatoms N biomass"                        unit="mmol/m3" /> 
     856       <field id="DIAN_e3t"     long_name="DIAN * e3t"                               unit="mmol/m2"  > DIAN * e3t </field > 
     857       <field id="DIAP"         long_name="Diatoms P biomass"                        unit="mmol/m3" /> 
     858       <field id="DIAP_e3t"     long_name="DIAP * e3t"                               unit="mmol/m2"  > DIAP * e3t </field > 
     859       <field id="PIC"          long_name="Picophytoplankton C biomass"              unit="mmol/m3" /> 
     860       <field id="PIC_e3t"      long_name="PIC * e3t"                                unit="mmol/m2"  > PIC * e3t </field > 
     861       <field id="PICN"         long_name="Picophytoplankton N biomass"              unit="mmol/m3" /> 
     862       <field id="PICN_e3t"     long_name="PICN * e3t"                               unit="mmol/m2"  > PICN * e3t </field > 
     863       <field id="PICP"         long_name="Picophytoplankton P biomass"              unit="mmol/m3" /> 
     864       <field id="PICP_e3t"     long_name="PICP * e3t"                               unit="mmol/m2"  > PICP * e3t </field > 
     865       <field id="PFe"          long_name="Picophytoplankton Fe biomass"             unit="mmol/m3" /> 
     866       <field id="PFe_e3t"      long_name="PFe * e3t"                                unit="mmol/m2"  > PFe * e3t </field > 
     867       <field id="PCHL"         long_name="Picophytoplankton Chl biomass"            unit="mg/m3" /> 
     868       <field id="PCHL_e3t"     long_name="PCHL * e3t"                               unit="mmol/m2"  > PCHL * e3t </field > 
     869 
     870       <!-- PISCES light : variables available with ln_p2z  --> 
    841871       <field id="DET"         long_name="Detritus"                                 unit="mmol-N/m3" /> 
    842872       <field id="DET_e3t"     long_name="DET * e3t"                                unit="mmol-N/m2"  > DET * e3t </field > 
     
    870900       <field id="PAR"         long_name="Photosynthetically Available Radiation"  unit="W/m2"       grid_ref="grid_T_3D" /> 
    871901       <field id="PARDM"       long_name="Daily mean PAR"                          unit="W/m2"       grid_ref="grid_T_3D" /> 
    872        <field id="PPPHY"       long_name="Primary production of nanophyto"         unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    873        <field id="PPPHY2"      long_name="Primary production of diatoms"           unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    874        <field id="PPNEWN"      long_name="New Primary production of nanophyto"     unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    875        <field id="PPNEWD"      long_name="New Primary production of diatoms"       unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    876        <field id="PBSi"        long_name="Primary production of Si diatoms"        unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    877        <field id="PFeN"        long_name="Primary production of nano iron"         unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
     902       <field id="PPPHYN"      long_name="Primary production of nanophyto"         unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     903       <field id="PPPHYP"      long_name="Primary production of picophyto"         unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     904       <field id="PPPHYD"      long_name="Primary production of diatoms"           unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     905       <field id="PPNEWN"      long_name="New Primary production of nanophyto"     unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     906       <field id="PPNEWP"      long_name="New Primary production of picophyto"     unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     907       <field id="PPNEWD"      long_name="New Primary production of diatoms"       unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     908       <field id="PBSi"        long_name="Primary production of Si diatoms"        unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     909       <field id="PFeN"        long_name="Primary production of nano iron"         unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     910       <field id="PFeP"        long_name="Primary production of pico iron"         unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
    878911       <field id="PFeD"        long_name="Primary production of diatoms iron"      unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    879912       <field id="xfracal"     long_name="Calcifying fraction"                     unit="1"          grid_ref="grid_T_3D" /> 
     
    884917       <field id="REMIN"       long_name="Oxic remineralization of OM"             unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    885918       <field id="DENIT"       long_name="Anoxic remineralization of OM"           unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
     919       <field id="REMINP"       long_name="Oxic remineralization rate of POC"      unit="d-1"        grid_ref="grid_T_3D" /> 
     920       <field id="REMING"       long_name="Oxic remineralization rate of GOC"      unit="d-1"        grid_ref="grid_T_3D" /> 
    886921       <field id="Nfix"        long_name="Nitrogen fixation"                       unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    887922       <field id="Mumax"       long_name="Maximum growth rate"                     unit="s-1"        grid_ref="grid_T_3D" /> 
    888923       <field id="MuN"         long_name="Realized growth rate for nanophyto"      unit="s-1"        grid_ref="grid_T_3D" /> 
     924       <field id="MuP"         long_name="Realized growth rate for picophyto"      unit="s-1"        grid_ref="grid_T_3D" /> 
    889925       <field id="MuD"         long_name="Realized growth rate for diatomes"       unit="s-1"        grid_ref="grid_T_3D" /> 
     926       <field id="MunetN"      long_name="Net growth rate for nanophyto"           unit="s-1"        grid_ref="grid_T_3D" /> 
     927       <field id="MunetP"      long_name="Net growth rate for picophyto"           unit="s-1"        grid_ref="grid_T_3D" /> 
     928       <field id="MunetD"      long_name="Net growth rate for diatomes"            unit="s-1"        grid_ref="grid_T_3D" /> 
    890929       <field id="LNnut"       long_name="Nutrient limitation term in Nanophyto"   unit=""           grid_ref="grid_T_3D" /> 
     930       <field id="LPnut"       long_name="Nutrient limitation term in Picophyto"   unit="-"          grid_ref="grid_T_3D" /> 
    891931       <field id="LDnut"       long_name="Nutrient limitation term in Diatoms"     unit=""           grid_ref="grid_T_3D" /> 
    892932       <field id="LNFe"        long_name="Iron limitation term in Nanophyto"       unit=""           grid_ref="grid_T_3D" /> 
     933       <field id="LPFe"        long_name="Iron limitation term in Picophyto"       unit="-"          grid_ref="grid_T_3D" /> 
    893934       <field id="LDFe"        long_name="Iron limitation term in Diatoms"         unit=""           grid_ref="grid_T_3D" /> 
    894935       <field id="LNlight"     long_name="Light limitation term in Nanophyto"      unit=""           grid_ref="grid_T_3D" /> 
     936       <field id="LPlight"     long_name="Light limitation term in Picophyto"      unit="-"          grid_ref="grid_T_3D" /> 
    895937       <field id="LDlight"     long_name="Light limitation term in Diatoms"        unit=""           grid_ref="grid_T_3D" /> 
     938       <field id="SIZEN"       long_name="Mean relative size of nanophyto."        unit="-"          grid_ref="grid_T_3D" /> 
     939       <field id="SIZEP"       long_name="Mean relative size of picophyto."        unit="-"          grid_ref="grid_T_3D" /> 
     940       <field id="SIZED"       long_name="Mean relative size of diatoms"           unit="-"          grid_ref="grid_T_3D" /> 
    896941       <field id="Fe2"         long_name="Iron II concentration"                   unit="nmol/m3"    grid_ref="grid_T_3D" /> 
    897942       <field id="Fe3"         long_name="Iron III concentration"                  unit="nmol/m3"    grid_ref="grid_T_3D" /> 
     
    906951       <field id="Sdenit"      long_name="Nitrate reduction in the sediments"      unit="mol/m2/s"                        /> 
    907952       <field id="Ironice"     long_name="Iron input/uptake due to sea ice"        unit="mol/m2/s"                        /> 
     953       <field id="SedCal"      long_name="Calcite burial in the sediments"         unit="molC/m2/s"                       /> 
     954       <field id="SedSi"       long_name="Silicon burial in the sediments"         unit="molSi/m2/s"                      /> 
     955       <field id="SedC"        long_name="Organic C burial in the sediments"       unit="molC/m2/s"                       /> 
    908956       <field id="HYDR"        long_name="Iron input from hydrothemal vents"       unit="mol/m2/s"   grid_ref="grid_T_3D" /> 
    909957       <field id="EPC100"      long_name="Export of carbon particles at 100 m"     unit="mol/m2/s"                        /> 
     
    924972       <field id="Ironsed"     long_name="Iron deposition from sediment"           unit="mol/m2/s"   grid_ref="grid_T_3D" /> 
    925973 
    926  
    927        <!-- PISCES with Kriest parametisation : variables available with key_kriest --> 
    928        <field id="EPN100"      long_name="Particulate number flux at 100 m"        unit="mol/m2/s"                        /> 
    929        <field id="EXPN"        long_name="Particulate number flux"                 unit="mol/m2/s"   grid_ref="grid_T_3D" /> 
    930        <field id="XNUM"        long_name="Number of particles in aggregats"        unit="1"          grid_ref="grid_T_3D" /> 
    931        <field id="WSC"         long_name="sinking speed of mass flux"              unit="m2/s"       grid_ref="grid_T_3D" /> 
    932        <field id="WSN"         long_name="sinking speed of number flux"            unit="m2/s"       grid_ref="grid_T_3D" /> 
    933  
    934974       <!-- dbio_T on T grid : variables available with key_diaar5 --> 
    935975       <field id="TPP"         long_name="Total Primary production of phyto"                   unit="mol/m3/s"  grid_ref="grid_T_3D" /> 
     
    940980       <field id="ZO2MIN"      long_name="Depth of oxygen minimum concentration"               unit="m"                              /> 
    941981       <field id="INTNFIX"     long_name="Nitrogen fixation rate : vert. integrated"           unit="mol/m2/s"                       /> 
    942        <field id="INTPPPHY"    long_name="Vertically integrated primary production by nanophy" unit="mol/m2/s"                       /> 
    943        <field id="INTPPPHY2"   long_name="Vertically integrated primary production by diatom"  unit="mol/m2/s"                       /> 
     982       <field id="INTPPPHYN"    long_name="Vertically integrated primary production by nanophy" unit="mol/m2/s"                       /> 
     983       <field id="INTPPPHYD"   long_name="Vertically integrated primary production by diatom"  unit="mol/m2/s"                       /> 
    944984       <field id="INTPP"       long_name="Vertically integrated primary production by phyto"   unit="mol/m2/s"                       /> 
    945985       <field id="INTPNEW"     long_name="Vertically integrated new primary production"        unit="mol/m2/s"                       /> 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/CONFIG/SHARED/namelist_pisces_ref

    r7041 r7162  
    11!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    2 !! PISCES  (key_pisces) reference namelist (see below for key_pisces_reduced) 
     2!! PISCES reference namelist  
    33!!              1  - air-sea exchange                         (nampisext) 
    44!!              2  - biological parameters                    (nampisbio) 
     
    1010!!              8  - parameters for inputs deposition         (nampissed) 
    1111!!              11 - Damping                                  (nampisdmp) 
    12 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    13 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     12!----------------------------------------------------------------------- 
    1413&nampismod     !  Model used  
    15 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    16   ln_p2z = .false.        !  LOBSTER model used 
    17   ln_p4z = .true.         !  PISCES model used 
    18 / 
    19 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    20 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     14!----------------------------------------------------------------------- 
     15  ln_p2z    = .false.        !  LOBSTER model used 
     16  ln_p4z    = .true.         !  PISCES model used 
     17  ln_p5z    = .false.        !  PISCES QUOTA model used 
     18  ln_ligand = .false.        !  Enable  organic ligands 
     19/ 
     20!----------------------------------------------------------------------- 
    2121&nampisext     !   air-sea exchange 
    22 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     22!----------------------------------------------------------------------- 
    2323   ln_co2int  =  .false. ! read atm pco2 from a file (T) or constant (F) 
    2424   atcco2     =  280.    ! Constant value atmospheric pCO2 - ln_co2int = F 
     
    2828!                        ! then the first atmospheric CO2 record read is at years(1) 
    2929/ 
    30 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     30!----------------------------------------------------------------------- 
    3131&nampisatm     !  Atmospheric prrssure  
    32 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     32!----------------------------------------------------------------------- 
    3333!              !  file name   ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    3434!              !              !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
    3535   sn_patm     = 'presatm'    ,     -1            , 'patm'    ,  .true.      , .true. , 'yearly'  , ''       , ''       , '' 
     36   sn_atmco2   = 'presatmco2' ,     -1            , 'xco2'    ,  .true.      , .true. , 'yearly'  , ''       , ''       , '' 
    3637   cn_dir      = './'     !  root directory for the location of the dynamical files 
    3738! 
    38    ln_presatm  = .false.   ! constant atmopsheric pressure (F) or from a file (T) 
    39 / 
    40 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     39   ln_presatm    = .false.   ! constant atmopsheric pressure (F) or from a file (T) 
     40   ln_presatmco2 = .false.   ! Read spatialized atm co2 files [ppm] if TRUE 
     41/ 
     42!----------------------------------------------------------------------- 
    4143&nampisbio     !   biological parameters 
    42 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     44!----------------------------------------------------------------------- 
    4345   nrdttrc    =  1        ! time step frequency for biology 
    4446   wsbio      =  2.       ! POC sinking speed 
    4547   xkmort     =  2.E-7    ! half saturation constant for mortality 
    4648   ferat3     =  10.E-6   ! Fe/C in zooplankton  
    47    wsbio2     =  30.      ! Big particles sinking speed 
     49   wsbio2     =  50.      ! Big particles sinking speed 
     50   wsbio2max  =  50.      ! Big particles maximum sinking speed 
     51   wsbio2scale=  5000.    ! Big particles length scale of sinking 
    4852   niter1max  =  1        ! Maximum number of iterations for POC 
    4953   niter2max  =  1        ! Maximum number of iterations for GOC 
    50 / 
    51 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    52 &nampislim     !   parameters for nutrient limitations 
    53 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     54!                         !  ln_ligand enabled 
     55   wfep       =  0.       ! FeP sinking speed  
     56   ldocp      =  0.       ! Phyto ligand production per unit doc  
     57   ldocz      =  0.       ! Zoo ligand production per unit doc  
     58   lthet      =  0.       ! Proportional loss of ligands due to Fe uptake  
     59!                         !  ln_p5z enabled 
     60   no3rat3    =  0.182    ! N/C ratio in zooplankton 
     61   po4rat3    =  0.0094   ! P/C ratio in zooplankton 
     62/ 
     63!----------------------------------------------------------------------- 
     64&namp4zlim     !   parameters for nutrient limitations for PISCES std - ln_p4z 
     65!----------------------------------------------------------------------- 
    5466   concnno3   =  1.e-6    ! Nitrate half saturation of nanophytoplankton 
    5567   concdno3   =  3.E-6    ! Nitrate half saturation for diatoms 
     
    7183   qdfelim    =  7.E-6    ! Optimal quota of diatoms 
    7284   caco3r     =  0.3      ! mean rain ratio 
    73    oxymin    =  1.E-6     ! Half-saturation constant for anoxia 
    74 / 
    75 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     85   oxymin     =  1.E-6    ! Half-saturation constant for anoxia 
     86/ 
     87!----------------------------------------------------------------------- 
     88&namp5zlim     !   parameters for nutrient limitations PISCES QUOTA - ln_p5z 
     89!----------------------------------------------------------------------- 
     90   concnno3   =  3e-6     ! Nitrate half saturation of nanophytoplankton 
     91   concpno3   =  1e-6 
     92   concdno3   =  4E-6     ! Phosphate half saturation for diatoms 
     93   concnnh4   =  1.5E-6   ! NH4 half saturation for phyto 
     94   concpnh4   =  4E-7 
     95   concdnh4   =  2E-6     ! NH4 half saturation for diatoms 
     96   concnpo4   =  3E-6     ! PO4 half saturation for phyto 
     97   concppo4   =  1.5E-6 
     98   concdpo4   =  4E-6     ! PO4 half saturation for diatoms 
     99   concnfer   =  3E-9   ! Iron half saturation for phyto 
     100   concpfer   =  1.5E-9 
     101   concdfer   =  4E-9   ! Iron half saturation for diatoms 
     102   concbfe    =  1.E-11   ! Half-saturation for Fe limitation of Bacteria 
     103   concbnh4   =  1.E-7    ! NH4 half saturation for phyto 
     104   concbno3   =  5.E-7    ! Phosphate half saturation for diatoms 
     105   concbpo4   =  1E-7     ! Phosphate half saturation for bacteria 
     106   xsizedia   =  1.E-6    ! Minimum size criteria for diatoms 
     107   xsizephy   =  1.E-6    ! Minimum size criteria for phyto 
     108   xsizepic   =  1.E-6 
     109   xsizern    =  1.0      ! Size ratio for nanophytoplankton 
     110   xsizerp    =  1.0 
     111   xsizerd    =  4.0      ! Size ratio for diatoms 
     112   xksi1      =  2.E-6    ! half saturation constant for Si uptake 
     113   xksi2      =  20E-6  ! half saturation constant for Si/C 
     114   xkdoc      =  417.E-6  ! half-saturation constant of DOC remineralization 
     115   caco3r     =  0.35     ! mean rain ratio 
     116   oxymin     =  1.E-6    ! Half-saturation constant for anoxia 
     117/ 
     118!----------------------------------------------------------------------- 
     119&namp5zquota    !   parameters for nutrient limitations PISCES quota - ln_p5z 
     120!----------------------------------------------------------------------- 
     121   qfnopt     =  7.E-6    ! Optimal Fe quota of nanophyto 
     122   qfpopt     =  7.E-6    ! Optimal Fe quota of picophyto 
     123   qfdopt     =  7.E-6    ! Optimal quota of diatoms 
     124   qnnmin     =  0.29     ! Minimal N quota for nano 
     125   qnnmax     =  1.39     ! Maximal N quota for nano 
     126   qpnmin     =  0.28     ! Minimal P quota for nano 
     127   qpnmax     =  1.06     ! Maximal P quota for nano 
     128   qnpmin     =  0.42     ! Minimal N quota for pico 
     129   qnpmax     =  1.39     ! Maximal N quota for pico 
     130   qppmin     =  0.25     ! Minimal P quota for pico 
     131   qppmax     =  0.7      ! Maximal P quota for pico 
     132   qndmin     =  0.25     ! Minimal N quota for diatoms 
     133   qndmax     =  1.39     ! Maximal N quota for diatoms 
     134   qpdmin     =  0.29     ! Minimal P quota for diatoms 
     135   qpdmax     =  1.32     ! Maximal P quota for diatoms 
     136   qfnmax     =  40E-6    ! Maximal Fe quota for nano 
     137   qfpmax     =  40E-6    ! Maximal Fe quota for pico 
     138   qfdmax     =  40E-6    ! Maximal Fe quota for diatoms 
     139/ 
     140!----------------------------------------------------------------------- 
    76141&nampisopt     !   parameters for optics 
    77 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     142!----------------------------------------------------------------------- 
    78143!              !  file name       ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    79144!              !                  !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
     
    83148   parlux      =  0.43      ! Fraction of shortwave as PAR 
    84149/  
    85 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    86 &nampisprod     !   parameters for phytoplankton growth 
    87 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    88    pislope    =  2.       ! P-I slope 
    89    pislope2   =  2.       ! P-I slope  for diatoms 
     150!----------------------------------------------------------------------- 
     151&namp4zprod     !   parameters for phytoplankton growth for PISCES std - ln_p4z 
     152!----------------------------------------------------------------------- 
     153   pislopen   =  2.       ! P-I slope 
     154   pisloped   =  2.       ! P-I slope  for diatoms 
    90155   xadap      =  0.       ! Adaptation factor to low light 
    91    excret     =  0.05     ! excretion ratio of phytoplankton 
    92    excret2    =  0.05     ! excretion ratio of diatoms 
     156   excretn    =  0.05     ! excretion ratio of phytoplankton 
     157   excretd    =  0.05     ! excretion ratio of diatoms 
    93158   ln_newprod =  .true.   ! Enable new parame. of production (T/F)  
    94159   bresp      =  0.033    ! Basal respiration rate 
     
    101166/ 
    102167!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    103 &nampismort     !   parameters for phytoplankton sinks 
     168&namp5zprod     !   parameters for phytoplankton growth for PISCES quota - ln_p5z 
    104169!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    105    wchl       =  0.01    ! quadratic mortality of phytoplankton 
     170   pislopen   =  3.       ! P-I slope 
     171   pislopep   =  3.       ! P-I slope for picophytoplankton 
     172   pisloped   =  3.       ! P-I slope  for diatoms 
     173   excretn    =  0.05     ! excretion ratio of phytoplankton 
     174   excretp    =  0.05     ! excretion ratio of picophytoplankton 
     175   excretd    =  0.05     ! excretion ratio of diatoms 
     176   xadap      =  0.       ! Adaptation factor to low light 
     177   bresp      =  0.02     ! Basal respiration rate 
     178   thetannm   =  0.25     ! Maximum Chl/N in nanophytoplankton 
     179   thetanpm   =  0.25     ! Maximum Chl/N in picophytoplankton 
     180   thetandm   =  0.3      ! Maximum Chl/N in diatoms 
     181   chlcmin    =  0.004    ! Minimum Chl/c in phytoplankton 
     182   grosip     =  0.131    ! mean Si/C ratio 
     183   xlimmxln   =  2.       ! Critical time scale for mixing (nano) 
     184   xlimmxlp   =  2.       ! Critical time scale for mixing (pico) 
     185   xlimmxld   =  4.       ! Critical time scale for mixing (diatoms) 
     186/ 
     187!----------------------------------------------------------------------- 
     188&namp4zmort     !   parameters for phytoplankton sinks for PISCES std - ln_p4z 
     189!----------------------------------------------------------------------- 
     190   wchl       =  0.01     ! quadratic mortality of phytoplankton 
    106191   wchld      =  0.01     ! maximum quadratic mortality of diatoms 
    107192   wchldm     =  0.03     ! maximum quadratic mortality of diatoms 
     
    109194   mprat2     =  0.01     ! Diatoms mortality rate 
    110195/ 
    111 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    112 &nampismes     !   parameters for mesozooplankton 
    113 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     196!----------------------------------------------------------------------- 
     197&namp5zmort     !   parameters for phytoplankton sinks for PISCES quota - ln_p5z 
     198!----------------------------------------------------------------------- 
     199   wchln      =  0.01     ! quadratic mortality of nanophytoplankton 
     200   wchlp      =  0.01     ! quadratic mortality of picophytoplankton 
     201   wchld      =  0.01     ! maximum quadratic mortality of diatoms 
     202   wchldm     =  0.02     ! maximum quadratic mortality of diatoms 
     203   mpratn     =  0.01     ! nanophytoplankton mortality rate 
     204   mpratp     =  0.01     ! picophytoplankton mortality rate 
     205   mprat2     =  0.01     ! Diatoms mortality rate 
     206/ 
     207!----------------------------------------------------------------------- 
     208&namp4zmes     !   parameters for mesozooplankton for PISCES std - ln_p4z 
     209!----------------------------------------------------------------------- 
    114210   part2      =  0.75     ! part of calcite not dissolved in mesozoo guts 
    115211   grazrat2   =  0.75     ! maximal mesozoo grazing rate 
     
    131227   grazflux   =  2.e3     ! flux-feeding rate 
    132228/ 
    133 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    134 &nampiszoo     !   parameters for microzooplankton 
    135 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    136    part       =  0.5      ! part of calcite not dissolved in microzoo gutsa 
     229!----------------------------------------------------------------------- 
     230&namp5zmes     !   parameters for mesozooplankton 
     231!----------------------------------------------------------------------- 
     232   part2      =  0.75     ! part of calcite not dissolved in mesozoo guts 
     233   grazrat2   =  0.85     ! maximal mesozoo grazing rate 
     234   bmetexc2   =  .true.   ! Metabolic use of excess carbon  
     235   resrat2    =  0.005    ! exsudation rate of mesozooplankton 
     236   mzrat2     =  0.02     ! mesozooplankton mortality rate 
     237   xpref2d    =  1.       ! zoo preference for phyto 
     238   xpref2p    =  1.       ! zoo preference for POC 
     239   xpref2z    =  1.       ! zoo preference for zoo 
     240   xpref2m    =  0.2      ! meso preference for zoo 
     241   xpref2c    =  0.3      ! zoo preference for poc 
     242   xthresh2zoo = 1E-8     ! zoo feeding threshold for mesozooplankton 
     243   xthresh2dia = 1E-8     ! diatoms feeding threshold for mesozooplankton 
     244   xthresh2phy = 1E-8     ! nanophyto feeding threshold for mesozooplankton 
     245   xthresh2mes = 1E-8     ! meso feeding threshold for mesozooplankton 
     246   xthresh2poc = 1E-8     ! poc feeding threshold for mesozooplankton 
     247   xthresh2    =  3E-7     ! Food threshold for grazing 
     248   xkgraz2     =  20.E-6   ! half sturation constant for meso grazing 
     249   epsher2     =  0.5      ! Efficicency 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 P 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   grazflux   =  3.e3     ! flux-feeding rate 
     256/ 
     257!----------------------------------------------------------------------- 
     258&namp4zzoo     !   parameters for microzooplankton for PISCES std - ln_p4z 
     259!----------------------------------------------------------------------- 
     260   part       =  0.5      ! part of calcite not dissolved in microzoo guts 
    137261   grazrat    =  3.0      ! maximal zoo grazing rate 
    138262   resrat     =  0.03     ! exsudation rate of zooplankton 
     
    150274   unass      =  0.3      ! non assimilated fraction of phyto by zoo 
    151275/ 
    152 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     276!----------------------------------------------------------------------- 
     277&namp5zzoo     !   parameters for microzooplankton 
     278!----------------------------------------------------------------------- 
     279   part       =  0.5      ! part of calcite not dissolved in microzoo gutsa 
     280   grazrat    =  2.75     ! maximal zoo grazing rate 
     281   bmetexc    =  .true.   ! Metabolic use of excess carbon 
     282   resrat     =  0.03     ! exsudation rate of zooplankton 
     283   mzrat      =  0.005    ! zooplankton mortality rate 
     284   xprefc     =  0.1      ! Microzoo preference for POM 
     285   xprefn     =  1.       ! Microzoo preference for Nanophyto 
     286   xprefp     =  1.6      ! Microzoo preference for picophyto 
     287   xprefd     =  1.0      ! Microzoo preference for Diatoms 
     288   xprefz     =  0.3      ! Microzoo preference for microzooplankton 
     289   xthreshdia =  1.E-8    ! Diatoms feeding threshold for microzooplankton 
     290   xthreshphy =  1.E-8    ! Nanophyto feeding threshold for microzooplankton 
     291   xthreshpic =  1.E-8 
     292   xthreshzoo =  1.E-8    ! Nanophyto feeding threshold for microzooplankton 
     293   xthreshpoc =  1.E-8    ! POC feeding threshold for microzooplankton 
     294   xthresh    =  3.E-7    ! Food threshold for feeding 
     295   xkgraz     =  20.E-6   ! half sturation constant for grazing 
     296   epsher     =  0.5      ! Efficiency of microzoo growth 
     297   ssigma     =  0.5      ! Fraction excreted as semi-labile DOM 
     298   srespir    =  0.2      ! Active respiration 
     299   unassc     =  0.3      ! non assimilated fraction of C by zoo 
     300   unassn     =  0.3      ! non assimilated fraction of C by zoo 
     301   unassp     =  0.3      ! non assimilated fraction of C by zoo 
     302/ 
     303!----------------------------------------------------------------------- 
    153304&nampisfer     !   parameters for iron chemistry 
    154 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     305!----------------------------------------------------------------------- 
    155306   ln_fechem =  .false.   ! complex iron chemistry ( T/F ) 
    156307   ln_ligvar =  .false.   ! variable ligand concentration 
    157    xlam1     =  0.005     ! scavenging rate of Iron 
    158    xlamdust  =  150.0     ! Scavenging rate of dust 
    159    ligand    =  0.6E-9    ! Ligands concentration  
    160  
    161 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     308   ln_fecolloid = .false. ! variable colloidal fraction 
     309   xlam1        =  0.005  ! scavenging rate of Iron 
     310   xlamdust     =  150.0  ! Scavenging rate of dust 
     311   ligand       =  0.6E-9 ! Ligands concentration  
     312   kfep         =  0.     ! Nanoparticle formation rate constant 
     313/ 
     314!-----------------------------------------------------------------------   
    162315&nampisrem     !   parameters for remineralization 
    163 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     316!----------------------------------------------------------------------- 
    164317   xremik    =  0.3       ! remineralization rate of DOC 
    165    xremip    =  0.025     ! remineralisation rate of POC 
    166318   nitrif    =  0.05      ! NH4 nitrification rate 
    167319   xsirem    =  0.003     ! remineralization rate of Si 
    168320   xsiremlab =  0.03      ! fast remineralization rate of Si 
    169321   xsilab    =  0.5       ! Fraction of labile biogenic silica 
    170 / 
    171 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     322   feratb    =  10.E-6    ! Fe/C quota in bacteria 
     323   xkferb    =  2.5E-10   ! Half-saturation constant for bacteria Fe/C 
     324!                         ! ln_p5z 
     325   xremikc   =  0.25      ! remineralization rate of DOC 
     326   xremikn   =  0.35      ! remineralization rate of DON 
     327   xremikp   =  0.4       ! remineralization rate of DOP 
     328!   feratb    =  20E-6     ! Bacterial Fe/C ratio 
     329!   xkferb    =  3E-10     ! Half-saturation constant for bact. Fe/C 
     330/ 
     331!----------------------------------------------------------------------- 
     332&nampispoc     !   parameters for organic particles 
     333!----------------------------------------------------------------------- 
     334   xremip    =  0.035     ! remineralisation rate of PON 
     335   jcpoc     =  15        ! Number of lability classes 
     336   rshape    =  1.0       ! Shape of the gamma function 
     337!                         ! ln_p5z 
     338   xremipc   =  0.02      ! remineralisation rate of POC 
     339   xremipn   =  0.025     ! remineralisation rate of PON 
     340   xremipp   =  0.03      ! remineralisation rate of POP 
     341/ 
     342!----------------------------------------------------------------------- 
    172343&nampiscal     !   parameters for Calcite chemistry 
    173 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     344!----------------------------------------------------------------------- 
    174345   kdca       =  6.       ! calcite dissolution rate constant (1/time) 
    175346   nca        =  1.       ! order of dissolution reaction (dimensionless) 
    176347/ 
    177 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     348!----------------------------------------------------------------------- 
    178349&nampissbc     !   parameters for inputs deposition 
    179 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     350!----------------------------------------------------------------------- 
    180351!              !  file name        ! frequency (hours) ! variable      ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    181352!              !                   !  (if <0  months)  !   name        !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
     
    210381   concfediaz  =  1.e-10   ! Diazotrophs half-saturation Cste for Iron 
    211382   hratio      =  1.e+7    ! Fe to 3He ratio assumed for vent iron supply  
    212 / 
    213 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     383!                          ! ln_ligand 
     384   fep_rats    =  0.       ! Fep/Fer ratio from sed sources  
     385   fep_rath    =  0.       ! Fep/Fer ratio from sed hydro sources  
     386/ 
     387!----------------------------------------------------------------------- 
    214388&nampisice      !  Prescribed sea ice tracers 
    215 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     389!----------------------------------------------------------------------- 
    216390! constant ocean tracer concentrations are defined in trcice_pisces.F90 (Global, Arctic, Antarctic and Baltic) 
    217391! trc_ice_ratio     * betw 0 and 1: prescribed ice/ocean tracer concentration ratio 
     
    224398! cn_trc_o          * 'GL' use global ocean values making the Baltic distinction only 
    225399!                     'AA' use specific Arctic/Antarctic/Baltic values 
    226 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     400!----------------------------------------------------------------------- 
    227401!    sn_tri_ ! trc_ice_ratio ! trc_ice_prescr !     cn_trc_o 
    228402   sn_tri_dic =           -1.,           -99.,          'AA' 
     
    252426   sn_tri_nh4 =            1.,           -99.,          'AA' 
    253427/ 
    254 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     428!----------------------------------------------------------------------- 
    255429&nampisdmp     !  Damping  
    256 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     430!----------------------------------------------------------------------- 
    257431   ln_pisdmp    =  .true.     !  Relaxation fo some tracers to a mean value 
    258432   nn_pisdmp    =  5475       !  Frequency of Relaxation  
    259433/ 
    260 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     434!----------------------------------------------------------------------- 
    261435&nampismass     !  Mass conservation 
    262 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     436!----------------------------------------------------------------------- 
    263437   ln_check_mass =  .false.    !  Check mass conservation 
    264438/ 
     
    274448!!              8  - optical parameters                         (namlobopt) 
    275449!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    276 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     450!----------------------------------------------------------------------- 
    277451&namlobphy     !   biological parameters for phytoplankton 
    278 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     452!----------------------------------------------------------------------- 
    279453   tmumax  =  1.21e-5   ! maximal phytoplankton growth rate            [s-1]  
    280454   rgamma  =  0.05      ! phytoplankton exudation fraction             [%] 
     
    283457   aki     =  33.       ! light photosynthesis half saturation constant[W/m2] 
    284458/ 
    285 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     459!----------------------------------------------------------------------- 
    286460&namlobnut     !   biological parameters for nutrients 
    287 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     461!----------------------------------------------------------------------- 
    288462   akno3   =  0.7       ! nitrate limitation half-saturation value     [mmol/m3] 
    289463   aknh4   =  0.001     ! ammonium limitation half-saturation value    [mmol/m3] 
     
    291465   psinut  =  3.        ! inhibition of nitrate uptake by ammonium 
    292466/ 
    293 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     467!----------------------------------------------------------------------- 
    294468&namlobzoo     !   biological parameters for zooplankton 
    295 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     469!----------------------------------------------------------------------- 
    296470   rppz    = 0.8        ! zooplankton nominal preference for phytoplancton food  [%] 
    297471   taus    = 9.26E-6    ! specific zooplankton maximal grazing rate              [s-1]  
     
    305479   tmminz  = 2.31e-6    ! minimal zooplankton mortality rate                     [(mmolN/m3)-1 d-1] 
    306480/ 
    307 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     481!----------------------------------------------------------------------- 
    308482&namlobdet     !   biological parameters for detritus 
    309 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     483!----------------------------------------------------------------------- 
    310484   taudn   = 5.80e-7    ! detritus breakdown rate                        [0.1/86400 s-1=10 days] 
    311485   fdetlab = 0.         ! NH4 fraction of detritus dissolution            
    312486/ 
    313 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     487!----------------------------------------------------------------------- 
    314488&namlobdom     !   biological parameters for DOM 
    315 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     489!----------------------------------------------------------------------- 
    316490   taudomn = 6.43e-8    ! DOM breakdown rate                             [s-1]  
    317491!                       ! slow remineralization rate of semi-labile dom to nh4 (1 month) 
    318492/ 
    319 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     493!----------------------------------------------------------------------- 
    320494&namlobsed     !   parameters from aphotic layers to sediment 
    321 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     495!----------------------------------------------------------------------- 
    322496   sedlam     = 3.86e-7    ! time coefficient of POC remineralization in sediments [s-1] 
    323497   sedlostpoc = 0.         ! mass of POC lost in sediments 
     
    325499   xhr        = -0.858     ! coeff for martin''s remineralisation profile 
    326500/ 
    327 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     501!----------------------------------------------------------------------- 
    328502&namlobrat     !   general coefficients 
    329 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     503!----------------------------------------------------------------------- 
    330504   rcchl   = 60.       ! Carbone/Chlorophyl ratio                     [mgC.mgChla-1] 
    331505   redf    = 6.56       ! redfield ratio (C:N) for phyto 
    332506   reddom  = 6.56       ! redfield ratio (C:N) for DOM 
    333507/ 
    334 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     508!----------------------------------------------------------------------- 
    335509&namlobopt     !   optical parameters 
    336 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     510!----------------------------------------------------------------------- 
    337511   xkg0   = 0.0232     ! green absorption coefficient of water 
    338512   xkr0   = 0.225      ! red absorption coefficent of water 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/CONFIG/cfg.txt

    r7068 r7162  
    1111GYRE OPA_SRC 
    1212ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 
    13 ORCA2_LIM3_PISCES OPA_SRC LIM_SRC_3 NST_SRC TOP_SRC 
    14 ORCA2_LIM3_TRC_N OPA_SRC LIM_SRC_3 NST_SRC TOP_SRC 
    15 ORCA2_LIM3_TRC OPA_SRC LIM_SRC_3 NST_SRC TOP_SRC 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r6722 r7162  
    2020   USE dom_oce        ! ocean space and time domain 
    2121   USE sbc_oce        ! Surface boundary condition: ocean fields 
     22   USE trc_oce        ! share SMS/Ocean variables 
    2223   USE sbc_ice        ! Surface boundary condition: ice fields 
    2324   USE sbcapr         ! Stochastic param. : ??? 
     
    3637   USE albedo         !  
    3738   USE eosbn2         !  
    38    USE sbcrnf  , ONLY : l_rnfcpl 
    39 #if defined key_cpl_carbon_cycle 
    40    USE p4zflx, ONLY : oce_co2 
    41 #endif 
     39   USE sbcrnf, ONLY : l_rnfcpl 
    4240#if defined key_cice 
    4341   USE ice_domain_size, only: ncat 
     
    467465      !                                                      !      Atmospheric CO2      ! 
    468466      !                                                      ! ------------------------- ! 
    469       srcv(jpr_co2 )%clname = 'O_AtmCO2'   ;   IF( TRIM(sn_rcv_co2%cldes   ) == 'coupled' )    srcv(jpr_co2 )%laction = .TRUE. 
     467      srcv(jpr_co2 )%clname = 'O_AtmCO2'    
     468      IF( TRIM(sn_rcv_co2%cldes   ) == 'coupled' )  THEN 
     469         srcv(jpr_co2 )%laction = .TRUE. 
     470         l_co2cpl = .TRUE. 
     471         IF(lwp) WRITE(numout,*) 
     472         IF(lwp) WRITE(numout,*) '   Atmospheric pco2 received from oasis ' 
     473         IF(lwp) WRITE(numout,*) 
     474      ENDIF 
    470475      !                                                      ! ------------------------- ! 
    471476      !                                                      !   topmelt and botmelt     !    
     
    984989      ENDIF 
    985990 
    986 #if defined key_cpl_carbon_cycle 
    987991      !                                                      ! ================== ! 
    988992      !                                                      ! atmosph. CO2 (ppm) ! 
    989993      !                                                      ! ================== ! 
    990994      IF( srcv(jpr_co2)%laction )   atm_co2(:,:) = frcv(jpr_co2)%z3(:,:,1) 
    991 #endif 
    992995 
    993996      !  Fields received by SAS when OASIS coupling 
     
    19191922         IF( ssnd(jps_hsnw)%laction )   CALL cpl_snd( jps_hsnw, isec, ztmp4, info ) 
    19201923      ENDIF 
    1921       ! 
    1922 #if defined key_cpl_carbon_cycle 
    19231924      !                                                      ! ------------------------- ! 
    19241925      !                                                      !  CO2 flux from PISCES     !  
    19251926      !                                                      ! ------------------------- ! 
    1926       IF( ssnd(jps_co2)%laction )   CALL cpl_snd( jps_co2, isec, RESHAPE ( oce_co2, (/jpi,jpj,1/) ) , info ) 
    1927       ! 
    1928 #endif 
     1927      IF( ssnd(jps_co2)%laction .AND. l_co2cpl )   CALL cpl_snd( jps_co2, isec, RESHAPE ( oce_co2, (/jpi,jpj,1/) ) , info ) 
     1928      ! 
    19291929      !                                                      ! ------------------------- ! 
    19301930      IF( ssnd(jps_ocx1)%laction ) THEN                      !      Surface current      ! 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/OPA_SRC/trc_oce.F90

    r6140 r7162  
    2424   PUBLIC   trc_oce_alloc      ! function called by nemogcm.F90 
    2525 
     26   LOGICAL , PUBLIC                                      ::   l_co2cpl = .false.   !: atmospheric pco2 recieved from oasis 
    2627   INTEGER , PUBLIC                                      ::   nn_dttrc      !: frequency of step on passive tracers 
    2728   REAL(wp), PUBLIC                                      ::   r_si2         !: largest depth of extinction (blue & 0.01 mg.m-3)  (RGB) 
    2829   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   etot3         !: light absortion coefficient 
    29    REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   facvol        !: volume for degraded regions 
     30   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   oce_co2   !: ocean carbon flux 
    3031 
    3132#if defined key_top  
     
    7576      !!                  ***  trc_oce_alloc  *** 
    7677      !!---------------------------------------------------------------------- 
    77       INTEGER ::   ierr(2)        ! Local variables 
    78       !!---------------------------------------------------------------------- 
    79       ierr(:) = 0 
    80                      ALLOCATE( etot3 (jpi,jpj,jpk), STAT=ierr(1) ) 
    81       IF( lk_degrad) ALLOCATE( facvol(jpi,jpj,jpk), STAT=ierr(2) ) 
    82       trc_oce_alloc  = MAXVAL( ierr ) 
    83       ! 
     78      ALLOCATE( etot3(jpi,jpj,jpk), oce_co2(jpi,jpj), STAT=trc_oce_alloc ) 
    8479      IF( trc_oce_alloc /= 0 )   CALL ctl_warn('trc_oce_alloc: failed to allocate etot3 array') 
     80      ! 
    8581   END FUNCTION trc_oce_alloc 
    8682 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zbio.F90

    r7068 r7162  
    2020   USE p4zmicro        !  Sources and sinks of microzooplankton 
    2121   USE p4zmeso         !  Sources and sinks of mesozooplankton 
     22   USE p5zlim          !  Co-limitations of differents nutrients 
     23   USE p5zprod         !  Growth rate of the 2 phyto groups 
     24   USE p5zmort         !  Mortality terms for phytoplankton 
     25   USE p5zmicro        !  Sources and sinks of microzooplankton 
     26   USE p5zmeso         !  Sources and sinks of mesozooplankton 
     27   USE p5zagg          !  Aggregation of particles 
    2228   USE p4zrem          !  Remineralisation of organic matter 
     29   USE p4zpoc          !  Remineralization of organic particles 
     30   USE p4zagg          !  Aggregation of particles 
    2331   USE p4zfechem 
     32   USE p4zligand       !  Prognostic ligand model 
    2433   USE prtctl_trc      !  print control for debugging 
    2534   USE iom             !  I/O manager 
     
    6978      END DO 
    7079 
    71       CALL p4z_opt  ( kt, knt )     ! Optic: PAR in the water column 
    72       CALL p4z_sink ( kt, knt )     ! vertical flux of particulate organic matter 
    73       CALL p4z_fechem(kt, knt )     ! Iron chemistry/scavenging 
    74       CALL p4z_lim  ( kt, knt )     ! co-limitations by the various nutrients 
    75       CALL p4z_prod ( kt, knt )     ! phytoplankton growth rate over the global ocean.  
    76       !                             ! (for each element : C, Si, Fe, Chl ) 
    77       CALL p4z_mort ( kt      )     ! phytoplankton mortality 
    78      !                             ! zooplankton sources/sinks routines  
    79       CALL p4z_micro( kt, knt )           ! microzooplankton 
    80       CALL p4z_meso ( kt, knt )           ! mesozooplankton 
    81       CALL p4z_rem  ( kt, knt )     ! remineralization terms of organic matter+scavenging of Fe 
    82       !                             ! test if tracers concentrations fall below 0. 
     80      CALL p4z_opt     ( kt, knt )     ! Optic: PAR in the water column 
     81      CALL p4z_sink    ( kt, knt )     ! vertical flux of particulate organic matter 
     82      CALL p4z_fechem  ( kt, knt )     ! Iron chemistry/scavenging 
     83      ! 
     84      IF( ln_p4z ) THEN 
     85         CALL p4z_lim  ( kt, knt )     ! co-limitations by the various nutrients 
     86         CALL p4z_prod ( kt, knt )     ! phytoplankton growth rate over the global ocean.  
     87         !                             ! (for each element : C, Si, Fe, Chl ) 
     88         CALL p4z_mort ( kt      )     ! phytoplankton mortality 
     89         !                             ! zooplankton sources/sinks routines  
     90         CALL p4z_micro( kt, knt )           ! microzooplankton 
     91         CALL p4z_meso ( kt, knt )           ! mesozooplankton 
     92         CALL p4z_agg  ( kt, knt )     ! Aggregation of particles 
     93      ELSE 
     94         CALL p5z_lim  ( kt, knt )     ! co-limitations by the various nutrients 
     95         CALL p5z_prod ( kt, knt )     ! phytoplankton growth rate over the global ocean.  
     96         !                             ! (for each element : C, Si, Fe, Chl ) 
     97         CALL p5z_mort ( kt      )     ! phytoplankton mortality 
     98         !                             ! zooplankton sources/sinks routines  
     99         CALL p5z_micro( kt, knt )           ! microzooplankton 
     100         CALL p5z_meso ( kt, knt )           ! mesozooplankton 
     101         CALL p5z_agg  ( kt, knt )     ! Aggregation of particles 
     102      ENDIF 
     103      ! 
     104      CALL p4z_rem     ( kt, knt )     ! remineralization terms of organic matter+scavenging of Fe 
     105      CALL p4z_poc     ( kt, knt )     ! Remineralization of organic particles 
     106      IF( ln_ligand ) THEN 
     107        CALL p4z_ligand( kt, knt ) 
     108      ENDIF 
    83109      !                                                             ! 
    84110      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zche.F90

    r7068 r7162  
    1111   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
    1212   !!                  !  2011-02  (J. Simeon, J.Orr ) update O2 solubility constants 
     13   !!             3.6  !  2016-03  (O. Aumont) Change chemistry to MOCSY standards 
    1314   !!---------------------------------------------------------------------- 
    1415   !!   p4z_che      :  Sea water chemistry computed following OCMIP protocol 
     
    1819   USE sms_pisces    !  PISCES Source Minus Sink variables 
    1920   USE lib_mpp       !  MPP library 
     21   USE eosbn2, ONLY : neos 
    2022 
    2123   IMPLICIT NONE 
    2224   PRIVATE 
    2325 
    24    PUBLIC   p4z_che         ! 
    25    PUBLIC   p4z_che_alloc   ! 
    26  
    27    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sio3eq   ! chemistry of Si 
    28    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   fekeq    ! chemistry of Fe 
    29    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   chemc    ! Solubilities of O2 and CO2 
    30    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   chemo2   ! Solubilities of O2 and CO2 
     26   PUBLIC   p4z_che          ! 
     27   PUBLIC   p4z_che_alloc    ! 
     28   PUBLIC   ahini_for_at     ! 
     29   PUBLIC   solve_at_general ! 
     30 
     31   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   :: sio3eq   ! chemistry of Si 
     32   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   :: fekeq    ! chemistry of Fe 
     33   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   :: chemc    ! Solubilities of O2 and CO2 
     34   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   :: chemo2    ! Solubilities of O2 and CO2 
     35   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: fesol    ! solubility of Fe 
    3136   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tempis   ! In situ temperature 
     37   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   salinprac  ! Practical salinity 
     38 
     39   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   akb3       !: ??? 
     40   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   akw3       !: ??? 
     41   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   akf3       !: ??? 
     42   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aks3       !: ??? 
     43   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak1p3      !: ??? 
     44   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak2p3      !: ??? 
     45   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak3p3      !: ??? 
     46   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aksi3      !: ??? 
     47   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   borat      !: ??? 
     48   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   fluorid    !: ??? 
     49   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sulfat     !: ??? 
     50 
     51   !!* Variable for chemistry of the CO2 cycle 
    3252 
    3353   REAL(wp), PUBLIC ::   atcox  = 0.20946         ! units atm 
    3454 
    35    REAL(wp) ::   salchl = 1. / 1.80655    ! conversion factor for salinity --> chlorinity (Wooster et al. 1969) 
    3655   REAL(wp) ::   o2atm  = 1. / ( 1000. * 0.20946 )   
    3756 
    38    REAL(wp) ::   rgas   = 83.14472       ! universal gas constants 
    39    REAL(wp) ::   oxyco  = 1. / 22.4144   ! converts from liters of an ideal gas to moles 
    40  
    41    REAL(wp) ::   bor1   = 0.00023        ! borat constants 
    42    REAL(wp) ::   bor2   = 1. / 10.82 
    43  
    44    REAL(wp) ::   st1    =      0.14     ! constants for calculate concentrations for sulfate 
    45    REAL(wp) ::   st2    =  1./96.062    !  (Morris & Riley 1966) 
    46  
    47    REAL(wp) ::   ft1    =    0.000067   ! constants for calculate concentrations for fluorides 
    48    REAL(wp) ::   ft2    = 1./18.9984    ! (Dickson & Riley 1979 ) 
    49  
    50    !                                    ! volumetric solubility constants for o2 in ml/L   
    51    REAL(wp) ::   ox0    =  2.00856      ! from Table 1 for Eq 8 of Garcia and Gordon, 1992. 
    52    REAL(wp) ::   ox1    =  3.22400      ! corrects for moisture and fugacity, but not total atmospheric pressure 
    53    REAL(wp) ::   ox2    =  3.99063      !      Original PISCES code noted this was a solubility, but  
    54    REAL(wp) ::   ox3    =  4.80299      ! was in fact a bunsen coefficient with units L-O2/(Lsw atm-O2) 
    55    REAL(wp) ::   ox4    =  9.78188e-1   ! Hence, need to divide EXP( zoxy ) by 1000, ml-O2 => L-O2 
    56    REAL(wp) ::   ox5    =  1.71069      ! and atcox = 0.20946 to add the 1/atm dimension. 
    57    REAL(wp) ::   ox6    = -6.24097e-3    
    58    REAL(wp) ::   ox7    = -6.93498e-3  
    59    REAL(wp) ::   ox8    = -6.90358e-3 
    60    REAL(wp) ::   ox9    = -4.29155e-3  
    61    REAL(wp) ::   ox10   = -3.11680e-7  
     57   REAL(wp) ::   rgas   = 83.14472      ! universal gas constants 
     58   REAL(wp) ::   oxyco  = 1. / 22.4144  ! converts from liters of an ideal gas to moles 
    6259 
    6360   !                                    ! coeff. for seawater pressure correction : millero 95 
    6461   !                                    ! AGRIF doesn't like the DATA instruction 
    65    REAL(wp) :: devk11  = -25.5 
    66    REAL(wp) :: devk12  = -15.82 
    67    REAL(wp) :: devk13  = -29.48 
    68    REAL(wp) :: devk14  = -25.60 
    69    REAL(wp) :: devk15  = -48.76 
     62   REAL(wp) :: devk10  = -25.5 
     63   REAL(wp) :: devk11  = -15.82 
     64   REAL(wp) :: devk12  = -29.48 
     65   REAL(wp) :: devk13  = -20.02 
     66   REAL(wp) :: devk14  = -18.03 
     67   REAL(wp) :: devk15  = -9.78 
     68   REAL(wp) :: devk16  = -48.76 
     69   REAL(wp) :: devk17  = -14.51 
     70   REAL(wp) :: devk18  = -23.12 
     71   REAL(wp) :: devk19  = -26.57 
     72   REAL(wp) :: devk110  = -29.48 
    7073   ! 
    71    REAL(wp) :: devk21  = 0.1271 
    72    REAL(wp) :: devk22  = -0.0219 
    73    REAL(wp) :: devk23  = 0.1622 
    74    REAL(wp) :: devk24  = 0.2324 
    75    REAL(wp) :: devk25  = 0.5304 
     74   REAL(wp) :: devk20  = 0.1271 
     75   REAL(wp) :: devk21  = -0.0219 
     76   REAL(wp) :: devk22  = 0.1622 
     77   REAL(wp) :: devk23  = 0.1119 
     78   REAL(wp) :: devk24  = 0.0466 
     79   REAL(wp) :: devk25  = -0.0090 
     80   REAL(wp) :: devk26  = 0.5304 
     81   REAL(wp) :: devk27  = 0.1211 
     82   REAL(wp) :: devk28  = 0.1758 
     83   REAL(wp) :: devk29  = 0.2020 
     84   REAL(wp) :: devk210  = 0.1622 
    7685   ! 
     86   REAL(wp) :: devk30  = 0. 
    7787   REAL(wp) :: devk31  = 0. 
    78    REAL(wp) :: devk32  = 0. 
    79    REAL(wp) :: devk33  = 2.608E-3 
    80    REAL(wp) :: devk34  = -3.6246E-3 
    81    REAL(wp) :: devk35  = 0. 
     88   REAL(wp) :: devk32  = 2.608E-3 
     89   REAL(wp) :: devk33  = -1.409e-3 
     90   REAL(wp) :: devk34  = 0.316e-3 
     91   REAL(wp) :: devk35  = -0.942e-3 
     92   REAL(wp) :: devk36  = 0. 
     93   REAL(wp) :: devk37  = -0.321e-3 
     94   REAL(wp) :: devk38  = -2.647e-3 
     95   REAL(wp) :: devk39  = -3.042e-3 
     96   REAL(wp) :: devk310  = -2.6080e-3 
    8297   ! 
    83    REAL(wp) :: devk41  = -3.08E-3 
    84    REAL(wp) :: devk42  = 1.13E-3 
    85    REAL(wp) :: devk43  = -2.84E-3 
    86    REAL(wp) :: devk44  = -5.13E-3 
    87    REAL(wp) :: devk45  = -11.76E-3 
     98   REAL(wp) :: devk40  = -3.08E-3 
     99   REAL(wp) :: devk41  = 1.13E-3 
     100   REAL(wp) :: devk42  = -2.84E-3 
     101   REAL(wp) :: devk43  = -5.13E-3 
     102   REAL(wp) :: devk44  = -4.53e-3 
     103   REAL(wp) :: devk45  = -3.91e-3 
     104   REAL(wp) :: devk46  = -11.76e-3 
     105   REAL(wp) :: devk47  = -2.67e-3 
     106   REAL(wp) :: devk48  = -5.15e-3 
     107   REAL(wp) :: devk49  = -4.08e-3 
     108   REAL(wp) :: devk410  = -2.84e-3 
    88109   ! 
    89    REAL(wp) :: devk51  = 0.0877E-3 
    90    REAL(wp) :: devk52  = -0.1475E-3      
    91    REAL(wp) :: devk53  = 0. 
    92    REAL(wp) :: devk54  = 0.0794E-3       
    93    REAL(wp) :: devk55  = 0.3692E-3       
     110   REAL(wp) :: devk50  = 0.0877E-3 
     111   REAL(wp) :: devk51  = -0.1475E-3      
     112   REAL(wp) :: devk52  = 0. 
     113   REAL(wp) :: devk53  = 0.0794E-3       
     114   REAL(wp) :: devk54  = 0.09e-3 
     115   REAL(wp) :: devk55  = 0.054e-3 
     116   REAL(wp) :: devk56  = 0.3692E-3 
     117   REAL(wp) :: devk57  = 0.0427e-3 
     118   REAL(wp) :: devk58  = 0.09e-3 
     119   REAL(wp) :: devk59  = 0.0714e-3 
     120   REAL(wp) :: devk510  = 0.0 
     121   ! 
     122   ! General parameters 
     123   REAL(wp), PARAMETER :: pp_rdel_ah_target = 1.E-4_wp 
     124   REAL(wp), PARAMETER :: pp_ln10 = 2.302585092994045684018_wp 
     125 
     126   ! Maximum number of iterations for each method 
     127   INTEGER, PARAMETER :: jp_maxniter_atgen    = 20 
     128 
     129   ! Bookkeeping variables for each method 
     130   ! - SOLVE_AT_GENERAL 
     131   INTEGER :: niter_atgen    = jp_maxniter_atgen 
    94132 
    95133   !!---------------------------------------------------------------------- 
     
    109147      !!--------------------------------------------------------------------- 
    110148      INTEGER  ::   ji, jj, jk 
    111       REAL(wp) ::   ztkel, zt   , zt2  , zsal  , zsal2 , zbuf1 , zbuf2 
     149      REAL(wp) ::   ztkel, ztkel1, zt , zsal  , zsal2 , zbuf1 , zbuf2 
    112150      REAL(wp) ::   ztgg , ztgg2, ztgg3 , ztgg4 , ztgg5 
    113151      REAL(wp) ::   zpres, ztc  , zcl   , zcpexp, zoxy  , zcpexp2 
    114152      REAL(wp) ::   zsqrt, ztr  , zlogt , zcek1, zc1, zplat 
    115       REAL(wp) ::   zis  , zis2 , zsal15, zisqrt, za1  , za2 
     153      REAL(wp) ::   zis  , zis2 , zsal15, zisqrt, za1, za2 
    116154      REAL(wp) ::   zckb , zck1 , zck2  , zckw  , zak1 , zak2  , zakb , zaksp0, zakw 
     155      REAL(wp) ::   zck1p, zck2p, zck3p, zcksi, zak1p, zak2p, zak3p, zaksi 
    117156      REAL(wp) ::   zst  , zft  , zcks  , zckf  , zaksp1 
     157      REAL(wp) ::   total2free, free2SWS, total2SWS, SWS2total 
     158 
    118159      !!--------------------------------------------------------------------- 
    119160      ! 
    120161      IF( nn_timing == 1 )  CALL timing_start('p4z_che') 
     162      ! 
     163      ! Computation of chemical constants require practical salinity 
     164      ! Thus, when TEOS08 is used, absolute salinity is converted to  
     165      ! practical salinity 
     166      ! ------------------------------------------------------------- 
     167      IF (neos == -1) THEN 
     168         salinprac(:,:,:) = tsn(:,:,:,jp_sal) * 35.0 / 35.16504 
     169      ELSE 
     170         salinprac(:,:,:) = tsn(:,:,:,jp_sal) 
     171      ENDIF 
     172 
    121173      ! 
    122174      ! Computations of chemical constants require in situ temperature 
     
    129181            DO ji = 1, jpi 
    130182               zpres = gdept_n(ji,jj,jk) / 1000. 
    131                za1 = 0.04 * ( 1.0 + 0.185 * tsn(ji,jj,jk,jp_tem) + 0.035 * (tsn(ji,jj,jk,jp_sal) - 35.0) ) 
     183               za1 = 0.04 * ( 1.0 + 0.185 * tsn(ji,jj,jk,jp_tem) + 0.035 * (salinprac(ji,jj,jk) - 35.0) ) 
    132184               za2 = 0.0075 * ( 1.0 - tsn(ji,jj,jk,jp_tem) / 30.0 ) 
    133185               tempis(ji,jj,jk) = tsn(ji,jj,jk,jp_tem) - za1 * zpres + za2 * zpres**2 
     
    138190      ! CHEMICAL CONSTANTS - SURFACE LAYER 
    139191      ! ---------------------------------- 
     192!CDIR NOVERRCHK 
    140193      DO jj = 1, jpj 
     194!CDIR NOVERRCHK 
    141195         DO ji = 1, jpi 
    142196            !                             ! SET ABSOLUTE TEMPERATURE 
    143197            ztkel = tempis(ji,jj,1) + 273.15 
    144198            zt    = ztkel * 0.01 
    145             zt2   = zt * zt 
    146             zsal  = tsn(ji,jj,1,jp_sal) + ( 1.- tmask(ji,jj,1) ) * 35. 
    147             zsal2 = zsal * zsal 
    148             zlogt = LOG( zt ) 
     199            zsal  = salinprac(ji,jj,1) + ( 1.- tmask(ji,jj,1) ) * 35. 
    149200            !                             ! LN(K0) OF SOLUBILITY OF CO2 (EQ. 12, WEISS, 1980) 
    150201            !                             !     AND FOR THE ATMOSPHERE FOR NON IDEAL GAS 
    151202            zcek1 = 9345.17/ztkel - 60.2409 + 23.3585 * LOG(zt) + zsal*(0.023517 - 0.00023656*ztkel    & 
    152203            &       + 0.0047036e-4*ztkel**2) 
    153             !                             ! SET SOLUBILITIES OF O2 AND CO2  
    154             chemc(ji,jj,1) = EXP( zcek1 ) * 1.e-6 * rhop(ji,jj,1) / 1000. ! mol/(kg uatm) 
     204            chemc(ji,jj,1) = EXP( zcek1 ) * 1E-6 * rhop(ji,jj,1) / 1000. ! mol/(L atm) 
    155205            chemc(ji,jj,2) = -1636.75 + 12.0408*ztkel - 0.0327957*ztkel**2 + 0.0000316528*ztkel**3 
    156206            chemc(ji,jj,3) = 57.7 - 0.118*ztkel 
     
    161211      ! OXYGEN SOLUBILITY - DEEP OCEAN 
    162212      ! ------------------------------- 
     213!CDIR NOVERRCHK 
    163214      DO jk = 1, jpk 
     215!CDIR NOVERRCHK 
    164216         DO jj = 1, jpj 
     217!CDIR NOVERRCHK 
    165218            DO ji = 1, jpi 
    166219              ztkel = tempis(ji,jj,jk) + 273.15 
    167               zsal  = tsn(ji,jj,jk,jp_sal) + ( 1.- tmask(ji,jj,jk) ) * 35. 
     220              zsal  = salinprac(ji,jj,jk) + ( 1.- tmask(ji,jj,jk) ) * 35. 
    168221              zsal2 = zsal * zsal 
    169222              ztgg  = LOG( ( 298.15 - tempis(ji,jj,jk) ) / ztkel )  ! Set the GORDON & GARCIA scaled temperature 
     
    172225              ztgg4 = ztgg3 * ztgg 
    173226              ztgg5 = ztgg4 * ztgg 
    174               zoxy  = ox0 + ox1 * ztgg + ox2 * ztgg2 + ox3 * ztgg3 + ox4 * ztgg4 + ox5 * ztgg5   & 
    175                      + zsal * ( ox6 + ox7 * ztgg + ox8 * ztgg2 + ox9 * ztgg3 ) +  ox10 * zsal2 
     227 
     228              zoxy  = 2.00856 + 3.22400 * ztgg + 3.99063 * ztgg2 + 4.80299 * ztgg3    & 
     229              &       + 9.78188e-1 * ztgg4 + 1.71069 * ztgg5 + zsal * ( -6.24097e-3   & 
     230              &       - 6.93498e-3 * ztgg - 6.90358e-3 * ztgg2 - 4.29155e-3 * ztgg3 )   & 
     231              &       - 3.11680e-7 * zsal2 
    176232              chemo2(ji,jj,jk) = ( EXP( zoxy ) * o2atm ) * oxyco * atcox     ! mol/(L atm) 
    177233            END DO 
     
    183239      ! CHEMICAL CONSTANTS - DEEP OCEAN 
    184240      ! ------------------------------- 
     241!CDIR NOVERRCHK 
    185242      DO jk = 1, jpk 
     243!CDIR NOVERRCHK 
    186244         DO jj = 1, jpj 
     245!CDIR NOVERRCHK 
    187246            DO ji = 1, jpi 
    188247 
     
    195254               ! SET ABSOLUTE TEMPERATURE 
    196255               ztkel   = tempis(ji,jj,jk) + 273.15 
    197                zsal    = tsn(ji,jj,jk,jp_sal) + ( 1.-tmask(ji,jj,jk) ) * 35. 
     256               zsal    = salinprac(ji,jj,jk) + ( 1.-tmask(ji,jj,jk) ) * 35. 
    198257               zsqrt  = SQRT( zsal ) 
    199258               zsal15  = zsqrt * zsal 
     
    206265 
    207266               ! CHLORINITY (WOOSTER ET AL., 1969) 
    208                zcl     = zsal * salchl 
     267               zcl     = zsal / 1.80655 
    209268 
    210269               ! TOTAL SULFATE CONCENTR. [MOLES/kg soln] 
    211                zst     = st1 * zcl * st2 
     270               zst     = 0.14 * zcl /96.062 
    212271 
    213272               ! TOTAL FLUORIDE CONCENTR. [MOLES/kg soln] 
    214                zft     = ft1 * zcl * ft2 
     273               zft     = 0.000067 * zcl /18.9984 
    215274 
    216275               ! DISSOCIATION CONSTANT FOR SULFATES on free H scale (Dickson 1990) 
     
    220279               &         - 2698. * ztr * zis**1.5 + 1776.* ztr * zis2         & 
    221280               &         + LOG(1.0 - 0.001005 * zsal)) 
    222                ! 
    223                aphscale(ji,jj,jk) = ( 1. + zst / zcks ) 
    224281 
    225282               ! DISSOCIATION CONSTANT FOR FLUORIDES on free H scale (Dickson and Riley 79) 
     
    235292               &      * zlogt + 0.053105*zsqrt*ztkel 
    236293 
    237  
    238294               ! DISSOCIATION COEFFICIENT FOR CARBONATE ACCORDING TO  
    239295               ! MEHRBACH (1973) REFIT BY MILLERO (1995), seawater scale 
     
    243299                  - 0.01781*zsal + 0.0001122*zsal*zsal) 
    244300 
    245                ! PKW (H2O) (DICKSON AND RILEY, 1979) 
    246                zckw = -13847.26*ztr + 148.9652 - 23.6521 * zlogt    &  
    247                &     + (118.67*ztr - 5.977 + 1.0495 * zlogt)        & 
    248                &     * zsqrt - 0.01615 * zsal 
     301               ! PKW (H2O) (MILLERO, 1995) from composite data 
     302               zckw    = -13847.26 * ztr + 148.9652 - 23.6521 * zlogt + ( 118.67 * ztr    & 
     303                         - 5.977 + 1.0495 * zlogt ) * zsqrt - 0.01615 * zsal 
     304 
     305               ! CONSTANTS FOR PHOSPHATE (MILLERO, 1995) 
     306              zck1p    = -4576.752*ztr + 115.540 - 18.453*zlogt   & 
     307              &          + (-106.736*ztr + 0.69171) * zsqrt       & 
     308              &          + (-0.65643*ztr - 0.01844) * zsal 
     309 
     310              zck2p    = -8814.715*ztr + 172.1033 - 27.927*zlogt  & 
     311              &          + (-160.340*ztr + 1.3566)*zsqrt          & 
     312              &          + (0.37335*ztr - 0.05778)*zsal 
     313 
     314              zck3p    = -3070.75*ztr - 18.126                    & 
     315              &          + (17.27039*ztr + 2.81197) * zsqrt       & 
     316              &          + (-44.99486*ztr - 0.09984) * zsal  
     317 
     318              ! CONSTANT FOR SILICATE, MILLERO (1995) 
     319              zcksi    = -8904.2*ztr  + 117.400 - 19.334*zlogt   & 
     320              &          + (-458.79*ztr + 3.5913) * zisqrt       & 
     321              &          + (188.74*ztr - 1.5998) * zis           & 
     322              &          + (-12.1652*ztr + 0.07871) * zis2       & 
     323              &          + LOG(1.0 - 0.001005*zsal) 
    249324 
    250325               ! APPARENT SOLUBILITY PRODUCT K'SP OF CALCITE IN SEAWATER 
     
    254329                  &      - 0.07711*zsal + 0.0041249*zsal15 
    255330 
     331               ! CONVERT FROM DIFFERENT PH SCALES 
     332               total2free  = 1.0/(1.0 + zst/zcks) 
     333               free2SWS    = 1. + zst/zcks + zft/(zckf*total2free) 
     334               total2SWS   = total2free * free2SWS 
     335               SWS2total   = 1.0 / total2SWS 
     336 
    256337               ! K1, K2 OF CARBONIC ACID, KB OF BORIC ACID, KW (H2O) (LIT.?) 
    257                zak1    = 10**(zck1) 
    258                zak2    = 10**(zck2) 
    259                zakb    = EXP( zckb  ) 
     338               zak1    = 10**(zck1) * total2SWS 
     339               zak2    = 10**(zck2) * total2SWS 
     340               zakb    = EXP( zckb ) * total2SWS 
    260341               zakw    = EXP( zckw ) 
    261342               zaksp1  = 10**(zaksp0) 
     343               zak1p   = exp( zck1p ) 
     344               zak2p   = exp( zck2p ) 
     345               zak3p   = exp( zck3p ) 
     346               zaksi   = exp( zcksi ) 
     347               zckf    = zckf * total2SWS 
    262348 
    263349               ! FORMULA FOR CPEXP AFTER EDMOND & GIESKES (1970) 
     
    271357               !        FORMULA ON P. 1286 IS RIGHT AND CONSISTENT WITH THE 
    272358               !        SIGN IN PARTIAL MOLAR VOLUME CHANGE AS SHOWN ON P. 1285)) 
    273                zcpexp  = zpres /(rgas*ztkel) 
    274                zcpexp2 = zpres * zpres/(rgas*ztkel) 
     359               zcpexp  = zpres / (rgas*ztkel) 
     360               zcpexp2 = zpres * zcpexp 
    275361 
    276362               ! KB OF BORIC ACID, K1,K2 OF CARBONIC ACID PRESSURE 
     
    278364               !        (CF. BROECKER ET AL., 1982) 
    279365 
    280                zbuf1  = -     ( devk11 + devk21 * ztc + devk31 * ztc * ztc ) 
     366               zbuf1  = -     ( devk10 + devk20 * ztc + devk30 * ztc * ztc ) 
     367               zbuf2  = 0.5 * ( devk40 + devk50 * ztc ) 
     368               ak13(ji,jj,jk) = zak1 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     369 
     370               zbuf1  =     - ( devk11 + devk21 * ztc + devk31 * ztc * ztc ) 
    281371               zbuf2  = 0.5 * ( devk41 + devk51 * ztc ) 
    282                ak13(ji,jj,jk) = zak1 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     372               ak23(ji,jj,jk) = zak2 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
    283373 
    284374               zbuf1  =     - ( devk12 + devk22 * ztc + devk32 * ztc * ztc ) 
    285375               zbuf2  = 0.5 * ( devk42 + devk52 * ztc ) 
    286                ak23(ji,jj,jk) = zak2 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     376               akb3(ji,jj,jk) = zakb * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
    287377 
    288378               zbuf1  =     - ( devk13 + devk23 * ztc + devk33 * ztc * ztc ) 
    289379               zbuf2  = 0.5 * ( devk43 + devk53 * ztc ) 
    290                akb3(ji,jj,jk) = zakb * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     380               akw3(ji,jj,jk) = zakw * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
    291381 
    292382               zbuf1  =     - ( devk14 + devk24 * ztc + devk34 * ztc * ztc ) 
    293383               zbuf2  = 0.5 * ( devk44 + devk54 * ztc ) 
    294                akw3(ji,jj,jk) = zakw * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
    295  
     384               aks3(ji,jj,jk) = zcks * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     385 
     386               zbuf1  =     - ( devk15 + devk25 * ztc + devk35 * ztc * ztc ) 
     387               zbuf2  = 0.5 * ( devk45 + devk55 * ztc ) 
     388               akf3(ji,jj,jk) = zckf * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     389 
     390               zbuf1  =     - ( devk17 + devk27 * ztc + devk37 * ztc * ztc ) 
     391               zbuf2  = 0.5 * ( devk47 + devk57 * ztc ) 
     392               ak1p3(ji,jj,jk) = zak1p * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     393 
     394               zbuf1  =     - ( devk18 + devk28 * ztc + devk38 * ztc * ztc ) 
     395               zbuf2  = 0.5 * ( devk48 + devk58 * ztc ) 
     396               ak2p3(ji,jj,jk) = zak2p * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     397 
     398               zbuf1  =     - ( devk19 + devk29 * ztc + devk39 * ztc * ztc ) 
     399               zbuf2  = 0.5 * ( devk49 + devk59 * ztc ) 
     400               ak3p3(ji,jj,jk) = zak3p * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     401 
     402               zbuf1  =     - ( devk110 + devk210 * ztc + devk310 * ztc * ztc ) 
     403               zbuf2  = 0.5 * ( devk410 + devk510 * ztc ) 
     404               aksi3(ji,jj,jk) = zaksi * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     405 
     406               ! CONVERT FROM DIFFERENT PH SCALES 
     407               total2free  = 1.0/(1.0 + zst/aks3(ji,jj,jk)) 
     408               free2SWS    = 1. + zst/aks3(ji,jj,jk) + zft/akf3(ji,jj,jk) 
     409               total2SWS   = total2free * free2SWS 
     410               SWS2total   = 1.0 / total2SWS 
     411 
     412               ! Convert to total scale 
     413               ak13(ji,jj,jk)  = ak13(ji,jj,jk)  * SWS2total 
     414               ak23(ji,jj,jk)  = ak23(ji,jj,jk)  * SWS2total 
     415               akb3(ji,jj,jk)  = akb3(ji,jj,jk)  * SWS2total 
     416               akw3(ji,jj,jk)  = akw3(ji,jj,jk)  * SWS2total 
     417               ak1p3(ji,jj,jk) = ak1p3(ji,jj,jk) * SWS2total 
     418               ak2p3(ji,jj,jk) = ak2p3(ji,jj,jk) * SWS2total 
     419               ak3p3(ji,jj,jk) = ak3p3(ji,jj,jk) * SWS2total 
     420               aksi3(ji,jj,jk) = aksi3(ji,jj,jk) * SWS2total 
     421               akf3(ji,jj,jk)  = akf3(ji,jj,jk)  / total2free 
    296422 
    297423               ! APPARENT SOLUBILITY PRODUCT K'SP OF CALCITE  
    298424               !        AS FUNCTION OF PRESSURE FOLLOWING MILLERO 
    299425               !        (P. 1285) AND BERNER (1976) 
    300                zbuf1  =     - ( devk15 + devk25 * ztc + devk35 * ztc * ztc ) 
    301                zbuf2  = 0.5 * ( devk45 + devk55 * ztc ) 
     426               zbuf1  =     - ( devk16 + devk26 * ztc + devk36 * ztc * ztc ) 
     427               zbuf2  = 0.5 * ( devk46 + devk56 * ztc ) 
    302428               aksp(ji,jj,jk) = zaksp1 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
    303429 
    304                ! TOTAL BORATE CONCENTR. [MOLES/L] 
    305                borat(ji,jj,jk) = bor1 * zcl * bor2 
     430               ! TOTAL F, S, and BORATE CONCENTR. [MOLES/L] 
     431               borat(ji,jj,jk) = 0.0002414 * zcl / 10.811 
     432               sulfat(ji,jj,jk) = zst 
     433               fluorid(ji,jj,jk) = zft  
    306434 
    307435               ! Iron and SIO3 saturation concentration from ... 
    308436               sio3eq(ji,jj,jk) = EXP(  LOG( 10.) * ( 6.44 - 968. / ztkel )  ) * 1.e-6 
    309                fekeq (ji,jj,jk) = 10**( 17.27 - 1565.7 / ( 273.15 + ztc ) ) 
    310  
     437               fekeq (ji,jj,jk) = 10**( 17.27 - 1565.7 / ztkel ) 
     438 
     439               ! Liu and Millero (1999) only valid 5 - 50 degC 
     440               ztkel1 = MAX( 5. , tempis(ji,jj,jk) ) + 273.16 
     441               fesol(ji,jj,jk,1) = 10**((-13.486) - (0.1856* (zis**0.5)) + (0.3073*zis) + (5254.0/ztkel1)) 
     442               fesol(ji,jj,jk,2) = 10**(2.517 - (0.885*(zis**0.5)) + (0.2139 * zis) - (1320.0/ztkel1) ) 
     443               fesol(ji,jj,jk,3) = 10**(0.4511 - (0.3305*(zis**0.5)) - (1996.0/ztkel1) ) 
     444               fesol(ji,jj,jk,4) = 10**(-0.2965 - (0.7881*(zis**0.5)) - (4086.0/ztkel1) ) 
     445               fesol(ji,jj,jk,5) = 10**(4.4466 - (0.8505*(zis**0.5)) - (7980.0/ztkel1) ) 
    311446            END DO 
    312447         END DO 
     
    317452   END SUBROUTINE p4z_che 
    318453 
     454   SUBROUTINE ahini_for_at(p_hini) 
     455      !!--------------------------------------------------------------------- 
     456      !!                     ***  ROUTINE ahini_for_at  *** 
     457      !! 
     458      !! Subroutine returns the root for the 2nd order approximation of the 
     459      !! DIC -- B_T -- A_CB equation for [H+] (reformulated as a cubic  
     460      !! polynomial) around the local minimum, if it exists. 
     461      !! Returns * 1E-03_wp if p_alkcb <= 0 
     462      !!         * 1E-10_wp if p_alkcb >= 2*p_dictot + p_bortot 
     463      !!         * 1E-07_wp if 0 < p_alkcb < 2*p_dictot + p_bortot 
     464      !!                    and the 2nd order approximation does not have  
     465      !!                    a solution 
     466      !!--------------------------------------------------------------------- 
     467      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(OUT)  ::  p_hini 
     468      INTEGER  ::   ji, jj, jk 
     469      REAL(wp)  ::  zca1, zba1 
     470      REAL(wp)  ::  zd, zsqrtd, zhmin 
     471      REAL(wp)  ::  za2, za1, za0 
     472      REAL(wp)  ::  p_dictot, p_bortot, p_alkcb  
     473 
     474      IF( nn_timing == 1 )  CALL timing_start('ahini_for_at') 
     475      ! 
     476      DO jk = 1, jpk 
     477        DO jj = 1, jpj 
     478          DO ji = 1, jpi 
     479            p_alkcb  = trb(ji,jj,jk,jptal) * 1000. / (rhop(ji,jj,jk) + rtrn) 
     480            p_dictot = trb(ji,jj,jk,jpdic) * 1000. / (rhop(ji,jj,jk) + rtrn) 
     481            p_bortot = borat(ji,jj,jk) 
     482            IF (p_alkcb <= 0.) THEN 
     483                p_hini(ji,jj,jk) = 1.e-3 
     484            ELSEIF (p_alkcb >= (2.*p_dictot + p_bortot)) THEN 
     485                p_hini(ji,jj,jk) = 1.e-10_wp 
     486            ELSE 
     487                zca1 = p_dictot/( p_alkcb + rtrn ) 
     488                zba1 = p_bortot/ (p_alkcb + rtrn ) 
     489           ! Coefficients of the cubic polynomial 
     490                za2 = aKb3(ji,jj,jk)*(1. - zba1) + ak13(ji,jj,jk)*(1.-zca1) 
     491                za1 = ak13(ji,jj,jk)*akb3(ji,jj,jk)*(1. - zba1 - zca1)    & 
     492                &     + ak13(ji,jj,jk)*ak23(ji,jj,jk)*(1. - (zca1+zca1)) 
     493                za0 = ak13(ji,jj,jk)*ak23(ji,jj,jk)*akb3(ji,jj,jk)*(1. - zba1 - (zca1+zca1)) 
     494                                        ! Taylor expansion around the minimum 
     495                zd = za2*za2 - 3.*za1   ! Discriminant of the quadratic equation 
     496                                        ! for the minimum close to the root 
     497 
     498                IF(zd > 0.) THEN        ! If the discriminant is positive 
     499                  zsqrtd = SQRT(zd) 
     500                  IF(za2 < 0) THEN 
     501                    zhmin = (-za2 + zsqrtd)/3. 
     502                  ELSE 
     503                    zhmin = -za1/(za2 + zsqrtd) 
     504                  ENDIF 
     505                  p_hini(ji,jj,jk) = zhmin + SQRT(-(za0 + zhmin*(za1 + zhmin*(za2 + zhmin)))/zsqrtd) 
     506                ELSE 
     507                  p_hini(ji,jj,jk) = 1.e-7 
     508                ENDIF 
     509             ! 
     510             ENDIF 
     511          END DO 
     512        END DO 
     513      END DO 
     514      ! 
     515      IF( nn_timing == 1 )  CALL timing_stop('ahini_for_at') 
     516      ! 
     517   END SUBROUTINE ahini_for_at 
     518 
     519   !=============================================================================== 
     520   SUBROUTINE anw_infsup( p_alknw_inf, p_alknw_sup ) 
     521 
     522   ! Subroutine returns the lower and upper bounds of "non-water-selfionization" 
     523   ! contributions to total alkalinity (the infimum and the supremum), i.e 
     524   ! inf(TA - [OH-] + [H+]) and sup(TA - [OH-] + [H+]) 
     525 
     526   ! Argument variables 
     527   REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(OUT) :: p_alknw_inf 
     528   REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(OUT) :: p_alknw_sup 
     529 
     530   p_alknw_inf(:,:,:) =  -trb(:,:,:,jppo4) * 1000. / (rhop(:,:,:) + rtrn) - sulfat(:,:,:)  & 
     531   &              - fluorid(:,:,:) 
     532   p_alknw_sup(:,:,:) =   (2. * trb(:,:,:,jpdic) + 2. * trb(:,:,:,jppo4) + trb(:,:,:,jpsil) )    & 
     533   &               * 1000. / (rhop(:,:,:) + rtrn) + borat(:,:,:)  
     534 
     535   END SUBROUTINE anw_infsup 
     536 
     537 
     538   SUBROUTINE solve_at_general( p_hini, zhi ) 
     539 
     540   ! Universal pH solver that converges from any given initial value, 
     541   ! determines upper an lower bounds for the solution if required 
     542 
     543   ! Argument variables 
     544   !-------------------- 
     545   REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(IN)   :: p_hini 
     546   REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(OUT)  :: zhi 
     547 
     548   ! Local variables 
     549   !----------------- 
     550   INTEGER   ::  ji, jj, jk, jn 
     551   REAL(wp)  ::  zh_ini, zh, zh_prev, zh_lnfactor 
     552   REAL(wp)  ::  zdelta, zh_delta 
     553   REAL(wp)  ::  zeqn, zdeqndh, zalka 
     554   REAL(wp)  ::  aphscale 
     555   REAL(wp)  ::  znumer_dic, zdnumer_dic, zdenom_dic, zalk_dic, zdalk_dic 
     556   REAL(wp)  ::  znumer_bor, zdnumer_bor, zdenom_bor, zalk_bor, zdalk_bor 
     557   REAL(wp)  ::  znumer_po4, zdnumer_po4, zdenom_po4, zalk_po4, zdalk_po4 
     558   REAL(wp)  ::  znumer_sil, zdnumer_sil, zdenom_sil, zalk_sil, zdalk_sil 
     559   REAL(wp)  ::  znumer_so4, zdnumer_so4, zdenom_so4, zalk_so4, zdalk_so4 
     560   REAL(wp)  ::  znumer_flu, zdnumer_flu, zdenom_flu, zalk_flu, zdalk_flu 
     561   REAL(wp)  ::  zalk_wat, zdalk_wat 
     562   REAL(wp)  ::  zfact, p_alktot, zdic, zbot, zpt, zst, zft, zsit 
     563   LOGICAL   ::  l_exitnow 
     564   REAL(wp), PARAMETER :: pz_exp_threshold = 1.0 
     565   REAL(wp), POINTER, DIMENSION(:,:,:) :: zalknw_inf, zalknw_sup, rmask, zh_min, zh_max, zeqn_absmin 
     566 
     567   IF( nn_timing == 1 )  CALL timing_start('solve_at_general') 
     568      !  Allocate temporary workspace 
     569   CALL wrk_alloc( jpi, jpj, jpk, zalknw_inf, zalknw_sup, rmask ) 
     570   CALL wrk_alloc( jpi, jpj, jpk, zh_min, zh_max, zeqn_absmin ) 
     571 
     572   CALL anw_infsup( zalknw_inf, zalknw_sup ) 
     573 
     574   rmask(:,:,:) = tmask(:,:,:) 
     575   zhi(:,:,:)   = 0. 
     576 
     577   ! TOTAL H+ scale: conversion factor for Htot = aphscale * Hfree 
     578   DO jk = 1, jpk 
     579      DO jj = 1, jpj 
     580         DO ji = 1, jpi 
     581            IF (rmask(ji,jj,jk) == 1.) THEN 
     582               p_alktot = trb(ji,jj,jk,jptal) * 1000. / (rhop(ji,jj,jk) + rtrn) 
     583               aphscale = 1. + sulfat(ji,jj,jk)/aks3(ji,jj,jk) 
     584               zh_ini = p_hini(ji,jj,jk) 
     585 
     586               zdelta = (p_alktot-zalknw_inf(ji,jj,jk))**2 + 4.*akw3(ji,jj,jk)/aphscale 
     587 
     588               IF(p_alktot >= zalknw_inf(ji,jj,jk)) THEN 
     589                 zh_min(ji,jj,jk) = 2.*akw3(ji,jj,jk) /( p_alktot-zalknw_inf(ji,jj,jk) + SQRT(zdelta) ) 
     590               ELSE 
     591                 zh_min(ji,jj,jk) = aphscale*(-(p_alktot-zalknw_inf(ji,jj,jk)) + SQRT(zdelta) ) / 2. 
     592               ENDIF 
     593 
     594               zdelta = (p_alktot-zalknw_sup(ji,jj,jk))**2 + 4.*akw3(ji,jj,jk)/aphscale 
     595 
     596               IF(p_alktot <= zalknw_sup(ji,jj,jk)) THEN 
     597                 zh_max(ji,jj,jk) = aphscale*(-(p_alktot-zalknw_sup(ji,jj,jk)) + SQRT(zdelta) ) / 2. 
     598               ELSE 
     599                 zh_max(ji,jj,jk) = 2.*akw3(ji,jj,jk) /( p_alktot-zalknw_sup(ji,jj,jk) + SQRT(zdelta) ) 
     600               ENDIF 
     601 
     602               zhi(ji,jj,jk) = MAX(MIN(zh_max(ji,jj,jk), zh_ini), zh_min(ji,jj,jk)) 
     603            ENDIF 
     604         END DO 
     605      END DO 
     606   END DO 
     607 
     608   zeqn_absmin(:,:,:) = HUGE(1._wp) 
     609 
     610   DO jn = 1, jp_maxniter_atgen  
     611   DO jk = 1, jpk 
     612      DO jj = 1, jpj 
     613         DO ji = 1, jpi 
     614            IF (rmask(ji,jj,jk) == 1.) THEN 
     615               zfact = rhop(ji,jj,jk) / 1000. + rtrn 
     616               p_alktot = trb(ji,jj,jk,jptal) / zfact 
     617               zdic  = trb(ji,jj,jk,jpdic) / zfact 
     618               zbot  = borat(ji,jj,jk) 
     619               zpt = trb(ji,jj,jk,jppo4) / zfact * po4r 
     620               zsit = trb(ji,jj,jk,jpsil) / zfact 
     621               zst = sulfat (ji,jj,jk) 
     622               zft = fluorid(ji,jj,jk) 
     623               aphscale = 1. + sulfat(ji,jj,jk)/aks3(ji,jj,jk) 
     624               zh = zhi(ji,jj,jk) 
     625               zh_prev = zh 
     626 
     627               ! H2CO3 - HCO3 - CO3 : n=2, m=0 
     628               znumer_dic = 2.*ak13(ji,jj,jk)*ak23(ji,jj,jk) + zh*ak13(ji,jj,jk) 
     629               zdenom_dic = ak13(ji,jj,jk)*ak23(ji,jj,jk) + zh*(ak13(ji,jj,jk) + zh) 
     630               zalk_dic   = zdic * (znumer_dic/zdenom_dic) 
     631               zdnumer_dic = ak13(ji,jj,jk)*ak13(ji,jj,jk)*ak23(ji,jj,jk) + zh     & 
     632                             *(4.*ak13(ji,jj,jk)*ak23(ji,jj,jk) + zh*ak13(ji,jj,jk)) 
     633               zdalk_dic   = -zdic*(zdnumer_dic/zdenom_dic**2) 
     634 
     635 
     636               ! B(OH)3 - B(OH)4 : n=1, m=0 
     637               znumer_bor = akb3(ji,jj,jk) 
     638               zdenom_bor = akb3(ji,jj,jk) + zh 
     639               zalk_bor   = zbot * (znumer_bor/zdenom_bor) 
     640               zdnumer_bor = akb3(ji,jj,jk) 
     641               zdalk_bor   = -zbot*(zdnumer_bor/zdenom_bor**2) 
     642 
     643 
     644               ! H3PO4 - H2PO4 - HPO4 - PO4 : n=3, m=1 
     645               znumer_po4 = 3.*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)*ak3p3(ji,jj,jk)  & 
     646               &            + zh*(2.*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk) + zh* ak1p3(ji,jj,jk)) 
     647               zdenom_po4 = ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)*ak3p3(ji,jj,jk)     & 
     648               &            + zh*( ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk) + zh*(ak1p3(ji,jj,jk) + zh)) 
     649               zalk_po4   = zpt * (znumer_po4/zdenom_po4 - 1.) ! Zero level of H3PO4 = 1 
     650               zdnumer_po4 = ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)*ak3p3(ji,jj,jk)  & 
     651               &             + zh*(4.*ak1p3(ji,jj,jk)*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)*ak3p3(ji,jj,jk)         & 
     652               &             + zh*(9.*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)*ak3p3(ji,jj,jk)                         & 
     653               &             + ak1p3(ji,jj,jk)*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)                                & 
     654               &             + zh*(4.*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk) + zh * ak1p3(ji,jj,jk) ) ) ) 
     655               zdalk_po4   = -zpt * (zdnumer_po4/zdenom_po4**2) 
     656 
     657               ! H4SiO4 - H3SiO4 : n=1, m=0 
     658               znumer_sil = aksi3(ji,jj,jk) 
     659               zdenom_sil = aksi3(ji,jj,jk) + zh 
     660               zalk_sil   = zsit * (znumer_sil/zdenom_sil) 
     661               zdnumer_sil = aksi3(ji,jj,jk) 
     662               zdalk_sil   = -zsit * (zdnumer_sil/zdenom_sil**2) 
     663 
     664               ! HSO4 - SO4 : n=1, m=1 
     665               aphscale = 1.0 + zst/aks3(ji,jj,jk) 
     666               znumer_so4 = aks3(ji,jj,jk) * aphscale 
     667               zdenom_so4 = aks3(ji,jj,jk) * aphscale + zh 
     668               zalk_so4   = zst * (znumer_so4/zdenom_so4 - 1.) 
     669               zdnumer_so4 = aks3(ji,jj,jk) 
     670               zdalk_so4   = -zst * (zdnumer_so4/zdenom_so4**2) 
     671 
     672               ! HF - F : n=1, m=1 
     673               znumer_flu =  akf3(ji,jj,jk) 
     674               zdenom_flu =  akf3(ji,jj,jk) + zh 
     675               zalk_flu   =  zft * (znumer_flu/zdenom_flu - 1.) 
     676               zdnumer_flu = akf3(ji,jj,jk) 
     677               zdalk_flu   = -zft * (zdnumer_flu/zdenom_flu**2) 
     678 
     679               ! H2O - OH 
     680               aphscale = 1.0 + zst/aks3(ji,jj,jk) 
     681               zalk_wat   = akw3(ji,jj,jk)/zh - zh/aphscale 
     682               zdalk_wat  = -akw3(ji,jj,jk)/zh**2 - 1./aphscale 
     683 
     684               ! CALCULATE [ALK]([CO3--], [HCO3-]) 
     685               zeqn = zalk_dic + zalk_bor + zalk_po4 + zalk_sil   & 
     686               &      + zalk_so4 + zalk_flu                       & 
     687               &      + zalk_wat - p_alktot 
     688 
     689               zalka = p_alktot - (zalk_bor + zalk_po4 + zalk_sil   & 
     690               &       + zalk_so4 + zalk_flu + zalk_wat) 
     691 
     692               zdeqndh = zdalk_dic + zdalk_bor + zdalk_po4 + zdalk_sil & 
     693               &         + zdalk_so4 + zdalk_flu + zdalk_wat 
     694 
     695               ! Adapt bracketing interval 
     696               IF(zeqn > 0._wp) THEN 
     697                 zh_min(ji,jj,jk) = zh_prev 
     698               ELSEIF(zeqn < 0._wp) THEN 
     699                 zh_max(ji,jj,jk) = zh_prev 
     700               ENDIF 
     701 
     702               IF(ABS(zeqn) >= 0.5_wp*zeqn_absmin(ji,jj,jk)) THEN 
     703               ! if the function evaluation at the current point is 
     704               ! not decreasing faster than with a bisection step (at least linearly) 
     705               ! in absolute value take one bisection step on [ph_min, ph_max] 
     706               ! ph_new = (ph_min + ph_max)/2d0 
     707               ! 
     708               ! In terms of [H]_new: 
     709               ! [H]_new = 10**(-ph_new) 
     710               !         = 10**(-(ph_min + ph_max)/2d0) 
     711               !         = SQRT(10**(-(ph_min + phmax))) 
     712               !         = SQRT(zh_max * zh_min) 
     713                  zh = SQRT(zh_max(ji,jj,jk) * zh_min(ji,jj,jk)) 
     714                  zh_lnfactor = (zh - zh_prev)/zh_prev ! Required to test convergence below 
     715               ELSE 
     716               ! dzeqn/dpH = dzeqn/d[H] * d[H]/dpH 
     717               !           = -zdeqndh * LOG(10) * [H] 
     718               ! \Delta pH = -zeqn/(zdeqndh*d[H]/dpH) = zeqn/(zdeqndh*[H]*LOG(10)) 
     719               ! 
     720               ! pH_new = pH_old + \deltapH 
     721               ! 
     722               ! [H]_new = 10**(-pH_new) 
     723               !         = 10**(-pH_old - \Delta pH) 
     724               !         = [H]_old * 10**(-zeqn/(zdeqndh*[H]_old*LOG(10))) 
     725               !         = [H]_old * EXP(-LOG(10)*zeqn/(zdeqndh*[H]_old*LOG(10))) 
     726               !         = [H]_old * EXP(-zeqn/(zdeqndh*[H]_old)) 
     727 
     728                  zh_lnfactor = -zeqn/(zdeqndh*zh_prev) 
     729 
     730                  IF(ABS(zh_lnfactor) > pz_exp_threshold) THEN 
     731                     zh          = zh_prev*EXP(zh_lnfactor) 
     732                  ELSE 
     733                     zh_delta    = zh_lnfactor*zh_prev 
     734                     zh          = zh_prev + zh_delta 
     735                  ENDIF 
     736 
     737                  IF( zh < zh_min(ji,jj,jk) ) THEN 
     738                     ! if [H]_new < [H]_min 
     739                     ! i.e., if ph_new > ph_max then 
     740                     ! take one bisection step on [ph_prev, ph_max] 
     741                     ! ph_new = (ph_prev + ph_max)/2d0 
     742                     ! In terms of [H]_new: 
     743                     ! [H]_new = 10**(-ph_new) 
     744                     !         = 10**(-(ph_prev + ph_max)/2d0) 
     745                     !         = SQRT(10**(-(ph_prev + phmax))) 
     746                     !         = SQRT([H]_old*10**(-ph_max)) 
     747                     !         = SQRT([H]_old * zh_min) 
     748                     zh                = SQRT(zh_prev * zh_min(ji,jj,jk)) 
     749                     zh_lnfactor       = (zh - zh_prev)/zh_prev ! Required to test convergence below 
     750                  ENDIF 
     751 
     752                  IF( zh > zh_max(ji,jj,jk) ) THEN 
     753                     ! if [H]_new > [H]_max 
     754                     ! i.e., if ph_new < ph_min, then 
     755                     ! take one bisection step on [ph_min, ph_prev] 
     756                     ! ph_new = (ph_prev + ph_min)/2d0 
     757                     ! In terms of [H]_new: 
     758                     ! [H]_new = 10**(-ph_new) 
     759                     !         = 10**(-(ph_prev + ph_min)/2d0) 
     760                     !         = SQRT(10**(-(ph_prev + ph_min))) 
     761                     !         = SQRT([H]_old*10**(-ph_min)) 
     762                     !         = SQRT([H]_old * zhmax) 
     763                     zh                = SQRT(zh_prev * zh_max(ji,jj,jk)) 
     764                     zh_lnfactor       = (zh - zh_prev)/zh_prev ! Required to test convergence below 
     765                  ENDIF 
     766               ENDIF 
     767 
     768               zeqn_absmin(ji,jj,jk) = MIN( ABS(zeqn), zeqn_absmin(ji,jj,jk)) 
     769 
     770               ! Stop iterations once |\delta{[H]}/[H]| < rdel 
     771               ! <=> |(zh - zh_prev)/zh_prev| = |EXP(-zeqn/(zdeqndh*zh_prev)) -1| < rdel 
     772               ! |EXP(-zeqn/(zdeqndh*zh_prev)) -1| ~ |zeqn/(zdeqndh*zh_prev)| 
     773 
     774               ! Alternatively: 
     775               ! |\Delta pH| = |zeqn/(zdeqndh*zh_prev*LOG(10))| 
     776               !             ~ 1/LOG(10) * |\Delta [H]|/[H] 
     777               !             < 1/LOG(10) * rdel 
     778 
     779               ! Hence |zeqn/(zdeqndh*zh)| < rdel 
     780 
     781               ! rdel <-- pp_rdel_ah_target 
     782               l_exitnow = (ABS(zh_lnfactor) < pp_rdel_ah_target) 
     783 
     784               IF(l_exitnow) THEN  
     785                  rmask(ji,jj,jk) = 0. 
     786               ENDIF 
     787 
     788               zhi(ji,jj,jk) =  zh 
     789 
     790               IF(jn >= jp_maxniter_atgen) THEN 
     791                  zhi(ji,jj,jk) = -1._wp 
     792               ENDIF 
     793 
     794            ENDIF 
     795         END DO 
     796      END DO 
     797   END DO 
     798   END DO 
     799   ! 
     800   CALL wrk_dealloc( jpi, jpj, jpk, zalknw_inf, zalknw_sup, rmask ) 
     801   CALL wrk_dealloc( jpi, jpj, jpk, zh_min, zh_max, zeqn_absmin ) 
     802 
     803 
     804   IF( nn_timing == 1 )  CALL timing_stop('solve_at_general') 
     805 
     806 
     807   END SUBROUTINE solve_at_general 
    319808 
    320809   INTEGER FUNCTION p4z_che_alloc() 
     
    322811      !!                     ***  ROUTINE p4z_che_alloc  *** 
    323812      !!---------------------------------------------------------------------- 
    324       ALLOCATE( sio3eq(jpi,jpj,jpk), fekeq(jpi,jpj,jpk), chemc(jpi,jpj,3), chemo2(jpi,jpj,jpk),   & 
    325       &         tempis(jpi,jpj,jpk), STAT=p4z_che_alloc ) 
     813      INTEGER ::   ierr(3)        ! Local variables 
     814      !!---------------------------------------------------------------------- 
     815 
     816      ierr(:) = 0 
     817 
     818      ALLOCATE( sio3eq(jpi,jpj,jpk), fekeq(jpi,jpj,jpk), chemc(jpi,jpj,3), chemo2(jpi,jpj,jpk), STAT=ierr(1) ) 
     819 
     820      ALLOCATE( akb3(jpi,jpj,jpk)     , tempis(jpi, jpj, jpk),       & 
     821         &      akw3(jpi,jpj,jpk)     , borat (jpi,jpj,jpk)  ,       & 
     822         &      aks3(jpi,jpj,jpk)     , akf3(jpi,jpj,jpk)    ,       & 
     823         &      ak1p3(jpi,jpj,jpk)    , ak2p3(jpi,jpj,jpk)   ,       & 
     824         &      ak3p3(jpi,jpj,jpk)    , aksi3(jpi,jpj,jpk)   ,       & 
     825         &      fluorid(jpi,jpj,jpk)  , sulfat(jpi,jpj,jpk)  ,       & 
     826         &      salinprac(jpi,jpj,jpk),                 STAT=ierr(2) ) 
     827 
     828      ALLOCATE( fesol(jpi,jpj,jpk,5), STAT=ierr(3) ) 
     829 
     830      !* Variable for chemistry of the CO2 cycle 
     831      p4z_che_alloc = MAXVAL( ierr ) 
    326832      ! 
    327833      IF( p4z_che_alloc /= 0 )   CALL ctl_warn('p4z_che_alloc : failed to allocate arrays.') 
     
    330836 
    331837   !!====================================================================== 
    332 END MODULE p4zche 
     838END MODULE  p4zche 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90

    r7068 r7162  
    55   !!====================================================================== 
    66   !! History :   3.5  !  2012-07 (O. Aumont, A. Tagliabue, C. Ethe) Original code 
     7   !!             3.6  !  2015-05  (O. Aumont) PISCES quota 
    78   !!---------------------------------------------------------------------- 
    89   !!   p4z_fechem       :  Compute remineralization/scavenging of iron 
     
    1314   USE trc             !  passive tracers common variables  
    1415   USE sms_pisces      !  PISCES Source Minus Sink variables 
    15    USE p4zopt          !  optical model 
    1616   USE p4zche          !  chemical model 
    1717   USE p4zsbc          !  Boundary conditions from sediments 
     
    2525   PUBLIC   p4z_fechem_init ! called in trcsms_pisces.F90 
    2626 
    27    LOGICAL          ::   ln_fechem    !: boolean for complex iron chemistry following Tagliabue and voelker 
    28    LOGICAL          ::   ln_ligvar    !: boolean for variable ligand concentration following Tagliabue and voelker 
    29    REAL(wp), PUBLIC ::   xlam1        !: scavenging rate of Iron  
    30    REAL(wp), PUBLIC ::   xlamdust     !: scavenging rate of Iron by dust  
    31    REAL(wp), PUBLIC ::   ligand       !: ligand concentration in the ocean  
    32  
    33 !!gm Not DOCTOR norm !!! 
     27   !! * Shared module variables 
     28   LOGICAL          ::  ln_fechem    !: boolean for complex iron chemistry following Tagliabue and voelker 
     29   LOGICAL          ::  ln_ligvar    !: boolean for variable ligand concentration following Tagliabue and voelker 
     30   LOGICAL          ::  ln_fecolloid !: boolean for variable colloidal fraction 
     31   REAL(wp), PUBLIC ::  xlam1        !: scavenging rate of Iron  
     32   REAL(wp), PUBLIC ::  xlamdust     !: scavenging rate of Iron by dust  
     33   REAL(wp), PUBLIC ::  ligand       !: ligand concentration in the ocean  
     34   REAL(wp), PUBLIC ::  kfep         !: rate constant for nanoparticle formation 
     35 
    3436   REAL(wp) :: kl1, kl2, kb1, kb2, ks, kpr, spd, con, kth 
    3537 
     
    5456      !!                    and one particulate form (ln_fechem) 
    5557      !!--------------------------------------------------------------------- 
    56       INTEGER, INTENT(in) ::   kt, knt   ! ocean time step 
    57       ! 
    58       INTEGER  ::   ji, jj, jk, jic 
    59       CHARACTER (len=25) :: charout 
     58      ! 
     59      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
     60      ! 
     61      INTEGER  ::   ji, jj, jk, jic, jn 
    6062      REAL(wp) ::   zdep, zlam1a, zlam1b, zlamfac 
    61       REAL(wp) ::   zkeq, zfeequi, zfesatur, zfecoll 
     63      REAL(wp) ::   zkeq, zfeequi, zfesatur, zfecoll, fe3sol 
    6264      REAL(wp) ::   zdenom1, zscave, zaggdfea, zaggdfeb, zcoag 
    6365      REAL(wp) ::   ztrc, zdust 
    64       REAL(wp) ::   zdenom, zdenom2 
    65       REAL(wp), POINTER, DIMENSION(:,:,:) :: zTL1, zFe3, ztotlig 
    66       REAL(wp), POINTER, DIMENSION(:,:,:) :: zFeL1, zFeL2, zTL2, zFe2, zFeP 
     66      REAL(wp) ::   zdenom2 
     67      REAL(wp) ::   zzFeL1, zzFeL2, zzFe2, zzFeP, zzFe3, zzstrn2 
     68      REAL(wp) ::   zrum, zcodel, zargu, zlight 
    6769      REAL(wp) :: zkox, zkph1, zkph2, zph, zionic, ztligand 
    6870      REAL(wp) :: za, zb, zc, zkappa1, zkappa2, za0, za1, za2 
    6971      REAL(wp) :: zxs, zfunc, zp, zq, zd, zr, zphi, zfff, zp3, zq2 
    70       REAL(wp) :: ztfe, zoxy 
     72      REAL(wp) :: ztfe, zoxy, zhplus 
     73      REAL(wp) :: zaggliga, zaggligb 
     74      REAL(wp) :: dissol, zligco 
     75      CHARACTER (len=25) :: charout 
     76      REAL(wp), POINTER, DIMENSION(:,:,:) :: zTL1, zFe3, ztotlig, precip 
     77      REAL(wp), POINTER, DIMENSION(:,:,:) :: zFeL1, zFeL2, zTL2, zFe2, zFeP 
     78      REAL(wp), POINTER, DIMENSION(:,:  ) :: zstrn, zstrn2 
    7179      !!--------------------------------------------------------------------- 
    7280      ! 
    7381      IF( nn_timing == 1 )  CALL timing_start('p4z_fechem') 
    7482      ! 
    75       CALL wrk_alloc( jpi,jpj,jpk,   zFe3, zFeL1, zTL1, ztotlig ) 
     83      ! Allocate temporary workspace 
     84      CALL wrk_alloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip ) 
    7685      zFe3 (:,:,:) = 0. 
    7786      zFeL1(:,:,:) = 0. 
    7887      zTL1 (:,:,:) = 0. 
    7988      IF( ln_fechem ) THEN 
    80          CALL wrk_alloc( jpi,jpj,jpk,   zFe2, zFeL2, zTL2, zFeP ) 
     89         CALL wrk_alloc( jpi, jpj,      zstrn, zstrn2 ) 
     90         CALL wrk_alloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP ) 
    8191         zFe2 (:,:,:) = 0. 
    8292         zFeL2(:,:,:) = 0. 
     
    92102         ztotlig(:,:,:) =  MIN( ztotlig(:,:,:), 10. ) 
    93103      ELSE 
    94          ztotlig(:,:,:) = ligand * 1E9 
     104        IF( ln_ligand ) THEN  ;   ztotlig(:,:,:) = trb(:,:,:,jplgw) * 1E9 
     105        ELSE               ;   ztotlig(:,:,:) = ligand * 1E9 
     106        ENDIF 
    95107      ENDIF 
    96108 
    97109      IF( ln_fechem ) THEN 
     110         ! compute the day length depending on latitude and the day 
     111         zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 
     112         zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  ) 
     113 
     114         ! day length in hours 
     115         zstrn(:,:) = 0. 
     116         DO jj = 1, jpj 
     117            DO ji = 1, jpi 
     118               zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
     119               zargu = MAX( -1., MIN(  1., zargu ) ) 
     120               zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
     121            END DO 
     122         END DO 
     123 
     124         ! Maximum light intensity 
     125         zstrn2(:,:) = zstrn(:,:) / 24. 
     126         WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 
     127         zstrn(:,:) = 24. / zstrn(:,:) 
     128 
    98129         ! ------------------------------------------------------------ 
    99130         ! NEW FE CHEMISTRY ROUTINE from Tagliabue and Volker (2009) 
     
    101132         ! Chemistry is supposed to be fast enough to be at equilibrium 
    102133         ! ------------------------------------------------------------ 
    103          DO jk = 1, jpkm1 
     134         DO jn = 1, 2 
     135          DO jk = 1, jpkm1 
    104136            DO jj = 1, jpj 
    105137               DO ji = 1, jpi 
     138                  zlight = etot(ji,jj,jk) * zstrn(ji,jj) * float(2-jn) 
     139                  zzstrn2 = zstrn2(ji,jj) * float(2-jn) + (1. - zstrn2(ji,jj) ) * float(jn-1) 
    106140                  ! Calculate ligand concentrations : assume 2/3rd of excess goes to 
    107141                  ! strong ligands (L1) and 1/3rd to weak ligands (L2) 
     
    110144                  zTL2(ji,jj,jk) = ligand * 1E9 - 0.000001 + 0.33 * ztligand 
    111145                  ! ionic strength from Millero et al. 1987 
    112                   zionic = 19.9201 * tsn(ji,jj,jk,jp_sal) / ( 1000. - 1.00488 * tsn(ji,jj,jk,jp_sal) + rtrn ) 
    113146                  zph    = -LOG10( MAX( hi(ji,jj,jk), rtrn) ) 
    114                   zoxy   = trb(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 ) 
     147                  zoxy   = trb(ji,jj,jk,jpoxy) 
    115148                  ! Fe2+ oxydation rate from Santana-Casiano et al. (2005) 
    116                   zkox   = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tsn(ji,jj,jk,jp_tem) + 273.15 )  & 
    117                     &    - 0.04406 * SQRT( tsn(ji,jj,jk,jp_sal) ) - 0.002847 * tsn(ji,jj,jk,jp_sal) 
     149                  zkox   = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tempis(ji,jj,jk) + 273.15 )  & 
     150                    &    - 0.04406 * SQRT( salinprac(ji,jj,jk) ) - 0.002847 * salinprac(ji,jj,jk) 
    118151                  zkox   = ( 10.** zkox ) * spd 
    119152                  zkox   = zkox * MAX( 1.e-6, zoxy) / ( chemo2(ji,jj,jk) + rtrn ) 
    120153                  ! PHOTOREDUCTION of complexed iron : Tagliabue and Arrigo (2006) 
    121                   zkph2 = MAX( 0., 15. * etot(ji,jj,jk) / ( etot(ji,jj,jk) + 2. ) ) 
     154                  zkph2 = MAX( 0., 15. * zlight / ( zlight + 2. ) ) * (1. - fr_i(ji,jj)) 
    122155                  zkph1 = zkph2 / 5. 
    123156                  ! pass the dfe concentration from PISCES 
     
    165198                  ENDIF 
    166199                  ! solve for the other Fe species 
    167                   zFe3(ji,jj,jk) = MAX( 0., zxs )  
    168                   zFep(ji,jj,jk) = MAX( 0., ( ks * zFe3(ji,jj,jk) / kpr ) ) 
     200                  zzFe3 = MAX( 0., zxs ) 
     201                  zzFep = MAX( 0., ( ks * zzFe3 / kpr ) ) 
    169202                  zkappa2 = ( kb2 + zkph2 ) / kl2 
    170                   zFeL2(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * zTL2(ji,jj,jk) ) / ( zkappa2 + zFe3(ji,jj,jk) ) ) 
    171                   zFeL1(ji,jj,jk) = MAX( 0., ( ztfe / zb - za / zb * zFe3(ji,jj,jk) - zc / zb * zFeL2(ji,jj,jk) ) ) 
    172                   zFe2 (ji,jj,jk) = MAX( 0., ( ( zkph1 * zFeL1(ji,jj,jk) + zkph2 * zFeL2(ji,jj,jk) ) / zkox ) ) 
     203                  zzFeL2 = MAX( 0., ( zzFe3 * zTL2(ji,jj,jk) ) / ( zkappa2 + zzFe3 ) ) 
     204                  zzFeL1 = MAX( 0., ( ztfe / zb - za / zb * zzFe3 - zc / zb * zzFeL2 ) ) 
     205                  zzFe2  = MAX( 0., ( ( zkph1 * zzFeL1 + zkph2 * zzFeL2 ) / zkox ) ) 
     206                  zFe3(ji,jj,jk)  = zFe3(ji,jj,jk)  + zzFe3 * zzstrn2 
     207                  zFe2(ji,jj,jk)  = zFe2(ji,jj,jk)  + zzFe2 * zzstrn2 
     208                  zFeL2(ji,jj,jk) = zFeL2(ji,jj,jk) + zzFeL2 * zzstrn2 
     209                  zFeL1(ji,jj,jk) = zFeL1(ji,jj,jk) + zzFeL1 * zzstrn2 
     210                  zFeP(ji,jj,jk)  = zFeP(ji,jj,jk)  + zzFeP * zzstrn2 
    173211               END DO 
    174212            END DO 
     213         END DO 
    175214         END DO 
    176215      ELSE 
     
    198237         ! 
    199238      ENDIF 
    200       ! 
     239 
    201240      zdust = 0.         ! if no dust available 
    202       ! 
    203241      DO jk = 1, jpkm1 
    204242         DO jj = 1, jpj 
     
    212250                  zfecoll = ( 0.3 * zFeL1(ji,jj,jk) + 0.5 * zFeL2(ji,jj,jk) ) * 1E-9 
    213251               ELSE 
    214                   zfeequi = zFe3(ji,jj,jk) * 1E-9  
    215                   zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 
     252                  IF (ln_fecolloid) THEN 
     253                     zfeequi = zFe3(ji,jj,jk) * 1E-9 
     254                     zhplus   = max( rtrn, hi(ji,jj,jk) ) 
     255                     fe3sol  = fesol(ji,jj,jk,1) * ( fesol(ji,jj,jk,2) * zhplus**2  & 
     256                     &         + fesol(ji,jj,jk,3) * zhplus + fesol(ji,jj,jk,4)     & 
     257                     &         + fesol(ji,jj,jk,5) / zhplus ) 
     258                     zfecoll = max( ( 0.1 * zFeL1(ji,jj,jk) * 1E-9 ), ( zFeL1(ji,jj,jk) * 1E-9 -fe3sol ) ) 
     259                  ELSE 
     260                     zfeequi = zFe3(ji,jj,jk) * 1E-9  
     261                     zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 
     262                     fe3sol  = 0. 
     263                     kfep    = 0. 
     264                  ENDIF 
    216265               ENDIF 
    217  
    218                ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6  
     266               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6  
    219267               IF( ln_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s 
    220268               zlam1b = 3.e-5 + xlamdust * zdust + xlam1 * ztrc 
     
    232280               zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. ) 
    233281               zlamfac = MIN( 1.  , zlamfac ) 
    234 !!gm very small BUG :  it is unlikely but possible that gdept_n = 0  ..... 
    235282               zdep    = MIN( 1., 1000. / gdept_n(ji,jj,jk) ) 
    236283               zlam1b  = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 
     
    242289               !  ---------------------------------------------------------------- 
    243290               zlam1a  = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
    244                    &   + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) + 5.09E3 * trb(ji,jj,jk,jppoc) ) 
     291                   &   + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) ) 
    245292               zaggdfea = zlam1a * xstep * zfecoll 
     293               ! 
    246294               zlam1b = 3.53E3 *   trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
    247295               zaggdfeb = zlam1b * xstep * zfecoll 
    248296               ! 
    249                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb - zcoag 
     297               ! precipitation of Fe3+, creation of nanoparticles 
     298               precip(ji,jj,jk) = MAX( 0., ( zfeequi - fe3sol ) ) * kfep * xstep 
     299               ! 
     300               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb & 
     301               &                     - zcoag - precip(ji,jj,jk) 
    250302               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea 
    251303               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb 
     304               IF( ln_ligand ) THEN  
     305                 zligco = MAX( ( 0.1 * trn(ji,jj,jk,jplgw) ), ( trn(ji,jj,jk,jplgw) - fe3sol ) ) 
     306                 zaggliga = zlam1a * xstep * zligco 
     307                 zaggligb = zlam1b * xstep * zligco 
     308                 tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) + precip(ji,jj,jk) 
     309                 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb 
     310               ENDIF 
    252311            END DO 
    253312         END DO 
     
    256315      !  Define the bioavailable fraction of iron 
    257316      !  ---------------------------------------- 
    258       IF( ln_fechem ) THEN 
    259           biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 
    260       ELSE 
    261           biron(:,:,:) = trb(:,:,:,jpfer)  
     317      IF( ln_fechem ) THEN  ;  biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 
     318      ELSE                  ;  biron(:,:,:) = trb(:,:,:,jpfer)  
     319      ENDIF 
     320 
     321      IF( ln_ligand .AND. .NOT.ln_fechem) THEN 
     322         plig(:,:,:) =  MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( trn(:,:,:,jpfer) +rtrn ) ) ) 
     323         plig(:,:,:) =  MAX( 0. , plig(:,:,:) ) 
    262324      ENDIF 
    263325 
    264326      !  Output of some diagnostics variables 
    265327      !     --------------------------------- 
    266       IF( lk_iomput .AND. knt == nrdttrc ) THEN 
     328      IF( lk_iomput ) THEN 
     329         IF( knt == nrdttrc ) THEN 
    267330         IF( iom_use("Fe3")    )  CALL iom_put("Fe3"    , zFe3   (:,:,:)       * tmask(:,:,:) )   ! Fe3+ 
    268331         IF( iom_use("FeL1")   )  CALL iom_put("FeL1"   , zFeL1  (:,:,:)       * tmask(:,:,:) )   ! FeL1 
     
    276339            IF( iom_use("TL2")  ) CALL iom_put("TL2"    , zTL2   (:,:,:)       * tmask(:,:,:) )   ! TL2 
    277340         ENDIF 
     341         ENDIF 
    278342      ENDIF 
    279343 
     
    284348      ENDIF 
    285349      ! 
    286                        CALL wrk_dealloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig ) 
    287       IF( ln_fechem )  CALL wrk_dealloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP ) 
     350      CALL wrk_dealloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip ) 
     351      IF( ln_fechem )  THEN 
     352         CALL wrk_dealloc( jpi, jpj,      zstrn, zstrn2 ) 
     353         CALL wrk_dealloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP ) 
     354      ENDIF 
    288355      ! 
    289356      IF( nn_timing == 1 )  CALL timing_stop('p4z_fechem') 
     
    304371      !! 
    305372      !!---------------------------------------------------------------------- 
    306       NAMELIST/nampisfer/ ln_fechem, ln_ligvar, xlam1, xlamdust, ligand  
     373      NAMELIST/nampisfer/ ln_fechem, ln_ligvar, ln_fecolloid, xlam1, xlamdust, ligand, kfep  
    307374      INTEGER :: ios                 ! Local integer output status for namelist read 
    308375 
     
    320387         WRITE(numout,*) ' Namelist parameters for Iron chemistry, nampisfer' 
    321388         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    322          WRITE(numout,*) '    enable complex iron chemistry scheme      ln_fechem =', ln_fechem 
    323          WRITE(numout,*) '    variable concentration of ligand          ln_ligvar =', ln_ligvar 
    324          WRITE(numout,*) '    scavenging rate of Iron                   xlam1     =', xlam1 
    325          WRITE(numout,*) '    scavenging rate of Iron by dust           xlamdust  =', xlamdust 
    326          WRITE(numout,*) '    ligand concentration in the ocean         ligand    =', ligand 
     389         WRITE(numout,*) '    enable complex iron chemistry scheme      ln_fechem    =', ln_fechem 
     390         WRITE(numout,*) '    variable concentration of ligand          ln_ligvar    =', ln_ligvar 
     391         WRITE(numout,*) '    Variable colloidal fraction of Fe3+       ln_fecolloid =', ln_fecolloid 
     392         WRITE(numout,*) '    scavenging rate of Iron                   xlam1        =', xlam1 
     393         WRITE(numout,*) '    scavenging rate of Iron by dust           xlamdust     =', xlamdust 
     394         WRITE(numout,*) '    ligand concentration in the ocean         ligand       =', ligand 
     395         WRITE(numout,*) '    rate constant for nanoparticle formation  kfep         =', kfep 
    327396      ENDIF 
    328397      ! 
     
    353422      ! 
    354423   END SUBROUTINE p4z_fechem_init 
    355  
    356424   !!====================================================================== 
    357425END MODULE p4zfechem 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90

    r7068 r7162  
    2222   USE iom                          !  I/O manager 
    2323   USE fldread                      !  read input fields 
    24    USE sbc_oce, ONLY :  atm_co2     !  atmospheric pCO2                
    2524 
    2625   IMPLICIT NONE 
     
    4241 
    4342   !                               !!* nampisatm namelist (Atmospheric PRessure) * 
    44    LOGICAL, PUBLIC ::   ln_presatm  !: ref. pressure: global mean Patm (F) or a constant (F) 
    45  
    46    REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:)  ::  patm      ! atmospheric pressure at kt                 [N/m2] 
    47    TYPE(FLD), ALLOCATABLE,       DIMENSION(:)    ::  sf_patm   ! structure of input fields (file informations, fields read) 
    48  
    49  
    50    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: oce_co2   !: ocean carbon flux  
     43   LOGICAL, PUBLIC ::   ln_presatm     !: ref. pressure: global mean Patm (F) or a constant (F) 
     44   LOGICAL, PUBLIC ::   ln_presatmco2  !: accounting for spatial atm CO2 in the compuation of carbon flux (T) or not (F) 
     45 
     46   REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:) ::  patm      ! atmospheric pressure at kt                 [N/m2] 
     47   TYPE(FLD), ALLOCATABLE,       DIMENSION(:)   ::  sf_patm   ! structure of input fields (file informations, fields read) 
     48   TYPE(FLD), ALLOCATABLE,       DIMENSION(:)   ::  sf_atmco2 ! structure of input fields (file informations, fields read) 
     49 
    5150   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: satmco2   !: atmospheric pco2  
    5251 
     
    6867      !! ** Method  :  
    6968      !!              - Include total atm P correction via Esbensen & Kushnir (1981)  
    70       !!              - Pressure correction NOT done for key_cpl_carbon_cycle 
    7169      !!              - Remove Wanninkhof chemical enhancement; 
    7270      !!              - Add option for time-interpolation of atcco2.txt   
     
    7977      REAL(wp) ::   zfld, zflu, zfld16, zflu16, zfact 
    8078      REAL(wp) ::   zvapsw, zsal, zfco2, zxc2, xCO2approx, ztkel, zfugcoeff 
    81       REAL(wp) ::   zph, zah2, zbot, zdic, zalk, zsch_o2, zalka, zsch_co2 
     79      REAL(wp) ::   zph, zdic, zsch_o2, zsch_co2 
    8280      REAL(wp) ::   zyr_dec, zdco2dt 
    8381      CHARACTER (len=25) :: charout 
     
    9492      !     IS USED TO COMPUTE AIR-SEA FLUX OF CO2 
    9593 
    96       IF( kt /= nit000 .AND. knt == 1 ) CALL p4z_patm( kt )    ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 
    97  
    98       IF( ln_co2int ) THEN  
     94      IF( kt /= nit000 .AND. .NOT.l_co2cpl .AND. knt == 1 ) CALL p4z_patm( kt )    ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 
     95 
     96      IF( ln_co2int .AND. .NOT.ln_presatmco2 .AND. .NOT.l_co2cpl ) THEN  
    9997         ! Linear temporal interpolation  of atmospheric pco2.  atcco2.txt has annual values. 
    10098         ! Caveats: First column of .txt must be in years, decimal  years preferably.  
     
    110108      ENDIF 
    111109 
    112  !    IF( ln_cpl_carbon_cycle )   satmco2(:,:) = atm_co2(:,:) 
    113  
    114       DO jm = 1, 10 
    115          DO jj = 1, jpj 
    116             DO ji = 1, jpi 
    117  
    118                ! DUMMY VARIABLES FOR DIC, H+, AND BORATE 
    119                zbot  = borat(ji,jj,1) 
    120                zfact = rhop(ji,jj,1) / 1000. + rtrn 
    121                zdic  = trb(ji,jj,1,jpdic) / zfact 
    122                zph   = MAX( hi(ji,jj,1), 1.e-10 ) / zfact 
    123                zalka = trb(ji,jj,1,jptal) / zfact 
    124  
    125                ! CALCULATE [ALK]([CO3--], [HCO3-]) 
    126                zalk  = zalka - (  akw3(ji,jj,1) / zph - zph / aphscale(ji,jj,1)    & 
    127                &       + zbot / ( 1.+ zph / akb3(ji,jj,1) )  ) 
    128  
    129                ! CALCULATE [H+] AND [H2CO3] 
    130                zah2   = SQRT(  (zdic-zalk)**2 + 4.* ( zalk * ak23(ji,jj,1)   & 
    131                   &                                        / ak13(ji,jj,1) ) * ( 2.* zdic - zalk )  ) 
    132                zah2   = 0.5 * ak13(ji,jj,1) / zalk * ( ( zdic - zalk ) + zah2 ) 
    133                zh2co3(ji,jj) = ( 2.* zdic - zalk ) / ( 2.+ ak13(ji,jj,1) / zah2 ) * zfact 
    134                hi(ji,jj,1)   = zah2 * zfact 
    135             END DO 
     110      IF( l_co2cpl )   satmco2(:,:) = atm_co2(:,:) 
     111 
     112      DO jj = 1, jpj 
     113         DO ji = 1, jpi 
     114            ! DUMMY VARIABLES FOR DIC, H+, AND BORATE 
     115            zfact = rhop(ji,jj,1) / 1000. + rtrn 
     116            zdic  = trb(ji,jj,1,jpdic) 
     117            zph   = MAX( hi(ji,jj,1), 1.e-10 ) / zfact 
     118            ! CALCULATE [H2CO3] 
     119            zh2co3(ji,jj) = zdic/(1. + ak13(ji,jj,1)/zph + ak13(ji,jj,1)*ak23(ji,jj,1)/zph**2) 
    136120         END DO 
    137121      END DO 
    138  
    139122 
    140123      ! -------------- 
     
    165148      END DO 
    166149 
     150 
    167151      DO jj = 1, jpj 
    168152         DO ji = 1, jpi 
    169             ztkel     = tsn(ji,jj,1,jp_tem) + 273.15 
    170             zsal      = tsn(ji,jj,1,jp_sal) + ( 1.- tmask(ji,jj,1) ) * 35. 
     153            ztkel = tempis(ji,jj,1) + 273.15 
     154            zsal  = salinprac(ji,jj,1) + ( 1.- tmask(ji,jj,1) ) * 35. 
    171155            zvapsw    = EXP(24.4543 - 67.4509*(100.0/ztkel) - 4.8489*LOG(ztkel/100) - 0.000544*zsal) 
    172156            zpco2atm(ji,jj) = satmco2(ji,jj) * ( patm(ji,jj) - zvapsw ) 
     
    269253         WRITE(numout,*) ' ' 
    270254      ENDIF 
    271       IF( .NOT.ln_co2int ) THEN 
     255     IF( .NOT.ln_co2int .AND. .NOT.ln_presatmco2 ) THEN 
    272256         IF(lwp) THEN                         ! control print 
    273257            WRITE(numout,*) '    Constant Atmospheric pCO2 value  atcco2    =', atcco2 
     
    275259         ENDIF 
    276260         satmco2(:,:)  = atcco2      ! Initialisation of atmospheric pco2 
    277       ELSE 
     261      ELSEIF( ln_co2int .AND. .NOT.ln_presatmco2 ) THEN 
    278262         IF(lwp)  THEN 
    279263            WRITE(numout,*) '    Atmospheric pCO2 value  from file clname      =', TRIM( clname ) 
     
    297281         END DO 
    298282         CLOSE(numco2) 
    299       ENDIF 
     283      ELSEIF( .NOT.ln_co2int .AND. ln_presatmco2 ) THEN 
     284         IF(lwp)  THEN 
     285            WRITE(numout,*) '    Spatialized Atmospheric pCO2 from an external file' 
     286            WRITE(numout,*) ' ' 
     287         ENDIF 
     288      ELSE 
     289         IF(lwp)  THEN 
     290            WRITE(numout,*) '    Spatialized Atmospheric pCO2 from an external file' 
     291            WRITE(numout,*) ' ' 
     292         ENDIF 
     293      ENDIF 
     294 
    300295      ! 
    301296      oce_co2(:,:)  = 0._wp                ! Initialization of Flux of Carbon 
     
    323318      CHARACTER(len=100) ::  cn_dir   ! Root directory for location of ssr files 
    324319      TYPE(FLD_N)        ::  sn_patm  ! informations about the fields to be read 
    325       !! 
    326       NAMELIST/nampisatm/ ln_presatm, sn_patm, cn_dir 
     320      TYPE(FLD_N)        ::  sn_atmco2 ! informations about the fields to be read 
     321      !! 
     322      NAMELIST/nampisatm/ ln_presatm, ln_presatmco2, sn_patm, sn_atmco2, cn_dir 
    327323 
    328324      !                                         ! ----------------------- ! 
     
    343339            WRITE(numout,*) '   Namelist nampisatm : Atmospheric Pressure as external forcing' 
    344340            WRITE(numout,*) '      constant atmopsheric pressure (F) or from a file (T)  ln_presatm = ', ln_presatm 
     341            WRITE(numout,*) '      spatial atmopsheric CO2 for flux calcs  ln_presatmco2 = ', ln_presatmco2 
    345342            WRITE(numout,*) 
    346343         ENDIF 
     
    355352         ENDIF 
    356353         !                                          
     354         IF( ln_presatmco2 ) THEN 
     355            ALLOCATE( sf_atmco2(1), STAT=ierr )           !* allocate and fill sf_atmco2 (forcing structure) with sn_atmco2 
     356            IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'p4z_flx: unable to allocate sf_atmco2 structure' ) 
     357            ! 
     358            CALL fld_fill( sf_atmco2, (/ sn_atmco2 /), cn_dir, 'p4z_flx', 'Atmospheric co2 partial pressure ', 'nampisatm' ) 
     359                                   ALLOCATE( sf_atmco2(1)%fnow(jpi,jpj,1)   ) 
     360            IF( sn_atmco2%ln_tint )  ALLOCATE( sf_atmco2(1)%fdta(jpi,jpj,1,2) ) 
     361         ENDIF 
     362         ! 
    357363         IF( .NOT.ln_presatm )   patm(:,:) = 1.e0    ! Initialize patm if no reading from a file 
    358364         ! 
     
    364370      ENDIF 
    365371      ! 
     372      IF( ln_presatmco2 ) THEN 
     373         CALL fld_read( kt, 1, sf_atmco2 )               !* input atmco2 provided at kt + 1/2 
     374         satmco2(:,:) = sf_atmco2(1)%fnow(:,:,1)                        ! atmospheric pressure 
     375      ELSE 
     376         satmco2(:,:) = atcco2    ! Initialize atmco2 if no reading from a file 
     377      ENDIF 
     378      ! 
    366379   END SUBROUTINE p4z_patm 
    367380 
     381 
    368382   INTEGER FUNCTION p4z_flx_alloc() 
    369383      !!---------------------------------------------------------------------- 
    370384      !!                     ***  ROUTINE p4z_flx_alloc  *** 
    371385      !!---------------------------------------------------------------------- 
    372       ALLOCATE( oce_co2(jpi,jpj), satmco2(jpi,jpj), patm(jpi,jpj), STAT=p4z_flx_alloc ) 
     386      ALLOCATE( satmco2(jpi,jpj), patm(jpi,jpj), STAT=p4z_flx_alloc ) 
    373387      ! 
    374388      IF( p4z_flx_alloc /= 0 )   CALL ctl_warn('p4z_flx_alloc : failed to allocate arrays') 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zint.F90

    r7068 r7162  
    1212   USE trc             !  passive tracers common variables  
    1313   USE sms_pisces      !  PISCES Source Minus Sink variables 
    14    USE iom 
    1514 
    1615   IMPLICIT NONE 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90

    r7068 r7162  
    1414   USE trc             ! Tracers defined 
    1515   USE sms_pisces      ! PISCES variables 
    16    USE p4zopt          ! Optical 
    1716   USE iom             !  I/O manager 
    1817 
     
    2221   PUBLIC p4z_lim     
    2322   PUBLIC p4z_lim_init     
     23   PUBLIC p4z_lim_alloc 
    2424 
    2525   !! * Shared module variables 
     
    4444   REAL(wp), PUBLIC ::  qdfelim     !:  optimal Fe quota for diatoms 
    4545   REAL(wp), PUBLIC ::  caco3r      !:  mean rainratio  
     46 
     47   !!* 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    !: ??? 
    4663 
    4764   ! Coefficient for iron limitation 
     
    220237      !!---------------------------------------------------------------------- 
    221238 
    222       NAMELIST/nampislim/ concnno3, concdno3, concnnh4, concdnh4, concnfer, concdfer, concbfe,   & 
     239      NAMELIST/namp4zlim/ concnno3, concdno3, concnnh4, concdnh4, concnfer, concdfer, concbfe,   & 
    223240         &                concbno3, concbnh4, xsizedia, xsizephy, xsizern, xsizerd,          &  
    224241         &                xksi1, xksi2, xkdoc, qnfelim, qdfelim, caco3r, oxymin 
     
    226243 
    227244      REWIND( numnatp_ref )              ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters 
    228       READ  ( numnatp_ref, nampislim, IOSTAT = ios, ERR = 901) 
    229 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in reference namelist', lwp ) 
     245      READ  ( numnatp_ref, namp4zlim, IOSTAT = ios, ERR = 901) 
     246901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zlim in reference namelist', lwp ) 
    230247 
    231248      REWIND( numnatp_cfg )              ! Namelist nampislim in configuration namelist : Pisces nutrient limitation parameters  
    232       READ  ( numnatp_cfg, nampislim, IOSTAT = ios, ERR = 902 ) 
    233 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in configuration namelist', lwp ) 
    234       IF(lwm) WRITE ( numonp, nampislim ) 
     249      READ  ( numnatp_cfg, namp4zlim, IOSTAT = ios, ERR = 902 ) 
     250902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zlim in configuration namelist', lwp ) 
     251      IF(lwm) WRITE ( numonp, namp4zlim ) 
    235252 
    236253      IF(lwp) THEN                         ! control print 
    237254         WRITE(numout,*) ' ' 
    238          WRITE(numout,*) ' Namelist parameters for nutrient limitations, nampislim' 
     255         WRITE(numout,*) ' Namelist parameters for nutrient limitations, namp4zlim' 
    239256         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    240257         WRITE(numout,*) '    mean rainratio                           caco3r    = ', caco3r 
     
    264281   END SUBROUTINE p4z_lim_init 
    265282 
     283   INTEGER FUNCTION p4z_lim_alloc() 
     284      !!---------------------------------------------------------------------- 
     285      !!                     ***  ROUTINE p5z_lim_alloc  *** 
     286      !!---------------------------------------------------------------------- 
     287      USE lib_mpp , ONLY: ctl_warn 
     288      !!---------------------------------------------------------------------- 
     289 
     290      !*  Biological arrays for phytoplankton growth 
     291      ALLOCATE( xnanono3(jpi,jpj,jpk), xdiatno3(jpi,jpj,jpk),       & 
     292         &      xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk),       & 
     293         &      xnanopo4(jpi,jpj,jpk), xdiatpo4(jpi,jpj,jpk),       & 
     294         &      xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk),       & 
     295         &      xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk),       & 
     296         &      xlimbac (jpi,jpj,jpk), xlimbacl(jpi,jpj,jpk),       & 
     297         &      concnfe (jpi,jpj,jpk), concdfe (jpi,jpj,jpk),       & 
     298         &      xlimsi  (jpi,jpj,jpk), STAT=p4z_lim_alloc ) 
     299      ! 
     300      IF( p4z_lim_alloc /= 0 ) CALL ctl_warn('p4z_lim_alloc : failed to allocate arrays.') 
     301      ! 
     302   END FUNCTION p4z_lim_alloc 
     303 
    266304   !!====================================================================== 
    267305END MODULE p4zlim 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90

    r7068 r7162  
    1111   !!                  !  2011-02  (J. Simeon, J. Orr)  Calcon salinity dependence 
    1212   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Improvment of calcite dissolution 
     13   !!             3.6  !  2015-05  (O. Aumont) PISCES quota 
    1314   !!---------------------------------------------------------------------- 
    1415   !!   p4z_lys        :   Compute the CaCO3 dissolution  
     
    1819   USE trc             !  passive tracers common variables  
    1920   USE sms_pisces      !  PISCES Source Minus Sink variables 
     21   USE p4zche          !  Chemical model 
    2022   USE prtctl_trc      !  print control for debugging 
    2123   USE iom             !  I/O manager 
     
    5759      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    5860      INTEGER  ::   ji, jj, jk, jn 
    59       REAL(wp) ::   zalk, zdic, zph, zah2 
    60       REAL(wp) ::   zdispot, zfact, zcalcon, zalka, zaldi 
     61      REAL(wp) ::   zdispot, zfact, zcalcon 
    6162      REAL(wp) ::   zomegaca, zexcess, zexcess0 
    6263      CHARACTER (len=25) :: charout 
    63       REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zco3sat, zcaldiss    
     64      REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zcaldiss, zhinit, zhi, zco3sat 
    6465      !!--------------------------------------------------------------------- 
    6566      ! 
    6667      IF( nn_timing == 1 )  CALL timing_start('p4z_lys') 
    6768      ! 
    68       CALL wrk_alloc( jpi, jpj, jpk, zco3, zco3sat, zcaldiss ) 
     69      CALL wrk_alloc( jpi, jpj, jpk, zco3, zcaldiss, zhinit, zhi, zco3sat ) 
    6970      ! 
    7071      zco3    (:,:,:) = 0. 
    7172      zcaldiss(:,:,:) = 0. 
     73      zhinit(:,:,:)   = hi(:,:,:) * 1000. / ( rhop(:,:,:) + rtrn ) 
    7274      !     ------------------------------------------- 
    7375      !     COMPUTE [CO3--] and [H+] CONCENTRATIONS 
    7476      !     ------------------------------------------- 
    75        
    76       DO jn = 1, 5                               !  BEGIN OF ITERATION 
    77          ! 
    78          DO jk = 1, jpkm1 
    79             DO jj = 1, jpj 
    80                DO ji = 1, jpi 
    81                   zfact = rhop(ji,jj,jk) / 1000. + rtrn 
    82                   zph  = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 ! [H+] 
    83                   zdic  = trb(ji,jj,jk,jpdic) / zfact 
    84                   zalka = trb(ji,jj,jk,jptal) / zfact 
    85                   ! CALCULATE [ALK]([CO3--], [HCO3-]) 
    86                   zalk  = zalka - ( akw3(ji,jj,jk) / zph - zph / ( aphscale(ji,jj,jk) + rtrn )  & 
    87                   &       + borat(ji,jj,jk) / ( 1. + zph / akb3(ji,jj,jk) ) ) 
    88                   ! CALCULATE [H+] and [CO3--] 
    89                   zaldi = zdic - zalk 
    90                   zah2  = SQRT( zaldi * zaldi + 4.* ( zalk * ak23(ji,jj,jk) / ak13(ji,jj,jk) ) * ( zdic + zaldi ) ) 
    91                   zah2  = 0.5 * ak13(ji,jj,jk) / zalk * ( zaldi + zah2 ) 
    92                   ! 
    93                   zco3(ji,jj,jk) = zalk / ( 2. + zah2 / ak23(ji,jj,jk) ) * zfact 
    94                   hi(ji,jj,jk)   = zah2 * zfact 
    95                END DO 
     77 
     78      CALL solve_at_general(zhinit, zhi) 
     79 
     80      DO jk = 1, jpkm1 
     81         DO jj = 1, jpj 
     82            DO ji = 1, jpi 
     83               zco3(ji,jj,jk) = trb(ji,jj,jk,jpdic) * ak13(ji,jj,jk) * ak23(ji,jj,jk) / (zhi(ji,jj,jk)**2   & 
     84               &                + ak13(ji,jj,jk) * zhi(ji,jj,jk) + ak13(ji,jj,jk) * ak23(ji,jj,jk) + rtrn ) 
     85               hi(ji,jj,jk)   = zhi(ji,jj,jk) * rhop(ji,jj,jk) / 1000. 
    9686            END DO 
    9787         END DO 
    98          ! 
    99       END DO  
     88      END DO 
    10089 
    10190      !     --------------------------------------------------------- 
     
    111100               ! DEVIATION OF [CO3--] FROM SATURATION VALUE 
    112101               ! Salinity dependance in zomegaca and divide by rhop/1000 to have good units 
    113                zcalcon  = calcon * ( tsn(ji,jj,jk,jp_sal) / 35._wp ) 
     102               zcalcon  = calcon * ( salinprac(ji,jj,jk) / 35._wp ) 
    114103               zfact    = rhop(ji,jj,jk) / 1000._wp 
    115104               zomegaca = ( zcalcon * zco3(ji,jj,jk) ) / ( aksp(ji,jj,jk) * zfact + rtrn ) 
     
    128117              !       AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 
    129118              zcaldiss(ji,jj,jk)  = zdispot * rfact2 / rmtss ! calcite dissolution 
    130               zco3(ji,jj,jk)      = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) 
    131119              ! 
    132120              tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) 
     
    151139      ENDIF 
    152140      ! 
    153       CALL wrk_dealloc( jpi, jpj, jpk, zco3, zco3sat, zcaldiss ) 
     141      CALL wrk_dealloc( jpi, jpj, jpk, zco3, zcaldiss, zhinit, zhi, zco3sat ) 
    154142      ! 
    155143      IF( nn_timing == 1 )  CALL timing_stop('p4z_lys') 
     
    170158      !! 
    171159      !!---------------------------------------------------------------------- 
    172       INTEGER  ::  ji, jj, jk 
    173160      INTEGER  ::  ios                 ! Local integer output status for namelist read 
    174       REAL(wp) ::  zcaralk, zbicarb, zco3 
    175       REAL(wp) ::  ztmas, ztmas1 
    176161 
    177162      NAMELIST/nampiscal/ kdca, nca 
     
    199184      ! 
    200185   END SUBROUTINE p4z_lys_init 
    201  
    202186   !!====================================================================== 
    203187END MODULE p4zlys 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90

    r7068 r7162  
    1414   USE trc             !  passive tracers common variables  
    1515   USE sms_pisces      !  PISCES Source Minus Sink variables 
    16    USE p4zsink         !  vertical flux of particulate matter due to sinking 
    17    USE p4zint          !  interpolation and computation of various fields 
    1816   USE p4zprod         !  production 
    1917   USE prtctl_trc      !  print control for debugging 
     
    6765      REAL(wp) :: zgraze2 , zdenom, zdenom2 
    6866      REAL(wp) :: zfact   , zfood, zfoodlim, zproport 
    69       REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2 
     67      REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2, zfracal, zgrazcal 
    7068      REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotn, zgraztotf 
    7169      REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz2, zgrasrat, zgrasratn 
     
    8078      IF( nn_timing == 1 )  CALL timing_start('p4z_meso') 
    8179      ! 
    82       IF( lk_iomput ) THEN 
    83          CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
    84          zgrazing(:,:,:) = 0._wp 
    85       ENDIF 
     80      CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
     81      zgrazing(:,:,:) = 0._wp 
    8682 
    8783      DO jk = 1, jpkm1 
     
    158154 
    159155              ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 
    160               IF( lk_iomput )  zgrazing(ji,jj,jk) = zgraztot 
     156              zgrazing(ji,jj,jk) = zgraztot 
    161157 
    162158              !    Mesozooplankton efficiency 
     
    177173               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarsig 
    178174               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem2 - zgrarsig 
     175               ! 
     176               IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem2 - zgrarsig) * ldocz 
     177               ! 
    179178               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 
    180179               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer2 
     
    195194               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf 
    196195 
    197                ! calcite production 
    198                zprcaca = xfracal(ji,jj,jk) * zgrazn 
    199                prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
    200                ! 
    201                zprcaca = part2 * zprcaca 
    202                tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprcaca 
    203                tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca 
    204                tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 
    205                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfrac 
    206                tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac 
    207                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe 
    208                tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfffg     & 
    209                    &                + zgraztotf * unass2 - zfracfe 
     196              tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfrac 
     197              prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfrac 
     198              conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep 
     199              tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac 
     200              prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zmortzgoc + zgrapoc2 
     201              consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfrac 
     202              tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe 
     203              tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfffg     & 
     204                 &                + zgraztotf * unass2 - zfracfe 
     205              zfracal = trb(ji,jj,jk,jpcal) / (trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + rtrn ) 
     206              zgrazcal = (zgrazffeg + zgrazpoc) * (1. - part2) * zfracal 
     207              ! calcite production 
     208              zprcaca = xfracal(ji,jj,jk) * zgrazn 
     209              prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
     210              ! 
     211              zprcaca = part2 * zprcaca 
     212              tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrazcal - zprcaca 
     213              tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * ( zgrazcal + zprcaca ) 
     214              tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zgrazcal + zprcaca 
    210215            END DO 
    211216         END DO 
     
    231236      ENDIF 
    232237      ! 
    233       IF( lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
     238      CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
    234239      ! 
    235240      IF( nn_timing == 1 )  CALL timing_stop('p4z_meso') 
     
    251256      !!---------------------------------------------------------------------- 
    252257 
    253       NAMELIST/nampismes/ part2, grazrat2, resrat2, mzrat2, xprefc, xprefp, xprefz,   & 
     258      NAMELIST/namp4zmes/ part2, grazrat2, resrat2, mzrat2, xprefc, xprefp, xprefz,   & 
    254259         &                xprefpoc, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 
    255260         &                xthresh2, xkgraz2, epsher2, sigma2, unass2, grazflux 
     
    257262 
    258263      REWIND( numnatp_ref )              ! Namelist nampismes in reference namelist : Pisces mesozooplankton 
    259       READ  ( numnatp_ref, nampismes, IOSTAT = ios, ERR = 901) 
    260 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismes in reference namelist', lwp ) 
     264      READ  ( numnatp_ref, namp4zmes, IOSTAT = ios, ERR = 901) 
     265901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmes in reference namelist', lwp ) 
    261266 
    262267      REWIND( numnatp_cfg )              ! Namelist nampismes in configuration namelist : Pisces mesozooplankton 
    263       READ  ( numnatp_cfg, nampismes, IOSTAT = ios, ERR = 902 ) 
    264 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismes in configuration namelist', lwp ) 
    265       IF(lwm) WRITE ( numonp, nampismes ) 
     268      READ  ( numnatp_cfg, namp4zmes, IOSTAT = ios, ERR = 902 ) 
     269902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmes in configuration namelist', lwp ) 
     270      IF(lwm) WRITE ( numonp, namp4zmes ) 
    266271 
    267272 
    268273      IF(lwp) THEN                         ! control print 
    269274         WRITE(numout,*) ' '  
    270          WRITE(numout,*) ' Namelist parameters for mesozooplankton, nampismes' 
     275         WRITE(numout,*) ' Namelist parameters for mesozooplankton, namp4zmes' 
    271276         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    272277         WRITE(numout,*) '    part of calcite not dissolved in mesozoo guts  part2        =', part2 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90

    r7068 r7162  
    1515   USE sms_pisces      !  PISCES Source Minus Sink variables 
    1616   USE p4zlim          !  Co-limitations 
    17    USE p4zsink         !  vertical flux of particulate matter due to sinking 
    18    USE p4zint          !  interpolation and computation of various fields 
    1917   USE p4zprod         !  production 
    2018   USE iom             !  I/O manager 
     
    7977      IF( nn_timing == 1 )  CALL timing_start('p4z_micro') 
    8078      ! 
    81       IF( lk_iomput )  CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
     79      CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
    8280      ! 
    8381      DO jk = 1, jpkm1 
     
    122120 
    123121               ! Grazing by microzooplankton 
    124                IF( lk_iomput )  zgrazing(ji,jj,jk) = zgraztot 
     122               zgrazing(ji,jj,jk) = zgraztot 
    125123 
    126124               !    Various remineralization and excretion terms 
     
    140138               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarsig 
    141139               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem - zgrarsig 
     140               ! 
     141               IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem - zgrarsig) * ldocz 
     142               ! 
    142143               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 
    143144               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 
    144145               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc 
     146               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zgrapoc 
    145147               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zgraztotf * unass 
    146148               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 
     
    159161               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf 
    160162               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz - zgrazm 
     163               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortz 
     164               conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazm 
    161165               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz - zgrazmf 
    162166               ! 
     
    173177      END DO 
    174178      ! 
    175       IF( lk_iomput .AND. knt == nrdttrc ) THEN 
    176          CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
    177          IF( iom_use( "GRAZ1" ) ) THEN 
    178             zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !  Total grazing of phyto by zooplankton 
    179             CALL iom_put( "GRAZ1", zw3d ) 
     179      IF( lk_iomput ) THEN 
     180         IF( knt == nrdttrc ) THEN 
     181           CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     182           IF( iom_use( "GRAZ1" ) ) THEN 
     183              zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !  Total grazing of phyto by zooplankton 
     184              CALL iom_put( "GRAZ1", zw3d ) 
     185           ENDIF 
     186           CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    180187         ENDIF 
    181          CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    182188      ENDIF 
    183189      ! 
     
    188194      ENDIF 
    189195      ! 
    190       IF( lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
     196      CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
    191197      ! 
    192198      IF( nn_timing == 1 )  CALL timing_stop('p4z_micro') 
     
    209215      !!---------------------------------------------------------------------- 
    210216 
    211       NAMELIST/nampiszoo/ part, grazrat, resrat, mzrat, xpref2c, xpref2p, & 
     217      NAMELIST/namp4zzoo/ part, grazrat, resrat, mzrat, xpref2c, xpref2p, & 
    212218         &                xpref2d,  xthreshdia,  xthreshphy,  xthreshpoc, & 
    213219         &                xthresh, xkgraz, epsher, sigma1, unass 
     
    215221 
    216222      REWIND( numnatp_ref )              ! Namelist nampiszoo in reference namelist : Pisces microzooplankton 
    217       READ  ( numnatp_ref, nampiszoo, IOSTAT = ios, ERR = 901) 
    218 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiszoo in reference namelist', lwp ) 
     223      READ  ( numnatp_ref, namp4zzoo, IOSTAT = ios, ERR = 901) 
     224901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zzoo in reference namelist', lwp ) 
    219225 
    220226      REWIND( numnatp_cfg )              ! Namelist nampiszoo in configuration namelist : Pisces microzooplankton 
    221       READ  ( numnatp_cfg, nampiszoo, IOSTAT = ios, ERR = 902 ) 
    222 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiszoo in configuration namelist', lwp ) 
    223       IF(lwm) WRITE ( numonp, nampiszoo ) 
     227      READ  ( numnatp_cfg, namp4zzoo, IOSTAT = ios, ERR = 902 ) 
     228902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zzoo in configuration namelist', lwp ) 
     229      IF(lwm) WRITE ( numonp, namp4zzoo ) 
    224230 
    225231      IF(lwp) THEN                         ! control print 
    226232         WRITE(numout,*) ' ' 
    227          WRITE(numout,*) ' Namelist parameters for microzooplankton, nampiszoo' 
     233         WRITE(numout,*) ' Namelist parameters for microzooplankton, namp4zzoo' 
    228234         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    229235         WRITE(numout,*) '    part of calcite not dissolved in microzoo guts  part        =', part 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90

    r7068 r7162  
    1313   USE trc             !  passive tracers common variables  
    1414   USE sms_pisces      !  PISCES Source Minus Sink variables 
    15    USE p4zsink         !  vertical flux of particulate matter due to sinking 
    1615   USE p4zprod         !  Primary productivity  
     16   USE p4zlim          !  Phytoplankton limitation terms 
    1717   USE prtctl_trc      !  print control for debugging 
    1818 
     
    3030   REAL(wp), PUBLIC :: mprat2  !: 
    3131 
    32  
    3332   !!---------------------------------------------------------------------- 
    3433   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    6968      REAL(wp) :: zsizerat, zcompaph 
    7069      REAL(wp) :: zfactfe, zfactch, zprcaca, zfracal 
    71       REAL(wp) :: ztortp , zrespp , zmortp 
     70      REAL(wp) :: ztortp , zrespp , zmortp  
    7271      CHARACTER (len=25) :: charout 
    7372      !!--------------------------------------------------------------------- 
     
    113112               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zfracal * zmortp 
    114113               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + ( 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 
    115116               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ( 1. - zfracal ) * zmortp * zfactfe 
    116117               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zfracal * zmortp * zfactfe 
     
    186187               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zrespp2 + 0.5 * ztortp2 
    187188               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + 0.5 * ztortp2 
     189               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + 0.5 * ztortp2 
     190               prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zrespp2 + 0.5 * ztortp2 
    188191               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 0.5 * ztortp2 * zfactfe 
    189192               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ( zrespp2 + 0.5 * ztortp2 ) * zfactfe 
     
    216219      !!---------------------------------------------------------------------- 
    217220 
    218       NAMELIST/nampismort/ wchl, wchld, wchldm, mprat, mprat2 
     221      NAMELIST/namp4zmort/ wchl, wchld, wchldm, mprat, mprat2 
    219222      INTEGER :: ios                 ! Local integer output status for namelist read 
    220223 
    221224      REWIND( numnatp_ref )              ! Namelist nampismort in reference namelist : Pisces phytoplankton 
    222       READ  ( numnatp_ref, nampismort, IOSTAT = ios, ERR = 901) 
    223 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismort in reference namelist', lwp ) 
     225      READ  ( numnatp_ref, namp4zmort, IOSTAT = ios, ERR = 901) 
     226901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmort in reference namelist', lwp ) 
    224227 
    225228      REWIND( numnatp_cfg )              ! Namelist nampismort in configuration namelist : Pisces phytoplankton 
    226       READ  ( numnatp_cfg, nampismort, IOSTAT = ios, ERR = 902 ) 
    227 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismort in configuration namelist', lwp ) 
    228       IF(lwm) WRITE ( numonp, nampismort ) 
     229      READ  ( numnatp_cfg, namp4zmort, IOSTAT = ios, ERR = 902 ) 
     230902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmort in configuration namelist', lwp ) 
     231      IF(lwm) WRITE ( numonp, namp4zmort ) 
    229232 
    230233      IF(lwp) THEN                         ! control print 
    231234         WRITE(numout,*) ' ' 
    232          WRITE(numout,*) ' Namelist parameters for phytoplankton mortality, nampismort' 
     235         WRITE(numout,*) ' Namelist parameters for phytoplankton mortality, namp4zmort' 
    233236         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    234237         WRITE(numout,*) '    quadratic mortality of phytoplankton      wchl      =', wchl 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90

    r7068 r7162  
    3737   INTEGER  :: ntimes_par                ! number of time steps in a file 
    3838   REAL(wp), ALLOCATABLE, SAVE,   DIMENSION(:,:) :: par_varsw    !: PAR fraction of shortwave 
    39  
    40    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enano, ediat   !: PAR for phyto, nano and diat  
    41    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot_ndcy      !: PAR over 24h in case of diurnal cycle 
    42    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy           !: averaged PAR in the mixed layer 
    43    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr  !: wavelength (Red-Green-Blue) 
     39   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr  !: wavelength (Red-Green-Blue) 
    4440 
    4541   INTEGER  ::   nksrp   ! levels below which the light cannot penetrate ( depth larger than 391 m) 
    4642 
    47    REAL(wp), DIMENSION(3,61), PUBLIC ::   xkrgb   !: tabulated attenuation coefficients for RGB absorption 
     43   REAL(wp), DIMENSION(3,61) ::   xkrgb   !: tabulated attenuation coefficients for RGB absorption 
    4844    
    4945   !!---------------------------------------------------------------------- 
     
    7167      REAL(wp) ::   zc0 , zc1 , zc2, zc3, z1_dep 
    7268      REAL(wp), POINTER, DIMENSION(:,:  ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 
     69      REAL(wp), POINTER, DIMENSION(:,:  ) :: zetmp5 
    7370      REAL(wp), POINTER, DIMENSION(:,:  ) :: zqsr100, zqsr_corr 
    74       REAL(wp), POINTER, DIMENSION(:,:,:) :: zpar, ze0, ze1, ze2, ze3 
     71      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpar, ze0, ze1, ze2, ze3, zchl3d 
    7572      !!--------------------------------------------------------------------- 
    7673      ! 
     
    7875      ! 
    7976      ! Allocate temporary workspace 
    80       CALL wrk_alloc( jpi, jpj,      zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
    81       CALL wrk_alloc( jpi, jpj,      zqsr100, zqsr_corr ) 
    82       CALL wrk_alloc( jpi, jpj, jpk, zpar   , ze0, ze1, ze2, ze3 ) 
     77                   CALL wrk_alloc( jpi, jpj,      zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
     78                   CALL wrk_alloc( jpi, jpj,      zqsr100, zqsr_corr ) 
     79      IF( ln_p5z ) CALL wrk_alloc( jpi, jpj,      zetmp5 ) 
     80                   CALL wrk_alloc( jpi, jpj, jpk, zpar   , ze0, ze1, ze2, ze3, zchl3d ) 
    8381 
    8482      IF( knt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt ) 
     
    8987      ze2(:,:,:) = 0._wp 
    9088      ze3(:,:,:) = 0._wp 
     89      ! 
    9190      !                                        !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
    92       DO jk = 1, jpkm1                         !  -------------------------------------------------------- 
     91                                               !  -------------------------------------------------------- 
     92                    zchl3d(:,:,:) = trb(:,:,:,jpnch) + trb(:,:,:,jpdch) 
     93      IF( ln_p5z )  zchl3d(:,:,:) = zchl3d(:,:,:) + trb(:,:,:,jppch) 
     94      ! 
     95      DO jk = 1, jpkm1    
    9396         DO jj = 1, jpj 
    9497            DO ji = 1, jpi 
    95                zchl = ( trb(ji,jj,jk,jpnch) + trb(ji,jj,jk,jpdch) + rtrn ) * 1.e6 
     98               zchl = ( zchl3d(ji,jj,jk) + rtrn ) * 1.e6 
    9699               zchl = MIN(  10. , MAX( 0.05, zchl )  ) 
    97100               irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn ) 
     
    116119            ediat    (:,:,jk) =  1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 
    117120         END DO 
     121         IF( ln_p5z ) THEN 
     122            DO jk = 1, nksrp       
     123              epico  (:,:,jk) =  2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     124            END DO 
     125         ENDIF 
    118126         ! 
    119127         zqsr_corr(:,:) = qsr(:,:) / ( 1. - fr_i(:,:) + rtrn ) 
     
    136144            ediat(:,:,jk) =  1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 
    137145         END DO 
     146         IF( ln_p5z ) THEN 
     147            DO jk = 1, nksrp       
     148              epico(:,:,jk) =  2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     149            END DO 
     150         ENDIF 
    138151         etot_ndcy(:,:,:) =  etot(:,:,:)  
    139152      ENDIF 
     
    151164      ENDIF 
    152165      !                                        !* Euphotic depth and level 
    153       neln(:,:) = 1                            !  ------------------------ 
    154       heup(:,:) = 300. 
     166      neln   (:,:) = 1                            !  ------------------------ 
     167      heup   (:,:) = gdepw_n(:,:,2) 
     168      heup_01(:,:) = gdepw_n(:,:,2) 
    155169 
    156170      DO jk = 2, nksrp 
     
    162176                 heup(ji,jj) = gdepw_n(ji,jj,jk+1)     ! Euphotic layer depth 
    163177              ENDIF 
     178              IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.50 )  THEN 
     179                 heup_01(ji,jj) = gdepw_n(ji,jj,jk+1)  ! Euphotic layer depth (light level definition) 
     180              ENDIF 
    164181           END DO 
    165182        END DO 
    166183      END DO 
    167184      ! 
    168       heup(:,:) = MIN( 300., heup(:,:) ) 
     185      heup   (:,:) = MIN( 300., heup   (:,:) ) 
     186      heup_01(:,:) = MIN( 300., heup_01(:,:) ) 
    169187      !                                        !* mean light over the mixed layer 
    170188      zdepmoy(:,:)   = 0.e0                    !  ------------------------------- 
     
    205223      END DO 
    206224      ! 
     225      IF( ln_p5z ) THEN 
     226         zetmp5 (:,:) = 0.e0 
     227         DO jk = 1, nksrp 
     228            DO jj = 1, jpj 
     229               DO ji = 1, jpi 
     230                  IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN  
     231                     z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 
     232                     zetmp5(ji,jj)  = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t_n(ji,jj,jk) ! production 
     233                     epico(ji,jj,jk) = zetmp5(ji,jj) * z1_dep 
     234                  ENDIF 
     235               END DO 
     236            END DO 
     237         END DO 
     238      ENDIF 
    207239      IF( lk_iomput ) THEN 
    208240        IF( knt == nrdttrc ) THEN 
     
    213245      ENDIF 
    214246      ! 
    215       CALL wrk_dealloc( jpi, jpj,      zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
    216       CALL wrk_dealloc( jpi, jpj,      zqsr100, zqsr_corr ) 
    217       CALL wrk_dealloc( jpi, jpj, jpk, zpar   ,  ze0, ze1, ze2, ze3 ) 
     247                   CALL wrk_dealloc( jpi, jpj,      zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
     248                   CALL wrk_dealloc( jpi, jpj,      zqsr100, zqsr_corr ) 
     249      IF( ln_p5z ) CALL wrk_dealloc( jpi, jpj,      zetmp5 ) 
     250                   CALL wrk_dealloc( jpi, jpj, jpk, zpar   ,  ze0, ze1, ze2, ze3, zchl3d ) 
    218251      ! 
    219252      IF( nn_timing == 1 )  CALL timing_stop('p4z_opt') 
     
    398431                         enano    (:,:,:) = 0._wp 
    399432                         ediat    (:,:,:) = 0._wp 
     433      IF( ln_p5z     )   epico    (:,:,:) = 0._wp 
    400434      IF( ln_qsr_bio )   etot3    (:,:,:) = 0._wp 
    401435      !  
     
    409443      !!                     ***  ROUTINE p4z_opt_alloc  *** 
    410444      !!---------------------------------------------------------------------- 
    411       ALLOCATE( ekb(jpi,jpj,jpk)      , ekr(jpi,jpj,jpk), ekg(jpi,jpj,jpk),   & 
    412         &       enano(jpi,jpj,jpk)    , ediat(jpi,jpj,jpk), & 
    413         &       etot_ndcy(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc )  
    414          ! 
     445      ! 
     446      ALLOCATE( ekb(jpi,jpj,jpk), ekr(jpi,jpj,jpk), & 
     447                ekg(jpi,jpj,jpk), STAT= p4z_opt_alloc )  
     448      ! 
    415449      IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') 
    416450      ! 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90

    r7068 r7162  
    1515   USE trc             !  passive tracers common variables  
    1616   USE sms_pisces      !  PISCES Source Minus Sink variables 
    17    USE p4zopt          !  optical model 
    1817   USE p4zlim          !  Co-limitations of differents nutrients 
    1918   USE prtctl_trc      !  print control for debugging 
     
    2928   !! * Shared module variables 
    3029   LOGICAL , PUBLIC ::  ln_newprod      !: 
    31    REAL(wp), PUBLIC ::  pislope         !: 
    32    REAL(wp), PUBLIC ::  pislope2        !: 
     30   REAL(wp), PUBLIC ::  pislopen         !: 
     31   REAL(wp), PUBLIC ::  pisloped        !: 
    3332   REAL(wp), PUBLIC ::  xadap           !: 
    34    REAL(wp), PUBLIC ::  excret          !: 
    35    REAL(wp), PUBLIC ::  excret2         !: 
     33   REAL(wp), PUBLIC ::  excretn          !: 
     34   REAL(wp), PUBLIC ::  excretd         !: 
    3635   REAL(wp), PUBLIC ::  bresp           !: 
    3736   REAL(wp), PUBLIC ::  chlcnm          !: 
     
    4746    
    4847   REAL(wp) :: r1_rday                !: 1 / rday 
    49    REAL(wp) :: texcret                !: 1 - excret  
    50    REAL(wp) :: texcret2               !: 1 - excret2         
     48   REAL(wp) :: texcretn               !: 1 - excretn  
     49   REAL(wp) :: texcretd               !: 1 - excretd         
    5150 
    5251   !!---------------------------------------------------------------------- 
     
    7170      INTEGER  ::   ji, jj, jk 
    7271      REAL(wp) ::   zsilfac, znanotot, zdiattot, zconctemp, zconctemp2 
    73       REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap 
    74       REAL(wp) ::   zlim, zsilfac2, zsiborn, zprod, zproreg, zproreg2 
    75       REAL(wp) ::   zmxltst, zmxlday, zmaxday 
    76       REAL(wp) ::   zpislopen  , zpislope2n 
    77       REAL(wp) ::   zrum, zcodel, zargu, zval 
     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 
    7877      REAL(wp) ::   zfact 
    7978      CHARACTER (len=25) :: charout 
    80       REAL(wp), POINTER, DIMENSION(:,:  ) :: zmixnano, zmixdiat, zstrn, zw2d 
    81       REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt, zw3d    
    82       REAL(wp), POINTER, DIMENSION(:,:,:) :: zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd 
     79      REAL(wp), POINTER, DIMENSION(:,:  ) :: zstrn, zw2d, zmixnano, zmixdiat 
     80      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopeadn, zpislopeadd, zysopt, zw3d    
     81      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprdia, zprbio, zprdch, zprnch    
     82      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprorcan, zprorcad, zprofed, zprofen 
     83      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpronewn, zpronewd 
     84      REAL(wp), POINTER, DIMENSION(:,:,:) :: zmxl_fac, zmxl_chl 
    8385      !!--------------------------------------------------------------------- 
    8486      ! 
     
    8688      ! 
    8789      !  Allocate temporary workspace 
    88       CALL wrk_alloc( jpi, jpj,      zmixnano, zmixdiat, zstrn                                                  ) 
    89       CALL wrk_alloc( jpi, jpj, jpk, zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt            )  
    90       CALL wrk_alloc( jpi, jpj, jpk, zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd ) 
    91       ! 
    92       zprorca (:,:,:) = 0._wp 
    93       zprorcad(:,:,:) = 0._wp 
    94       zprofed (:,:,:) = 0._wp 
    95       zprofen (:,:,:) = 0._wp 
    96       zprochln(:,:,:) = 0._wp 
    97       zprochld(:,:,:) = 0._wp 
    98       zpronew (:,:,:) = 0._wp 
    99       zpronewd(:,:,:) = 0._wp 
    100       zprdia  (:,:,:) = 0._wp 
    101       zprbio  (:,:,:) = 0._wp 
    102       zprdch  (:,:,:) = 0._wp 
    103       zprnch  (:,:,:) = 0._wp 
    104       zysopt  (:,:,:) = 0._wp 
     90      CALL wrk_alloc( jpi, jpj,      zmixnano, zmixdiat, zstrn ) 
     91      CALL wrk_alloc( jpi, jpj, jpk, zpislopeadn, zpislopeadd, zprdia, zprbio, zprdch, zprnch, zysopt )  
     92      CALL wrk_alloc( jpi, jpj, jpk, zmxl_fac, zmxl_chl ) 
     93      CALL wrk_alloc( jpi, jpj, jpk, zprorcan, zprorcad, zprofed, zprofen, zpronewn, zpronewd ) 
     94      ! 
     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  
    105100 
    106101      ! Computation of the optimal production 
    107       prmax(:,:,:) = 0.6_wp * r1_rday * tgfunc(:,:,:)  
     102      prmax(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:)  
    108103 
    109104      ! compute the day length depending on latitude and the day 
     
    121116      END DO 
    122117 
    123       ! Impact of the day duration on phytoplankton growth 
     118      ! Impact of the day duration and light intermittency on phytoplankton growth 
    124119      DO jk = 1, jpkm1 
    125120         DO jj = 1 ,jpj 
     
    127122               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    128123                  zval = MAX( 1., zstrn(ji,jj) ) 
    129                   zval = 1.5 * zval / ( 12. + zval ) 
    130                   zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval * ( 1. - fr_i(ji,jj) ) 
    131                   zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 
     124                  IF( gdept_n(ji,jj,jk) <= hmld(ji,jj) ) THEN 
     125                     zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 
     126                  ENDIF 
     127                  zmxl_chl(ji,jj,jk) = zval / 24. 
     128                  zmxl_fac(ji,jj,jk) = 1.5 * zval / ( 12. + zval ) 
    132129               ENDIF 
    133130            END DO 
    134131         END DO 
    135132      END DO 
     133 
     134      zprbio(:,:,:) = prmax(:,:,:) * zmxl_fac(:,:,:) 
     135      zprdia(:,:,:) = zprbio(:,:,:) 
    136136 
    137137      ! Maximum light intensity 
    138138      WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 
    139       zstrn(:,:) = 24. / zstrn(:,:) 
     139 
     140      ! Computation of the P-I slope for nanos and diatoms 
     141      DO jk = 1, jpkm1 
     142         DO jj = 1, jpj 
     143            DO ji = 1, jpi 
     144               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     145                  ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
     146                  zadap       = xadap * ztn / ( 2.+ ztn ) 
     147                  zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
     148                  zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
     149                  ! 
     150                  zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap  * EXP( -0.25 * enano(ji,jj,jk) ) )  & 
     151                  &                   * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 
     152                  ! 
     153                  zpislopeadd(ji,jj,jk) = (pislopen * zconctemp2 + pisloped * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn )   & 
     154                  &                   * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 
     155               ENDIF 
     156            END DO 
     157         END DO 
     158      END DO 
    140159 
    141160      IF( ln_newprod ) THEN 
     
    143162            DO jj = 1, jpj 
    144163               DO ji = 1, jpi 
    145                   ! Computation of the P-I slope for nanos and diatoms 
    146164                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    147                       ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
    148                       zadap       = xadap * ztn / ( 2.+ ztn ) 
    149                       zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
    150                       zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
    151                       znanotot    = enano(ji,jj,jk) * zstrn(ji,jj) 
    152                       zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj) 
    153                       ! 
    154                       zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap  * EXP( -znanotot ) )  & 
    155                          &                   * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 
    156                       ! 
    157                       zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn )   & 
    158                          &                   * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 
    159  
    160165                      ! Computation of production function for Carbon 
    161166                      !  --------------------------------------------- 
    162                       zpislopen  = zpislopead (ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) * rday + rtrn) 
    163                       zpislope2n = zpislopead2(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) * rday + rtrn) 
    164                       zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen  * znanotot )  ) 
    165                       zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot )  ) 
    166  
     167                      zpislopen = zpislopeadn(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 
     168                      &            * zmxl_fac(ji,jj,jk) * rday + rtrn) 
     169                      zpisloped = zpislopeadd(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 
     170                      &            * zmxl_fac(ji,jj,jk) * rday + rtrn) 
     171                      zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) )  ) 
     172                      zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) )  ) 
    167173                      !  Computation of production function for Chlorophyll 
    168174                      !-------------------------------------------------- 
    169                       zmaxday  = 1._wp / ( prmax(ji,jj,jk) * rday + rtrn ) 
    170                       zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopead (ji,jj,jk) * zmaxday * znanotot ) ) 
    171                       zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopead2(ji,jj,jk) * zmaxday * zdiattot ) ) 
     175                      zpislopen = zpislopeadn(ji,jj,jk) / ( prmax(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 
     176                      zpisloped = zpislopeadd(ji,jj,jk) / ( prmax(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 
     177                      zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 
     178                      zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 
    172179                  ENDIF 
    173180               END DO 
     
    178185            DO jj = 1, jpj 
    179186               DO ji = 1, jpi 
    180  
    181                   ! Computation of the P-I slope for nanos and diatoms 
    182187                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    183                       ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
    184                       zadap       = ztn / ( 2.+ ztn ) 
    185                       zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
    186                       zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
    187                       znanotot    = enano(ji,jj,jk) * zstrn(ji,jj) 
    188                       zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj) 
    189                       ! 
    190                       zpislopead (ji,jj,jk) = pislope  * ( 1.+ zadap  * EXP( -znanotot ) ) 
    191                       zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp)  / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    192  
    193                       zpislopen =  zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch)                & 
    194                         &          / ( trb(ji,jj,jk,jpphy) * 12.                  + rtrn )   & 
    195                         &          / ( prmax(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 
    196  
    197                       zpislope2n = zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch)                & 
    198                         &          / ( trb(ji,jj,jk,jpdia) * 12.                  + rtrn )   & 
    199                         &          / ( prmax(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 
    200  
    201188                      ! Computation of production function for Carbon 
    202189                      !  --------------------------------------------- 
    203                       zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen  * znanotot ) ) 
    204                       zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot ) ) 
    205  
     190                      zpislopen = zpislopeadn(ji,jj,jk)  / ( zprbio(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 
     191                      zpisloped = zpislopeadd(ji,jj,jk) / ( zprdia(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 
     192                      zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 
     193                      zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 
    206194                      !  Computation of production function for Chlorophyll 
    207195                      !-------------------------------------------------- 
    208                       zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen  * enano(ji,jj,jk) ) ) 
    209                       zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) ) ) 
     196                      zpislopen = zpislopen * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
     197                      zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
     198                      zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 
     199                      zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 
    210200                  ENDIF 
    211201               END DO 
     
    213203         END DO 
    214204      ENDIF 
    215  
    216205 
    217206      !  Computation of a proxy of the N/C ratio 
     
    256245      END DO 
    257246 
    258       !  Computation of the limitation term due to a mixed layer deeper than the euphotic depth 
    259       DO jj = 1, jpj 
    260          DO ji = 1, jpi 
    261             zmxltst = MAX( 0.e0, hmld(ji,jj) - heup(ji,jj) ) 
    262             zmxlday = zmxltst * zmxltst * r1_rday 
    263             zmixnano(ji,jj) = 1. - zmxlday / ( 2. + zmxlday ) 
    264             zmixdiat(ji,jj) = 1. - zmxlday / ( 4. + zmxlday ) 
    265          END DO 
    266       END DO 
    267   
    268       !  Mixed-layer effect on production                                                                                
    269       DO jk = 1, jpkm1 
    270          DO jj = 1, jpj 
    271             DO ji = 1, jpi 
    272                IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    273                   zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * zmixnano(ji,jj) 
    274                   zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * zmixdiat(ji,jj) 
    275                ENDIF 
     247      !  Mixed-layer effect on production  
     248      !  Sea-ice effect on production 
     249 
     250      DO jk = 1, jpkm1 
     251         DO jj = 1, jpj 
     252            DO ji = 1, jpi 
    276253               zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
    277254               zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
     
    285262            DO ji = 1, jpi 
    286263               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    287                   !  production terms for nanophyto. 
    288                   zprorca(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 
    289                   zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 
     264                  !  production terms for nanophyto. (C) 
     265                  zprorcan(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 
     266                  zpronewn(ji,jj,jk)  = zprorcan(ji,jj,jk)* xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 
    290267                  ! 
    291                   zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn ) 
    292                   zratio = zratio / fecnm  
     268                  zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) 
    293269                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
    294                   zprofen(ji,jj,jk) = fecnm * prmax(ji,jj,jk) & 
     270                  zprofen(ji,jj,jk) = fecnm * prmax(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 
    295271                  &             * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) )    & 
    296272                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) )  & 
    297273                  &             * zmax * trb(ji,jj,jk,jpphy) * rfact2 
    298                   !  production terms for diatomees 
     274                  !  production terms for diatoms (C) 
    299275                  zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 
    300276                  zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 
    301277                  ! 
    302                   zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    303                   zratio = zratio / fecdm  
     278                  zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) 
    304279                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
    305                   zprofed(ji,jj,jk) = fecdm * prmax(ji,jj,jk) & 
     280                  zprofed(ji,jj,jk) = fecdm * prmax(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 
    306281                  &             * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) )    & 
    307282                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) )  & 
     
    312287      END DO 
    313288 
    314       DO jk = 1, jpkm1 
    315          DO jj = 1, jpj 
    316             DO ji = 1, jpi 
    317                IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    318                   zprnch(ji,jj,jk) = zprnch(ji,jj,jk) * zmixnano(ji,jj) 
    319                   zprdch(ji,jj,jk) = zprdch(ji,jj,jk) * zmixdiat(ji,jj) 
    320                ENDIF 
     289      ! Computation of the chlorophyll production terms 
     290      DO jk = 1, jpkm1 
     291         DO jj = 1, jpj 
     292            DO ji = 1, jpi 
    321293               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    322294                  !  production terms for nanophyto. ( chlorophyll ) 
    323                   znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 
    324                   zprod    = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk) 
    325                   zprochln(ji,jj,jk) = chlcmin * 12. * zprorca (ji,jj,jk) 
    326                   zprochln(ji,jj,jk) = zprochln(ji,jj,jk) + (chlcnm-chlcmin) * 12. * zprod / & 
    327                                      & (  zpislopead(ji,jj,jk) * znanotot +rtrn) 
    328                   !  production terms for diatomees ( chlorophyll ) 
    329                   zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj) 
    330                   zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk) 
    331                   zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk) 
    332                   zprochld(ji,jj,jk) = zprochld(ji,jj,jk) + (chlcdm-chlcmin) * 12. * zprod / & 
    333                                      & ( zpislopead2(ji,jj,jk) * zdiattot +rtrn ) 
     295                  znanotot = enano(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
     296                  zprod    = rday * zprorcan(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk) 
     297                  zprochln = chlcmin * 12. * zprorcan (ji,jj,jk) 
     298                  chlcnm_n   = MIN ( chlcnm, ( chlcnm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 
     299                  zprochln = zprochln + (chlcnm_n-chlcmin) * 12. * zprod / & 
     300                                        & (  zpislopeadn(ji,jj,jk) * znanotot +rtrn) 
     301                  !  production terms for diatoms ( chlorophyll ) 
     302                  zdiattot = ediat(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
     303                  zprod    = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk) 
     304                  zprochld = chlcmin * 12. * zprorcad(ji,jj,jk) 
     305                  chlcdm_n   = MIN ( chlcdm, ( chlcdm / (1. - 1.14 / 43.4 * tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 
     306                  zprochld = zprochld + (chlcdm_n-chlcmin) * 12. * zprod / & 
     307                                        & ( zpislopeadd(ji,jj,jk) * zdiattot +rtrn ) 
     308                  !   Update the arrays TRA which contain the Chla sources and sinks 
     309                  tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) + zprochln * texcretn 
     310                  tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) + zprochld * texcretd 
    334311               ENDIF 
    335312            END DO 
     
    341318         DO jj = 1, jpj 
    342319           DO ji =1 ,jpi 
    343               zproreg  = zprorca(ji,jj,jk) - zpronew(ji,jj,jk) 
    344               zproreg2 = zprorcad(ji,jj,jk) - zpronewd(ji,jj,jk) 
    345               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - zprorca(ji,jj,jk) - zprorcad(ji,jj,jk) 
    346               tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - zpronew(ji,jj,jk) - zpronewd(ji,jj,jk) 
    347               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zproreg - zproreg2 
    348               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zprorca(ji,jj,jk) * texcret 
    349               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) + zprochln(ji,jj,jk) * texcret 
    350               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) + zprofen(ji,jj,jk) * texcret 
    351               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) + zprorcad(ji,jj,jk) * texcret2 
    352               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) + zprochld(ji,jj,jk) * texcret2 
    353               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcret2 
    354               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcret2 
    355               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + excret2 * zprorcad(ji,jj,jk) + excret * zprorca(ji,jj,jk) 
    356               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2ut * ( zproreg + zproreg2) & 
    357                  &                + ( o2ut + o2nit ) * ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) ) 
    358               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - texcret * zprofen(ji,jj,jk) - texcret2 * zprofed(ji,jj,jk) 
    359               tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - texcret2 * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 
    360               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorca(ji,jj,jk) - zprorcad(ji,jj,jk) 
    361               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) ) & 
    362                  &                                      - rno3 * ( zproreg + zproreg2 ) 
    363           END DO 
     320              IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     321                 zproreg  = zprorcan(ji,jj,jk) - zpronewn(ji,jj,jk) 
     322                 zproreg2 = zprorcad(ji,jj,jk) - zpronewd(ji,jj,jk) 
     323                 zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 
     324                 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 
     325                 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - zpronewn(ji,jj,jk) - zpronewd(ji,jj,jk) 
     326                 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zproreg - zproreg2 
     327                 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zprorcan(ji,jj,jk) * texcretn 
     328                 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) + zprofen(ji,jj,jk) * texcretn 
     329                 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) + zprorcad(ji,jj,jk) * texcretd 
     330                 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcretd 
     331                 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcretd 
     332                 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zdocprod 
     333                 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2ut * ( zproreg + zproreg2) & 
     334                 &                   + ( o2ut + o2nit ) * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) 
     335                 ! 
     336                 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
     337                 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zfeup 
     338                 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - texcretd * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 
     339                 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 
     340                 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) & 
     341                 &                                         - rno3 * ( zproreg + zproreg2 ) 
     342              ENDIF 
     343           END DO 
    364344        END DO 
    365345     END DO 
     346     ! 
     347     IF( ln_ligand ) THEN 
     348         DO jk = 1, jpkm1 
     349            DO jj = 1, jpj 
     350              DO ji =1 ,jpi 
     351                 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     352                    zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 
     353                    zfeup    = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
     354                    tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet 
     355                 ENDIF 
     356              END DO 
     357           END DO 
     358        END DO 
     359     ENDIF 
    366360 
    367361 
    368362    ! Total primary production per year 
    369363    IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
    370          & tpp = glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 
     364         & tpp = glob_sum( ( zprorcan(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 
    371365 
    372366    IF( lk_iomput ) THEN 
     
    376370          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s 
    377371          ! 
    378           IF( iom_use( "PPPHY" ) .OR. iom_use( "PPPHY2" ) )  THEN 
    379               zw3d(:,:,:) = zprorca (:,:,:) * zfact * tmask(:,:,:)  ! primary production by nanophyto 
    380               CALL iom_put( "PPPHY"  , zw3d ) 
     372          IF( iom_use( "PPPHYN" ) .OR. iom_use( "PPPHYD" ) )  THEN 
     373              zw3d(:,:,:) = zprorcan(:,:,:) * zfact * tmask(:,:,:)  ! primary production by nanophyto 
     374              CALL iom_put( "PPPHYN"  , zw3d ) 
    381375              ! 
    382376              zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:)  ! primary production by diatomes 
    383               CALL iom_put( "PPPHY2"  , zw3d ) 
     377              CALL iom_put( "PPPHYD"  , zw3d ) 
    384378          ENDIF 
    385379          IF( iom_use( "PPNEWN" ) .OR. iom_use( "PPNEWD" ) )  THEN 
    386               zw3d(:,:,:) = zpronew (:,:,:) * zfact * tmask(:,:,:)  ! new primary production by nanophyto 
     380              zw3d(:,:,:) = zpronewn(:,:,:) * zfact * tmask(:,:,:)  ! new primary production by nanophyto 
    387381              CALL iom_put( "PPNEWN"  , zw3d ) 
    388382              ! 
     
    420414          ENDIF 
    421415          IF( iom_use( "TPP" ) )  THEN 
    422               zw3d(:,:,:) = ( zprorca(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:)  ! total primary production 
     416              zw3d(:,:,:) = ( zprorcan(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:)  ! total primary production 
    423417              CALL iom_put( "TPP"  , zw3d ) 
    424418          ENDIF 
    425419          IF( iom_use( "TPNEW" ) )  THEN 
    426               zw3d(:,:,:) = ( zpronew(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:)  ! total new production 
     420              zw3d(:,:,:) = ( zpronewn(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:)  ! total new production 
    427421              CALL iom_put( "TPNEW"  , zw3d ) 
    428422          ENDIF 
     
    431425              CALL iom_put( "TPBFE"  , zw3d ) 
    432426          ENDIF 
    433           IF( iom_use( "INTPPPHY" ) .OR. iom_use( "INTPPPHY2" ) ) THEN   
     427          IF( iom_use( "INTPPPHYN" ) .OR. iom_use( "INTPPPHYD" ) ) THEN   
    434428             zw2d(:,:) = 0. 
    435429             DO jk = 1, jpkm1 
    436                zw2d(:,:) = zw2d(:,:) + zprorca (:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated  primary produc. by nano 
     430               zw2d(:,:) = zw2d(:,:) + zprorcan(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated  primary produc. by nano 
    437431             ENDDO 
    438              CALL iom_put( "INTPPPHY" , zw2d ) 
     432             CALL iom_put( "INTPPPHYN" , zw2d ) 
    439433             ! 
    440434             zw2d(:,:) = 0. 
     
    442436                zw2d(:,:) = zw2d(:,:) + zprorcad(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated  primary produc. by diatom 
    443437             ENDDO 
    444              CALL iom_put( "INTPPPHY2" , zw2d ) 
     438             CALL iom_put( "INTPPPHYD" , zw2d ) 
    445439          ENDIF 
    446440          IF( iom_use( "INTPP" ) ) THEN    
    447441             zw2d(:,:) = 0. 
    448442             DO jk = 1, jpkm1 
    449                 zw2d(:,:) = zw2d(:,:) + ( zprorca(:,:,jk) + zprorcad(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated pp 
     443                zw2d(:,:) = zw2d(:,:) + ( zprorcan(:,:,jk) + zprorcad(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated pp 
    450444             ENDDO 
    451445             CALL iom_put( "INTPP" , zw2d ) 
     
    454448             zw2d(:,:) = 0. 
    455449             DO jk = 1, jpkm1 
    456                 zw2d(:,:) = zw2d(:,:) + ( zpronew(:,:,jk) + zpronewd(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated new prod 
     450                zw2d(:,:) = zw2d(:,:) + ( zpronewn(:,:,jk) + zpronewd(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated new prod 
    457451             ENDDO 
    458452             CALL iom_put( "INTPNEW" , zw2d ) 
     
    485479     ENDIF 
    486480     ! 
    487      CALL wrk_dealloc( jpi, jpj,      zmixnano, zmixdiat, zstrn                                                  ) 
    488      CALL wrk_dealloc( jpi, jpj, jpk, zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt            )  
    489      CALL wrk_dealloc( jpi, jpj, jpk, zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd ) 
     481     CALL wrk_dealloc( jpi, jpj,  zmixnano, zmixdiat,    zstrn ) 
     482     CALL wrk_dealloc( jpi, jpj, jpk, zpislopeadn, zpislopeadd, zprdia, zprbio, zprdch, zprnch, zysopt )  
     483     CALL wrk_dealloc( jpi, jpj, jpk, zmxl_fac, zmxl_chl ) 
     484     CALL wrk_dealloc( jpi, jpj, jpk, zprorcan, zprorcad, zprofed, zprofen, zpronewn, zpronewd ) 
    490485     ! 
    491486     IF( nn_timing == 1 )  CALL timing_stop('p4z_prod') 
     
    506501      !!---------------------------------------------------------------------- 
    507502      ! 
    508       NAMELIST/nampisprod/ pislope, pislope2, xadap, ln_newprod, bresp, excret, excret2,  & 
     503      NAMELIST/namp4zprod/ pislopen, pisloped, xadap, ln_newprod, bresp, excretn, excretd,  & 
    509504         &                 chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip 
    510505      INTEGER :: ios                 ! Local integer output status for namelist read 
     
    512507 
    513508      REWIND( numnatp_ref )              ! Namelist nampisprod in reference namelist : Pisces phytoplankton production 
    514       READ  ( numnatp_ref, nampisprod, IOSTAT = ios, ERR = 901) 
    515 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisprod in reference namelist', lwp ) 
     509      READ  ( numnatp_ref, namp4zprod, IOSTAT = ios, ERR = 901) 
     510901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zprod in reference namelist', lwp ) 
    516511 
    517512      REWIND( numnatp_cfg )              ! Namelist nampisprod in configuration namelist : Pisces phytoplankton production 
    518       READ  ( numnatp_cfg, nampisprod, IOSTAT = ios, ERR = 902 ) 
    519 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisprod in configuration namelist', lwp ) 
    520       IF(lwm) WRITE ( numonp, nampisprod ) 
     513      READ  ( numnatp_cfg, namp4zprod, IOSTAT = ios, ERR = 902 ) 
     514902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zprod in configuration namelist', lwp ) 
     515      IF(lwm) WRITE ( numonp, namp4zprod ) 
    521516 
    522517      IF(lwp) THEN                         ! control print 
    523518         WRITE(numout,*) ' ' 
    524          WRITE(numout,*) ' Namelist parameters for phytoplankton growth, nampisprod' 
     519         WRITE(numout,*) ' Namelist parameters for phytoplankton growth, namp4zprod' 
    525520         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    526          WRITE(numout,*) '    Enable new parame. of production (T/F)   ln_newprod   =', ln_newprod 
     521         WRITE(numout,*) '    Enable new parame. of production (T/F)   ln_newprod    =', ln_newprod 
    527522         WRITE(numout,*) '    mean Si/C ratio                           grosip       =', grosip 
    528          WRITE(numout,*) '    P-I slope                                 pislope      =', pislope 
    529          WRITE(numout,*) '    Acclimation factor to low light           xadap       =', xadap 
    530          WRITE(numout,*) '    excretion ratio of nanophytoplankton      excret       =', excret 
    531          WRITE(numout,*) '    excretion ratio of diatoms                excret2      =', excret2 
     523         WRITE(numout,*) '    P-I slope                                 pislopen     =', pislopen 
     524         WRITE(numout,*) '    Acclimation factor to low light           xadap        =', xadap 
     525         WRITE(numout,*) '    excretion ratio of nanophytoplankton      excretn      =', excretn 
     526         WRITE(numout,*) '    excretion ratio of diatoms                excretd      =', excretd 
    532527         IF( ln_newprod )  THEN 
    533528            WRITE(numout,*) '    basal respiration in phytoplankton        bresp        =', bresp 
    534529            WRITE(numout,*) '    Maximum Chl/C in phytoplankton            chlcmin      =', chlcmin 
    535530         ENDIF 
    536          WRITE(numout,*) '    P-I slope  for diatoms                    pislope2     =', pislope2 
     531         WRITE(numout,*) '    P-I slope  for diatoms                    pisloped     =', pisloped 
    537532         WRITE(numout,*) '    Minimum Chl/C in nanophytoplankton        chlcnm       =', chlcnm 
    538533         WRITE(numout,*) '    Minimum Chl/C in diatoms                  chlcdm       =', chlcdm 
     
    542537      ! 
    543538      r1_rday   = 1._wp / rday  
    544       texcret   = 1._wp - excret 
    545       texcret2  = 1._wp - excret2 
     539      texcretn  = 1._wp - excretn 
     540      texcretd  = 1._wp - excretd 
    546541      tpp       = 0._wp 
    547542      ! 
     
    558553      ! 
    559554   END FUNCTION p4z_prod_alloc 
    560  
    561555   !!====================================================================== 
    562556END MODULE p4zprod 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90

    r7068 r7162  
    1515   USE trc             !  passive tracers common variables  
    1616   USE sms_pisces      !  PISCES Source Minus Sink variables 
    17    USE p4zopt          !  optical model 
    1817   USE p4zche          !  chemical model 
    1918   USE p4zprod         !  Growth rate of the 2 phyto groups 
    20    USE p4zmeso         !  Sources and sinks of mesozooplankton 
    21    USE p4zint          !  interpolation and computation of various fields 
    2219   USE p4zlim 
    2320   USE prtctl_trc      !  print control for debugging 
     
    3330 
    3431   !! * Shared module variables 
     32   REAL(wp), PUBLIC ::  xremikc    !: remineralisation rate of DOC  
     33   REAL(wp), PUBLIC ::  xremikn    !: remineralisation rate of DON  
     34   REAL(wp), PUBLIC ::  xremikp    !: remineralisation rate of DOP  
    3535   REAL(wp), PUBLIC ::  xremik     !: remineralisation rate of POC  
    36    REAL(wp), PUBLIC ::  xremip     !: remineralisation rate of DOC 
    3736   REAL(wp), PUBLIC ::  nitrif     !: NH4 nitrification rate  
    3837   REAL(wp), PUBLIC ::  xsirem     !: remineralisation rate of POC  
    3938   REAL(wp), PUBLIC ::  xsiremlab  !: fast remineralisation rate of POC  
    4039   REAL(wp), PUBLIC ::  xsilab     !: fraction of labile biogenic silica  
    41  
     40   REAL(wp), PUBLIC ::  feratb     !: Fe/C quota in bacteria 
     41   REAL(wp), PUBLIC ::  xkferb     !: Half-saturation constant for bacteria Fe/C 
    4242 
    4343   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   denitr     !: denitrification array 
    44    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   denitnh4   !: -    -    -    -   - 
    4544 
    4645   !!---------------------------------------------------------------------- 
     
    6362      ! 
    6463      INTEGER  ::   ji, jj, jk 
    65       REAL(wp) ::   zremip, zremik, zsiremin  
     64      REAL(wp) ::   zremik, zremikc, zremikn, zremikp, zsiremin, zfact  
    6665      REAL(wp) ::   zsatur, zsatur2, znusil, znusil2, zdep, zdepmin, zfactdep 
    67       REAL(wp) ::   zbactfer, zorem, zorem2, zofer, zolimit 
    68       REAL(wp) ::   zosil, ztem 
    69       REAL(wp) ::   zofer2 
    70       REAL(wp) ::   zonitr, zfact 
     66      REAL(wp) ::   zbactfer, zolimit, zonitr, zrfact2 
     67      REAL(wp) ::   zosil, ztem, zdenitnh4, zolimic, zolimin, zolimip, zdenitrn, zdenitrp 
    7168      CHARACTER (len=25) :: charout 
    7269      REAL(wp), POINTER, DIMENSION(:,:  ) :: ztempbac 
    73       REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod, zw3d 
     70      REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod, zfacsi, zw3d, zfacsib 
    7471      !!--------------------------------------------------------------------- 
    7572      ! 
     
    7875      ! Allocate temporary workspace 
    7976      CALL wrk_alloc( jpi, jpj,      ztempbac                  ) 
    80       CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi ) 
     77      CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib ) 
    8178 
    8279      ! Initialisation of temprary arrys 
    8380      zdepprod(:,:,:) = 1._wp 
    8481      ztempbac(:,:)   = 0._wp 
     82      zfacsib(:,:,:)  = xsilab / ( 1.0 - xsilab ) 
     83      zfacsi(:,:,:)   = xsilab 
    8584 
    8685      ! Computation of the mean phytoplankton concentration as 
     
    105104      END DO 
    106105 
    107       DO jk = 1, jpkm1 
    108          DO jj = 1, jpj 
    109             DO ji = 1, jpi 
    110                ! DOC ammonification. Depends on depth, phytoplankton biomass 
    111                ! and a limitation term which is supposed to be a parameterization 
    112                !     of the bacterial activity.  
    113                zremik = xremik * xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)  
    114                zremik = MAX( zremik, 2.74e-4 * xstep ) 
    115                ! Ammonification in oxic waters with oxygen consumption 
    116                ! ----------------------------------------------------- 
    117                zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
    118                zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )  
    119                ! Ammonification in suboxic waters with denitrification 
    120                ! ------------------------------------------------------- 
    121                denitr(ji,jj,jk)  = MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit,   & 
    122                   &                     zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc)  ) 
    123                ! 
    124                zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 
    125                denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 
    126                ! 
    127             END DO 
    128          END DO 
    129       END DO 
     106      IF( ln_p4z ) THEN 
     107         DO jk = 1, jpkm1 
     108            DO jj = 1, jpj 
     109               DO ji = 1, jpi 
     110                  ! DOC ammonification. Depends on depth, phytoplankton biomass 
     111                  ! and a limitation term which is supposed to be a parameterization of the bacterial activity.  
     112                  zremik = xremik * xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)  
     113                  zremik = MAX( zremik, 2.74e-4 * xstep ) 
     114                  ! Ammonification in oxic waters with oxygen consumption 
     115                  ! ----------------------------------------------------- 
     116                  zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
     117                  zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )  
     118                  ! Ammonification in suboxic waters with denitrification 
     119                  ! ------------------------------------------------------- 
     120                  denitr(ji,jj,jk)  = MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit,   & 
     121                     &                     zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc)  ) 
     122                  ! 
     123                  zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 
     124                  denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 
     125                  ! 
     126                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) 
     127                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) 
     128                  tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr (ji,jj,jk) * rdenit 
     129                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimi (ji,jj,jk) - denitr(ji,jj,jk) 
     130                  tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimi (ji,jj,jk) * o2ut 
     131                  tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) 
     132                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimi(ji,jj,jk)    & 
     133                  &                     + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
     134               END DO 
     135            END DO 
     136         END DO 
     137      ELSE 
     138         DO jk = 1, jpkm1 
     139            DO jj = 1, jpj 
     140               DO ji = 1, jpi 
     141                  ! DOC ammonification. Depends on depth, phytoplankton biomass 
     142                  ! and a limitation term which is supposed to be a parameterization of the bacterial activity.  
     143                  ! ----------------------------------------------------------------- 
     144                  zremik = xstep / 1.e-6 * MAX(0.01, xlimbac(ji,jj,jk)) * zdepbac(ji,jj,jk)  
     145                  zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 
     146 
     147                  zremikc = xremikc * zremik 
     148                  zremikn = xremikn / xremikc 
     149                  zremikp = xremikp / xremikc 
     150 
     151                  ! Ammonification in oxic waters with oxygen consumption 
     152                  ! ----------------------------------------------------- 
     153                  zolimit = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
     154                  zolimic = MAX( 0.e0, MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit ) )  
     155                  zolimi(ji,jj,jk) = zolimic 
     156                  zolimin = zremikn * zolimic * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
     157                  zolimip = zremikp * zolimic * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn )  
     158 
     159                  ! Ammonification in suboxic waters with denitrification 
     160                  ! ------------------------------------------------------- 
     161                  zolimit = zremikc * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 
     162                  denitr(ji,jj,jk)  = MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, zolimit ) 
     163                  denitr(ji,jj,jk) = MAX( 0.e0, denitr(ji,jj,jk) ) 
     164                  zdenitrn  = zremikn * denitr(ji,jj,jk) * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
     165                  zdenitrp  = zremikp * denitr(ji,jj,jk) * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
     166 
     167                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimip + zdenitrp 
     168                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimin + zdenitrn 
     169                  tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr(ji,jj,jk) * rdenit 
     170                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimic - denitr(ji,jj,jk) 
     171                  tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zolimin - zdenitrn 
     172                  tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zolimip - zdenitrp 
     173                  tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimic * o2ut 
     174                  tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimic + denitr(ji,jj,jk) 
     175                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimin + ( rdenit + 1.) * zdenitrn ) 
     176               END DO 
     177            END DO 
     178         END DO 
     179         ! 
     180      ENDIF 
    130181 
    131182 
     
    136187               ! below 2 umol/L. Inhibited at strong light  
    137188               ! ---------------------------------------------------------- 
    138                zonitr  =nitrif * xstep * trb(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) )  
    139                denitnh4(ji,jj,jk) = nitrif * xstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk)  
     189               zonitr  = nitrif * xstep * trb(ji,jj,jk,jpnh4) * ( 1.- nitrfac(ji,jj,jk) )  & 
     190               &         / ( 1.+ emoy(ji,jj,jk) ) * ( 1. + fr_i(ji,jj) * emoy(ji,jj,jk) )  
     191               zdenitnh4 = nitrif * xstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk) 
    140192               ! Update of the tracers trends 
    141193               ! ---------------------------- 
    142                tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zonitr - denitnh4(ji,jj,jk) 
    143                tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr - rdenita * denitnh4(ji,jj,jk) 
     194               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zonitr - zdenitnh4 
     195               tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr - rdenita * zdenitnh4 
    144196               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2nit * zonitr 
    145                tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr + rno3 * ( rdenita - 1. ) * denitnh4(ji,jj,jk) 
     197               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr + rno3 * ( rdenita - 1. ) * zdenitnh4 
    146198            END DO 
    147199         END DO 
     
    162214               ! studies (especially at Papa) have shown this uptake to be significant 
    163215               ! ---------------------------------------------------------- 
    164                zbactfer = 10.e-6 *  rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk)             & 
    165                   &              * trb(ji,jj,jk,jpfer) / ( 2.5E-10 + trb(ji,jj,jk,jpfer) )    & 
     216               zbactfer = feratb *  rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk)             & 
     217                  &              * trb(ji,jj,jk,jpfer) / ( xkferb + trb(ji,jj,jk,jpfer) )    & 
    166218                  &              * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 
    167219               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.16 
     
    178230       ENDIF 
    179231 
     232      ! Initialization of the array which contains the labile fraction 
     233      ! of bSi. Set to a constant in the upper ocean 
     234      ! --------------------------------------------------------------- 
     235 
    180236      DO jk = 1, jpkm1 
    181237         DO jj = 1, jpj 
    182238            DO ji = 1, jpi 
    183                ! POC disaggregation by turbulence and bacterial activity.  
    184                ! -------------------------------------------------------- 
    185                zremip = xremip * xstep * tgfunc(ji,jj,jk) * ( 1.- 0.55 * nitrfac(ji,jj,jk) )  
    186  
    187                ! POC disaggregation rate is reduced in anoxic zone as shown by 
    188                ! sediment traps data. In oxic area, the exponent of the martin s 
    189                ! law is around -0.87. In anoxic zone, it is around -0.35. This 
    190                ! means a disaggregation constant about 0.5 the value in oxic zones 
    191                ! ----------------------------------------------------------------- 
    192                zorem  = zremip * trb(ji,jj,jk,jppoc) 
    193                zofer  = zremip * trb(ji,jj,jk,jpsfe) 
    194                zorem2 = zremip * trb(ji,jj,jk,jpgoc) 
    195                zofer2 = zremip * trb(ji,jj,jk,jpbfe) 
    196  
    197                ! Update the appropriate tracers trends 
    198                ! ------------------------------------- 
    199  
    200                tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem 
    201                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer 
    202                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem2 - zorem 
    203                tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zorem2 
    204                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zofer2 - zofer 
    205                tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zofer2 
    206  
    207             END DO 
    208          END DO 
    209       END DO 
    210  
    211        IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    212          WRITE(charout, FMT="('rem3')") 
    213          CALL prt_ctl_trc_info(charout) 
    214          CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 
    215        ENDIF 
    216  
    217       DO jk = 1, jpkm1 
    218          DO jj = 1, jpj 
    219             DO ji = 1, jpi 
     239               zdep     = MAX( hmld(ji,jj), heup_01(ji,jj) ) 
     240               zsatur   = MAX( rtrn, ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) ) 
     241               zsatur2  = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 
     242               znusil   = 0.225  * ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 
    220243               ! Remineralization rate of BSi depedant on T and saturation 
    221244               ! --------------------------------------------------------- 
    222                zsatur   = ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 
    223                zsatur   = MAX( rtrn, zsatur ) 
    224                zsatur2  = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 
    225                znusil   = 0.225  * ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 
    226                znusil2  = 0.225  * ( 1. + tsn(ji,jj,1,jp_tem) / 15.) + 0.775 * zsatur2 
    227  
    228                ! Two classes of BSi are considered : a labile fraction and  
    229                ! a more refractory one. The ratio between both fractions is 
    230                ! constant and specified in the namelist. 
    231                ! ---------------------------------------------------------- 
    232                zdep     = MAX( hmld(ji,jj), heup(ji,jj) )  
    233                zdep     = MAX( 0., gdept_n(ji,jj,jk) - zdep ) 
    234                ztem     = MAX( tsn(ji,jj,1,jp_tem), 0. ) 
    235                zfactdep = xsilab * EXP(-( xsiremlab - xsirem ) * znusil2 * zdep / wsbio2 ) * ztem / ( ztem + 10. ) 
    236                zsiremin = ( xsiremlab * zfactdep + xsirem * ( 1. - zfactdep ) ) * xstep * znusil 
     245               IF ( gdept_n(ji,jj,jk) > zdep ) THEN 
     246                  zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk-1) * EXP( -0.5 * ( xsiremlab - xsirem )  & 
     247                  &                   * znusil * e3t_n(ji,jj,jk) / wsbio4(ji,jj,jk) ) 
     248                  zfacsi(ji,jj,jk)  = zfacsib(ji,jj,jk) / ( 1.0 + zfacsib(ji,jj,jk) ) 
     249                  zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk) * EXP( -0.5 * ( xsiremlab - xsirem )    & 
     250                  &                   * znusil * e3t_n(ji,jj,jk) / wsbio4(ji,jj,jk) ) 
     251               ENDIF 
     252               zsiremin = ( xsiremlab * zfacsi(ji,jj,jk) + xsirem * ( 1. - zfacsi(ji,jj,jk) ) ) * xstep * znusil 
    237253               zosil    = zsiremin * trb(ji,jj,jk,jpgsi) 
    238254               ! 
     
    245261 
    246262      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    247          WRITE(charout, FMT="('rem4')") 
     263         WRITE(charout, FMT="('rem3')") 
    248264         CALL prt_ctl_trc_info(charout) 
    249265         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 
    250266       ENDIF 
    251  
    252       ! Update the arrays TRA which contain the biological sources and sinks 
    253       ! -------------------------------------------------------------------- 
    254  
    255       DO jk = 1, jpkm1 
    256          tra(:,:,jk,jppo4) = tra(:,:,jk,jppo4) + zolimi (:,:,jk) + denitr(:,:,jk) 
    257          tra(:,:,jk,jpnh4) = tra(:,:,jk,jpnh4) + zolimi (:,:,jk) + denitr(:,:,jk) 
    258          tra(:,:,jk,jpno3) = tra(:,:,jk,jpno3) - denitr (:,:,jk) * rdenit 
    259          tra(:,:,jk,jpdoc) = tra(:,:,jk,jpdoc) - zolimi (:,:,jk) - denitr(:,:,jk) 
    260          tra(:,:,jk,jpoxy) = tra(:,:,jk,jpoxy) - zolimi (:,:,jk) * o2ut 
    261          tra(:,:,jk,jpdic) = tra(:,:,jk,jpdic) + zolimi (:,:,jk) + denitr(:,:,jk) 
    262          tra(:,:,jk,jptal) = tra(:,:,jk,jptal) + rno3 * ( zolimi(:,:,jk) + ( rdenit + 1.) * denitr(:,:,jk) ) 
    263       END DO 
    264267 
    265268      IF( knt == nrdttrc ) THEN 
     
    278281          CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    279282       ENDIF 
    280  
    281       IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    282          WRITE(charout, FMT="('rem6')") 
    283          CALL prt_ctl_trc_info(charout) 
    284          CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 
    285       ENDIF 
    286283      ! 
    287284      CALL wrk_dealloc( jpi, jpj,      ztempbac                  ) 
    288       CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi ) 
     285      CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib ) 
    289286      ! 
    290287      IF( nn_timing == 1 )  CALL timing_stop('p4z_rem') 
     
    305302      !! 
    306303      !!---------------------------------------------------------------------- 
    307       NAMELIST/nampisrem/ xremik, xremip, nitrif, xsirem, xsiremlab, xsilab 
     304      NAMELIST/nampisrem/ xremik, nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, &  
     305         &                xremikc, xremikn, xremikp 
    308306      INTEGER :: ios                 ! Local integer output status for namelist read 
    309307 
     
    321319         WRITE(numout,*) ' Namelist parameters for remineralization, nampisrem' 
    322320         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    323          WRITE(numout,*) '    remineralisation rate of POC              xremip    =', xremip 
    324          WRITE(numout,*) '    remineralization rate of DOC              xremik    =', xremik 
     321         IF( ln_p4z ) THEN 
     322            WRITE(numout,*) '    remineralization rate of DOC              xremik    =', xremik 
     323         ELSE 
     324            WRITE(numout,*) '    remineralization rate of DOC              xremikc   =', xremikc 
     325            WRITE(numout,*) '    remineralization rate of DON              xremikn   =', xremikn 
     326            WRITE(numout,*) '    remineralization rate of DOP              xremikp   =', xremikp 
     327         ENDIF 
    325328         WRITE(numout,*) '    remineralization rate of Si               xsirem    =', xsirem 
    326329         WRITE(numout,*) '    fast remineralization rate of Si          xsiremlab =', xsiremlab 
    327330         WRITE(numout,*) '    fraction of labile biogenic silica        xsilab    =', xsilab 
    328331         WRITE(numout,*) '    NH4 nitrification rate                    nitrif    =', nitrif 
     332         WRITE(numout,*) '    Bacterial Fe/C ratio                      feratb    =', feratb 
     333         WRITE(numout,*) '    Half-saturation constant for bact. Fe/C   xkferb    =', xkferb 
    329334      ENDIF 
    330335      ! 
    331336      denitr  (:,:,:) = 0._wp 
    332       denitnh4(:,:,:) = 0._wp 
    333337      ! 
    334338   END SUBROUTINE p4z_rem_init 
     
    339343      !!                     ***  ROUTINE p4z_rem_alloc  *** 
    340344      !!---------------------------------------------------------------------- 
    341       ALLOCATE( denitr(jpi,jpj,jpk), denitnh4(jpi,jpj,jpk), STAT=p4z_rem_alloc ) 
     345      ALLOCATE( denitr(jpi,jpj,jpk), STAT=p4z_rem_alloc ) 
    342346      ! 
    343347      IF( p4z_rem_alloc /= 0 )   CALL ctl_warn('p4z_rem_alloc: failed to allocate arrays') 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90

    r7068 r7162  
    3737   REAL(wp), PUBLIC  :: concfediaz  !: Fe half-saturation Cste for diazotrophs  
    3838   REAL(wp)          :: hratio      !: Fe:3He ratio assumed for vent iron supply 
     39   REAL(wp), PUBLIC  :: fep_rats    !: Fep/Fer ratio from sed  sources 
     40   REAL(wp), PUBLIC  :: fep_rath    !: Fep/Fer ratio from hydro sources 
     41 
    3942 
    4043   LOGICAL , PUBLIC  :: ll_sbc 
     
    6669   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdic, rivalk    !: river input fields 
    6770   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdin, rivdip    !: river input fields 
     71   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdon, rivdop    !: river input fields 
     72   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdoc    !: river input fields 
    6873   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdsi    !: river input fields 
    6974   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: nitdep    !: atmospheric N deposition  
     
    130135         IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_riv > 1 ) ) THEN 
    131136            CALL fld_read( kt, 1, sf_river ) 
    132             DO jj = 1, jpj 
    133                DO ji = 1, jpi 
    134                   zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj)  
    135                   rivalk(ji,jj) =   sf_river(jr_dic)%fnow(ji,jj,1)                                    & 
    136                      &              * 1.E3        / ( 12. * zcoef + rtrn ) 
    137                   rivdic(ji,jj) = ( sf_river(jr_dic)%fnow(ji,jj,1) + sf_river(jr_doc)%fnow(ji,jj,1) ) & 
    138                      &              * 1.E3         / ( 12. * zcoef + rtrn ) 
    139                   rivdin(ji,jj) = ( sf_river(jr_din)%fnow(ji,jj,1) + sf_river(jr_don)%fnow(ji,jj,1) ) & 
    140                      &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) 
    141                   rivdip(ji,jj) = ( sf_river(jr_dip)%fnow(ji,jj,1) + sf_river(jr_dop)%fnow(ji,jj,1) ) & 
    142                      &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) 
    143                   rivdsi(ji,jj) =   sf_river(jr_dsi)%fnow(ji,jj,1)                                    & 
    144                      &              * 1.E3        / ( 28.1 * zcoef + rtrn ) 
     137            IF( ln_p4z ) THEN 
     138               DO jj = 1, jpj 
     139                  DO ji = 1, jpi 
     140                     zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj)  
     141                     rivalk(ji,jj) =   sf_river(jr_dic)%fnow(ji,jj,1)                                    & 
     142                        &              * 1.E3        / ( 12. * zcoef + rtrn ) 
     143                     rivdic(ji,jj) = ( sf_river(jr_dic)%fnow(ji,jj,1) + sf_river(jr_doc)%fnow(ji,jj,1) ) & 
     144                        &              * 1.E3         / ( 12. * zcoef + rtrn ) 
     145                     rivdin(ji,jj) = ( sf_river(jr_din)%fnow(ji,jj,1) + sf_river(jr_don)%fnow(ji,jj,1) ) & 
     146                        &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) 
     147                     rivdip(ji,jj) = ( sf_river(jr_dip)%fnow(ji,jj,1) + sf_river(jr_dop)%fnow(ji,jj,1) ) & 
     148                        &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) 
     149                     rivdsi(ji,jj) =   sf_river(jr_dsi)%fnow(ji,jj,1)                                    & 
     150                        &              * 1.E3        / ( 28.1 * zcoef + rtrn ) 
     151                  END DO 
    145152               END DO 
    146             END DO 
     153            ELSE    !  ln_p5z 
     154               DO jj = 1, jpj 
     155                  DO ji = 1, jpi 
     156                     zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj)  
     157                     rivalk(ji,jj) =   sf_river(jr_dic)%fnow(ji,jj,1)                                    & 
     158                        &              * 1.E3        / ( 12. * zcoef + rtrn ) 
     159                     rivdic(ji,jj) = ( sf_river(jr_dic)%fnow(ji,jj,1) ) & 
     160                        &              * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1) 
     161                     rivdin(ji,jj) = ( sf_river(jr_din)%fnow(ji,jj,1) ) & 
     162                        &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) * tmask(ji,jj,1) 
     163                     rivdip(ji,jj) = ( sf_river(jr_dip)%fnow(ji,jj,1) ) & 
     164                        &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 
     165                     rivdoc(ji,jj) = ( sf_river(jr_doc)%fnow(ji,jj,1) ) & 
     166                        &              * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1) 
     167                     rivdon(ji,jj) = ( sf_river(jr_don)%fnow(ji,jj,1) ) & 
     168                        &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) * tmask(ji,jj,1) 
     169                     rivdop(ji,jj) = ( sf_river(jr_dop)%fnow(ji,jj,1) ) & 
     170                        &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 
     171                  END DO 
     172               END DO 
     173            ENDIF 
    147174         ENDIF 
    148175      ENDIF 
     
    201228        &                sn_riverdip, sn_riverdop, sn_riverdsi, sn_ndepo, sn_ironsed, sn_hydrofe, & 
    202229        &                ln_dust, ln_solub, ln_river, ln_ndepo, ln_ironsed, ln_ironice, ln_hydrofe,    & 
    203         &                sedfeinput, dustsolub, icefeinput, wdust, mfrac, nitrfix, diazolight, concfediaz, hratio 
     230        &                sedfeinput, dustsolub, icefeinput, wdust, mfrac, nitrfix, diazolight, concfediaz, & 
     231        &                hratio, fep_rats, fep_rath 
    204232      !!---------------------------------------------------------------------- 
    205233      ! 
     
    245273         WRITE(numout,*) '    fe half-saturation cste for diazotrophs  concfediaz  = ', concfediaz 
    246274         WRITE(numout,*) '    Fe to 3He ratio assumed for vent iron supply hratio  = ', hratio 
     275         IF( ln_ligand ) THEN 
     276            WRITE(numout,*) '    Fep/Fer ratio from sed sources                       = ', fep_rats 
     277            WRITE(numout,*) '    Fep/Fer ratio from sed hydro sources                 = ', fep_rath 
     278         ENDIF 
    247279      END IF 
    248280 
     
    330362         ! 
    331363         ALLOCATE( rivdic(jpi,jpj), rivalk(jpi,jpj), rivdin(jpi,jpj), rivdip(jpi,jpj), rivdsi(jpi,jpj) )  
     364         IF( ln_p5z )  ALLOCATE( rivdon(jpi,jpj), rivdop(jpi,jpj), rivdoc(jpi,jpj) ) 
    332365         ! 
    333366         ALLOCATE( sf_river(jpriv), rivinput(jpriv), STAT=ierr1 )           !* allocate and fill sf_river (forcing structure) with sn_river_ 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90

    r7068 r7162  
    1414   USE trc             !  passive tracers common variables  
    1515   USE sms_pisces      !  PISCES Source Minus Sink variables 
    16    USE p4zsink         !  vertical flux of particulate matter due to sinking 
    17    USE p4zopt          !  optical model 
    1816   USE p4zlim          !  Co-limitations of differents nutrients 
    1917   USE p4zsbc          !  External source of nutrients  
     
    5755      REAL(wp) ::  zlim, zfact, zfactcal 
    5856      REAL(wp) ::  zo2, zno3, zflx, zpdenit, z1pdenit, zdenitt, zolimit 
    59       REAL(wp) ::  zsiloss, zcaloss, zws3, zws4, zwsc, zdep, zwstpoc 
    60       REAL(wp) ::  ztrfer, ztrpo4, zwdust, zlight 
     57      REAL(wp) ::  zsiloss, zcaloss, zws3, zws4, zwsc, zdep 
     58      REAL(wp) ::  zwstpoc, zwstpon, zwstpop 
     59      REAL(wp) ::  ztrfer, ztrpo4s, ztrdp, zwdust, zmudia, ztemp 
     60      REAL(wp) ::  xdiano3, xdianh4 
     61      REAL(wp) ::  zwssfep 
    6162      ! 
    6263      CHARACTER (len=25) :: charout 
    63       REAL(wp), POINTER, DIMENSION(:,:  ) :: zpdep, zsidep, zwork1, zwork2, zwork3 
     64      REAL(wp), POINTER, DIMENSION(:,:  ) :: zsidep, zwork1, zwork2, zwork3 
    6465      REAL(wp), POINTER, DIMENSION(:,:  ) :: zdenit2d, zironice, zbureff 
    6566      REAL(wp), POINTER, DIMENSION(:,:  ) :: zwsbio3, zwsbio4, zwscal 
    66       REAL(wp), POINTER, DIMENSION(:,:,:) :: zirondep, zsoufer 
     67      REAL(wp), POINTER, DIMENSION(:,:  ) :: zsedcal, zsedsi, zsedc 
     68      REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrpo4, ztrdop, zirondep, zsoufer, zpdep, zlight 
     69      REAL(wp), POINTER, DIMENSION(:,:  ) :: zwsfep 
     70 
    6771      !!--------------------------------------------------------------------- 
    6872      ! 
     
    7276      ! 
    7377      ! Allocate temporary workspace 
    74       CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 
    75       CALL wrk_alloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
    76       CALL wrk_alloc( jpi, jpj, jpk, zsoufer ) 
     78                      CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 
     79                      CALL wrk_alloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
     80                      CALL wrk_alloc( jpi, jpj, zsedcal,  zsedsi, zsedc ) 
     81                      CALL wrk_alloc( jpi, jpj, jpk, zlight, zsoufer ) 
     82      IF( ln_p5z )    CALL wrk_alloc( jpi, jpj, jpk, ztrpo4, ztrdop ) 
     83      IF( ln_ligand ) CALL wrk_alloc( jpi, jpj, zwsfep ) 
     84 
    7785 
    7886      zdenit2d(:,:) = 0.e0 
     
    8189      zwork2  (:,:) = 0.e0 
    8290      zwork3  (:,:) = 0.e0 
     91      zsedsi  (:,:) = 0.e0 
     92      zsedcal (:,:) = 0.e0 
     93      zsedc   (:,:) = 0.e0 
     94 
    8395 
    8496      ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. 
     
    111123      IF( ln_dust ) THEN 
    112124         !                                               
    113          CALL wrk_alloc( jpi, jpj,      zpdep, zsidep ) 
    114          CALL wrk_alloc( jpi, jpj, jpk, zirondep      ) 
     125         CALL wrk_alloc( jpi, jpj,      zsidep ) 
     126         CALL wrk_alloc( jpi, jpj, jpk, zpdep, zirondep      ) 
    115127         !                                              ! Iron and Si deposition at the surface 
    116128         IF( ln_solub ) THEN 
     
    119131            zirondep(:,:,1) = dustsolub  * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss  
    120132         ENDIF 
    121          zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1  
    122          zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 31. / po4r  
     133         zsidep(:,:)   = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1  
     134         zpdep (:,:,1) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 31. / po4r  
    123135         !                                              ! Iron solubilization of particles in the water column 
    124136         !                                              ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ;  wdust in m/j 
     
    126138         DO jk = 2, jpkm1 
    127139            zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -gdept_n(:,:,jk) / 540. ) 
     140            zpdep   (:,:,jk) = zirondep(:,:,jk) * 0.023 
    128141         END DO 
    129142         !                                              ! Iron solubilization of particles in the water column 
    130          tra(:,:,1,jppo4) = tra(:,:,1,jppo4) + zpdep   (:,:) 
    131143         tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep  (:,:) 
     144         tra(:,:,:,jppo4) = tra(:,:,:,jppo4) + zpdep   (:,:,:) 
    132145         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + zirondep(:,:,:)  
    133146         !  
     
    140153            ENDIF 
    141154         ENDIF 
    142          CALL wrk_dealloc( jpi, jpj,      zpdep, zsidep ) 
    143          CALL wrk_dealloc( jpi, jpj, jpk, zirondep      ) 
     155         CALL wrk_dealloc( jpi, jpj,      zsidep ) 
     156         CALL wrk_dealloc( jpi, jpj, jpk, zpdep, zirondep      ) 
    144157         !                                               
    145158      ENDIF 
     
    160173            ENDDO 
    161174         ENDDO 
     175         IF( ln_p5z ) THEN 
     176            DO jj = 1, jpj 
     177               DO ji = 1, jpi 
     178                  DO jk = 1, nk_rnf(ji,jj) 
     179                     tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + rivdop(ji,jj) * rfact2 
     180                     tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + rivdon(ji,jj) * rfact2 
     181                     tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + rivdoc(ji,jj) * rfact2 
     182                  ENDDO 
     183               ENDDO 
     184            ENDDO 
     185         ENDIF 
    162186      ENDIF 
    163187       
     
    172196      ! ------------------------------------------------------ 
    173197      IF( ln_ironsed ) THEN 
    174          tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 
     198                         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 
     199         IF( ln_ligand ) tra(:,:,:,jpfep) = tra(:,:,:,jpfep) + ( ironsed(:,:,:) * fep_rats ) * rfact2 
    175200         ! 
    176201         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) )   & 
     
    181206      ! ------------------------------------------------------ 
    182207      IF( ln_hydrofe ) THEN 
    183          tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 
     208            tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 
     209         IF( ln_ligand ) THEN 
     210            tra(:,:,:,jpfep) = tra(:,:,:,jpfep) + ( hydrofe(:,:,:) * fep_rath ) * rfact2 
     211            tra(:,:,:,jplgw) = tra(:,:,:,jplgw) + ( hydrofe(:,:,:) * 0.5 ) * rfact2 
     212         ENDIF 
    184213         ! 
    185214         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "HYDR" ) )   & 
     
    198227         END DO 
    199228      END DO 
     229      IF( ln_ligand ) THEN 
     230         DO jj = 1, jpj 
     231            DO ji = 1, jpi 
     232               ikt  = mbkt(ji,jj) 
     233               zdep = e3t_n(ji,jj,ikt) / xstep 
     234               zwsfep(ji,jj)  = MIN( 0.99 * zdep, wsfep(ji,jj,ikt)  ) 
     235            END DO 
     236         ENDDO 
     237      ENDIF 
    200238 
    201239      IF( .NOT.lk_sed ) THEN 
     
    215253                 zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3    & 
    216254                   &                + 0.4721 * zo2 - 0.0996 * zdep + 0.4256 * zflx * zo2 
    217                    zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 
     255                 zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 
    218256                   ! 
    219                    zflx = (  trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
    220                      &     + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 
    221                    zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 
     257                 zflx = (  trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
     258                   &     + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 
     259                 zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 
    222260                ENDIF 
    223261              END DO 
     
    250288      ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers) 
    251289      ! ------------------------------------------------------ 
    252       IF( .NOT.lk_sed )    zrivsil =  1._wp - ( sumdepsi + rivdsiinput * r1_ryyss ) / ( zsumsedsi + rtrn ) 
     290      IF( .NOT.lk_sed )  zrivsil =  1._wp - ( sumdepsi + rivdsiinput * r1_ryyss ) / ( zsumsedsi + rtrn ) 
    253291 
    254292      DO jj = 1, jpj 
     
    270308               tra(ji,jj,ikt,jptal) =  tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 
    271309               tra(ji,jj,ikt,jpdic) =  tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk 
     310               zsedcal(ji,jj) = (1.0 - zrivalk) * zcaloss / zdep 
     311               zsedsi (ji,jj) = (1.0 - zrivsil) * zsiloss / zdep 
    272312            ENDIF 
    273313         END DO 
     
    280320            zws4 = zwsbio4(ji,jj) * zdep 
    281321            zws3 = zwsbio3(ji,jj) * zdep 
    282             zrivno3 = 1. - zbureff(ji,jj) 
    283322            tra(ji,jj,ikt,jpgoc) = tra(ji,jj,ikt,jpgoc) - trb(ji,jj,ikt,jpgoc) * zws4  
    284323            tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 
     
    286325            tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 
    287326            zwstpoc              = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 
    288  
    289             IF( .NOT.lk_sed ) THEN 
    290                ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 
    291                ! in the sediments and just above the sediments. Not very clever, but simpliest option. 
     327            IF( ln_ligand ) THEN 
     328               zwssfep = zwsfep(ji,jj) * zdep 
     329               tra(ji,jj,ikt,jpfep) = tra(ji,jj,ikt,jpfep) - trb(ji,jj,ikt,jpfep) * zwssfep 
     330            ENDIF 
     331            IF( ln_p5z ) THEN 
     332               tra(ji,jj,ikt,jpgon) = tra(ji,jj,ikt,jpgon) - trb(ji,jj,ikt,jpgon) * zws4 
     333               tra(ji,jj,ikt,jppon) = tra(ji,jj,ikt,jppon) - trb(ji,jj,ikt,jppon) * zws3 
     334               tra(ji,jj,ikt,jpgop) = tra(ji,jj,ikt,jpgop) - trb(ji,jj,ikt,jpgop) * zws4 
     335               tra(ji,jj,ikt,jppop) = tra(ji,jj,ikt,jppop) - trb(ji,jj,ikt,jppop) * zws3 
     336               zwstpop              = trb(ji,jj,ikt,jpgop) * zws4 + trb(ji,jj,ikt,jppop) * zws3 
     337               zwstpon              = trb(ji,jj,ikt,jpgon) * zws4 + trb(ji,jj,ikt,jppon) * zws3 
     338            ENDIF 
     339         END DO 
     340      END DO 
     341 
     342      IF( .NOT.lk_sed ) THEN 
     343         ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 
     344         ! in the sediments and just above the sediments. Not very clever, but simpliest option. 
     345         DO jj = 1, jpj 
     346            DO ji = 1, jpi 
     347               ikt  = mbkt(ji,jj) 
     348               zdep = xstep / e3t_n(ji,jj,ikt)  
     349               zws4 = zwsbio4(ji,jj) * zdep 
     350               zws3 = zwsbio3(ji,jj) * zdep 
     351               zrivno3 = 1. - zbureff(ji,jj) 
     352               zwstpoc = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 
    292353               zpdenit  = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
    293354               z1pdenit = zwstpoc * zrivno3 - zpdenit 
     
    302363               tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 
    303364               sdenit(ji,jj) = rdenit * zpdenit * e3t_n(ji,jj,ikt) 
    304             ENDIF 
    305          END DO 
    306       END DO 
     365               zsedc(ji,jj)   = (1. - zrivno3) * zwstpoc / zdep 
     366               IF( ln_p5z ) THEN 
     367                  tra(ji,jj,ikt,jpdon) = tra(ji,jj,ikt,jpdon) + (z1pdenit - zolimit - zdenitt) * zwstpon / (zwstpoc + rtrn) 
     368                  tra(ji,jj,ikt,jpdop) = tra(ji,jj,ikt,jpdop) + (z1pdenit - zolimit - zdenitt) * zwstpop / (zwstpoc + rtrn) 
     369               ENDIF 
     370            END DO 
     371         END DO 
     372       ENDIF 
     373 
    307374 
    308375      ! Nitrogen fixation process 
     
    310377      !----------------------------------- 
    311378      DO jk = 1, jpkm1 
    312          DO jj = 1, jpj 
    313             DO ji = 1, jpi 
    314                !                      ! Potential nitrogen fixation dependant on temperature and iron 
    315                zlim = ( 1.- xnanono3(ji,jj,jk) - xnanonh4(ji,jj,jk) ) 
    316                IF( zlim <= 0.2 )   zlim = 0.01 
    317                zfact = zlim * rfact2 
    318  
    319                ztrfer = biron(ji,jj,jk)       / ( concfediaz + biron(ji,jj,jk)       ) 
    320                ztrpo4 = trb  (ji,jj,jk,jppo4) / ( concnnh4   + trb  (ji,jj,jk,jppo4) )  
    321                zlight =  ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) )  
    322                nitrpot(ji,jj,jk) =  MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday )   & 
    323                  &         *  zfact * MIN( ztrfer, ztrpo4 ) * zlight 
    324                zsoufer(ji,jj,jk) = zlight * 2E-11 / (2E-11 + biron(ji,jj,jk)) 
     379         zlight (:,:,jk) =  ( 1.- EXP( -etot_ndcy(:,:,jk) / diazolight ) ) * ( 1. - fr_i(:,:) )  
     380         zsoufer(:,:,jk) = zlight(:,:,jk) * 2E-11 / ( 2E-11 + biron(:,:,jk) ) 
     381      ENDDO 
     382      IF( ln_p4z ) THEN 
     383         DO jk = 1, jpkm1 
     384            DO jj = 1, jpj 
     385               DO ji = 1, jpi 
     386                  !                      ! Potential nitrogen fixation dependant on temperature and iron 
     387                  zlim = ( 1.- xnanono3(ji,jj,jk) - xnanonh4(ji,jj,jk) ) 
     388                  IF( zlim <= 0.2 )   zlim = 0.01 
     389                  zfact = zlim * rfact2 
     390 
     391                  ztrfer  = biron(ji,jj,jk)       / ( concfediaz + biron(ji,jj,jk)       ) 
     392                  ztrpo4s = trb  (ji,jj,jk,jppo4) / ( concnnh4   + trb  (ji,jj,jk,jppo4) )  
     393                  nitrpot(ji,jj,jk) =  MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday ) & 
     394                    &                *  zfact * MIN( ztrfer, ztrpo4s ) * zlight(ji,jj,jk) 
     395               END DO 
    325396            END DO 
    326397         END DO 
    327       END DO 
     398      ELSE       ! p5z 
     399         DO jk = 1, jpkm1 
     400            DO jj = 1, jpj 
     401               DO ji = 1, jpi 
     402                  !                      ! Potential nitrogen fixation dependant on temperature and iron 
     403                  ztemp = tsn(ji,jj,jk,jp_tem) 
     404                  zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 
     405                  !       Potential nitrogen fixation dependant on temperature and iron 
     406                  xdianh4 = trb(ji,jj,jk,jpnh4) / ( concnnh4 + trb(ji,jj,jk,jpnh4) ) 
     407                  xdiano3 = trb(ji,jj,jk,jpno3) / ( concnno3 + trb(ji,jj,jk,jpno3) ) * (1. - xdianh4) 
     408                  zlim = ( 1.- xdiano3 - xdianh4 ) 
     409                  IF( zlim <= 0.1 )   zlim = 0.01 
     410                  zfact = zlim * rfact2 
     411                  ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 
     412                  ztrpo4(ji,jj,jk) = trb(ji,jj,jk,jppo4) / ( 1E-6 + trb(ji,jj,jk,jppo4) ) 
     413                  ztrdop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( 1E-6 + trb(ji,jj,jk,jpdop) ) * (1. - ztrpo4(ji,jj,jk)) 
     414                  ztrdp = ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) 
     415                  nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrdp ) * zlight(ji,jj,jk) 
     416               END DO 
     417            END DO 
     418         END DO 
     419      ENDIF 
    328420 
    329421      ! Nitrogen change due to nitrogen fixation 
    330422      ! ---------------------------------------- 
    331       DO jk = 1, jpkm1 
    332          DO jj = 1, jpj 
    333             DO ji = 1, jpi 
    334                zfact = nitrpot(ji,jj,jk) * nitrfix 
    335                tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) +             zfact 
    336                tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3      * zfact 
    337                tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2nit     * zfact  
    338                tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) & 
    339                &                     * 0.002 * trb(ji,jj,jk,jpdoc) * xstep 
    340                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * xstep 
    341            END DO 
    342          END DO  
    343       END DO 
     423      IF( ln_p4z ) THEN 
     424         DO jk = 1, jpkm1 
     425            DO jj = 1, jpj 
     426               DO ji = 1, jpi 
     427                  zfact = nitrpot(ji,jj,jk) * nitrfix 
     428                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) +             zfact 
     429                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3      * zfact 
     430                  tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2nit     * zfact  
     431                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) & 
     432                  &                     * 0.002 * trb(ji,jj,jk,jpdoc) * xstep 
     433                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * xstep 
     434              END DO 
     435            END DO  
     436         END DO 
     437      ELSE    ! p5z 
     438         DO jk = 1, jpkm1 
     439            DO jj = 1, jpj 
     440               DO ji = 1, jpi 
     441                  zfact = nitrpot(ji,jj,jk) * nitrfix 
     442                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zfact / 3.0 
     443                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zfact / 3.0 
     444                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - 16.0 / 46.0 * zfact * ( 1.0 - 1.0 / 3.0 ) & 
     445                  &                     * ztrpo4(ji,jj,jk) / (ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) + rtrn) 
     446                  tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zfact * 1.0 / 3.0 
     447                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zfact * 1.0 / 3.0 
     448                  tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + 16.0 / 46.0 * zfact / 3.0  & 
     449                  &                     - 16.0 / 46.0 * zfact * ztrdop(ji,jj,jk)   & 
     450                  &                     / (ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) + rtrn) 
     451                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zfact * 1.0 / 3.0 * 2.0 / 3.0 
     452                  tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + zfact * 1.0 / 3.0 * 2.0 /3.0 
     453                  tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 2.0 /3.0 
     454                  tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zfact * 1.0 / 3.0 * 1.0 / 3.0 
     455                  tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) + zfact * 1.0 / 3.0 * 1.0 /3.0 
     456                  tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 1.0 /3.0 
     457                  tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0 
     458                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - 30E-6 * zfact * 1.0 / 3.0  
     459                  tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0 
     460                  tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0 
     461                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 
     462              END DO 
     463            END DO  
     464         END DO 
     465         ! 
     466      ENDIF 
    344467 
    345468      IF( lk_iomput ) THEN 
     
    354477               CALL iom_put( "INTNFIX" , zwork1 )  
    355478            ENDIF 
     479            IF( iom_use("SedCal" ) ) CALL iom_put( "SedCal", zsedcal(:,:) * 1.e+3 ) 
     480            IF( iom_use("SedSi" ) )  CALL iom_put( "SedSi",  zsedsi (:,:) * 1.e+3 ) 
     481            IF( iom_use("SedC" ) )   CALL iom_put( "SedC",   zsedc  (:,:) * 1.e+3 ) 
     482            IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * 1.e+3 * rno3 ) 
    356483         ENDIF 
    357484      ENDIF 
     
    363490      ENDIF 
    364491      ! 
    365       CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 
    366       CALL wrk_dealloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
    367       CALL wrk_dealloc( jpi, jpj, jpk, zsoufer ) 
     492                      CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 
     493                      CALL wrk_dealloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
     494                      CALL wrk_dealloc( jpi, jpj, zsedcal,  zsedsi, zsedc ) 
     495                      CALL wrk_dealloc( jpi, jpj, jpk, zlight, zsoufer ) 
     496      IF( ln_p5z )    CALL wrk_dealloc( jpi, jpj, jpk, ztrpo4, ztrdop ) 
     497      IF( ln_ligand ) CALL wrk_dealloc( jpi, jpj, zwsfep ) 
    368498      ! 
    369499      IF( nn_timing == 1 )  CALL timing_stop('p4z_sed') 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90

    r7068 r7162  
    2727   PUBLIC   p4z_sink_alloc 
    2828 
    29    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio3   !: POC sinking speed  
    30    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio4   !: GOC sinking speed 
    31    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wscal    !: Calcite and BSi sinking speeds 
    32  
    3329   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinking, sinking2  !: POC sinking fluxes  
    3430   !                                                          !  (different meanings depending on the parameterization) 
     31   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkingn, sinking2n  !: POC sinking fluxes  
     32   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkingp, sinking2p  !: POC sinking fluxes  
    3533   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkcal, sinksil   !: CaCO3 and BSi sinking fluxes 
    3634   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkfer            !: Small BFe sinking fluxes 
    3735   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkfer2           !: Big iron sinking fluxes 
     36   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkfep      !: Fep sinking fluxes 
    3837 
    3938   INTEGER  :: ik100 
     
    7170      ! 
    7271      IF( nn_timing == 1 )  CALL timing_start('p4z_sink') 
     72 
     73 
     74      ! Initialization of some global variables 
     75      ! --------------------------------------- 
     76      prodpoc(:,:,:) = 0. 
     77      conspoc(:,:,:) = 0. 
     78      prodgoc(:,:,:) = 0. 
     79      consgoc(:,:,:) = 0. 
     80 
    7381      ! 
    7482      !    Sinking speeds of detritus is increased with depth as shown 
     
    7886         DO jj = 1, jpj 
    7987            DO ji = 1,jpi 
    80                zmax  = MAX( heup(ji,jj), hmld(ji,jj) ) 
    81                zfact = MAX( 0., gdepw_n(ji,jj,jk+1) - zmax ) / 5000._wp 
    82                wsbio4(ji,jj,jk) = wsbio2 + ( 200.- wsbio2 ) * zfact 
     88               zmax  = MAX( heup_01(ji,jj), hmld(ji,jj) ) 
     89               zfact = MAX( 0., gdepw_n(ji,jj,jk+1) - zmax ) / wsbio2scale 
     90               wsbio4(ji,jj,jk) = wsbio2 + MAX(0., ( wsbio2max - wsbio2 )) * zfact 
    8391            END DO 
    8492         END DO 
     
    8795      ! limit the values of the sinking speeds to avoid numerical instabilities   
    8896      wsbio3(:,:,:) = wsbio 
    89       wscal (:,:,:) = wsbio4(:,:,:) 
     97 
    9098      ! 
    9199      ! OA This is (I hope) a temporary solution for the problem that may  
     
    135143      END DO 
    136144 
     145      wscal (:,:,:) = wsbio4(:,:,:) 
     146 
    137147      !  Initializa to zero all the sinking arrays  
    138148      !   ----------------------------------------- 
     
    158168      END DO 
    159169 
    160       !  Exchange between organic matter compartments due to coagulation/disaggregation 
    161       !  --------------------------------------------------- 
    162       DO jk = 1, jpkm1 
    163          DO jj = 1, jpj 
    164             DO ji = 1, jpi 
    165                ! 
    166                zfact = xstep * xdiss(ji,jj,jk) 
    167                !  Part I : Coagulation dependent on turbulence 
    168                zagg1 = 25.9  * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
    169                zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
    170  
    171                ! Part II : Differential settling 
    172  
    173                !  Aggregation of small into large particles 
    174                zagg3 =  47.1 * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
    175                zagg4 =  3.3  * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
    176  
    177                zagg   = zagg1 + zagg2 + zagg3 + zagg4 
    178                zaggfe = zagg * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    179  
    180                ! Aggregation of DOC to POC :  
    181                ! 1st term is shear aggregation of DOC-DOC 
    182                ! 2nd term is shear aggregation of DOC-POC 
    183                ! 3rd term is differential settling of DOC-POC 
    184                zaggdoc  = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       & 
    185                &            + 2.4 * xstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc) 
    186                ! transfer of DOC to GOC :  
    187                ! 1st term is shear aggregation 
    188                ! 2nd term is differential settling  
    189                zaggdoc2 = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 
    190                ! tranfer of DOC to POC due to brownian motion 
    191                zaggdoc3 =  ( 5095. * trb(ji,jj,jk,jppoc) + 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) * xstep * 0.3 * trb(ji,jj,jk,jpdoc) 
    192  
    193                !  Update the trends 
    194                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zagg + zaggdoc + zaggdoc3 
    195                tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zagg + zaggdoc2 
    196                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zaggfe 
    197                tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggfe 
    198                tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 - zaggdoc3 
    199                ! 
    200             END DO 
    201          END DO 
    202       END DO 
    203  
     170      IF( ln_p5z ) THEN 
     171         sinkingn (:,:,:) = 0.e0 
     172         sinking2n(:,:,:) = 0.e0 
     173         sinkingp (:,:,:) = 0.e0 
     174         sinking2p(:,:,:) = 0.e0 
     175 
     176         !   Compute the sedimentation term using p4zsink2 for all the sinking particles 
     177         !   ----------------------------------------------------- 
     178         DO jit = 1, iiter1 
     179           CALL p4z_sink2( wsbio3, sinkingn , jppon, iiter1 ) 
     180           CALL p4z_sink2( wsbio3, sinkingp , jppop, iiter1 ) 
     181         END DO 
     182 
     183         DO jit = 1, iiter2 
     184           CALL p4z_sink2( wsbio4, sinking2n, jpgon, iiter2 ) 
     185           CALL p4z_sink2( wsbio4, sinking2p, jpgop, iiter2 ) 
     186         END DO 
     187      ENDIF 
     188 
     189      IF( ln_ligand ) THEN 
     190         wsfep (:,:,:) = wfep 
     191         DO jk = 1,jpkm1 
     192            DO jj = 1, jpj 
     193               DO ji = 1, jpi 
     194                  IF( tmask(ji,jj,jk) == 1 ) THEN 
     195                    zwsmax = 0.5 * e3t_n(ji,jj,jk) / xstep 
     196                    wsfep(ji,jj,jk) = MIN( wsfep(ji,jj,jk), zwsmax * FLOAT( iiter1 ) ) 
     197                  ENDIF 
     198               END DO 
     199            END DO 
     200         END DO 
     201         ! 
     202         sinkfep(:,:,:) = 0.e0 
     203         DO jit = 1, iiter1 
     204           CALL p4z_sink2( wsfep, sinkfep , jpfep, iiter1 ) 
     205         END DO 
     206      ENDIF 
    204207 
    205208     ! Total carbon export per year 
     
    397400      !!                     ***  ROUTINE p4z_sink_alloc  *** 
    398401      !!---------------------------------------------------------------------- 
    399       ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4  (jpi,jpj,jpk) , wscal(jpi,jpj,jpk) ,     & 
    400          &      sinking(jpi,jpj,jpk) , sinking2(jpi,jpj,jpk)                      ,     &                 
    401          &      sinkcal(jpi,jpj,jpk) , sinksil (jpi,jpj,jpk)                      ,     &                 
    402          &      sinkfer2(jpi,jpj,jpk)                                             ,     &                 
    403          &      sinkfer(jpi,jpj,jpk)                                              , STAT=p4z_sink_alloc )                 
     402      INTEGER :: ierr(3) 
     403 
     404      ierr(:) = 0 
     405      ! 
     406      ALLOCATE( sinking(jpi,jpj,jpk) , sinking2(jpi,jpj,jpk)                    ,     &                 
     407         &      sinkcal(jpi,jpj,jpk) , sinksil (jpi,jpj,jpk)                    ,     &                 
     408         &      sinkfer2(jpi,jpj,jpk)                                           ,     &                 
     409         &      sinkfer(jpi,jpj,jpk)                                            , STAT=ierr(1) )                 
    404410         ! 
     411      IF( ln_ligand ) ALLOCATE( sinkfep(jpi,jpj,jpk)                            , STAT=ierr(2) )   
     412          
     413      IF( ln_p5z    ) ALLOCATE( sinkingn(jpi,jpj,jpk), sinking2n(jpi,jpj,jpk)   ,     & 
     414         &                      sinkingp(jpi,jpj,jpk), sinking2p(jpi,jpj,jpk)   , STAT=ierr(3) ) 
     415      ! 
     416      p4z_sink_alloc = MAXVAL( ierr ) 
    405417      IF( p4z_sink_alloc /= 0 ) CALL ctl_warn('p4z_sink_alloc : failed to allocate arrays.') 
    406418      ! 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90

    r7068 r7162  
    7676        CALL p4z_che                              ! initialize the chemical constants 
    7777        ! 
    78         IF( .NOT. ln_rsttr ) THEN  ;   CALL p4z_ph_ini   !  set PH at kt=nit000  
     78        IF( .NOT. ln_rsttr ) THEN  ;   CALL ahini_for_at(hi)   !  set PH at kt=nit000  
    7979        ELSE                       ;   CALL p4z_rst( nittrc000, 'READ' )  !* read or initialize all required fields  
    8080        ENDIF 
     
    8484      IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 )   CALL p4z_dmp( kt )      ! Relaxation of some tracers 
    8585      ! 
    86       !                                                                    !   set time step size (Euler/Leapfrog) 
    87       IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN   ;    rfact = rdttrc     !  at nittrc000 
    88       ELSEIF( kt <= nittrc000 + nn_dttrc )                          THEN   ;    rfact = 2. * rdttrc   ! at nittrc000 or nittrc000+nn_dttrc (Leapfrog) 
    89       ENDIF 
     86      rfact = r2dttrc 
    9087      ! 
    9188      IF( ( ln_top_euler .AND. kt == nittrc000 )  .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc ) ) THEN 
     
    195192      !!             namelist: natext, natbio, natsms 
    196193      !!---------------------------------------------------------------------- 
    197       NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, wsbio2, niter1max, niter2max 
     194      NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, wsbio2, wsbio2max, wsbio2scale,    & 
     195         &                   niter1max, niter2max, wfep, ldocp, ldocz, lthet,  & 
     196         &                   no3rat3, po4rat3 
     197 
    198198      NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp 
    199199      NAMELIST/nampismass/ ln_check_mass 
     
    212212      IF(lwp) THEN                         ! control print 
    213213         WRITE(numout,*) ' Namelist : nampisbio' 
    214          WRITE(numout,*) '    frequence pour la biologie                nrdttrc   =', nrdttrc 
    215          WRITE(numout,*) '    POC sinking speed                         wsbio     =', wsbio 
    216          WRITE(numout,*) '    half saturation constant for mortality    xkmort    =', xkmort 
    217          WRITE(numout,*) '    Fe/C in zooplankton                       ferat3    =', ferat3 
    218          WRITE(numout,*) '    Big particles sinking speed               wsbio2    =', wsbio2 
     214         WRITE(numout,*) '    frequence pour la biologie                nrdttrc    =', nrdttrc 
     215         WRITE(numout,*) '    POC sinking speed                         wsbio      =', wsbio 
     216         WRITE(numout,*) '    half saturation constant for mortality    xkmort     =', xkmort  
     217         IF( ln_p5z ) THEN 
     218            WRITE(numout,*) '    N/C in zooplankton                        no3rat3    =', no3rat3 
     219            WRITE(numout,*) '    P/C in zooplankton                        po4rat3    =', po4rat3 
     220         ENDIF 
     221         WRITE(numout,*) '    Fe/C in zooplankton                       ferat3     =', ferat3 
     222         WRITE(numout,*) '    Big particles sinking speed               wsbio2     =', wsbio2 
     223         WRITE(numout,*) '    Big particles maximum sinking speed       wsbio2max  =', wsbio2max 
     224         WRITE(numout,*) '    Big particles sinking speed length scale  wsbio2scale =', wsbio2scale 
    219225         WRITE(numout,*) '    Maximum number of iterations for POC      niter1max =', niter1max 
    220226         WRITE(numout,*) '    Maximum number of iterations for GOC      niter2max =', niter2max 
    221       ENDIF 
     227         IF( ln_ligand ) THEN 
     228            WRITE(numout,*) '    FeP sinking speed                             wfep   =', wfep 
     229            IF( ln_p4z ) THEN 
     230              WRITE(numout,*) '    Phyto ligand production per unit doc          ldocp  =', ldocp 
     231              WRITE(numout,*) '    Zoo ligand production per unit doc            ldocz  =', ldocz 
     232              WRITE(numout,*) '    Proportional loss of ligands due to Fe uptake lthet  =', lthet 
     233            ENDIF 
     234         ENDIF 
     235      ENDIF 
     236 
    222237 
    223238      REWIND( numnatp_ref )              ! Namelist nampisdmp in reference namelist : Pisces damping 
     
    256271   END SUBROUTINE p4z_sms_init 
    257272 
    258    SUBROUTINE p4z_ph_ini 
    259       !!--------------------------------------------------------------------- 
    260       !!                   ***  ROUTINE p4z_ini_ph  *** 
    261       !! 
    262       !!  ** Purpose : Initialization of chemical variables of the carbon cycle 
    263       !!--------------------------------------------------------------------- 
    264       INTEGER  ::  ji, jj, jk 
    265       REAL(wp) ::  zcaralk, zbicarb, zco3 
    266       REAL(wp) ::  ztmas, ztmas1 
    267       !!--------------------------------------------------------------------- 
    268  
    269       ! Set PH from  total alkalinity, borat (???), akb3 (???) and ak23 (???) 
    270       ! -------------------------------------------------------- 
    271       DO jk = 1, jpk 
    272          DO jj = 1, jpj 
    273             DO ji = 1, jpi 
    274                ztmas   = tmask(ji,jj,jk) 
    275                ztmas1  = 1. - tmask(ji,jj,jk) 
    276                zcaralk = trb(ji,jj,jk,jptal) - borat(ji,jj,jk) / (  1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) )  ) 
    277                zco3    = ( zcaralk - trb(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 
    278                zbicarb = ( 2. * trb(ji,jj,jk,jpdic) - zcaralk ) 
    279                hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 
    280             END DO 
    281          END DO 
    282      END DO 
    283      ! 
    284    END SUBROUTINE p4z_ph_ini 
    285  
    286273   SUBROUTINE p4z_rst( kt, cdrw ) 
    287274      !!--------------------------------------------------------------------- 
     
    297284      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
    298285      ! 
    299       INTEGER  ::  ji, jj, jk 
    300       REAL(wp) ::  zcaralk, zbicarb, zco3 
    301       REAL(wp) ::  ztmas, ztmas1 
    302286      !!--------------------------------------------------------------------- 
    303287 
     
    311295            CALL iom_get( numrtr, jpdom_autoglo, 'PH' , hi(:,:,:)  ) 
    312296         ELSE 
    313 !            hi(:,:,:) = 1.e-9  
    314             CALL p4z_ph_ini 
     297            CALL ahini_for_at(hi) 
    315298         ENDIF 
    316299         CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) ) 
     
    327310         ENDIF 
    328311         ! 
     312         IF( ln_p5z ) THEN 
     313            IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN 
     314               CALL iom_get( numrtr, jpdom_autoglo, 'sizep' , sized(:,:,:)  ) 
     315               CALL iom_get( numrtr, jpdom_autoglo, 'sizen' , sized(:,:,:)  ) 
     316               CALL iom_get( numrtr, jpdom_autoglo, 'sized' , sized(:,:,:)  ) 
     317            ELSE 
     318               sizep(:,:,:) = 1. 
     319               sizen(:,:,:) = 1. 
     320               sized(:,:,:) = 1. 
     321            ENDIF 
     322        ENDIF 
     323        ! 
    329324      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 
    330325         IF( kt == nitrst ) THEN 
     
    337332         CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 
    338333         CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) 
     334         IF( ln_p5z ) THEN 
     335            CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sized(:,:,:) ) 
     336            CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sized(:,:,:) ) 
     337            CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) ) 
     338         ENDIF 
    339339      ENDIF 
    340340      ! 
     
    423423      REAL(wp)             ::  zrdenittot, zsdenittot, znitrpottot 
    424424      CHARACTER(LEN=100)   ::   cltxt 
    425       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvol 
    426425      INTEGER :: jk 
     426      REAL(wp), POINTER, DIMENSION(:,:,:) :: zwork 
    427427      !!---------------------------------------------------------------------- 
    428428 
     
    444444      ENDIF 
    445445 
     446      CALL wrk_alloc( jpi, jpj, jpk, zwork ) 
    446447      ! 
    447448      IF( iom_use( "pno3tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    448449         !   Compute the budget of NO3, ALK, Si, Fer 
    449          no3budget = glob_sum( (   trn(:,:,:,jpno3) + trn(:,:,:,jpnh4)  & 
    450             &                    + trn(:,:,:,jpphy) + trn(:,:,:,jpdia)  & 
    451             &                    + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  & 
    452             &                    + trn(:,:,:,jppoc)                     & 
    453             &                    + trn(:,:,:,jpgoc)                     & 
    454             &                    + trn(:,:,:,jpdoc)                     ) * cvol(:,:,:)  ) 
    455          ! 
    456          no3budget = no3budget / areatot 
    457          CALL iom_put( "pno3tot", no3budget ) 
     450         IF( ln_p4z ) THEN 
     451            zwork(:,:,:) =    trn(:,:,:,jpno3) + trn(:,:,:,jpnh4)                      & 
     452               &          +   trn(:,:,:,jpphy) + trn(:,:,:,jpdia)                      & 
     453               &          +   trn(:,:,:,jppoc) + trn(:,:,:,jpgoc)  + trn(:,:,:,jpdoc)  &         
     454               &          +   trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  
     455        ELSE 
     456            zwork(:,:,:) =    trn(:,:,:,jpno3) + trn(:,:,:,jpnh4) + trn(:,:,:,jpnph)   & 
     457               &          +   trn(:,:,:,jpndi) + trn(:,:,:,jpnpi)                      &  
     458               &          +   trn(:,:,:,jppon) + trn(:,:,:,jpgon) + trn(:,:,:,jpdon)   & 
     459               &          + ( trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * no3rat3  
     460        ENDIF 
     461        ! 
     462        no3budget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )   
     463        no3budget = no3budget / areatot 
     464        CALL iom_put( "pno3tot", no3budget ) 
    458465      ENDIF 
    459466      ! 
    460467      IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    461          po4budget = glob_sum( (   trn(:,:,:,jppo4)                     & 
    462             &                    + trn(:,:,:,jpphy) + trn(:,:,:,jpdia)  & 
    463             &                    + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  & 
    464             &                    + trn(:,:,:,jppoc)                     & 
    465             &                    + trn(:,:,:,jpgoc)                     & 
    466             &                    + trn(:,:,:,jpdoc)                     ) * cvol(:,:,:)  ) 
    467          po4budget = po4budget / areatot 
    468          CALL iom_put( "ppo4tot", po4budget ) 
     468         IF( ln_p4z ) THEN 
     469            zwork(:,:,:) =    trn(:,:,:,jppo4)                                         & 
     470               &          +   trn(:,:,:,jpphy) + trn(:,:,:,jpdia)                      & 
     471               &          +   trn(:,:,:,jppoc) + trn(:,:,:,jpgoc)  + trn(:,:,:,jpdoc)  &         
     472               &          +   trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  
     473        ELSE 
     474            zwork(:,:,:) =    trn(:,:,:,jppo4) + trn(:,:,:,jppph)                      & 
     475               &          +   trn(:,:,:,jppdi) + trn(:,:,:,jpppi)                      &  
     476               &          +   trn(:,:,:,jppop) + trn(:,:,:,jpgop) + trn(:,:,:,jpdop)   & 
     477               &          + ( trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * po4rat3  
     478        ENDIF 
     479        ! 
     480        po4budget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )   
     481        po4budget = po4budget / areatot 
     482        CALL iom_put( "ppo4tot", po4budget ) 
    469483      ENDIF 
    470484      ! 
    471485      IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    472          silbudget = glob_sum( (   trn(:,:,:,jpsil) + trn(:,:,:,jpgsi)  & 
    473             &                    + trn(:,:,:,jpdsi)                     ) * cvol(:,:,:)  ) 
    474          ! 
     486         zwork(:,:,:) =  trn(:,:,:,jpsil) + trn(:,:,:,jpgsi) + trn(:,:,:,jpdsi)  
     487         ! 
     488         silbudget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )   
    475489         silbudget = silbudget / areatot 
    476490         CALL iom_put( "psiltot", silbudget ) 
     
    478492      ! 
    479493      IF( iom_use( "palktot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    480          alkbudget = glob_sum( (   trn(:,:,:,jpno3) * rno3              & 
    481             &                    + trn(:,:,:,jptal)                     & 
    482             &                    + trn(:,:,:,jpcal) * 2.                ) * cvol(:,:,:)  ) 
    483          ! 
     494         zwork(:,:,:) =  trn(:,:,:,jpno3) * rno3 + trn(:,:,:,jptal) + trn(:,:,:,jpcal) * 2.               
     495         ! 
     496         alkbudget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )         ! 
    484497         alkbudget = alkbudget / areatot 
    485498         CALL iom_put( "palktot", alkbudget ) 
     
    487500      ! 
    488501      IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    489          ferbudget = glob_sum( (   trn(:,:,:,jpfer) + trn(:,:,:,jpnfe)  & 
    490             &                    + trn(:,:,:,jpdfe)                     & 
    491             &                    + trn(:,:,:,jpbfe)                     & 
    492             &                    + trn(:,:,:,jpsfe)                     & 
    493             &                    + trn(:,:,:,jpzoo) * ferat3            & 
    494             &                    + trn(:,:,:,jpmes) * ferat3            ) * cvol(:,:,:)  ) 
    495          ! 
     502         zwork(:,:,:) =   trn(:,:,:,jpfer) + trn(:,:,:,jpnfe) + trn(:,:,:,jpdfe)   & 
     503            &         +   trn(:,:,:,jpbfe) + trn(:,:,:,jpsfe)                      & 
     504            &         + ( trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) )  * ferat3     
     505         IF( ln_ligand)  zwork(:,:,:) = zwork(:,:,:) + trn(:,:,:,jpfep)                 
     506         ! 
     507         ferbudget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )   
    496508         ferbudget = ferbudget / areatot 
    497509         CALL iom_put( "pfertot", ferbudget ) 
    498510      ENDIF 
    499511      ! 
    500  
     512      CALL wrk_dealloc( jpi, jpj, jpk, zwork ) 
     513      ! 
    501514      ! Global budget of N SMS : denitrification in the water column and in the sediment 
    502515      !                          nitrogen fixation by the diazotrophs 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/par_pisces.F90

    r7068 r7162  
    4444   INTEGER, PUBLIC ::   jpno3     !: Nitrates Concentration 
    4545   INTEGER, PUBLIC ::   jpnh4     !: Ammonium Concentration 
     46   INTEGER, PUBLIC ::   jpdon     !: dissolved organic nitrogen concentration 
     47   INTEGER, PUBLIC ::   jpdop     !: dissolved organic phosphorus concentration 
     48   INTEGER, PUBLIC ::   jppon     !: small particulate organic nitrogen concentration 
     49   INTEGER, PUBLIC ::   jppop     !: small particulate organic phosphorus concentration 
     50   INTEGER, PUBLIC ::   jpnph     !: small particulate organic phosphorus concentration 
     51   INTEGER, PUBLIC ::   jppph     !: small particulate organic phosphorus concentration 
     52   INTEGER, PUBLIC ::   jpndi     !: small particulate organic phosphorus concentration 
     53   INTEGER, PUBLIC ::   jppdi     !: small particulate organic phosphorus concentration 
     54   INTEGER, PUBLIC ::   jppic     !: small particulate organic phosphorus concentration 
     55   INTEGER, PUBLIC ::   jpnpi     !: small particulate organic phosphorus concentration 
     56   INTEGER, PUBLIC ::   jpppi     !: small particulate organic phosphorus concentration 
     57   INTEGER, PUBLIC ::   jppfe     !: small particulate organic phosphorus concentration 
     58   INTEGER, PUBLIC ::   jppch     !: small particulate organic phosphorus concentration 
     59   INTEGER, PUBLIC ::   jpgon     !: Big nitrogen particles Concentration 
     60   INTEGER, PUBLIC ::   jpgop     !: Big phosphorus particles Concentration 
     61   INTEGER, PUBLIC ::   jplgw     !: Weak Ligands 
     62   INTEGER, PUBLIC ::   jpfep     !: Fe nanoparticle 
     63 
    4664   !!--------------------------------------------------------------------- 
    4765   !!   Default                                   No CFC geochemical model 
    4866   ! Starting/ending PISCES do-loop indices (N.B. no PISCES : jpl_pcs < jpf_pcs the do-loop are never done) 
    49    INTEGER, PUBLIC  ::   jp_pcs0                    !: First index of PISCES tracers 
    50    INTEGER, PUBLIC  ::   jp_pcs1                   !: Last  index of PISCES tracers 
     67   INTEGER, PUBLIC  ::   jp_pcs0  !: First index of PISCES tracers 
     68   INTEGER, PUBLIC  ::   jp_pcs1  !: Last  index of PISCES tracers 
    5169 
    5270   !!====================================================================== 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90

    r7068 r7162  
    1717   INTEGER ::   numonp      = -1           !! Logical unit for namelist pisces output 
    1818 
    19    !!*  Biological fluxes for light : variables shared by pisces & lobster 
    20    INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  neln  !: number of T-levels + 1 in the euphotic layer 
    21    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  heup  !: euphotic layer depth 
    22    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  etot  !: par (photosynthetic available radiation) 
    23    ! 
    24    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  xksi  !:  LOBSTER : zooplakton closure 
    2519   !                                                       !:  PISCES  : silicon dependant half saturation 
    2620 
     
    2822   LOGICAL  ::  ln_p2z            !: Flag to use LOBSTER model 
    2923   LOGICAL  ::  ln_p4z            !: Flag to use PISCES  model 
    30  
     24   LOGICAL  ::  ln_p5z            !: Flag to use PISCES  quota model 
     25   LOGICAL  ::  ln_ligand         !: Flag to enable organic ligands 
    3126 
    3227   !!*  Time variables 
     
    4944   REAL(wp) ::   o2nit             !: ??? 
    5045   REAL(wp) ::   wsbio, wsbio2     !: ??? 
     46   REAL(wp) ::   wsbio2max         !: ??? 
     47   REAL(wp) ::   wsbio2scale       !: ??? 
    5148   REAL(wp) ::   xkmort            !: ??? 
    5249   REAL(wp) ::   ferat3            !: ??? 
     50   REAL(wp) ::   wfep              !: ??? 
     51   REAL(wp) ::   ldocp             !: ??? 
     52   REAL(wp) ::   ldocz             !: ??? 
     53   REAL(wp) ::   lthet             !: ??? 
     54   REAL(wp) ::   no3rat3           !: ??? 
     55   REAL(wp) ::   po4rat3           !: ??? 
     56 
    5357 
    5458   !!*  diagnostic parameters  
     
    6670   LOGICAL  ::  ln_check_mass      !: Flag to check mass conservation 
    6771 
     72   !!*  Biological fluxes for light : variables shared by pisces & lobster 
     73   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  neln  !: number of T-levels + 1 in the euphotic layer 
     74   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  heup  !: euphotic layer depth 
     75   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  etot  !: par (photosynthetic available radiation) 
     76   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  etot_ndcy      !: PAR over 24h in case of diurnal cycle 
     77   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  enano, ediat   !: PAR for phyto, nano and diat  
     78   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  epico          !: PAR for pico 
     79   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  emoy           !: averaged PAR in the mixed layer 
     80   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  heup_01 !: Absolute euphotic layer depth 
     81   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  xksi  !:  LOBSTER : zooplakton closure 
     82 
    6883   !!*  Biological fluxes for primary production 
    69    REAL(wp), ALLOCATABLE, SAVE,   DIMENSION(:,:)  ::   xksimax    !: ??? 
    70    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanono3   !: ??? 
    71    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatno3   !: ??? 
    72    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanonh4   !: ??? 
    73    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatnh4   !: ??? 
    74    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanopo4   !: ??? 
    75    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatpo4   !: ??? 
    76    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphy    !: ??? 
    77    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdia    !: ??? 
    78    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concdfe    !: ??? 
    79    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concnfe    !: ??? 
    80    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimnfe    !: ??? 
    81    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdfe    !: ??? 
    82    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimsi     !: ??? 
     84   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)    ::   xksimax    !: ??? 
    8385   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   biron      !: bioavailable fraction of iron 
     86   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   plig       !: proportion of iron organically complexed 
     87 
     88   !!*  Sinking speed 
     89   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio3   !: POC sinking speed  
     90   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio4   !: GOC sinking speed 
     91   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wscal    !: Calcite and BSi sinking speeds 
     92   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsfep 
     93 
    8494 
    8595 
     
    8797   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xfracal    !: ?? 
    8898   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac    !: ?? 
    89    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xlimbac    !: ?? 
    90    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xlimbacl   !: ?? 
     99   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   orem       !: ?? 
    91100   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xdiss      !: ?? 
    92101   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodcal    !: Calcite production 
     102   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodpoc    !: Calcite production 
     103   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   conspoc    !: Calcite production 
     104   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodgoc    !: Calcite production 
     105   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   consgoc    !: Calcite production 
     106 
     107   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizen      !: size of diatoms  
     108   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizep      !: size of diatoms  
     109   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sized      !: size of diatoms  
     110 
    93111 
    94112   !!* Variable for chemistry of the CO2 cycle 
    95    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   akb3       !: ??? 
    96113   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak13       !: ??? 
    97114   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak23       !: ??? 
    98115   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aksp       !: ??? 
    99    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   akw3       !: ??? 
    100    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   borat      !: ??? 
    101116   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   hi         !: ??? 
    102117   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   excess     !: ??? 
     
    121136CONTAINS 
    122137 
     138 
    123139   INTEGER FUNCTION sms_pisces_alloc() 
    124140      !!---------------------------------------------------------------------- 
     
    126142      !!---------------------------------------------------------------------- 
    127143      USE lib_mpp , ONLY: ctl_warn 
    128       INTEGER ::   ierr(5)        ! Local variables 
     144      INTEGER ::   ierr(10)        ! Local variables 
    129145      !!---------------------------------------------------------------------- 
    130146      ierr(:) = 0 
    131147      !*  Biological fluxes for light : shared variables for pisces & lobster 
    132       ALLOCATE( etot(jpi,jpj,jpk), neln(jpi,jpj), heup(jpi,jpj), xksi(jpi,jpj), STAT=ierr(1) ) 
    133       ! 
    134       IF( ln_p4z ) THEN 
     148      ALLOCATE( etot(jpi,jpj,jpk), neln(jpi,jpj), heup(jpi,jpj),    & 
     149        &       heup_01(jpi,jpj) , xksi(jpi,jpj)               ,  STAT=ierr(1) ) 
     150      ! 
     151   
     152      IF( ln_p4z .OR. ln_p5z ) THEN 
     153         !*  Biological fluxes for light  
     154         ALLOCATE(  enano(jpi,jpj,jpk)    , ediat(jpi,jpj,jpk) ,   & 
     155           &        etot_ndcy(jpi,jpj,jpk), emoy(jpi,jpj,jpk)  ,  STAT=ierr(2) )  
     156 
    135157         !*  Biological fluxes for primary production 
    136          ALLOCATE( xksimax(jpi,jpj)     , biron   (jpi,jpj,jpk),       & 
    137             &      xnanono3(jpi,jpj,jpk), xdiatno3(jpi,jpj,jpk),       & 
    138             &      xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk),       & 
    139             &      xnanopo4(jpi,jpj,jpk), xdiatpo4(jpi,jpj,jpk),       & 
    140             &      xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk),       & 
    141             &      xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk),       & 
    142             &      xlimsi  (jpi,jpj,jpk), concdfe (jpi,jpj,jpk),       & 
    143             &      concnfe (jpi,jpj,jpk),                           STAT=ierr(2) )  
     158         ALLOCATE( xksimax(jpi,jpj)  , biron(jpi,jpj,jpk)      ,  STAT=ierr(3) ) 
    144159         ! 
    145160         !*  SMS for the organic matter 
    146          ALLOCATE( xfracal (jpi,jpj,jpk), nitrfac(jpi,jpj,jpk),       & 
    147             &      xlimbac (jpi,jpj,jpk), xdiss  (jpi,jpj,jpk),       &  
    148             &      xlimbacl(jpi,jpj,jpk), prodcal(jpi,jpj,jpk),     STAT=ierr(3) ) 
     161         ALLOCATE( xfracal (jpi,jpj,jpk), nitrfac(jpi,jpj,jpk) ,    & 
     162            &      orem    (jpi,jpj,jpk),                           & 
     163            &      prodcal(jpi,jpj,jpk),  xdiss   (jpi,jpj,jpk),    & 
     164            &      prodpoc(jpi,jpj,jpk) , conspoc(jpi,jpj,jpk) ,    & 
     165            &      prodgoc(jpi,jpj,jpk) , consgoc(jpi,jpj,jpk) ,  STAT=ierr(4) ) 
    149166 
    150167         !* Variable for chemistry of the CO2 cycle 
    151          ALLOCATE( akb3(jpi,jpj,jpk)    , ak13  (jpi,jpj,jpk) ,       & 
    152             &      ak23(jpi,jpj,jpk)    , aksp  (jpi,jpj,jpk) ,       & 
    153             &      akw3(jpi,jpj,jpk)    , borat (jpi,jpj,jpk) ,       & 
    154             &      hi  (jpi,jpj,jpk)    , excess(jpi,jpj,jpk) ,       & 
    155             &      aphscale(jpi,jpj,jpk),                           STAT=ierr(4) ) 
    156             ! 
     168         ALLOCATE( ak13  (jpi,jpj,jpk) ,                            & 
     169            &      ak23(jpi,jpj,jpk)    , aksp  (jpi,jpj,jpk) ,     & 
     170            &      hi  (jpi,jpj,jpk)    , excess(jpi,jpj,jpk) ,     & 
     171            &      aphscale(jpi,jpj,jpk),                         STAT=ierr(5) ) 
     172         ! 
    157173         !* Temperature dependancy of SMS terms 
    158          ALLOCATE( tgfunc(jpi,jpj,jpk)  , tgfunc2(jpi,jpj,jpk) ,    STAT=ierr(5) ) 
    159          ! 
     174         ALLOCATE( tgfunc(jpi,jpj,jpk)  , tgfunc2(jpi,jpj,jpk),   STAT=ierr(6) ) 
     175         ! 
     176         !* Sinkong speed 
     177         ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk),     & 
     178            &      wscal(jpi,jpj,jpk)                         ,   STAT=ierr(7) )    
     179         !  
     180         IF( ln_ligand ) THEN 
     181           ALLOCATE( plig(jpi,jpj,jpk)  , wsfep(jpi,jpj,jpk)  ,   STAT=ierr(8) ) 
     182         ENDIF 
     183         ! 
     184      ENDIF 
     185      ! 
     186      IF( ln_p5z ) THEN 
     187         !        
     188         ALLOCATE( epico(jpi,jpj,jpk)                         ,   STAT=ierr(9) )  
     189 
     190         !*  Size of phytoplankton cells 
     191         ALLOCATE( sizen(jpi,jpj,jpk), sizep(jpi,jpj,jpk),         & 
     192           &       sized(jpi,jpj,jpk),                            STAT=ierr(10) ) 
    160193      ENDIF 
    161194      ! 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/trcice_pisces.F90

    r7068 r7162  
    1212   USE oce_trc         ! Shared variables between ocean and passive tracers 
    1313   USE trc             ! Passive tracers common variables  
    14    USE phycst          ! Ocean physics parameters 
    1514   USE sms_pisces      ! PISCES Source Minus Sink variables 
    1615   USE in_out_manager 
     
    3130      !!---------------------------------------------------------------------- 
    3231 
    33       IF( ln_p4z ) THEN  ;   CALL p4z_ice_ini   !  PISCES 
    34       ELSE               ;   CALL p2z_ice_ini   !  LOBSTER 
     32      IF( ln_p4z .OR. ln_p5z ) THEN  ;   CALL p4z_ice_ini   !  PISCES 
     33      ELSE                           ;   CALL p2z_ice_ini   !  LOBSTER 
    3534      ENDIF 
    3635 
     
    6766 
    6867                                        !--- Dummy variables 
    69       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zratio  ! effective ice-ocean tracer cc ratio 
    70       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zpisc   ! prescribes concentration  
     68      REAL(wp), DIMENSION(jpmaxtrc,2) :: zratio  ! effective ice-ocean tracer cc ratio 
     69      REAL(wp), DIMENSION(jpmaxtrc,4) :: zpisc   ! prescribes concentration  
    7170      !                                            !  1:global, 2:Arctic, 3:Antarctic, 4:Baltic 
    7271 
     
    9190      ! fluxes 
    9291 
    93       ALLOCATE( zratio(jp_pisces,2),  zpisc(jp_pisces,4) ) 
    94    
    9592      !--- Global values 
    9693      zpisc(jpdic,1) =  1.99e-3_wp  
     
    119116      zpisc(jpnh4,1) =  3.22e-7_wp / rno3 
    120117 
     118      ! ln_p5z 
     119      zpisc(jppic,1) =  9.57e-8_wp 
     120      zpisc(jpnpi,1) =  9.57e-8_wp 
     121      zpisc(jpppi,1) =  9.57e-8_wp 
     122      zpisc(jppfe,1) =  1.76e-11_wp 
     123      zpisc(jppch,1) =  1.67e-7_wp 
     124      zpisc(jpnph,1) =  9.57e-8_wp 
     125      zpisc(jppph,1) =  9.57e-8_wp 
     126      zpisc(jpndi,1) =  4.24e-7_wp 
     127      zpisc(jppdi,1) =  4.24e-7_wp 
     128      zpisc(jppon,1) =  9.57e-8_wp 
     129      zpisc(jppop,1) =  9.57e-8_wp 
     130      zpisc(jpdon,1) =  2.04e-5_wp 
     131      zpisc(jpdop,1) =  2.04e-5_wp 
     132      zpisc(jpgon,1) =  5.23e-8_wp 
     133      zpisc(jpgop,1) =  5.23e-8_wp 
     134 
    121135      !--- Arctic specificities (dissolved inorganic & DOM) 
    122136      zpisc(jpdic,2) =  1.98e-3_wp  
     
    145159      zpisc(jpnh4,2) =  6.15e-08_wp / rno3  
    146160 
     161      ! ln_p5z 
     162      zpisc(jppic,2) =  5.25e-7_wp 
     163      zpisc(jpnpi,2) =  5.25e-7_wp 
     164      zpisc(jpppi,2) =  5.25e-7_wp 
     165      zpisc(jppfe,2) =  1.75e-11_wp 
     166      zpisc(jppch,2) =  1.46e-07_wp 
     167      zpisc(jpnph,2) =  5.25e-7_wp 
     168      zpisc(jppph,2) =  5.25e-7_wp 
     169      zpisc(jpndi,2) =  7.75e-7_wp 
     170      zpisc(jppdi,2) =  7.75e-7_wp 
     171      zpisc(jppon,2) =  4.05e-7_wp 
     172      zpisc(jppop,2) =  4.05e-7_wp 
     173      zpisc(jpdon,2) =  6.00e-6_wp 
     174      zpisc(jpdop,2) =  6.00e-6_wp 
     175      zpisc(jpgon,2) =  2.84e-8_wp 
     176      zpisc(jpgop,2) =  2.84e-8_wp 
     177 
    147178      !--- Antarctic specificities (dissolved inorganic & DOM) 
    148179      zpisc(jpdic,3) =  2.20e-3_wp   
     
    171202      zpisc(jpnh4,3) =  3.39e-7_wp / rno3   
    172203 
     204      ! ln_p5z 
     205      zpisc(jppic,3) =  8.10e-7_wp 
     206      zpisc(jpnpi,3) =  8.10e-7_wp 
     207      zpisc(jpppi,3) =  8.10e-7_wp  
     208      zpisc(jppfe,3) =  1.48e-11_wp 
     209      zpisc(jppch,3) =  2.02e-7_wp 
     210      zpisc(jpnph,3) =  9.57e-8_wp 
     211      zpisc(jppph,3) =  9.57e-8_wp 
     212      zpisc(jpndi,3) =  5.77e-7_wp 
     213      zpisc(jppdi,3) =  5.77e-7_wp 
     214      zpisc(jppon,3) =  1.13e-6_wp 
     215      zpisc(jppop,3) =  1.13e-6_wp 
     216      zpisc(jpdon,3) =  7.02e-6_wp 
     217      zpisc(jpdop,3) =  7.02e-6_wp 
     218      zpisc(jpgon,3) =  2.89e-8_wp 
     219      zpisc(jpgop,3) =  2.89e-8_wp 
     220 
     221 
    173222      !--- Baltic Sea particular case for ORCA configurations 
    174223      zpisc(jpdic,4) = 1.14e-3_wp 
     
    196245      zpisc(jpno3,4) = 5.36e-5_wp / rno3 
    197246      zpisc(jpnh4,4) = 7.18e-7_wp / rno3 
     247 
     248      ! ln_p5z 
     249      zpisc(jppic,4) =  6.64e-7_wp 
     250      zpisc(jpnpi,4) =  6.64e-7_wp 
     251      zpisc(jpppi,4) =  6.64e-7_wp 
     252      zpisc(jppfe,4) =  3.89e-11_wp 
     253      zpisc(jppch,4) =  1.17e-7_wp 
     254      zpisc(jpnph,4) =  6.64e-7_wp 
     255      zpisc(jppph,4) =  6.64e-7_wp 
     256      zpisc(jpndi,4) =  3.41e-7_wp 
     257      zpisc(jppdi,4) =  3.41e-7_wp 
     258      zpisc(jppon,4) =  4.84e-7_wp 
     259      zpisc(jppop,4) =  4.84e-7_wp 
     260      zpisc(jpdon,4) =  1.06e-5_wp 
     261      zpisc(jpdop,4) =  1.06e-5_wp 
     262      zpisc(jpgon,4) =  1.05e-8_wp 
     263      zpisc(jpgop,4) =  1.05e-8_wp 
    198264  
    199265      DO jn = jp_pcs0, jp_pcs1 
     
    258324      END DO ! jn 
    259325      ! 
    260       DEALLOCATE( zratio, zpisc ) 
    261       ! 
    262  
    263326   END SUBROUTINE p4z_ice_ini 
    264327 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90

    r7097 r7162  
    3838      !!---------------------------------------------------------------------- 
    3939 
    40       IF( ln_p4z ) THEN  ;   CALL p4z_ini   !  PISCES 
    41       ELSE               ;   CALL p2z_ini   !  LOBSTER 
     40      ! 
     41      CALL trc_nam_pisces 
     42      ! 
     43      IF( ln_p4z .OR. ln_p5z ) THEN  ;   CALL p4z_ini   !  PISCES 
     44      ELSE                           ;   CALL p2z_ini   !  LOBSTER 
    4245      ENDIF 
    4346 
     
    6669      USE p4zlys          !  Calcite saturation 
    6770      USE p4zsed          !  Sedimentation & burial 
     71      USE p4zpoc          !  Remineralization of organic particles 
     72      USE p4zligand       !  Remineralization of organic ligands 
     73      USE p5zlim          !  Co-limitations of differents nutrients 
     74      USE p5zprod         !  Growth rate of the 2 phyto groups 
     75      USE p5zmicro        !  Sources and sinks of microzooplankton 
     76      USE p5zmeso         !  Sources and sinks of mesozooplankton 
     77      USE p5zmort         !  Mortality terms for phytoplankton 
     78 
    6879      ! 
    6980      REAL(wp), SAVE :: sco2   =  2.312e-3_wp 
     
    8293      !!---------------------------------------------------------------------- 
    8394 
    84       IF(lwp) WRITE(numout,*) 
    85       IF(lwp) WRITE(numout,*) ' p4z_ini :   PISCES biochemical model initialisation' 
    86       IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 
    87       ! 
    88       CALL trc_nam_pisces 
     95      IF(lwp) THEN 
     96         WRITE(numout,*) 
     97         IF( ln_p4z ) THEN  
     98            WRITE(numout,*) ' p4z_ini :   PISCES biochemical model initialisation' 
     99         ELSE 
     100            WRITE(numout,*) ' p5z_ini :   PISCES biochemical model initialisation' 
     101            WRITE(numout,*) '             With variable stoichiometry' 
     102         ENDIF 
     103         WRITE(numout,*) ' ~~~~~~~~~~~~~~' 
     104      ENDIF 
    89105      ! 
    90106      ! Allocate PISCES arrays 
     
    93109      ierr = ierr +  p4z_sink_alloc() 
    94110      ierr = ierr +  p4z_opt_alloc() 
    95       ierr = ierr +  p4z_prod_alloc() 
    96       ierr = ierr +  p4z_rem_alloc() 
    97111      ierr = ierr +  p4z_flx_alloc() 
    98112      ierr = ierr +  p4z_sed_alloc() 
     113      ierr = ierr +  p4z_rem_alloc() 
     114      IF( ln_p4z ) THEN 
     115         ierr = ierr +  p4z_lim_alloc() 
     116         ierr = ierr +  p4z_prod_alloc() 
     117      ELSE 
     118         ierr = ierr +  p5z_lim_alloc() 
     119         ierr = ierr +  p5z_prod_alloc() 
     120      ENDIF 
    99121      ! 
    100122      IF( lk_mpp    )   CALL mpp_sum( ierr ) 
     
    132154        IF( cltra == 'NO3'      )   jpno3 = jn      !: Nitrates Concentration 
    133155        IF( cltra == 'NH4'      )   jpnh4 = jn      !: Ammonium Concentration 
     156        IF( cltra == 'DON'      )   jpdon = jn      !: Dissolved organic N Concentration 
     157        IF( cltra == 'DOP'      )   jpdop = jn      !: Dissolved organic P Concentration 
     158        IF( cltra == 'PON'      )   jppon = jn      !: Small Nitrogen particle Concentration 
     159        IF( cltra == 'POP'      )   jppop = jn      !: Small Phosphorus particle Concentration 
     160        IF( cltra == 'GON'      )   jpgon = jn      !: Big Nitrogen particles Concentration 
     161        IF( cltra == 'GOP'      )   jpgop = jn      !: Big Phosphorus Concentration 
     162        IF( cltra == 'PHYN'     )   jpnph = jn      !: Nanophytoplankton N biomass 
     163        IF( cltra == 'PHYP'     )   jppph = jn      !: Nanophytoplankton P biomass 
     164        IF( cltra == 'DIAN'     )   jpndi = jn      !: Diatoms N biomass 
     165        IF( cltra == 'DIAP'     )   jppdi = jn      !: Diatoms P biomass 
     166        IF( cltra == 'PIC'      )   jppic = jn      !: Picophytoplankton C biomass 
     167        IF( cltra == 'PICN'     )   jpnpi = jn      !: Picophytoplankton N biomass 
     168        IF( cltra == 'PICP'     )   jpppi = jn      !: Picophytoplankton P biomass 
     169        IF( cltra == 'PFe'      )   jppfe = jn      !: Picophytoplankton Fe biomass 
     170        IF( cltra == 'LFe'      )   jplgw = jn      !: Weak ligands 
     171        IF( cltra == 'FFe'      )   jpfep = jn      !: Fe nanoparticle 
    134172      ENDDO 
    135173 
     
    145183      rdenit  =  ( ( o2ut + o2nit ) * 0.80 - rno3 - rno3 * 0.60 ) / rno3 
    146184      rdenita =   3._wp /  5._wp 
    147  
     185      IF( ln_p5z ) THEN 
     186         no3rat3 = no3rat3 / rno3 
     187         po4rat3 = po4rat3 / po4r 
     188      ENDIF 
    148189 
    149190      ! Initialization of tracer concentration in case of  no restart  
     
    174215         trn(:,:,:,jpno3) = no3 
    175216         trn(:,:,:,jpnh4) = bioma0 
    176  
     217         IF( ln_ligand) THEN 
     218            trn(:,:,:,jplgw) = 0.6E-9 
     219            trn(:,:,:,jpfep) = 0. * 5.e-6 
     220         ENDIF 
     221         IF( ln_p5z ) THEN 
     222            trn(:,:,:,jpdon) = bioma0 
     223            trn(:,:,:,jpdop) = bioma0 
     224            trn(:,:,:,jppon) = bioma0 
     225            trn(:,:,:,jppop) = bioma0 
     226            trn(:,:,:,jpgon) = bioma0 
     227            trn(:,:,:,jpgop) = bioma0 
     228            trn(:,:,:,jpnph) = bioma0 
     229            trn(:,:,:,jppph) = bioma0 
     230            trn(:,:,:,jppic) = bioma0 
     231            trn(:,:,:,jpnpi) = bioma0 
     232            trn(:,:,:,jpppi) = bioma0 
     233            trn(:,:,:,jpndi) = bioma0 
     234            trn(:,:,:,jppdi) = bioma0 
     235            trn(:,:,:,jppfe) = bioma0 * 5.e-6 
     236            trn(:,:,:,jppch) = bioma0 * 12. / 55. 
     237         ENDIF 
    177238         ! initialize the half saturation constant for silicate 
    178239         ! ---------------------------------------------------- 
     
    182243 
    183244 
    184       CALL p4z_sink_init      !  vertical flux of particulate organic matter 
    185       CALL p4z_opt_init       !  Optic: PAR in the water column 
    186       CALL p4z_lim_init       !  co-limitations by the various nutrients 
    187       CALL p4z_prod_init      !  phytoplankton growth rate over the global ocean. 
    188       CALL p4z_sbc_init       !  boundary conditions 
    189       CALL p4z_fechem_init    !  Iron chemistry 
    190       CALL p4z_rem_init       !  remineralisation 
    191       CALL p4z_mort_init      !  phytoplankton mortality  
    192       CALL p4z_micro_init     !  microzooplankton 
    193       CALL p4z_meso_init      !  mesozooplankton 
    194       CALL p4z_lys_init       !  calcite saturation 
    195       CALL p4z_flx_init       !  gas exchange  
     245      CALL p4z_sink_init         !  vertical flux of particulate organic matter 
     246      CALL p4z_opt_init          !  Optic: PAR in the water column 
     247      IF( ln_p4z ) THEN 
     248         CALL p4z_lim_init       !  co-limitations by the various nutrients 
     249         CALL p4z_prod_init      !  phytoplankton growth rate over the global ocean. 
     250      ELSE 
     251         CALL p5z_lim_init       !  co-limitations by the various nutrients 
     252         CALL p5z_prod_init      !  phytoplankton growth rate over the global ocean. 
     253      ENDIF 
     254      CALL p4z_sbc_init          !  boundary conditions 
     255      CALL p4z_fechem_init       !  Iron chemistry 
     256      CALL p4z_rem_init          !  remineralisation 
     257      CALL p4z_poc_init          !  remineralisation of organic particles 
     258      IF( ln_ligand ) & 
     259         & CALL p4z_ligand_init  !  remineralisation of organic ligands 
     260 
     261      IF( ln_p4z ) THEN 
     262         CALL p4z_mort_init      !  phytoplankton mortality  
     263         CALL p4z_micro_init     !  microzooplankton 
     264         CALL p4z_meso_init      !  mesozooplankton 
     265      ELSE 
     266         CALL p5z_mort_init      !  phytoplankton mortality  
     267         CALL p5z_micro_init     !  microzooplankton 
     268         CALL p5z_meso_init      !  mesozooplankton 
     269      ENDIF 
     270      CALL p4z_lys_init          !  calcite saturation 
     271      IF( .NOT.l_co2cpl ) & 
     272        & CALL p4z_flx_init      !  gas exchange  
    196273 
    197274      ndayflxtr = 0 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/trcnam_pisces.F90

    r7068 r7162  
    4747      CHARACTER(LEN=20)   ::   clname 
    4848      !! 
    49       NAMELIST/nampismod/ln_p2z, ln_p4z 
     49      NAMELIST/nampismod/ln_p2z, ln_p4z, ln_p5z, ln_ligand 
    5050      !!---------------------------------------------------------------------- 
    5151 
     
    6969      IF(lwm) WRITE ( numonp, nampismod ) 
    7070 
     71     IF(lwp) THEN                  ! control print 
     72         WRITE(numout,*) ' ' 
     73         WRITE(numout,*) ' Flag to use LOBSTER model            ln_p2z    = ', ln_p2z 
     74         WRITE(numout,*) ' Flag to use PISCES standard  model   ln_p4z    = ', ln_p4z 
     75         WRITE(numout,*) ' Flag to use PISCES quota     model   ln_p5z    = ', ln_p5z 
     76         WRITE(numout,*) ' Flag to ligand                       ln_ligand = ', ln_ligand 
     77         WRITE(numout,*) ' ' 
     78      ENDIF 
     79 
    7180      IF(lwp) THEN                         ! control print 
    7281         WRITE(numout,*) ' ' 
    73          IF( ln_p4z )  WRITE(numout,*) '          PISCES  model is used' 
    74          IF( ln_p2z )  WRITE(numout,*) '          LOBSTER model is used' 
     82         IF( ln_p5z    )  WRITE(numout,*) '  PISCES QUOTA model is used' 
     83         IF( ln_p4z    )  WRITE(numout,*) '  PISCES STANDARD model is used' 
     84         IF( ln_p2z    )  WRITE(numout,*) '  LOBSTER model is used' 
     85         IF( ln_ligand )  WRITE(numout,*) '  Compute remineralization/dissolution of organic ligands' 
    7586         WRITE(numout,*) ' ' 
    7687      ENDIF 
     
    7990      IF( ln_p2z )    ioptio = ioptio + 1 
    8091      IF( ln_p4z )    ioptio = ioptio + 1 
     92      IF( ln_p5z )    ioptio = ioptio + 1 
    8193      ! 
    8294      IF( ioptio /= 1 )   CALL ctl_stop( 'Choose ONE PISCES model namelist nampismod' ) 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90

    r7068 r7162  
    4545      !!--------------------------------------------------------------------- 
    4646      ! 
    47       IF( ln_p4z ) THEN  ;   CALL p4z_sms( kt )   !  PISCES 
    48       ELSE               ;   CALL p2z_sms( kt )   !  LOBSTER 
     47      IF( ln_p4z .OR. ln_p5z ) THEN  ;   CALL p4z_sms( kt )   !  PISCES 
     48      ELSE                           ;   CALL p2z_sms( kt )   !  LOBSTER 
    4949      ENDIF 
    5050 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv.F90

    r6140 r7162  
    5757   INTEGER ::              nadv             ! chosen advection scheme 
    5858   ! 
    59    REAL(wp) ::   r2dttrc  ! vertical profile time-step, = 2 rdt 
    60    !                                                    ! except at nitrrc000 (=rdt) if neuler=0 
    61  
    6259   !! * Substitutions 
    6360#  include "vectopt_loop_substitute.h90" 
     
    8784      ! 
    8885      CALL wrk_alloc( jpi,jpj,jpk,   zun, zvn, zwn ) 
    89       ! 
    90       IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN     ! at nittrc000 
    91          r2dttrc =  rdttrc           ! = rdttrc (use or restarting with Euler time stepping) 
    92       ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN          ! at nittrc000 or nittrc000+1 
    93          r2dttrc = 2. * rdttrc       ! = 2 rdttrc (leapfrog) 
    94       ENDIF 
    9586      !                                               !==  effective transport  ==! 
    9687      DO jk = 1, jpkm1 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90

    r6140 r7162  
    4343 
    4444   PUBLIC   trc_nxt          ! routine called by step.F90 
    45  
    46    REAL(wp) ::   r2dttrc 
    4745 
    4846   !!---------------------------------------------------------------------- 
     
    10098 
    10199      IF( lk_bdy )  CALL trc_bdy( kt ) 
    102  
    103       !                                ! set time step size (Euler/Leapfrog) 
    104       IF( neuler == 0 .AND. kt ==  nittrc000 ) THEN  ;  r2dttrc =     rdttrc   ! at nittrc000             (Euler) 
    105       ELSEIF( kt <= nittrc000 + nn_dttrc )     THEN  ;  r2dttrc = 2.* rdttrc   ! at nit000 or nit000+1 (Leapfrog) 
    106       ENDIF 
    107100 
    108101      IF( l_trdtrc )  THEN             ! trends: store now fields before the Asselin filter application 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/TRP/trcsbc.F90

    r6942 r7162  
    8484      END SELECT 
    8585 
    86       IF( ln_top_euler) THEN 
    87          r2dt =  rdttrc              ! = rdttrc (use Euler time stepping) 
    88       ELSE 
    89          IF( neuler == 0 .AND. kt == nittrc000 ) THEN     ! at nittrc000 
    90             r2dt = rdttrc            ! = rdttrc (restarting with Euler time stepping) 
    91          ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN          ! at nittrc000 or nittrc000+1 
    92             r2dt = 2. * rdttrc       ! = 2 rdttrc (leapfrog) 
    93          ENDIF 
    94       ENDIF 
    95  
    96  
    9786      IF( kt == nittrc000 ) THEN 
    9887         IF(lwp) WRITE(numout,*) 
     
    160149                  zdtra = r1_rau0 * ( ztfx + zsfx(ji,jj) * trn(ji,jj,1,jn) )  
    161150                  IF ( zdtra < 0. ) THEN 
    162                      zratio = -zdtra * zse3t * r2dt / ( trn(ji,jj,1,jn) + zrtrn ) 
     151                     zratio = -zdtra * zse3t * r2dttrc / ( trn(ji,jj,1,jn) + zrtrn ) 
    163152                     zdtra = MIN(1.0, zratio) * zdtra ! avoid negative concentrations to arise 
    164153                  ENDIF 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90

    r6140 r7162  
    3535   INTEGER ::   nzdf = 0               ! type vertical diffusion algorithm used 
    3636      !                                ! defined from ln_zdf...  namlist logicals) 
    37    REAL(wp) ::  r2dttrc   ! vertical profile time-step, = 2 rdt 
    38       !                   ! except at nittrc000 (=rdt) if neuler=0 
    39  
    4037   !! * Substitutions 
    4138#  include "zdfddm_substitute.h90" 
     
    6360      IF( nn_timing == 1 )  CALL timing_start('trc_zdf') 
    6461      ! 
    65       IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN     ! at nittrc000 
    66          r2dttrc =  rdttrc           ! = rdttrc (use or restarting with Euler time stepping) 
    67       ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN          ! at nittrc000 or nittrc000+1 
    68          r2dttrc = 2. * rdttrc       ! = 2 rdttrc (leapfrog) 
    69       ENDIF 
    70  
    7162      IF( l_trdtrc )  THEN 
    7263         CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrtrd ) 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/oce_trc.F90

    r5836 r7162  
    3131   USE phycst                                   !* physical constants * 
    3232   USE c1d                                      !* 1D configuration 
     33 
    3334   USE dom_oce                                  !* model domain * 
    3435 
     
    6465   USE sbc_oce , ONLY :   rnf        =>    rnf        !: river runoff   [Kg/m2/s] 
    6566   USE sbc_oce , ONLY :   ln_dm2dc   =>    ln_dm2dc   !: Diurnal Cycle  
     67   USE sbc_oce , ONLY :   ln_cpl     =>    ln_cpl     !: ocean-atmosphere coupled formulation 
    6668   USE sbc_oce , ONLY :   ncpl_qsr_freq   =>   ncpl_qsr_freq   !: qsr coupling frequency per days from atmospher 
    6769   USE sbc_oce , ONLY :   ln_rnf     =>    ln_rnf     !: runoffs / runoff mouths 
    6870   USE sbc_oce , ONLY :   fr_i       =>    fr_i       !: ice fraction (between 0 to 1) 
    6971   USE sbc_oce , ONLY :   nn_ice_embd => nn_ice_embd  !: flag for  levitating/embedding sea-ice in the ocean 
     72   USE sbc_oce , ONLY :   atm_co2    =>    atm_co2    !  atmospheric pCO2 
    7073   USE traqsr  , ONLY :   rn_abs     =>    rn_abs     !: fraction absorbed in the very near surface 
    7174   USE traqsr  , ONLY :   rn_si0     =>    rn_si0     !: very near surface depth of extinction 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/trc.F90

    r7103 r7162  
    7171   CHARACTER(len = 256), PUBLIC                                    ::  cn_trcrst_outdir  !: restart output directory 
    7272   REAL(wp)            , PUBLIC                                    ::  rdttrc         !: passive tracer time step 
     73   REAL(wp)            , PUBLIC                                    ::  r2dttrc        !: = 2*rdttrc except at nit000 (=rdttrc) if neuler=0 
    7374   LOGICAL             , PUBLIC                                    ::  ln_top_euler  !: boolean term for euler integration  
    7475   LOGICAL             , PUBLIC                                    ::  ln_trcdta      !: Read inputs data from files 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/trcini.F90

    r7124 r7162  
    2424   USE trcrst 
    2525   USE lib_mpp         ! distribued memory computing library 
    26    USE sbc_oce 
    2726   USE trcice          ! tracers in sea ice 
    2827   USE trcbc,   only : trc_bc_init ! generalized Boundary Conditions 
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/trcstp.F90

    r7041 r7162  
    6060      ! 
    6161      IF( nn_timing == 1 )   CALL timing_start('trc_stp') 
     62      ! 
     63      IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN     ! at nittrc000 
     64         r2dttrc =  rdttrc           ! = rdttrc (use or restarting with Euler time stepping) 
     65      ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN          ! at nittrc000 or nittrc000+1 
     66         r2dttrc = 2. * rdttrc       ! = 2 rdttrc (leapfrog) 
     67      ENDIF 
    6268      ! 
    6369      IF( kt == nittrc000 .AND. lk_trdmxl_trc )  CALL trd_mxl_trc_init    ! trends: Mixed-layer 
Note: See TracChangeset for help on using the changeset viewer.