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

Changeset 5385


Ignore:
Timestamp:
2015-06-09T15:50:42+02:00 (10 years ago)
Author:
cetlod
Message:

merge 2015/dev_r5204_CNRS_PISCES_dcy branch into the trunk, see ticket #1532

Location:
trunk/NEMOGCM
Files:
83 edited
5 copied

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/ARCH/arch-X64_ADA.fcm

    r4990 r5385  
    3232%HDF5_HOME           /smplocal/pub/HDF5/1.8.9/par 
    3333%XIOS_HOME           $WORKDIR/XIOS 
    34 %OASIS_HOME          /not/yet/defined 
     34####%OASIS_HOME          $WORKDIR/oasis3-mct/BLD 
     35%OASIS_HOME          /not/defined 
    3536 
    3637%NCDF_INC            -I%NCDF_HOME/include  
  • trunk/NEMOGCM/CONFIG/AMM12/EXP00/iodef.xml

    r5363 r5385  
    130130     <grid id="grid_W_2D" domain_ref="grid_W"/> 
    131131     <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 
     132     <grid id="gznl_T_2D" domain_ref="gznl"/> 
     133     <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 
     134     <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 
    132135    </grid_definition>    
    133136  </context> 
  • trunk/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/iodef.xml

    r5363 r5385  
    147147     <grid id="grid_W_2D" domain_ref="grid_W"/> 
    148148     <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 
     149     <grid id="gznl_T_2D" domain_ref="gznl"/> 
     150     <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 
     151     <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 
    149152    </grid_definition>    
    150153  </context> 
  • trunk/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/iodef_ar5.xml

    r5363 r5385  
    271271     <grid id="grid_W_2D" domain_ref="grid_W"/> 
    272272     <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 
     273     <grid id="gznl_T_2D" domain_ref="gznl"/> 
     274     <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 
     275     <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 
    273276    </grid_definition>     
    274277 
  • trunk/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/iodef_crs.xml

    r5363 r5385  
    146146     <grid id="grid_W_2D" domain_ref="grid_W"/> 
    147147     <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 
     148     <grid id="gznl_T_2D" domain_ref="gznl"/> 
     149     <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 
     150     <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 
    148151    </grid_definition>    
    149152  </context> 
  • trunk/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/iodef_demo.xml

    r5363 r5385  
    101101     <grid id="grid_W_2D" domain_ref="grid_W"/> 
    102102     <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 
     103     <grid id="gznl_T_2D" domain_ref="gznl"/> 
     104     <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 
     105     <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 
    103106    </grid_definition>     
    104107 
  • trunk/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/iodef_oldstyle.xml

    r5363 r5385  
    133133     <grid id="grid_W_2D" domain_ref="grid_W"/> 
    134134     <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 
     135     <grid id="gznl_T_2D" domain_ref="gznl"/> 
     136     <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 
     137     <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 
    135138    </grid_definition>    
    136139  </context> 
  • trunk/NEMOGCM/CONFIG/ORCA2_LIM/cpp_ORCA2_LIM.fcm

    r4990 r5385  
    1 bld::tool::fppkeys key_trabbl key_lim2 key_dynspg_flt key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_zdftke key_zdfddm key_zdftmx key_iomput key_mpp_mpi key_diaobs key_asminc 
     1bld::tool::fppkeys key_trabbl key_lim2 key_dynspg_flt key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_zdftke key_zdfddm key_zdftmx key_iomput key_mpp_mpi key_diaobs key_asminc  
  • trunk/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/iodef.xml

    r5363 r5385  
    320320     <grid id="grid_W_2D" domain_ref="grid_W"/> 
    321321     <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 
     322     <grid id="gznl_T_2D" domain_ref="gznl"/> 
     323     <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 
     324     <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 
    322325    </grid_definition>    
    323326  </context> 
  • trunk/NEMOGCM/CONFIG/ORCA2_LIM3/cpp_ORCA2_LIM3.fcm

    r4994 r5385  
    1  bld::tool::fppkeys key_trabbl key_lim3 key_vvl key_dynspg_ts key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_zdftke key_zdfddm key_zdftmx key_iomput key_mpp_mpi key_diaobs key_asminc 
     1 bld::tool::fppkeys key_trabbl key_lim3 key_vvl key_dynspg_ts key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_zdftke key_zdfddm key_zdftmx key_iomput key_mpp_mpi key_diaobs key_asminc  
  • trunk/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/iodef.xml

    r5363 r5385  
    4747   </file> 
    4848 
    49     <file id="file4" name_suffix="_bioscalar" description="pisces sms variables" > 
    50       <field field_ref="tdenit"   name="tdenit"   unit="TgN/yr" operation="instant" > tdenit * 14. * 86400. * 365. / 1e12 </field> 
    51       <field field_ref="tnfix"    name="tnfix"    unit="TgN/yr" operation="instant" > tnfix * 14. * 86400. * 365. / 1e12 </field> 
    52       <field field_ref="tcflx"    name="tcflx"    unit="PgC/yr" operation="instant" > tcflx * -1. * 12. * 86400. * 365. / 1e15 </field> 
    53       <field field_ref="tcflxcum" name="tcflxcum" unit="PgC"    operation="instant" > tcflxcum * -1. * 12. / 1e15 </field> 
    54       <field field_ref="tcexp"    name="tcexp"    unit="PgC/yr" operation="instant" > tcexp * 12. * 86400. * 365. / 1e15 </field> 
    55       <field field_ref="tintpp"   name="tintpp"   unit="PgC/yr" operation="instant" > tintpp * 12. * 86400. * 365. / 1e15 </field> 
    56       <field field_ref="pno3tot"  name="pno3tot"  unit="umolN"  > pno3tot * 16. / 122. * 1e6 </field> 
    57       <field field_ref="psiltot"  name="psiltot"  unit="umolC"  > psiltot * 1e6 </field> 
    58       <field field_ref="palktot"  name="palktot"  unit="umolC"  > palktot * 1e6  </field> 
    59       <field field_ref="pfertot"  name="pfertot"  unit="nmolFe" > pfertot * 1e9  </field> 
    60     </file> 
    61  
     49        <file id="file4" name_suffix="_bioscalar" description="pisces sms variables" > 
     50          <field field_ref="tdenit"   name="tdenit"   unit="TgN/yr" operation="instant" > tdenit * 14. * 86400. * 365. / 1e12 </field> 
     51          <field field_ref="tnfix"    name="tnfix"    unit="TgN/yr" operation="instant" > tnfix * 14. * 86400. * 365. / 1e12 </field> 
     52          <field field_ref="tcflx"    name="tcflx"    unit="PgC/yr" operation="instant" > tcflx * -1. * 12. * 86400. * 365. / 1e15 </field> 
     53          <field field_ref="tcflxcum" name="tcflxcum" unit="PgC"    operation="instant" > tcflxcum * -1. * 12. / 1e15 </field> 
     54          <field field_ref="tcexp"    name="tcexp"    unit="PgC/yr" operation="instant" > tcexp * 12. * 86400. * 365. / 1e15 </field> 
     55          <field field_ref="tintpp"   name="tintpp"   unit="PgC/yr" operation="instant" > tintpp * 12. * 86400. * 365. / 1e15 </field> 
     56          <field field_ref="pno3tot"  name="pno3tot"  unit="umolN"  > pno3tot * 16. / 122. * 1e6 </field> 
     57          <field field_ref="ppo4tot"  name="ppo4tot"  unit="umolP"  > ppo4tot * 1. / 122. * 1e6 </field> 
     58          <field field_ref="psiltot"  name="psiltot"  unit="umolC"  > psiltot * 1e6  </field> 
     59          <field field_ref="palktot"  name="palktot"  unit="umolC"  > palktot * 1e6  </field> 
     60        <field field_ref="pfertot"  name="pfertot"  unit="nmolFe" > pfertot * 1e9  </field> 
     61                                                                                                                             </file> 
    6262      </file_group> 
    6363 
  • trunk/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_top_cfg

    r4340 r5385  
    55&namtrc_run     !   run information 
    66!----------------------------------------------------------------------- 
    7    ln_top_euler  = .true.    !  use Euler time-stepping for TOP 
    87/ 
    98!----------------------------------------------------------------------- 
  • trunk/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/iodef.xml

    r5363 r5385  
    3939           <field field_ref="tintpp"   name="tintpp"   unit="PgC/yr" operation="instant" > tintpp * 12. * 86400. * 365. / 1e15 </field> 
    4040           <field field_ref="pno3tot"  name="pno3tot"  unit="umolN"  > pno3tot * 16. / 122. * 1e6 </field> 
     41           <field field_ref="ppo4tot"  name="ppo4tot"  unit="umolP"  > ppo4tot * 1. / 122. * 1e6 </field> 
    4142           <field field_ref="psiltot"  name="psiltot"  unit="umolC"  > psiltot * 1e6  </field> 
    4243           <field field_ref="palktot"  name="palktot"  unit="umolC"  > palktot * 1e6  </field> 
  • trunk/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_cfg

    r4370 r5385  
    6767!----------------------------------------------------------------------- 
    6868   nn_fsbc     = 1         !  frequency of surface boundary condition computation  
     69   ln_rnf      = .false.   !  runoffs 
    6970 
    7071!----------------------------------------------------------------------- 
  • trunk/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_top_cfg

    r4340 r5385  
    66!----------------------------------------------------------------------- 
    77   nn_writetrc   =  1460     !  time step frequency for sn_tracer outputs 
    8    ln_top_euler  = .true.    !  use Euler time-stepping for TOP 
    98/ 
    109!----------------------------------------------------------------------- 
  • trunk/NEMOGCM/CONFIG/SHARED/domain_def.xml

    r5147 r5385  
    66         <domain id="myzoom" zoom_ibegin="10" zoom_jbegin="10" zoom_ni="5" zoom_nj="5" /> 
    77         <domain id="1point" zoom_ibegin="10" zoom_jbegin="10" zoom_ni="1" zoom_nj="1" /> 
    8          <domain id="ptr" zoom_ibegin="0000"  zoom_jbegin="1" zoom_ni="1" zoom_nj="0000" /> 
    98         <!--   Eq section   --> 
    109         <domain id="EqT" zoom_ibegin="1" zoom_jbegin="0000" zoom_ni="0000" zoom_nj="1" /> 
     
    177176      </domain_group> 
    178177 
     178      <domain_group id="gznl"> 
     179         <domain id="ptr" long_name="zonal mean grid" zoom_ibegin="0000"  zoom_jbegin="1" zoom_ni="1" zoom_nj="0000" /> 
     180      </domain_group> 
     181 
     182 
    179183   </domain_definition>     
    180184  
  • trunk/NEMOGCM/CONFIG/SHARED/field_def.xml

    r5363 r5385  
    565565 
    566566      <!-- Poleward transport : ptr -->      
    567       <field_group id="diaptr" domain_ref="ptr"  >  
    568         <field id="zomsfglo"          long_name="Meridional Stream-Function: Global"           unit="Sv"       grid_ref="grid_W_3D" /> 
    569         <field id="zomsfatl"          long_name="Meridional Stream-Function: Atlantic"         unit="Sv"       grid_ref="grid_W_3D" /> 
    570         <field id="zomsfpac"          long_name="Meridional Stream-Function: Pacific"          unit="Sv"       grid_ref="grid_W_3D" /> 
    571         <field id="zomsfind"          long_name="Meridional Stream-Function: Indian"           unit="Sv"       grid_ref="grid_W_3D" /> 
    572         <field id="zomsfipc"          long_name="Meridional Stream-Function: Pacific+Indian"   unit="Sv"       grid_ref="grid_W_3D" /> 
    573         <field id="zotemglo"          long_name="Zonal Mean Temperature : Global"              unit="degC"     grid_ref="grid_T_3D" /> 
    574         <field id="zotematl"          long_name="Zonal Mean Temperature : Atlantic"            unit="degC"     grid_ref="grid_T_3D" /> 
    575         <field id="zotempac"          long_name="Zonal Mean Temperature : Pacific"             unit="degC"     grid_ref="grid_T_3D" /> 
    576         <field id="zotemind"          long_name="Zonal Mean Temperature : Indian"              unit="degC"     grid_ref="grid_T_3D" /> 
    577         <field id="zotemipc"          long_name="Zonal Mean Temperature : Pacific+Indian"      unit="degC"     grid_ref="grid_T_3D" /> 
    578         <field id="zosalglo"          long_name="Zonal Mean Salinity : Global"                 unit="1e-3"     grid_ref="grid_T_3D" /> 
    579         <field id="zosalatl"          long_name="Zonal Mean Salinity : Atlantic"               unit="1e-3"     grid_ref="grid_T_3D" /> 
    580         <field id="zosalpac"          long_name="Zonal Mean Salinity : Pacific"                unit="1e-3"     grid_ref="grid_T_3D" /> 
    581         <field id="zosalind"          long_name="Zonal Mean Salinity : Indian"                 unit="1e-3"     grid_ref="grid_T_3D" /> 
    582         <field id="zosalipc"          long_name="Zonal Mean Salinity : Pacific+Indian"         unit="1e-3"     grid_ref="grid_T_3D" /> 
    583         <field id="zosrfglo"          long_name="Zonal Mean Surface"                           unit="m2"       grid_ref="grid_T_3D" /> 
    584         <field id="zosrfatl"          long_name="Zonal Mean Surface : Atlantic"                unit="m2"       grid_ref="grid_T_3D" /> 
    585         <field id="zosrfpac"          long_name="Zonal Mean Surface : Pacific"                 unit="m2"       grid_ref="grid_T_3D" /> 
    586         <field id="zosrfind"          long_name="Zonal Mean Surface : Indian"                  unit="m2"       grid_ref="grid_T_3D" /> 
    587         <field id="zosrfipc"          long_name="Zonal Mean Surface : Pacific+Indian"          unit="m2"       grid_ref="grid_T_3D" /> 
    588         <field id="sophtadv"          long_name="Advective Heat Transport"                     unit="PW"       grid_ref="grid_T_2D" /> 
    589         <field id="sophtldf"          long_name="Diffusive Heat Transport"                     unit="PW"       grid_ref="grid_T_2D" /> 
    590         <field id="sopstadv"          long_name="Advective Salt Transport"                     unit="Giga g/s" grid_ref="grid_T_2D" /> 
    591         <field id="sopstldf"          long_name="Diffusive Salt Transport"                     unit="Giga g/s" grid_ref="grid_T_2D" /> 
     567      <field_group id="diaptr" domain_ref="ptr" >  
     568        <field id="zomsfglo"          long_name="Meridional Stream-Function: Global"           unit="Sv"       grid_ref="gznl_W_3D" /> 
     569        <field id="zomsfatl"          long_name="Meridional Stream-Function: Atlantic"         unit="Sv"       grid_ref="gznl_W_3D" /> 
     570        <field id="zomsfpac"          long_name="Meridional Stream-Function: Pacific"          unit="Sv"       grid_ref="gznl_W_3D" /> 
     571        <field id="zomsfind"          long_name="Meridional Stream-Function: Indian"           unit="Sv"       grid_ref="gznl_W_3D" /> 
     572        <field id="zomsfipc"          long_name="Meridional Stream-Function: Pacific+Indian"   unit="Sv"       grid_ref="gznl_W_3D" /> 
     573        <field id="zotemglo"          long_name="Zonal Mean Temperature : Global"              unit="degC"     grid_ref="gznl_T_3D" /> 
     574        <field id="zotematl"          long_name="Zonal Mean Temperature : Atlantic"            unit="degC"     grid_ref="gznl_T_3D" /> 
     575        <field id="zotempac"          long_name="Zonal Mean Temperature : Pacific"             unit="degC"     grid_ref="gznl_T_3D" /> 
     576        <field id="zotemind"          long_name="Zonal Mean Temperature : Indian"              unit="degC"     grid_ref="gznl_T_3D" /> 
     577        <field id="zotemipc"          long_name="Zonal Mean Temperature : Pacific+Indian"      unit="degC"     grid_ref="gznl_T_3D" /> 
     578        <field id="zosalglo"          long_name="Zonal Mean Salinity : Global"                 unit="1e-3"     grid_ref="gznl_T_3D" /> 
     579        <field id="zosalatl"          long_name="Zonal Mean Salinity : Atlantic"               unit="1e-3"     grid_ref="gznl_T_3D" /> 
     580        <field id="zosalpac"          long_name="Zonal Mean Salinity : Pacific"                unit="1e-3"     grid_ref="gznl_T_3D" /> 
     581        <field id="zosalind"          long_name="Zonal Mean Salinity : Indian"                 unit="1e-3"     grid_ref="gznl_T_3D" /> 
     582        <field id="zosalipc"          long_name="Zonal Mean Salinity : Pacific+Indian"         unit="1e-3"     grid_ref="gznl_T_3D" /> 
     583        <field id="zosrfglo"          long_name="Zonal Mean Surface"                           unit="m2"       grid_ref="gznl_T_3D" /> 
     584        <field id="zosrfatl"          long_name="Zonal Mean Surface : Atlantic"                unit="m2"       grid_ref="gznl_T_3D" /> 
     585        <field id="zosrfpac"          long_name="Zonal Mean Surface : Pacific"                 unit="m2"       grid_ref="gznl_T_3D" /> 
     586        <field id="zosrfind"          long_name="Zonal Mean Surface : Indian"                  unit="m2"       grid_ref="gznl_T_3D" /> 
     587        <field id="zosrfipc"          long_name="Zonal Mean Surface : Pacific+Indian"          unit="m2"       grid_ref="gznl_T_3D" /> 
     588        <field id="sophtadv"          long_name="Advective Heat Transport"                     unit="PW"       grid_ref="gznl_T_2D" /> 
     589        <field id="sophtldf"          long_name="Diffusive Heat Transport"                     unit="PW"       grid_ref="gznl_T_2D" /> 
     590        <field id="sopstadv"          long_name="Advective Salt Transport"                     unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     591        <field id="sopstldf"          long_name="Diffusive Salt Transport"                     unit="Giga g/s" grid_ref="gznl_T_2D" /> 
    592592      </field_group> 
    593593 
     
    724724      <!-- ptrc on T grid --> 
    725725 
    726       <field_group id="ptrc_T" grid_ref="grid_T_3D"> 
    727        <field id="DIC"      long_name="Dissolved inorganic Concentration"        unit="mmol/m3" /> 
    728        <field id="Alkalini" long_name="Total Alkalinity Concentration"           unit="mmol/m3" /> 
    729        <field id="O2"       long_name="Oxygen Concentration"                     unit="mmol/m3" /> 
    730        <field id="CaCO3"    long_name="Calcite Concentration"                    unit="mmol/m3" /> 
    731        <field id="PO4"      long_name="Phosphate Concentration"                  unit="mmol/m3" /> 
    732        <field id="POC"      long_name="Small organic carbon Concentration"       unit="mmol/m3" /> 
    733        <field id="Si"       long_name="Silicate Concentration"                   unit="mmol/m3" /> 
    734        <field id="PHY"      long_name="(Nano)Phytoplankton Concentration"        unit="mmol/m3" /> 
    735        <field id="ZOO"      long_name="(Micro)Zooplankton Concentration"         unit="mmol/m3" /> 
    736        <field id="DOC"      long_name="Dissolved organic Concentration"          unit="mmol/m3" /> 
    737        <field id="PHY2"     long_name="Diatoms Concentration"                    unit="mmol/m3" /> 
    738        <field id="ZOO2"     long_name="Mesozooplankton Concentration"            unit="mmol/m3" /> 
    739        <field id="DSi"      long_name="Diatoms Silicate Concentration"           unit="mmol/m3" /> 
    740        <field id="Fer"      long_name="Dissolved Iron Concentration"             unit="mmol/m3" /> 
    741        <field id="BFe"      long_name="Big iron particles Concentration"         unit="mmol/m3" /> 
    742        <field id="GOC"      long_name="Big organic carbon Concentration"         unit="mmol/m3" /> 
    743        <field id="SFe"      long_name="Small iron particles Concentration"       unit="mmol/m3" /> 
    744        <field id="DFe"      long_name="Diatoms iron  Concentration"              unit="mmol/m3" /> 
    745        <field id="GSi"      long_name="Sinking biogenic Silicate Concentration"  unit="mmol/m3" /> 
    746        <field id="NFe"      long_name="Nano iron Concentration"                  unit="mmol/m3" /> 
    747        <field id="NCHL"     long_name="Nano chlorophyl Concentration"            unit="mg/m3"   /> 
    748        <field id="DCHL"     long_name="Diatoms chlorophyl Concentration"         unit="mg/m3"   /> 
    749        <field id="NO3"      long_name="Nitrate Concentration"                    unit="mmol/m3" /> 
    750        <field id="NH4"      long_name="Ammonium Concentration"                   unit="mmol/m3" /> 
     726     <field_group id="ptrc_T" grid_ref="grid_T_3D"> 
     727       <field id="DIC"          long_name="Dissolved inorganic Concentration"        unit="mmol/m3" /> 
     728       <field id="DIC_E3T"      long_name="DIC * E3T"                                unit="mmol/m2" > DIC * e3t </field > 
     729       <field id="Alkalini"     long_name="Total Alkalinity Concentration"           unit="mmol/m3" /> 
     730       <field id="Alkalini_E3T" long_name="Alkalini * E3T"                           unit="mmol/m2"  > Alkalini * e3t </field > 
     731       <field id="O2"           long_name="Oxygen Concentration"                     unit="mmol/m3" /> 
     732       <field id="O2_E3T"       long_name="O2 * E3T"                                 unit="mmol/m2"  > O2 * e3t </field > 
     733       <field id="CaCO3"        long_name="Calcite Concentration"                    unit="mmol/m3" /> 
     734       <field id="CaCO3_E3T"    long_name="CaCO3 * E3T"                              unit="mmol/m2"  > CaCO3 * e3t </field > 
     735       <field id="PO4"          long_name="Phosphate Concentration"                  unit="mmol/m3" /> 
     736       <field id="PO4_E3T"      long_name="PO4 * E3T"                                unit="mmol/m2"  > PO4 * e3t </field > 
     737       <field id="POC"          long_name="Small organic carbon Concentration"       unit="mmol/m3" /> 
     738       <field id="POC_E3T"      long_name="POC * E3T"                                unit="mmol/m2"  > POC * e3t </field > 
     739       <field id="Si"           long_name="Silicate Concentration"                   unit="mmol/m3" /> 
     740       <field id="Si_E3T"       long_name="Si * E3T"                                 unit="mmol/m2"  > Si * e3t </field > 
     741       <field id="PHY"          long_name="(Nano)Phytoplankton Concentration"        unit="mmol/m3" /> 
     742       <field id="PHY_E3T"      long_name="PHY * E3T"                                unit="mmol/m2"  > PHY * e3t </field > 
     743       <field id="ZOO"          long_name="(Micro)Zooplankton Concentration"         unit="mmol/m3" /> 
     744       <field id="ZOO_E3T"      long_name="ZOO2 * E3T"                               unit="mmol/m2"  > ZOO * e3t </field > 
     745       <field id="DOC"          long_name="Dissolved organic Concentration"          unit="mmol/m3" /> 
     746       <field id="DOC_E3T"      long_name="DOC * E3T"                                unit="mmol/m2"  > DOC * e3t </field > 
     747       <field id="PHY2"         long_name="Diatoms Concentration"                    unit="mmol/m3" /> 
     748       <field id="PHY2_E3T"     long_name="PHY2 * E3T"                               unit="mmol/m2"  > PHY2 * e3t </field > 
     749       <field id="ZOO2"         long_name="Mesozooplankton Concentration"            unit="mmol/m3" /> 
     750       <field id="ZOO2_E3T"     long_name="ZOO2 * E3T"                               unit="mmol/m2"  > ZOO2 * e3t </field > 
     751       <field id="DSi"          long_name="Diatoms Silicate Concentration"           unit="mmol/m3" /> 
     752       <field id="DSi_E3T"      long_name="Dsi * E3T"                                unit="mmol/m2"  > DSi * e3t </field > 
     753       <field id="Fer"          long_name="Dissolved Iron Concentration"             unit="mmol/m3" /> 
     754       <field id="Fer_E3T"      long_name="Fer * E3T"                                unit="mmol/m2"  > Fer * e3t </field > 
     755       <field id="BFe"          long_name="Big iron particles Concentration"         unit="mmol/m3" /> 
     756       <field id="BFe_E3T"      long_name="BFe * E3T"                                unit="mmol/m2"  > BFe * e3t </field > 
     757       <field id="GOC"          long_name="Big organic carbon Concentration"         unit="mmol/m3" /> 
     758       <field id="GOC_E3T"      long_name="GOC * E3T"                                unit="mmol/m2"  > GOC * e3t </field > 
     759       <field id="SFe"          long_name="Small iron particles Concentration"       unit="mmol/m3" /> 
     760       <field id="SFe_E3T"      long_name="SFe * E3T"                                unit="mmol/m2"  > SFe * e3t </field > 
     761       <field id="DFe"          long_name="Diatoms iron  Concentration"              unit="mmol/m3" /> 
     762       <field id="DFe_E3T"      long_name="DFe * E3T"                                unit="mmol/m2"  > DFe * e3t </field > 
     763       <field id="GSi"          long_name="Sinking biogenic Silicate Concentration"  unit="mmol/m3" /> 
     764       <field id="GSi_E3T"      long_name="GSi * E3T"                                unit="mmol/m2"  > GSi * e3t </field > 
     765       <field id="NFe"          long_name="Nano iron Concentration"                  unit="mmol/m3" /> 
     766       <field id="NFe_E3T"      long_name="NFe * E3T"                                unit="mmol/m2"  > NFe * e3t </field > 
     767       <field id="NCHL"         long_name="Nano chlorophyl Concentration"            unit="mg/m3"   /> 
     768       <field id="NCHL_E3T"     long_name="NCHL * E3T"                               unit="mmol/m2"  > NCHL * e3t </field > 
     769       <field id="DCHL"         long_name="Diatoms chlorophyl Concentration"         unit="mg/m3"   /> 
     770       <field id="DCHL_E3T"     long_name="DCHL * E3T"                               unit="mmol/m2"  > DCHL * e3t </field > 
     771       <field id="NO3"          long_name="Nitrate Concentration"                    unit="mmol/m3" /> 
     772       <field id="NO3_E3T"      long_name="NO3 * E3T"                                unit="mmol/m2"  > NO3 * e3t </field > 
     773       <field id="NH4"          long_name="Ammonium Concentration"                   unit="mmol/m3" /> 
     774       <field id="NH4_E3T"      long_name="NH4 * E3T"                                unit="mmol/m2"  > NH4 * e3t </field > 
    751775 
    752776       <!-- PISCES with Kriest parametisation : variables available with key_kriest --> 
    753        <field id="Num"      long_name="Number of organic particles"              unit="1"       /> 
     777       <field id="Num"         long_name="Number of organic particles"              unit="1" /> 
     778       <field id="Num_E3T"     long_name="Num * E3T"                                unit="m"  > Num * e3t </field > 
    754779 
    755780       <!-- PISCES light : variables available with key_pisces_reduced --> 
    756        <field id="DET"      long_name="Detritus"                                 unit="mmol-N/m3" /> 
    757        <field id="DOM"      long_name="Dissolved Organic Matter"                 unit="mmol-N/m3" /> 
     781       <field id="DET"         long_name="Detritus"                                 unit="mmol-N/m3" /> 
     782       <field id="DET_E3T"     long_name="DET * E3T"                                unit="mmol-N/m2"  > DET * e3t </field > 
     783       <field id="DOM"         long_name="Dissolved Organic Matter"                 unit="mmol-N/m3" /> 
     784       <field id="DOM_E3T"     long_name="DOM * E3T"                                unit="mmol-N/m2"  > DOM * e3t </field > 
    758785 
    759786       <!-- CFC11 : variables available with key_cfc --> 
    760        <field id="CFC11"    long_name="CFC-11 Concentration"                     unit="umol/m3"   /> 
     787       <field id="CFC11"       long_name="CFC-11 Concentration"                     unit="umol/m3" /> 
     788       <field id="CFC11_E3T"   long_name="CFC11 * E3T"                              unit="umol/m2"  > CFC11 * e3t </field > 
    761789       <!-- Bomb C14 : variables available with key_c14b --> 
    762        <field id="C14B"     long_name="Bomb C14 Concentration"                   unit="1"         /> 
     790       <field id="C14B"     long_name="Bomb C14 Concentration"                      unit="1"         /> 
     791       <field id="C14B_E3T"    long_name="C14B * E3T"                               unit="m"  > C14B * e3t </field > 
    763792     </field_group> 
    764793 
     
    770799       <field id="CO3sat"      long_name="CO3 saturation"                          unit="mol/m3"     grid_ref="grid_T_3D" /> 
    771800       <field id="PAR"         long_name="Photosynthetically Available Radiation"  unit="W/m2"       grid_ref="grid_T_3D" /> 
     801       <field id="PARDM"       long_name="Daily mean PAR"                          unit="W/m2"       grid_ref="grid_T_3D" /> 
    772802       <field id="PPPHY"       long_name="Primary production of nanophyto"         unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    773803       <field id="PPPHY2"      long_name="Primary production of diatoms"           unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
     
    883913     <field_group id="PISCES_scalar"  domain_ref="1point" > 
    884914       <field id="pno3tot"         long_name="global mean nitrate concentration"                  unit="mol/m3"   /> 
     915       <field id="ppo4tot"         long_name="global mean phosphorus concentration"               unit="mol/m3"   /> 
    885916       <field id="psiltot"         long_name="global mean silicate concentration"                 unit="mol/m3"   /> 
    886917       <field id="palktot"         long_name="global mean alkalinity concentration"               unit="mol/m3"   /> 
  • trunk/NEMOGCM/CONFIG/SHARED/namelist_pisces_ref

    r5148 r5385  
    207207/ 
    208208!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     209&nampisice      !  Prescribed sea ice tracers 
     210!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     211! constant ocean tracer concentrations are defined in trcice_pisces.F90 (Global, Arctic, Antarctic and Baltic) 
     212! trc_ice_ratio     * betw 0 and 1: prescribed ice/ocean tracer concentration ratio 
     213!                   * -1 => the ice-ocean tracer concentration ratio follows the  
     214!                           ice-ocean salinity ratio 
     215!                   * -2 => tracer concentration in sea ice is prescribed and  
     216!                           trc_ice_prescr is used 
     217! trc_ice_prescr    * prescribed tracer concentration. used only if  
     218!                     trc_ice_ratio = -2. equals -99 if not used. 
     219! cn_trc_o          * 'GL' use global ocean values making the Baltic distinction only 
     220!                     'AA' use specific Arctic/Antarctic/Baltic values 
     221!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     222!    sn_tri_ ! trc_ice_ratio ! trc_ice_prescr !     cn_trc_o 
     223   sn_tri_dic =           -1.,           -99.,          'AA' 
     224   sn_tri_doc =            0.,           -99.,          'AA' 
     225   sn_tri_tal =           -1.,           -99.,          'AA' 
     226   sn_tri_oxy =           -1.,           -99.,          'AA' 
     227   sn_tri_cal =            0.,           -99.,          'AA' 
     228   sn_tri_po4 =           -1.,           -99.,          'AA' 
     229   sn_tri_poc =            0.,           -99.,          'AA' 
     230   sn_tri_goc =            0.,           -99.,          'AA' 
     231   sn_tri_bfe =            0.,           -99.,          'AA' 
     232   sn_tri_num =            0.,           -99.,          'AA' 
     233   sn_tri_sil =           -1.,           -99.,          'AA' 
     234   sn_tri_dsi =            0.,           -99.,          'AA' 
     235   sn_tri_gsi =            0.,           -99.,          'AA' 
     236   sn_tri_phy =            0.,           -99.,          'AA' 
     237   sn_tri_dia =            0.,           -99.,          'AA' 
     238   sn_tri_zoo =            0.,           -99.,          'AA' 
     239   sn_tri_mes =            0.,           -99.,          'AA' 
     240   sn_tri_fer =           -2.,          15E-9,          'AA' 
     241   sn_tri_sfe =            0.,           -99.,          'AA' 
     242   sn_tri_dfe =            0.,           -99.,          'AA' 
     243   sn_tri_nfe =            0.,           -99.,          'AA' 
     244   sn_tri_nch =            0.,           -99.,          'AA' 
     245   sn_tri_dch =            0.,           -99.,          'AA' 
     246   sn_tri_no3 =           -1.,           -99.,          'AA' 
     247   sn_tri_nh4 =            1.,           -99.,          'AA' 
     248/ 
     249!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    209250&nampiskrp     !   Kriest parameterization : parameters     "key_kriest" 
    210251!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
  • trunk/NEMOGCM/CONFIG/SHARED/namelist_ref

    r5363 r5385  
    425425   ln_rnf_tem   = .false.   !  read in temperature information for runoff 
    426426   ln_rnf_sal   = .false.   !  read in salinity information for runoff 
     427   ln_rnf_depth_ini = .false.  ! compute depth at initialisation from runoff file 
     428   rn_rnf_max   = 5.735e-4  !  max value of the runoff climatologie over global domain ( ln_rnf_depth_ini = .true ) 
     429   rn_dep_max   = 150.      !  depth over which runoffs is spread ( ln_rnf_depth_ini = .true ) 
     430   nn_rnf_depth_file = 0    !  create (=1) a runoff depth file or not (=0) 
    427431/ 
    428432!----------------------------------------------------------------------- 
  • trunk/NEMOGCM/CONFIG/SHARED/namelist_top_ref

    r5341 r5385  
    5252&namtrc_ldf    !   lateral diffusion scheme for passive tracer  
    5353!----------------------------------------------------------------------- 
    54    ln_trcldf_diff   =  .true.   !  performs lateral diffusion (T) or not (F) 
    5554!                               !  Type of the operator :  
    5655   ln_trcldf_lap    =  .true.   !     laplacian operator        
     
    8281                           !                   =2 no damping in the mixed  layer (rho crieria) 
    8382   cn_resto_tr  = 'resto_tr.nc'    !  create a damping.coeff NetCDF file (=1) or not (=0) 
     83!----------------------------------------------------------------------- 
     84&namtrc_ice       !    Representation of sea ice growth & melt effects 
     85!----------------------------------------------------------------------- 
     86   nn_ice_tr   =  -1        !  tracer concentration in sea ice  
     87                           !    =-1 (no vvl: identical cc in ice and ocean / vvl: cc_ice = 0) 
     88                           !    = 0 (no vvl: cc_ice = zero / vvl: cc_ice = ) 
     89                           !    = 1 prescribed to a namelist value (implemented in pisces only) 
    8490/ 
    8591!----------------------------------------------------------------------- 
  • trunk/NEMOGCM/CONFIG/cfg.txt

    r5333 r5385  
    77AMM12 OPA_SRC 
    88ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 
    9 ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC 
    109GYRE OPA_SRC 
    1110ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC 
    1211ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 
     12ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC 
     13ORCA2_LIM_OBS OPA_SRC LIM_SRC_2 NST_SRC 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/ice_2.F90

    r5341 r5385  
    6767 
    6868   !!* Ice Rheology 
    69  
    70    LOGICAL , PUBLIC::  ltrcdm2dc_ice = .FALSE.              !: In case of Diurnal Cycle short wave, compute a Daily Mean short waves flux 
    71  
    7269# if defined key_lim2_vp 
    7370   !                                                      !!* VP rheology * 
     
    115112   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qdtcn         !: energy from the ice to the ocean point (at a factor 2) 
    116113   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   thcm          !: part of the solar energy used in the lead heat budget 
    117    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fstric_daymean!: Solar flux transmitted trough the ice, for day mean of qsr ( PISCES, with dirunal cycle ) 
     114   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fstric_mean   !: Solar flux transmitted trough the ice, for day mean of qsr ( PISCES, with dirunal cycle ) 
    118115   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fstric        !: Solar flux transmitted trough the ice 
    119116   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ffltbif       !: linked with the max heat contained in brine pockets (?) 
     
    175172         &     tbif  (jpi,jpj,jplayersp1)                           , STAT=ierr(5)) 
    176173 
    177       IF( ltrcdm2dc_ice ) ALLOCATE(fstric_daymean(jpi,jpj), STAT=ierr(6) ) 
    178  
    179174      !* moment used in the advection scheme 
    180175      ALLOCATE(sxice (jpi,jpj) , syice (jpi,jpj) , sxxice(jpi,jpj) ,     & 
     
    203198   !!   Default option         Empty module        NO LIM 2.0 sea-ice model 
    204199   !!---------------------------------------------------------------------- 
    205    LOGICAL , PUBLIC::  ltrcdm2dc_ice = .FALSE.              !: In case of Diurnal Cycle short wave, compute a Daily Mean short waves flux 
    206200#endif 
    207201   !!----------------------------------------------------------------- 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/iceini_2.F90

    r5341 r5385  
    6060      ENDIF 
    6161      !                                 
    62       ! When Diurnal cycle, core bulk and LIM2  are activated,  
    63       ! a daily mean qsr is computed for tracer/biogeochemistery model                                 ! 
    64       IF( ltrcdm2dc )THEN  ; ltrcdm2dc_ice = .TRUE. 
    65       ELSE                 ; ltrcdm2dc_ice = .FALSE. 
    66       ENDIF 
    6762      !                                ! Allocate the ice arrays 
    6863      ierr =        ice_alloc_2    ()       ! ice variables 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90

    r4990 r5385  
    4646   PUBLIC   lim_sbc_flx_2      ! called by sbc_ice_lim_2 
    4747   PUBLIC   lim_sbc_tau_2      ! called by sbc_ice_lim_2 
    48    PUBLIC   lim_bio_meanqsr_2  ! called by sbc_ice_lim_2 
    4948 
    5049   REAL(wp)  ::   r1_rdtice            ! = 1. / rdt_ice  
     
    430429   END SUBROUTINE lim_sbc_tau_2 
    431430 
    432    SUBROUTINE lim_bio_meanqsr_2 
    433       !!--------------------------------------------------------------------- 
    434       !!                     ***  ROUTINE lim_bio_meanqsr 
    435       !! 
    436       !! ** Purpose :   provide daily qsr_mean for PISCES when  
    437       !!                analytic diurnal cycle is applied in physic 
    438       !! 
    439       !! ** Method  :   add part under ice 
    440       !! 
    441       !!--------------------------------------------------------------------- 
    442  
    443       qsr_mean(:,:) =  pfrld(:,:) * qsr_mean(:,:) + ( 1. - pfrld(:,:) ) * fstric_daymean(:,:) 
    444  
    445    END SUBROUTINE lim_bio_meanqsr_2 
    446431 
    447432   SUBROUTINE lim_sbc_init_2 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90

    r4990 r5385  
    114114      CALL wrk_alloc( jpi, jpj, jpk, zmsk ) 
    115115 
    116       IF( kt == nit000 )   CALL lim_thd_init_2  ! Initialization (first time-step only) 
     116      IF( kt == nit000 )   CALL lim_thd_init_2   ! Initialization (first time-step only) 
    117117    
    118118      !-------------------------------------------! 
     
    137137      rdq_ice(:,:) = 0.e0   ! heat content associated with rdm_ice 
    138138      zmsk (:,:,:) = 0.e0 
    139       IF( ltrcdm2dc_ice  ) fstric_daymean (:,:) = 0.e0   ! part of solar radiation absorbing inside the ice 
    140139 
    141140      ! set to zero snow thickness smaller than epsi04 
     
    285284         CALL tab_2d_1d_2( nbpb, tbif_1d    (1:nbpb , 3 ), tbif(:,:,3)    , jpi, jpj, npb(1:nbpb) ) 
    286285         CALL tab_2d_1d_2( nbpb, qsr_ice_1d (1:nbpb)     , qsr_ice(:,:,1) , jpi, jpj, npb(1:nbpb) ) 
    287          IF( ltrcdm2dc_ice ) & 
    288          & CALL tab_2d_1d_2( nbpb, qsr_ice_mean_1d (1:nbpb), qsr_ice_mean(:,:,1), jpi, jpj, npb(1:nbpb) ) 
    289286         CALL tab_2d_1d_2( nbpb, fr1_i0_1d  (1:nbpb)     , fr1_i0         , jpi, jpj, npb(1:nbpb) ) 
    290287         CALL tab_2d_1d_2( nbpb, fr2_i0_1d  (1:nbpb)     , fr2_i0         , jpi, jpj, npb(1:nbpb) ) 
     
    336333         CALL tab_1d_2d_2( nbpb, qsr_ice(:,:,1), npb, qsr_ice_1d(1:nbpb)  , jpi, jpj ) 
    337334         CALL tab_1d_2d_2( nbpb, qns_ice(:,:,1), npb, qns_ice_1d(1:nbpb)  , jpi, jpj ) 
    338          IF( ltrcdm2dc_ice )THEN 
    339             CALL tab_1d_2d_2( nbpb, fstric_daymean     , npb, fstbif_daymean_1d (1:nbpb)  , jpi, jpj ) 
    340             CALL tab_1d_2d_2( nbpb, qsr_ice_mean(:,:,1), npb,    qsr_ice_mean_1d(1:nbpb)  , jpi, jpj ) 
    341          ENDIF 
    342          IF( .NOT. lk_cpl )   CALL tab_1d_2d_2( nbpb, qla_ice(:,:,1), npb, qla_ice_1d(1:nbpb)             , jpi, jpj ) 
     335         IF( .NOT. lk_cpl )   CALL tab_1d_2d_2( nbpb, qla_ice(:,:,1), npb, qla_ice_1d(1:nbpb), jpi, jpj ) 
    343336         ! 
    344337      ENDIF 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limthd_zdf_2.F90

    r4990 r5385  
    273273       END DO 
    274274 
    275        IF( ltrcdm2dc_ice )THEN 
    276  
    277           DO ji = kideb , kiut 
    278              zihsn  = MAX( zzero , SIGN (zone , -h_snow_1d(ji) ) ) 
    279              zihic  = MAX( zzero , 1.0 - ( h_ice_1d(ji) / zhsu ) ) 
    280              zi0(ji)  = zihsn * ( fr1_i0_1d(ji) + zihic * fr2_i0_1d(ji) ) 
    281              zexp     = MIN( zone , EXP( -1.5 * ( h_ice_1d(ji) - zhsu ) ) ) 
    282              fstbif_daymean_1d(ji) = zi0(ji) * qsr_ice_mean_1d(ji) * zexp 
    283           END DO 
    284  
    285        ENDIF 
    286  
    287275       !-------------------------------------------------------------------------------- 
    288276       !  4. Computation of the surface temperature : determined by considering the  
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/thd_ice_2.F90

    r4306 r5385  
    5555      fstbif_1d   ,     &  !:    "                  "      fstric 
    5656      fltbif_1d   ,     &  !:    "                  "      ffltbif 
    57       fstbif_daymean_1d, & !:    "                  " fstric_daymean 
    5857      fscbq_1d    ,     &  !:    "                  "      fscmcbq 
    5958      qsr_ice_1d  ,     &  !:    "                  "      qsr_ice 
    60       qsr_ice_mean_1d , &  !:    "                  "      qsr_ice_mean 
    6159      fr1_i0_1d   ,     &  !:    "                  "      fr1_i0 
    6260      fr2_i0_1d   ,     &  !:    "                  "      fr2_i0 
     
    122120         &      tbif_1d(jpij, jplayersp1), Stat=ierr(4)) 
    123121         ! 
    124       IF( ltrcdm2dc_ice )ALLOCATE(fstbif_daymean_1d(jpij),qsr_ice_mean_1d(jpij),Stat=ierr(5)) 
    125          ! 
    126122      thd_ice_alloc_2 = MAXVAL(ierr) 
    127123      IF( thd_ice_alloc_2 /= 0 )   CALL ctl_warn('thd_ice_alloc_2: failed to allocate arrays') 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90

    r5202 r5385  
    670670         CALL tab_1d_2d( nbpb, qns_ice(:,:,jl), npb, qns_ice_1d(1:nbpb) , jpi, jpj) 
    671671         CALL tab_1d_2d( nbpb, ftr_ice(:,:,jl), npb, ftr_ice_1d(1:nbpb) , jpi, jpj ) 
    672                    
     672         !          
    673673      END SELECT 
    674674 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90

    r5202 r5385  
    283283      END DO 
    284284 
    285       ! 
    286285      !------------------------------------------------------------------------------| 
    287286      !  3) Iterative procedure begins                                               | 
  • trunk/NEMOGCM/NEMO/OFF_SRC/dtadyn.F90

    r5131 r5385  
    264264      fr_i(:,:)        = sf_dyn(jf_ice)%fnow(:,:,1) * tmask(:,:,1)    ! Sea-ice fraction 
    265265      qsr (:,:)        = sf_dyn(jf_qsr)%fnow(:,:,1) * tmask(:,:,1)    ! solar radiation 
    266       IF ( ln_dynrnf ) & 
     266      IF( ln_dynrnf ) & 
    267267      rnf (:,:)        = sf_dyn(jf_rnf)%fnow(:,:,1) * tmask(:,:,1)    ! river runoffs  
    268268 
     
    388388 
    389389      ! 
    390       IF ( ln_dynrnf ) THEN 
     390      IF( ln_dynrnf ) THEN 
    391391                jf_rnf = jfld + 1  ;  jfld  = jf_rnf 
    392392         slf_d(jf_rnf) = sn_rnf 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diafwb.F90

    r4990 r5385  
    5151      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    5252      !! 
    53       INTEGER :: inum             ! temporary logical unit 
    54       INTEGER :: ji, jj, jk, jt   ! dummy loop indices 
    55       INTEGER :: ii0, ii1, ij0, ij1 
    56       REAL(wp) ::   zarea, zvol, zwei 
    57       REAL(wp) ::  ztemi(4), ztemo(4), zsali(4), zsalo(4), zflxi(4), zflxo(4) 
    58       REAL(wp) ::  zt, zs, zu   
    59       REAL(wp) ::  zsm0, zfwfnew 
     53      INTEGER  :: inum             ! temporary logical unit 
     54      INTEGER  :: ji, jj, jk, jt   ! dummy loop indices 
     55      INTEGER  :: ii0, ii1, ij0, ij1 
     56      INTEGER  :: isrow         ! index for ORCA1 starting row 
     57      REAL(wp) :: zarea, zvol, zwei 
     58      REAL(wp) :: ztemi(4), ztemo(4), zsali(4), zsalo(4), zflxi(4), zflxo(4) 
     59      REAL(wp) :: zt, zs, zu   
     60      REAL(wp) :: zsm0, zfwfnew 
    6061      IF( cp_cfg == "orca" .AND. jp_cfg == 1 .OR. jp_cfg == 2 .OR. jp_cfg == 4 ) THEN 
    6162      !!---------------------------------------------------------------------- 
     
    165166         CASE ( 1 )                                  !  ORCA_R1 configurations 
    166167            !                                        ! ======================= 
    167             ii0 = 283   ;   ii1 = 283 
    168             ij0 = 200   ;   ij1 = 200 
     168            ! This dirty section will be suppressed by simplification process: all this will come back in input files 
     169            ! Currently these hard-wired indices relate to the original (pre-v3.6) configuration  
     170            ! which had a grid-size of 362x292. 
     171            ! This grid has been extended southwards for use with the under ice-shelf options (isf) introduced in v3.6.  
     172            ! The original domain can still be used optionally if the isf code is not activated.  
     173            ! An adjustment (isrow) is made to the hard-wired indices if the extended domain (362x332) is being used. 
     174            !  
     175            IF    ( jpjglo == 292 ) THEN  ;  isrow = 0  ! Using pre-v3.6 files or adjusted start row from isf-extended grid 
     176            ELSEIF( jpjglo == 332 ) THEN  ;  isrow = 40 ! Using full isf­extended domain.  
     177            ENDIF                                       ! Adjust j­indices to account for more southerly starting latitude 
     178            ii0 = 283           ;   ii1 = 283 
     179            ij0 = 201 + isrow   ;   ij1 = 201 + isrow 
    169180            !                                        ! ======================= 
    170181         CASE DEFAULT                                !    ORCA R05 or R025 
     
    212223         CASE ( 1 )                                  !  ORCA_R1 configurations 
    213224            !                                        ! ======================= 
    214             ii0 = 282   ;   ii1 = 282 
    215             ij0 = 200   ;   ij1 = 200 
     225            !  This dirty section will be suppressed by simplification process: 
     226            !  all this will come back in input files 
     227            IF    ( jpjglo == 292 ) THEN  ;  isrow = 0   
     228            ELSEIF( jpjglo == 332 ) THEN  ;  isrow = 39 
     229            ENDIF                                       
     230            ii0 = 282           ;   ii1 = 282 
     231            ij0 = 201 + isrow   ;   ij1 = 201 + isrow 
    216232            !                                        ! ======================= 
    217233         CASE DEFAULT                                !    ORCA R05 or R025 
     
    259275         CASE ( 1 )                                  !  ORCA_R1 configurations 
    260276            !                                        ! ======================= 
    261             ii0 = 331   ;   ii1 = 331 
    262             ij0 = 176   ;   ij1 = 176 
     277            !  This dirty section will be suppressed by simplification process: 
     278            !  all this will come back in input files 
     279            IF    ( jpjglo == 292 ) THEN  ;  isrow = 0   
     280            ELSEIF( jpjglo == 332 ) THEN  ;  isrow = 39 
     281            ENDIF                                       
     282            ii0 = 331           ;   ii1 = 331 
     283            ij0 = 176 + isrow   ;   ij1 = 176 + isrow 
    263284            !                                        ! ======================= 
    264285         CASE DEFAULT                                !    ORCA R05 or R025 
     
    306327         CASE ( 1 )                                  !  ORCA_R1 configurations 
    307328            !                                        ! ======================= 
    308             ii0 = 297   ;   ii1 = 297  
    309             ij0 = 230   ;   ij1 = 230 
     329            !  This dirty section will be suppressed by simplification process: 
     330            !  all this will come back in input files 
     331            IF    ( jpjglo == 292 ) THEN  ;  isrow = 0   
     332            ELSEIF( jpjglo == 332 ) THEN  ;  isrow = 39 
     333            ENDIF                                       
     334            ii0 = 297           ;   ii1 = 297 
     335            ij0 = 230 + isrow   ;   ij1 = 230 + isrow 
    310336            !                                        ! ======================= 
    311337         CASE DEFAULT                                !    ORCA R05 or R025 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domhgr.F90

    r5123 r5385  
    105105      REAL(wp) ::   zlam1, zcos_alpha, zim1 , zjm1 , ze1, ze1deg 
    106106      REAL(wp) ::   zphi1, zsin_alpha, zim05, zjm05 
     107      INTEGER  ::   isrow                ! index for ORCA1 starting row 
     108 
    107109      !!---------------------------------------------------------------------- 
    108110      ! 
     
    159161         IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN    ! ORCA R1 configuration 
    160162            !                                             ! ===================== 
    161  
    162             ii0 = 281   ;   ii1 = 282        ! Gibraltar Strait (e2u = 20 km) 
    163             ij0 = 200   ;   ij1 = 200   ;   e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  20.e3 
     163            ! This dirty section will be suppressed by simplification process: all this will come back in input files 
     164            ! Currently these hard-wired indices relate to the original (pre-v3.6) configuration  
     165            ! which had a grid-size of 362x292. 
     166            ! This grid has been extended southwards for use with the under ice-shelf options (isf) introduced in v3.6.  
     167            ! The original domain can still be used optionally if the isf code is not activated.  
     168            ! An adjustment (isrow) is made to the hard-wired indices if the extended domain (362x332) is being used. 
     169            !  
     170            IF    ( jpjglo == 292 ) THEN  ;  isrow = 0  ! Using pre-v3.6 files or adjusted start row from isf-extended grid 
     171            ELSEIF( jpjglo == 332 ) THEN  ;  isrow = 40 ! Using full isf­extended domain.  
     172            ENDIF      
     173            ! 
     174            ii0 = 282           ;   ii1 = 283        ! Gibraltar Strait (e2u = 20 km) 
     175            ij0 = 201 + isrow   ;   ij1 = 201 + isrow   ;   e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  20.e3 
    164176            IF(lwp) WRITE(numout,*) 
    165177            IF(lwp) WRITE(numout,*) '             orca_r1: Gibraltar : e2u reduced to 20 km' 
    166178 
    167             ii0 = 314   ;   ii1 = 315        ! Bhosporus Strait (e2u = 10 km) 
    168             ij0 = 208   ;   ij1 = 208   ;   e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  10.e3 
     179            ii0 = 314           ;   ii1 = 315        ! Bhosporus Strait (e2u = 10 km) 
     180            ij0 = 208 + isrow   ;   ij1 = 208 + isrow   ;   e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  10.e3 
    169181            IF(lwp) WRITE(numout,*) 
    170182            IF(lwp) WRITE(numout,*) '             orca_r1: Bhosporus : e2u reduced to 10 km' 
    171183 
    172             ii0 =  44   ;   ii1 =  44        ! Lombok Strait (e1v = 13 km) 
    173             ij0 = 124   ;   ij1 = 125   ;   e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  13.e3 
     184            ii0 =  44           ;   ii1 =  44        ! Lombok Strait (e1v = 13 km) 
     185            ij0 = 124 + isrow   ;   ij1 = 125 + isrow   ;   e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  13.e3 
    174186            IF(lwp) WRITE(numout,*) 
    175187            IF(lwp) WRITE(numout,*) '             orca_r1: Lombok : e1v reduced to 10 km' 
    176188 
    177             ii0 =  48   ;   ii1 =  48        ! Sumba Strait (e1v = 8 km) [closed from bathy_11 on] 
    178             ij0 = 124   ;   ij1 = 125   ;   e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  8.e3 
     189            ii0 =  48           ;   ii1 =  48        ! Sumba Strait (e1v = 8 km) [closed from bathy_11 on] 
     190            ij0 = 124 + isrow   ;   ij1 = 125 + isrow   ;   e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  8.e3 
    179191            IF(lwp) WRITE(numout,*) 
    180192            IF(lwp) WRITE(numout,*) '             orca_r1: Sumba : e1v reduced to 8 km' 
    181193 
    182             ii0 =  53   ;   ii1 =  53        ! Ombai Strait (e1v = 13 km) 
    183             ij0 = 124   ;   ij1 = 125   ;   e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 13.e3 
     194            ii0 =  53           ;   ii1 =  53        ! Ombai Strait (e1v = 13 km) 
     195            ij0 = 124 + isrow   ;   ij1 = 125 + isrow   ;   e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 13.e3 
    184196            IF(lwp) WRITE(numout,*) 
    185197            IF(lwp) WRITE(numout,*) '             orca_r1: Ombai : e1v reduced to 13 km' 
    186198 
    187             ii0 =  56   ;   ii1 =  56        ! Timor Passage (e1v = 20 km) 
    188             ij0 = 124   ;   ij1 = 125   ;   e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 20.e3 
     199            ii0 =  56           ;   ii1 =  56        ! Timor Passage (e1v = 20 km) 
     200            ij0 = 124 + isrow   ;   ij1 = 125 + isrow   ;   e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 20.e3 
    189201            IF(lwp) WRITE(numout,*) 
    190202            IF(lwp) WRITE(numout,*) '             orca_r1: Timor Passage : e1v reduced to 20 km' 
    191203 
    192             ii0 =  55   ;   ii1 =  55        ! West Halmahera Strait (e1v = 30 km) 
    193             ij0 = 141   ;   ij1 = 142   ;   e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 30.e3 
     204            ii0 =  55           ;   ii1 =  55        ! West Halmahera Strait (e1v = 30 km) 
     205            ij0 = 141 + isrow   ;   ij1 = 142 + isrow   ;   e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 30.e3 
    194206            IF(lwp) WRITE(numout,*) 
    195207            IF(lwp) WRITE(numout,*) '             orca_r1: W Halmahera : e1v reduced to 30 km' 
    196208 
    197             ii0 =  58   ;   ii1 =  58        ! East Halmahera Strait (e1v = 50 km) 
    198             ij0 = 141   ;   ij1 = 142   ;   e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 50.e3 
     209            ii0 =  58           ;   ii1 =  58        ! East Halmahera Strait (e1v = 50 km) 
     210            ij0 = 141 + isrow   ;   ij1 = 142 + isrow   ;   e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 50.e3 
    199211            IF(lwp) WRITE(numout,*) 
    200212            IF(lwp) WRITE(numout,*) '             orca_r1: E Halmahera : e1v reduced to 50 km' 
    201  
    202             ! 
    203  
    204             ! 
    205             ! 
    206213            ! 
    207214            ! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90

    r5120 r5385  
    134134      INTEGER  ::   ijf, ijl, ij0, ij1       !   -       - 
    135135      INTEGER  ::   ios 
     136      INTEGER  ::   isrow                    ! index for ORCA1 starting row 
    136137      INTEGER , POINTER, DIMENSION(:,:) ::  imsk 
    137138      REAL(wp), POINTER, DIMENSION(:,:) ::  zwf 
     
    401402      IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN   ! ORCA R1 configuration 
    402403         !                                                 ! Increased lateral friction near of some straits 
     404         ! This dirty section will be suppressed by simplification process: all this will come back in input files 
     405         ! Currently these hard-wired indices relate to the original (pre-v3.6) configuration  
     406         ! which had a grid-size of 362x292. 
     407         ! This grid has been extended southwards for use with the under ice-shelf options (isf) introduced in v3.6.  
     408         ! The original domain can still be used optionally if the isf code is not activated.  
     409         ! An adjustment (isrow) is made to the hard-wired indices if the extended domain (362x332) is being used. 
     410         !  
     411         IF    ( jpjglo == 292 ) THEN  ;  isrow = 0  ! Using pre-v3.6 files or adjusted start row from isf-extended grid 
     412         ELSEIF( jpjglo == 332 ) THEN  ;  isrow = 40 ! Using full isf­extended domain.  
     413         ENDIF      
     414 
    403415         IF(lwp) WRITE(numout,*) 
    404416         IF(lwp) WRITE(numout,*) '   orca_r1: increase friction near the following straits : ' 
    405417         IF(lwp) WRITE(numout,*) '      Gibraltar ' 
    406          ii0 = 283   ;   ii1 = 284        ! Gibraltar Strait  
    407          ij0 = 200   ;   ij1 = 200   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 2._wp   
     418         ii0 = 282           ;   ii1 = 283        ! Gibraltar Strait  
     419         ij0 = 201 + isrow   ;   ij1 = 201 + isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp   
    408420 
    409421         IF(lwp) WRITE(numout,*) '      Bhosporus ' 
    410          ii0 = 314   ;   ii1 = 315        ! Bhosporus Strait  
    411          ij0 = 208   ;   ij1 = 208   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 2._wp   
     422         ii0 = 314           ;   ii1 = 315        ! Bhosporus Strait  
     423         ij0 = 208 + isrow   ;   ij1 = 208 + isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp   
    412424 
    413425         IF(lwp) WRITE(numout,*) '      Makassar (Top) ' 
    414          ii0 =  48   ;   ii1 =  48        ! Makassar Strait (Top)  
    415          ij0 = 149   ;   ij1 = 150   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 3._wp   
     426         ii0 =  48           ;   ii1 =  48        ! Makassar Strait (Top)  
     427         ij0 = 149 + isrow   ;   ij1 = 150 + isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp   
    416428 
    417429         IF(lwp) WRITE(numout,*) '      Lombok ' 
    418          ii0 =  44   ;   ii1 =  44        ! Lombok Strait  
    419          ij0 = 124   ;   ij1 = 125   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 2._wp   
     430         ii0 =  44           ;   ii1 =  44        ! Lombok Strait  
     431         ij0 = 124 + isrow   ;   ij1 = 125 + isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp   
    420432 
    421433         IF(lwp) WRITE(numout,*) '      Ombai ' 
    422          ii0 =  53   ;   ii1 =  53        ! Ombai Strait  
    423          ij0 = 124   ;   ij1 = 125   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 2._wp   
     434         ii0 =  53           ;   ii1 =  53        ! Ombai Strait  
     435         ij0 = 124 + isrow   ;   ij1 = 125 + isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp   
    424436 
    425437         IF(lwp) WRITE(numout,*) '      Timor Passage ' 
    426          ii0 =  56   ;   ii1 =  56        ! Timor Passage  
    427          ij0 = 124   ;   ij1 = 125   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 2._wp   
     438         ii0 =  56           ;   ii1 =  56        ! Timor Passage  
     439         ij0 = 124 + isrow   ;   ij1 = 125 + isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp   
    428440 
    429441         IF(lwp) WRITE(numout,*) '      West Halmahera ' 
    430          ii0 =  58   ;   ii1 =  58        ! West Halmahera Strait  
    431          ij0 = 141   ;   ij1 = 142   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 3._wp   
     442         ii0 =  58           ;   ii1 =  58        ! West Halmahera Strait  
     443         ij0 = 141 + isrow   ;   ij1 = 142 + isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp   
    432444 
    433445         IF(lwp) WRITE(numout,*) '      East Halmahera ' 
    434          ii0 =  55   ;   ii1 =  55        ! East Halmahera Strait  
    435          ij0 = 141   ;   ij1 = 142   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 3._wp   
     446         ii0 =  55           ;   ii1 =  55        ! East Halmahera Strait  
     447         ij0 = 141 + isrow   ;   ij1 = 142 + isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp   
    436448         ! 
    437449      ENDIF 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90

    r5120 r5385  
    10391039      INTEGER ::   ji, jj, jk                                          ! dummy loop indices 
    10401040      INTEGER ::   ij0, ij1, ii0, ii1                                  ! dummy loop indices 
     1041      INTEGER ::   isrow                                               ! index for ORCA1 starting row 
    10411042      !! acc 
    10421043      !! Hmm with the time splitting these "fixes" seem to do more harm than good. Temporarily disabled for 
     
    11221123      IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN    ! ORCA R1 configuration 
    11231124         !                                             ! ===================== 
    1124          ! 
    1125          ii0 = 281   ;   ii1 = 282        ! Gibraltar Strait (e2u was modified) 
    1126          ij0 = 200   ;   ij1 = 200 
     1125         ! This dirty section will be suppressed by simplification process: all this will come back in input files 
     1126         ! Currently these hard-wired indices relate to the original (pre-v3.6) configuration  
     1127         ! which had a grid-size of 362x292. 
     1128         ! This grid has been extended southwards for use with the under ice-shelf options (isf) introduced in v3.6.  
     1129         ! The original domain can still be used optionally if the isf code is not activated.  
     1130         ! An adjustment (isrow) is made to the hard-wired indices if the extended domain (362x332) is being used. 
     1131         !  
     1132         IF    ( jpjglo == 292 ) THEN  ;  isrow = 0  ! Using pre-v3.6 files or adjusted start row from isf-extended grid 
     1133         ELSEIF( jpjglo == 332 ) THEN  ;  isrow = 40 ! Using full isf­extended domain.  
     1134         ENDIF      
     1135         ! 
     1136         ii0 = 282           ;   ii1 = 283        ! Gibraltar Strait (e2u was modified) 
     1137         ij0 = 201 + isrow   ;   ij1 = 201 + isrow 
    11271138         DO jk = 1, jpkm1 
    11281139            DO jj = mj0(ij0), mj1(ij1) 
     
    11441155         END DO 
    11451156         ! 
    1146          ii0 = 314   ;   ii1 = 315        ! Bhosporus Strait (e2u was modified) 
    1147          ij0 = 208   ;   ij1 = 208 
     1157         ii0 = 314           ;   ii1 = 315        ! Bhosporus Strait (e2u was modified) 
     1158         ij0 = 208 + isrow   ;   ij1 = 208 + isrow 
    11481159         DO jk = 1, jpkm1 
    11491160            DO jj = mj0(ij0), mj1(ij1) 
     
    11651176         END DO 
    11661177         ! 
    1167          ii0 =  44   ;   ii1 =  44        ! Lombok Strait (e1v was modified) 
    1168          ij0 = 124   ;   ij1 = 125 
     1178         ii0 =  44           ;   ii1 =  44        ! Lombok Strait (e1v was modified) 
     1179         ij0 = 124 + isrow   ;   ij1 = 125 + isrow 
    11691180         DO jk = 1, jpkm1 
    11701181            DO jj = mj0(ij0), mj1(ij1) 
     
    11811192         END DO 
    11821193         ! 
    1183          ii0 =  48   ;   ii1 =  48        ! Sumba Strait (e1v was modified) [closed from bathy_11 on] 
    1184          ij0 = 124   ;   ij1 = 125 
     1194         ii0 =  48           ;   ii1 =  48        ! Sumba Strait (e1v was modified) [closed from bathy_11 on] 
     1195         ij0 = 124 + isrow   ;   ij1 = 125 + isrow 
    11851196         DO jk = 1, jpkm1 
    11861197            DO jj = mj0(ij0), mj1(ij1) 
     
    11971208         END DO 
    11981209         ! 
    1199          ii0 =  53   ;   ii1 =  53        ! Ombai Strait (e1v was modified) 
    1200          ij0 = 124   ;   ij1 = 125 
     1210         ii0 =  53          ;   ii1 =  53        ! Ombai Strait (e1v was modified) 
     1211         ij0 = 124 + isrow  ;   ij1 = 125  + isrow   
    12011212         DO jk = 1, jpkm1 
    12021213            DO jj = mj0(ij0), mj1(ij1) 
     
    12131224         END DO 
    12141225         ! 
    1215          ii0 =  56   ;   ii1 =  56        ! Timor Passage (e1v was modified) 
    1216          ij0 = 124   ;   ij1 = 125 
     1226         ii0 =  56             ;   ii1 =  56        ! Timor Passage (e1v was modified) 
     1227         ij0 = 124  + isrow    ;   ij1 = 125  + isrow   
    12171228         DO jk = 1, jpkm1 
    12181229            DO jj = mj0(ij0), mj1(ij1) 
     
    12291240         END DO 
    12301241         ! 
    1231          ii0 =  55   ;   ii1 =  55        ! West Halmahera Strait (e1v was modified) 
    1232          ij0 = 141   ;   ij1 = 142 
     1242         ii0 =  55             ;   ii1 =  55        ! West Halmahera Strait (e1v was modified) 
     1243         ij0 = 141  + isrow    ;   ij1 = 142  + isrow   
    12331244         DO jk = 1, jpkm1 
    12341245            DO jj = mj0(ij0), mj1(ij1) 
     
    12451256         END DO 
    12461257         ! 
    1247          ii0 =  58   ;   ii1 =  58        ! East Halmahera Strait (e1v was modified) 
    1248          ij0 = 141   ;   ij1 = 142 
     1258         ii0 =  58             ;   ii1 =  58        ! East Halmahera Strait (e1v was modified) 
     1259         ij0 = 141  + isrow    ;   ij1 = 142  + isrow   
    12491260         DO jk = 1, jpkm1 
    12501261            DO jj = mj0(ij0), mj1(ij1) 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r5332 r5385  
    484484            CALL iom_close( inum ) 
    485485            mbathy(:,:) = INT( bathy(:,:) ) 
     486            ! 
     487            ! CL :  add Amazon deeper 
     488            IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN    ! ORCA R1 configuration  
     489                 ii0 = 230   ;   ii1 = 245                   ! Amazon area  
     490                 ij0 = 140   ;   ij1 = 155                   ! no ocean shallower than 30 meters 
     491                 DO ji = mi0(ii0), mi1(ii1) 
     492                    DO jj = mj0(ij0), mj1(ij1) 
     493                       IF( bathy(ji,jj) .LE. 30. .AND. bathy(ji,jj) .GT. 0.0 ) bathy(ji,jj) = 30._wp 
     494                    END DO 
     495                 END DO 
     496                 IF(lwp) WRITE(numout,*) 
     497                 IF(lwp) WRITE(numout,*) '             orca_r1: Amazon area not shallower than 30 meters for: ' 
     498                 IF(lwp) WRITE(numout,*) '                    Longitude index ',ii0, ii0 
     499                 IF(lwp) WRITE(numout,*) '                    Latitude index  ',ij0, ij0 
     500            ENDIF 
    486501            !                                                ! ===================== 
    487502            IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN    ! ORCA R2 configuration 
  • trunk/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r5363 r5385  
    126126         CALL set_grid( "V", glamv, gphiv ) 
    127127         CALL set_grid( "W", glamt, gphit ) 
     128         CALL set_grid_znl( gphit ) 
    128129      ENDIF 
    129130 
     
    135136         CALL set_grid( "V", glamv_crs, gphiv_crs )  
    136137         CALL set_grid( "W", glamt_crs, gphit_crs )  
     138         CALL set_grid_znl( gphit_crs ) 
    137139          ! 
    138140         CALL dom_grid_glo   ! Return to parent grid domain 
     
    13841386 
    13851387 
     1388   SUBROUTINE set_grid_znl( plat ) 
     1389      !!---------------------------------------------------------------------- 
     1390      !!                     ***  ROUTINE set_grid_znl  *** 
     1391      !! 
     1392      !! ** Purpose :   define grids for zonal mean 
     1393      !! 
     1394      !!---------------------------------------------------------------------- 
     1395      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   plat 
     1396      ! 
     1397      REAL(wp), DIMENSION(:), ALLOCATABLE  ::   zlon 
     1398      INTEGER  :: ni,nj, ix, iy 
     1399 
     1400       
     1401      ni=nlei-nldi+1 ; nj=nlej-nldj+1            ! define zonal mean domain (jpj*jpk) 
     1402      ALLOCATE( zlon(ni*nj) )       ;       zlon(:) = 0. 
     1403 
     1404      CALL iom_set_domain_attr("gznl", ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-1, jbegin=njmpp+nldj-1, ni=ni, nj=nj) 
     1405      CALL iom_set_domain_attr("gznl", data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 
     1406      CALL iom_set_domain_attr("gznl", lonvalue = zlon,   & 
     1407         &                             latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /)))   
     1408      ! 
     1409      CALL dom_ngb( 180., 90., ix, iy, 'T' ) !  i-line that passes near the North Pole : Reference latitude (used in plots) 
     1410      CALL iom_set_domain_attr ('ptr', zoom_ibegin=ix, zoom_nj=jpjglo) 
     1411      CALL iom_update_file_name('ptr') 
     1412      ! 
     1413   END SUBROUTINE set_grid_znl 
     1414 
    13861415   SUBROUTINE set_scalar 
    13871416      !!---------------------------------------------------------------------- 
     
    14681497      CALL set_mooring( zlonpira, zlatpira ) 
    14691498 
    1470       ! diaptr : zonal mean  
    1471       CALL dom_ngb( 180., 90., ix, iy, 'T' ) !  i-line that passes near the North Pole : Reference latitude (used in plots) 
    1472       CALL iom_set_domain_attr ('ptr', zoom_ibegin=ix, zoom_nj=jpjglo) 
    1473       CALL iom_update_file_name('ptr') 
    1474       ! 
    14751499       
    14761500   END SUBROUTINE set_xmlatt 
  • trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90

    r5123 r5385  
    5858   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qns_ice        !: non solar heat flux over ice                  [W/m2] 
    5959   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qsr_ice        !: solar heat flux over ice                      [W/m2] 
    60    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qsr_ice_mean   !: daily mean solar heat flux over ice           [W/m2] 
    6160   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qla_ice        !: latent flux over ice                          [W/m2] 
    6261   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dqla_ice       !: latent sensibility over ice                 [W/m2/K] 
     
    152151#endif 
    153152         ! 
    154 #if defined key_lim2 
    155       IF( ltrcdm2dc_ice )   ALLOCATE( qsr_ice_mean (jpi,jpj,jpl), STAT=ierr(3) ) 
    156 #endif 
    157          ! 
    158153#if defined key_cice || defined key_lim2 
    159154      IF( lk_cpl )   ALLOCATE( ht_i(jpi,jpj,jpl) , ht_s(jpi,jpj,jpl) , STAT=ierr(5) ) 
  • trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r5120 r5385  
    8181   !!              Ocean Surface Boundary Condition fields 
    8282   !!---------------------------------------------------------------------- 
     83   INTEGER , PUBLIC ::  ncpl_qsr_freq            !: qsr coupling frequency per days from atmosphere 
     84   ! 
    8385   LOGICAL , PUBLIC ::   lhftau = .FALSE.        !: HF tau used in TKE: mean(stress module) - module(mean stress) 
    84    LOGICAL , PUBLIC ::   ltrcdm2dc               !: In case of Diurnal Cycle short wave, compute a Daily Mean short waves flux 
    8586   !!                                   !!   now    ! before   !! 
    8687   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   utau   , utau_b   !: sea surface i-stress (ocean referential)     [N/m2] 
     
    9091   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   wndm              !: wind speed module at T-point (=|U10m-Uoce|)  [m/s] 
    9192   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qsr               !: sea heat flux:     solar                     [W/m2] 
    92    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qsr_mean          !: daily mean sea heat flux: solar              [W/m2] 
    9393   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qns    , qns_b    !: sea heat flux: non solar                     [W/m2] 
    9494   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qsr_tot           !: total     solar heat flux (over sea and ice) [W/m2] 
     
    162162#endif 
    163163         ! 
    164       IF( ltrcdm2dc ) ALLOCATE( qsr_mean(jpi,jpj) , STAT=ierr(5) ) 
    165          ! 
    166164      sbc_oce_alloc = MAXVAL( ierr ) 
    167165      IF( lk_mpp            )   CALL mpp_sum ( sbc_oce_alloc ) 
  • trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90

    r5065 r5385  
    2222   !!   blk_oce_core    : computes momentum, heat and freshwater fluxes over ocean 
    2323   !!   blk_ice_core    : computes momentum, heat and freshwater fluxes over ice 
    24    !!   blk_bio_meanqsr : compute daily mean short wave radiation over the ocean 
    25    !!   blk_ice_meanqsr : compute daily mean short wave radiation over the ice 
    2624   !!   turb_core_2z    : Computes turbulent transfert coefficients 
    2725   !!   cd_neutral_10m  : Estimate of the neutral drag coefficient at 10m 
     
    5250   PUBLIC   sbc_blk_core         ! routine called in sbcmod module 
    5351   PUBLIC   blk_ice_core         ! routine called in sbc_ice_lim module 
    54    PUBLIC   blk_ice_meanqsr      ! routine called in sbc_ice_lim module 
    5552   PUBLIC   turb_core_2z         ! routine calles in sbcblk_mfs module 
    5653 
     
    195192      !                                            ! compute the surface ocean fluxes using CORE bulk formulea 
    196193      IF( MOD( kt - 1, nn_fsbc ) == 0 )   CALL blk_oce_core( kt, sf, sst_m, ssu_m, ssv_m ) 
    197  
    198       ! If diurnal cycle is activated, compute a daily mean short waves flux for biogeochemistery 
    199       IF( ltrcdm2dc )   CALL blk_bio_meanqsr 
    200194 
    201195#if defined key_cice 
     
    302296      ELSE                  ;   qsr(:,:) = zztmp *          sf(jp_qsr)%fnow(:,:,1)   * tmask(:,:,1) 
    303297      ENDIF 
     298 
    304299      zqlw(:,:) = (  sf(jp_qlw)%fnow(:,:,1) - Stef * zst(:,:)*zst(:,:)*zst(:,:)*zst(:,:)  ) * tmask(:,:,1)   ! Long  Wave 
    305300      ! ----------------------------------------------------------------------------- ! 
     
    611606      ! 
    612607   END SUBROUTINE blk_ice_core 
    613  
    614  
    615    SUBROUTINE blk_bio_meanqsr 
    616       !!--------------------------------------------------------------------- 
    617       !!                     ***  ROUTINE blk_bio_meanqsr 
    618       !!                      
    619       !! ** Purpose :   provide daily qsr_mean for PISCES when 
    620       !!                analytic diurnal cycle is applied in physic 
    621       !!                 
    622       !! ** Method  :   add part where there is no ice 
    623       !!  
    624       !!--------------------------------------------------------------------- 
    625       IF( nn_timing == 1 )  CALL timing_start('blk_bio_meanqsr') 
    626       ! 
    627       qsr_mean(:,:) = (1. - albo ) *  sf(jp_qsr)%fnow(:,:,1) 
    628       ! 
    629       IF( nn_timing == 1 )  CALL timing_stop('blk_bio_meanqsr') 
    630       ! 
    631    END SUBROUTINE blk_bio_meanqsr 
    632   
    633   
    634    SUBROUTINE blk_ice_meanqsr( palb, p_qsr_mean, pdim ) 
    635       !!--------------------------------------------------------------------- 
    636       !! 
    637       !! ** Purpose :   provide the daily qsr_mean over sea_ice for PISCES when 
    638       !!                analytic diurnal cycle is applied in physic 
    639       !! 
    640       !! ** Method  :   compute qsr 
    641       !!  
    642       !!--------------------------------------------------------------------- 
    643       REAL(wp), DIMENSION(:,:,:), INTENT(in   ) ::   palb       ! ice albedo (clear sky) (alb_ice_cs)               [%] 
    644       REAL(wp), DIMENSION(:,:,:), INTENT(  out) ::   p_qsr_mean !     solar heat flux over ice (T-point)         [W/m2] 
    645       INTEGER                   , INTENT(in   ) ::   pdim       ! number of ice categories 
    646       ! 
    647       INTEGER  ::   ijpl          ! number of ice categories (size of 3rd dim of input arrays) 
    648       INTEGER  ::   ji, jj, jl    ! dummy loop indices 
    649       REAL(wp) ::   zztmp         ! temporary variable 
    650       !!--------------------------------------------------------------------- 
    651       IF( nn_timing == 1 )  CALL timing_start('blk_ice_meanqsr') 
    652       ! 
    653       ijpl  = pdim                            ! number of ice categories 
    654       zztmp = 1. / ( 1. - albo ) 
    655       !                                     ! ========================== ! 
    656       DO jl = 1, ijpl                       !  Loop over ice categories  ! 
    657          !                                  ! ========================== ! 
    658          DO jj = 1 , jpj 
    659             DO ji = 1, jpi 
    660                   p_qsr_mean(ji,jj,jl) = zztmp * ( 1. - palb(ji,jj,jl) ) * qsr_mean(ji,jj) 
    661             END DO 
    662          END DO 
    663       END DO 
    664       ! 
    665       IF( nn_timing == 1 )  CALL timing_stop('blk_ice_meanqsr') 
    666       ! 
    667    END SUBROUTINE blk_ice_meanqsr   
    668  
    669608 
    670609   SUBROUTINE turb_core_2z( zt, zu, sst, T_zt, q_sat, q_zt, dU,    & 
  • trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90

    r4990 r5385  
    194194               &                      tprecip    , sprecip    ,                         & 
    195195               &                      fr1_i0     , fr2_i0     , cp_ice_msh , jpl  ) 
    196             IF( ltrcdm2dc_ice )   CALL blk_ice_meanqsr( zalb_ice, qsr_ice_mean, jpl ) 
    197196 
    198197         CASE( jp_cpl )            ! Coupled formulation : atmosphere-ice stress only (fluxes provided after ice dynamics) 
     
    232231            CALL sbc_cpl_ice_flx( frld,                                              & 
    233232            !                                optional arguments, used only in 'mixed oce-ice' case 
    234             &                                             palbi = zalb_ice, psst = sst_m, pist = zsist ) 
     233            &                                             palbi=zalb_ice, psst=sst_m, pist=zsist ) 
    235234            sprecip(:,:) = - emp_ice(:,:)   ! Ugly patch, WARNING, in coupled mode, sublimation included in snow (parsub = 0.) 
    236235         ENDIF 
    237236                           CALL lim_thd_2      ( kt )      ! Ice thermodynamics  
    238237                           CALL lim_sbc_flx_2  ( kt )      ! update surface ocean mass, heat & salt fluxes  
    239 #if defined key_top 
    240         IF( ltrcdm2dc_ice )CALL lim_bio_meanqsr_2 
    241 #endif 
    242238 
    243239         IF(  .NOT. lk_mpp )THEN 
  • trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r5123 r5385  
    2424   USE phycst           ! physical constants 
    2525   USE sbc_oce          ! Surface boundary condition: ocean fields 
     26   USE trc_oce          ! shared ocean-passive tracers variables 
    2627   USE sbc_ice          ! Surface boundary condition: ice fields 
    2728   USE sbcdcy           ! surface boundary condition: diurnal cycle 
     
    151152      END SELECT 
    152153      ! 
    153 #if defined key_top && ! defined key_offline 
    154       ltrcdm2dc = (ln_dm2dc .AND. ln_blk_core .AND. nn_ice==2) 
    155       IF( ltrcdm2dc )THEN 
    156          IF(lwp)THEN 
    157             WRITE(numout,*)"analytical diurnal cycle, core bulk formulation and LIM2 use: " 
    158             WRITE(numout,*)"Diurnal cycle on physics but not in passive tracers" 
    159          ENDIF 
    160       ENDIF 
    161 #else  
    162       ltrcdm2dc =  .FALSE. 
    163 #endif 
    164  
    165       ! 
    166154      !                              ! allocate sbc arrays 
    167155      IF( sbc_oce_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_oce arrays' ) 
     
    238226         & asked coupling with drag coefficient (ln_cdgw =T) or Stokes drift (ln_sdw=T) ') 
    239227      ENDIF  
    240        
    241228      !                          ! Choice of the Surface Boudary Condition (set nsbc) 
    242229      icpt = 0 
     
    273260      IF( ln_ssr           )   CALL sbc_ssr_init               ! Sea-Surface Restoring initialisation 
    274261      ! 
     262      IF( ln_rnf           )   CALL sbc_rnf_init               ! Runof initialisation 
     263      ! 
    275264      IF( nn_ice == 3      )   CALL sbc_lim_init               ! LIM3 initialisation 
    276265 
     
    278267      ! 
    279268      IF( nsbc   == jp_cpl )   CALL sbc_cpl_init (nn_ice)      ! OASIS initialisation. must be done before first time step 
    280  
     269       
    281270   END SUBROUTINE sbc_init 
    282271 
  • trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90

    r4990 r5385  
    3737   !                                                     !!* namsbc_rnf namelist * 
    3838   CHARACTER(len=100), PUBLIC ::   cn_dir          !: Root directory for location of ssr files 
    39    LOGICAL           , PUBLIC ::   ln_rnf_depth    !: depth       river runoffs attribute specified in a file 
     39   LOGICAL           , PUBLIC ::   ln_rnf_depth      !: depth       river runoffs attribute specified in a file 
     40   LOGICAL                    ::   ln_rnf_depth_ini  !: depth       river runoffs  computed at the initialisation 
     41   REAL(wp)                   ::   rn_rnf_max        !: maximum value of the runoff climatologie ( ln_rnf_depth_ini = .true ) 
     42   REAL(wp)                   ::   rn_dep_max        !: depth over which runoffs is spread ( ln_rnf_depth_ini = .true ) 
     43   INTEGER                    ::   nn_rnf_depth_file !: create (=1) a runoff depth file or not (=0) 
    4044   LOGICAL           , PUBLIC ::   ln_rnf_tem      !: temperature river runoffs attribute specified in a file 
    4145   LOGICAL           , PUBLIC ::   ln_rnf_sal      !: salinity    river runoffs attribute specified in a file 
     
    104108      ! 
    105109      CALL wrk_alloc( jpi,jpj, ztfrz) 
    106  
    107       ! 
    108       IF( kt == nit000 )   CALL sbc_rnf_init                           ! Read namelist and allocate structures 
    109110 
    110111      !                                            ! ---------------------------------------- ! 
     
    255256      !!---------------------------------------------------------------------- 
    256257      CHARACTER(len=32) ::   rn_dep_file   ! runoff file name 
    257       INTEGER           ::   ji, jj, jk    ! dummy loop indices 
     258      INTEGER           ::   ji, jj, jk, jm    ! dummy loop indices 
    258259      INTEGER           ::   ierror, inum  ! temporary integer 
    259260      INTEGER           ::   ios           ! Local integer output status for namelist read 
     261      INTEGER           ::   nbrec         ! temporary integer 
     262      REAL(wp)          ::   zacoef   
     263      REAL(wp), DIMENSION(12)                 :: zrec             ! times records 
     264      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zrnfcl     
     265      REAL(wp), DIMENSION(:,:  ), ALLOCATABLE :: zrnf 
    260266      ! 
    261267      NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, ln_rnf_depth, ln_rnf_tem, ln_rnf_sal,   & 
    262268         &                 sn_rnf, sn_cnf    , sn_s_rnf    , sn_t_rnf  , sn_dep_rnf,   & 
    263          &                 ln_rnf_mouth      , rn_hrnf     , rn_avt_rnf, rn_rfact 
     269         &                 ln_rnf_mouth      , rn_hrnf     , rn_avt_rnf, rn_rfact,     & 
     270         &                 ln_rnf_depth_ini  , rn_dep_max  , rn_rnf_max, nn_rnf_depth_file 
    264271      !!---------------------------------------------------------------------- 
    265272      ! 
     
    299306         IF(lwp) WRITE(numout,*) 
    300307         IF(lwp) WRITE(numout,*) '          runoffs directly provided in the precipitations' 
    301          IF( ln_rnf_depth .OR. ln_rnf_tem .OR. ln_rnf_sal ) THEN 
     308         IF( ln_rnf_depth .OR. ln_rnf_tem .OR. ln_rnf_sal .OR. ln_rnf_depth_ini ) THEN 
    302309           CALL ctl_warn( 'runoffs already included in precipitations, so runoff (T,S, depth) attributes will not be used' ) 
    303            ln_rnf_depth = .FALSE.   ;   ln_rnf_tem = .FALSE.   ;   ln_rnf_sal = .FALSE. 
     310           ln_rnf_depth = .FALSE.   ;   ln_rnf_tem = .FALSE.   ;   ln_rnf_sal = .FALSE.  ;   ln_rnf_depth_ini = .FALSE. 
    304311         ENDIF 
    305312         ! 
     
    375382               END DO 
    376383            END DO 
     384            ! 
     385         ELSE IF( ln_rnf_depth_ini ) THEN           ! runoffs applied at the surface 
     386            ! 
     387            IF(lwp) WRITE(numout,*) 
     388            IF(lwp) WRITE(numout,*) '    depth of runoff computed once from max value of runoff' 
     389            IF(lwp) WRITE(numout,*) '    max value of the runoff climatologie (over global domain) rn_rnf_max = ', rn_rnf_max 
     390            IF(lwp) WRITE(numout,*) '    depth over which runoffs is spread                        rn_dep_max = ', rn_dep_max 
     391            IF(lwp) WRITE(numout,*) '     create (=1) a runoff depth file or not (=0)      nn_rnf_depth_file  = ', nn_rnf_depth_file 
     392 
     393            CALL iom_open( TRIM( sn_rnf%clname ), inum )    !  open runoff file 
     394            CALL iom_gettime( inum, zrec, kntime=nbrec) 
     395            ALLOCATE( zrnfcl(jpi,jpj,nbrec) )     ;      ALLOCATE( zrnf(jpi,jpj) ) 
     396            DO jm = 1, nbrec 
     397               CALL iom_get( inum, jpdom_data, TRIM( sn_rnf%clvar ), zrnfcl(:,:,jm), jm ) 
     398            END DO 
     399            CALL iom_close( inum ) 
     400            zrnf(:,:) = MAXVAL( zrnfcl(:,:,:), DIM=3 )   !  maximum value in time 
     401            DEALLOCATE( zrnfcl ) 
     402            ! 
     403            h_rnf(:,:) = 1. 
     404            ! 
     405            zacoef = rn_dep_max / rn_rnf_max            ! coef of linear relation between runoff and its depth (150m for max of runoff) 
     406            ! 
     407            WHERE( zrnf(:,:) > 0._wp )  h_rnf(:,:) = zacoef * zrnf(:,:)   ! compute depth for all runoffs 
     408            ! 
     409            DO jj = 1, jpj                     ! take in account min depth of ocean rn_hmin 
     410               DO ji = 1, jpi 
     411                  IF( zrnf(ji,jj) > 0._wp ) THEN 
     412                     jk = mbkt(ji,jj) 
     413                     h_rnf(ji,jj) = MIN( h_rnf(ji,jj), gdept_0(ji,jj,jk ) ) 
     414                  ENDIF 
     415               END DO 
     416            END DO 
     417            ! 
     418            nk_rnf(:,:) = 0                       ! number of levels on which runoffs are distributed 
     419            DO jj = 1, jpj 
     420               DO ji = 1, jpi 
     421                   IF( zrnf(ji,jj) > 0._wp ) THEN 
     422                     jk = 2 
     423                     DO WHILE ( jk /= mbkt(ji,jj) .AND. gdept_0(ji,jj,jk) < h_rnf(ji,jj) ) ;  jk = jk + 1 ;  END DO 
     424                     nk_rnf(ji,jj) = jk 
     425                   ELSE 
     426                     nk_rnf(ji,jj) = 1 
     427                   ENDIF 
     428                END DO 
     429            END DO 
     430            ! 
     431            DEALLOCATE( zrnf ) 
     432            ! 
     433            DO jj = 1, jpj                                ! set the associated depth 
     434               DO ji = 1, jpi 
     435                  h_rnf(ji,jj) = 0._wp 
     436                  DO jk = 1, nk_rnf(ji,jj) 
     437                     h_rnf(ji,jj) = h_rnf(ji,jj) + fse3t(ji,jj,jk) 
     438                  END DO 
     439               END DO 
     440            END DO 
     441            ! 
     442            IF( nn_rnf_depth_file == 1 ) THEN      !  save  output nb levels for runoff 
     443               IF(lwp) WRITE(numout,*) '              create runoff depht file' 
     444               CALL iom_open  ( TRIM( sn_dep_rnf%clname ), inum, ldwrt = .TRUE., kiolib = jprstlib ) 
     445               CALL iom_rstput( 0, 0, inum, 'rodepth', h_rnf ) 
     446               CALL iom_close ( inum ) 
     447            ENDIF 
    377448         ELSE                                       ! runoffs applied at the surface 
    378449            nk_rnf(:,:) = 1 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r4990 r5385  
    143143      ELSE                                            ! Leap-Frog + Asselin filter time stepping 
    144144         ! 
    145          IF( lk_vvl )  THEN   ;   CALL tra_nxt_vvl( kt, nit000, 'TRA', tsb, tsn, tsa, jpts )  ! variable volume level (vvl)      
    146          ELSE                 ;   CALL tra_nxt_fix( kt, nit000, 'TRA', tsb, tsn, tsa, jpts )  ! fixed    volume level  
     145         IF( lk_vvl )  THEN   ;   CALL tra_nxt_vvl( kt, nit000, rdttra, 'TRA', tsb, tsn, tsa,   & 
     146           &                                                              sbc_tsc, sbc_tsc_b, jpts )  ! variable volume level (vvl)  
     147         ELSE                 ;   CALL tra_nxt_fix( kt, nit000,         'TRA', tsb, tsn, tsa, jpts )  ! fixed    volume level  
    147148         ENDIF 
    148149      ENDIF  
     
    241242 
    242243 
    243    SUBROUTINE tra_nxt_vvl( kt, kit000, cdtype, ptb, ptn, pta, kjpt ) 
     244   SUBROUTINE tra_nxt_vvl( kt, kit000, p2dt, cdtype, ptb, ptn, pta, psbc_tc, psbc_tc_b, kjpt ) 
    244245      !!---------------------------------------------------------------------- 
    245246      !!                   ***  ROUTINE tra_nxt_vvl  *** 
     
    265266      !!              - (ta,sa) time averaged (t,s)   (ln_dynhpg_imp = T) 
    266267      !!---------------------------------------------------------------------- 
    267       INTEGER         , INTENT(in   )                               ::   kt       ! ocean time-step index 
    268       INTEGER         , INTENT(in   )                               ::   kit000   ! first time step index 
    269       CHARACTER(len=3), INTENT(in   )                               ::   cdtype   ! =TRA or TRC (tracer indicator) 
    270       INTEGER         , INTENT(in   )                               ::   kjpt     ! number of tracers 
    271       REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::   ptb      ! before tracer fields 
    272       REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::   ptn      ! now tracer fields 
    273       REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::   pta      ! tracer trend 
     268      INTEGER         , INTENT(in   )                               ::  kt       ! ocean time-step index 
     269      INTEGER         , INTENT(in   )                               ::  kit000   ! first time step index 
     270      REAL(wp)        , INTENT(in   ), DIMENSION(jpk)               ::  p2dt     ! time-step 
     271      CHARACTER(len=3), INTENT(in   )                               ::  cdtype   ! =TRA or TRC (tracer indicator) 
     272      INTEGER         , INTENT(in   )                               ::  kjpt     ! number of tracers 
     273      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  ptb      ! before tracer fields 
     274      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  ptn      ! now tracer fields 
     275      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  pta      ! tracer trend 
     276      REAL(wp)        , INTENT(in   ), DIMENSION(jpi,jpj,kjpt)      ::  psbc_tc   ! surface tracer content 
     277      REAL(wp)        , INTENT(in   ), DIMENSION(jpi,jpj,kjpt)      ::  psbc_tc_b ! before surface tracer content 
     278 
    274279      !!      
    275       LOGICAL  ::   ll_tra, ll_tra_hpg, ll_traqsr   ! local logical 
     280      LOGICAL  ::   ll_tra_hpg, ll_traqsr   ! local logical 
    276281      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
    277282      REAL(wp) ::   zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
     
    286291      ! 
    287292      IF( cdtype == 'TRA' )  THEN    
    288          ll_tra     = .TRUE.           ! active tracers case   
    289293         ll_tra_hpg = ln_dynhpg_imp    ! active  tracers case  and  semi-implicit hpg 
    290294         ll_traqsr  = ln_traqsr        ! active  tracers case  and  solar penetration 
    291295      ELSE                           
    292          ll_tra     = .FALSE.          ! passive tracers case 
    293296         ll_tra_hpg = .FALSE.          ! passive tracers case or NO semi-implicit hpg 
    294297         ll_traqsr  = .FALSE.          ! active  tracers case and NO solar penetration 
     
    297300      DO jn = 1, kjpt       
    298301         DO jk = 1, jpkm1 
    299             zfact1 = atfp * rdttra(jk) 
     302            zfact1 = atfp * p2dt(jk) 
    300303            zfact2 = zfact1 / rau0 
    301304            DO jj = 1, jpj 
     
    315318                  ztc_f  = ztc_n  + atfp * ztc_d 
    316319                  ! 
    317                   IF( ll_tra .AND. jk == 1 ) THEN           ! first level only for T & S 
    318                       ze3t_f = ze3t_f - zfact2 * ( emp_b(ji,jj) - emp(ji,jj) ) 
    319                       ztc_f  = ztc_f  - zfact1 * ( sbc_tsc(ji,jj,jn) - sbc_tsc_b(ji,jj,jn) ) 
     320                  IF( jk == 1 ) THEN           ! first level  
     321                     ze3t_f = ze3t_f - zfact2 * ( emp_b(ji,jj) - emp(ji,jj) ) 
     322                     ztc_f  = ztc_f  - zfact1 * ( psbc_tc(ji,jj,jn) - psbc_tc_b(ji,jj,jn) ) 
    320323                  ENDIF 
    321324                  IF( ll_traqsr .AND. jn == jp_tem .AND. jk <= nksr )   &     ! solar penetration (temperature only) 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf.F90

    r4990 r5385  
    8888         &             tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    8989      END SELECT 
     90      ! DRAKKAR SSS control { 
     91      ! JMM avoid negative salinities near river outlet ! Ugly fix 
     92      ! JMM : restore negative salinities to small salinities: 
     93      WHERE ( tsa(:,:,:,jp_sal) < 0._wp )   tsa(:,:,:,jp_sal) = 0.1_wp 
    9094 
    9195      IF( l_trdtra )   THEN                      ! save the vertical diffusive trends for further diagnostics 
  • trunk/NEMOGCM/NEMO/OPA_SRC/trc_oce.F90

    r4623 r5385  
    3232   !!   'key_top'                                                 bio-model           
    3333   !!---------------------------------------------------------------------- 
     34   LOGICAL, PUBLIC, PARAMETER ::   lk_top     = .TRUE.   !: TOP model 
    3435   LOGICAL, PUBLIC, PARAMETER ::   lk_qsr_bio = .TRUE.   !: bio-model light absorption flag 
    3536#else 
     
    3738   !! Default option                          No bio-model light absorption       
    3839   !!---------------------------------------------------------------------- 
     40   LOGICAL, PUBLIC, PARAMETER ::   lk_top     = .FALSE.   !: TOP model 
    3941   LOGICAL, PUBLIC, PARAMETER ::   lk_qsr_bio = .FALSE.   !: bio-model light absorption flag 
    4042#endif 
  • trunk/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcini_my_trc.F90

    r2787 r5385  
    4242 
    4343      IF(lwp) WRITE(numout,*) 
    44       IF(lwp) WRITE(numout,*) ' trc_ini_my_trc: initialisation of MY_TRC model' 
     44      IF(lwp) WRITE(numout,*) ' trc_ini_my_trc: passive tracer unit vector' 
     45      IF(lwp) WRITE(numout,*) ' To check conservation : ' 
     46      IF(lwp) WRITE(numout,*) '   1 - No sea-ice model ' 
     47      IF(lwp) WRITE(numout,*) '   2 - No runoff '  
     48      IF(lwp) WRITE(numout,*) '   3 - precipitation and evaporation equal to 1 : E=P=1 '  
    4549      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 
    4650       
    47       IF( .NOT. ln_rsttr ) trn(:,:,:,jp_myt0:jp_myt1) = 0. 
     51      IF( .NOT. ln_rsttr ) trn(:,:,:,jp_myt0:jp_myt1) = 1. 
    4852      ! 
    4953   END SUBROUTINE trc_ini_my_trc 
  • trunk/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcsms_my_trc.F90

    r4990 r5385  
    4646      INTEGER ::   jn   ! dummy loop index 
    4747      REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrmyt 
    48 !!---------------------------------------------------------------------- 
     48      !!---------------------------------------------------------------------- 
    4949      ! 
    5050      IF( nn_timing == 1 )  CALL timing_start('trc_sms_my_trc') 
     
    5555 
    5656      IF( l_trdtrc )  CALL wrk_alloc( jpi, jpj, jpk, ztrmyt ) 
    57  
    58       WHERE( (glamt <= 170) .AND. (glamt >= 160) .AND. (gphit <= -74) .AND. (gphit >=-75.6) ) 
    59         trn(:,:,1,jpmyt1) = 1._wp 
    60         trb(:,:,1,jpmyt1) = 1._wp 
    61         tra(:,:,1,jpmyt1) = 0._wp 
    62       END WHERE 
    6357 
    6458      IF( l_trdtrc ) THEN      ! Save the trends in the ixed layer 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zopt.F90

    r5215 r5385  
    8989 
    9090      !                                          ! surface irradiance 
    91       zpar0m (:,:)   = qsr   (:,:) * 0.43        ! ------------------ 
     91      !                                          ! ------------------ 
     92      IF( ln_dm2dc ) THEN   ;   zpar0m(:,:) = qsr_mean(:,:) * 0.43 
     93      ELSE                  ;   zpar0m(:,:) = qsr     (:,:) * 0.43 
     94      ENDIF 
    9295      zpar100(:,:)   = zpar0m(:,:) * 0.01 
    9396      zparr  (:,:,1) = zpar0m(:,:) * 0.5 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zbio.F90

    r4529 r5385  
    4444CONTAINS 
    4545 
    46    SUBROUTINE p4z_bio ( kt, jnt ) 
     46   SUBROUTINE p4z_bio ( kt, knt ) 
    4747      !!--------------------------------------------------------------------- 
    4848      !!                     ***  ROUTINE p4z_bio  *** 
     
    5454      !! ** Method  : - ??? 
    5555      !!--------------------------------------------------------------------- 
    56       INTEGER, INTENT(in) :: kt, jnt 
    57       INTEGER  ::  ji, jj, jk, jn 
    58       REAL(wp) ::  ztra 
    59 #if defined key_kriest 
    60       REAL(wp) ::  zcoef1, zcoef2 
    61 #endif 
     56      INTEGER, INTENT(in) :: kt, knt 
     57      INTEGER             :: ji, jj, jk, jn 
    6258      CHARACTER (len=25) :: charout 
    6359 
     
    8076 
    8177           
    82       CALL p4z_opt  ( kt, jnt )     ! Optic: PAR in the water column 
    83       CALL p4z_sink ( kt, jnt )     ! vertical flux of particulate organic matter 
    84       CALL p4z_fechem(kt, jnt )     ! Iron chemistry/scavenging 
    85       CALL p4z_lim  ( kt, jnt )     ! co-limitations by the various nutrients 
    86       CALL p4z_prod ( kt, jnt )     ! phytoplankton growth rate over the global ocean.  
     78      CALL p4z_opt  ( kt, knt )     ! Optic: PAR in the water column 
     79      CALL p4z_sink ( kt, knt )     ! vertical flux of particulate organic matter 
     80      CALL p4z_fechem(kt, knt )     ! Iron chemistry/scavenging 
     81      CALL p4z_lim  ( kt, knt )     ! co-limitations by the various nutrients 
     82      CALL p4z_prod ( kt, knt )     ! phytoplankton growth rate over the global ocean.  
    8783      !                             ! (for each element : C, Si, Fe, Chl ) 
    8884      CALL p4z_mort ( kt      )     ! phytoplankton mortality 
    89       !                             ! zooplankton sources/sinks routines  
    90       CALL p4z_micro( kt, jnt )           ! microzooplankton 
    91       CALL p4z_meso ( kt, jnt )           ! mesozooplankton 
    92       CALL p4z_rem  ( kt, jnt )     ! remineralization terms of organic matter+scavenging of Fe 
     85     !                             ! zooplankton sources/sinks routines  
     86      CALL p4z_micro( kt, knt )           ! microzooplankton 
     87      CALL p4z_meso ( kt, knt )           ! mesozooplankton 
     88      CALL p4z_rem  ( kt, knt )     ! remineralization terms of organic matter+scavenging of Fe 
    9389      !                             ! test if tracers concentrations fall below 0. 
    94       xnegtr(:,:,:) = 1.e0 
    95       DO jn = jp_pcs0, jp_pcs1 
    96          DO jk = 1, jpk 
    97             DO jj = 1, jpj 
    98                DO ji = 1, jpi 
    99                   IF( ( trn(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 
    100                      ztra             = ABS( trn(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 
    101  
    102                      xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk),  ztra ) 
    103                   ENDIF 
    104               END DO 
    105             END DO 
    106          END DO 
    107       END DO 
    108       !                                ! where at least 1 tracer concentration becomes negative 
    109       !                                !  
    110       DO jn = jp_pcs0, jp_pcs1 
    111          trn(:,:,:,jn) = trn(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 
    112       END DO 
    113  
    114  
    115       tra(:,:,:,:) = 0.e0 
    116  
    117 #if defined key_kriest 
    118       !  
    119       zcoef1 = 1.e0 / xkr_massp  
    120       zcoef2 = 1.e0 / xkr_massp / 1.1 
    121       DO jk = 1,jpkm1 
    122          trn(:,:,jk,jpnum) = MAX(  trn(:,:,jk,jpnum), trn(:,:,jk,jppoc) * zcoef1 / xnumm(jk)  ) 
    123          trn(:,:,jk,jpnum) = MIN(  trn(:,:,jk,jpnum), trn(:,:,jk,jppoc) * zcoef2              ) 
    124       END DO 
    125 #endif 
    126  
    127       ! 
     90      !                                                             ! 
    12891      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    12992         WRITE(charout, FMT="('bio ')") 
    13093         CALL prt_ctl_trc_info(charout) 
    131          CALL prt_ctl_trc(tab4d=trn, mask=tmask, clinfo=ctrcnm) 
     94         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 
    13295      ENDIF 
    13396      ! 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90

    r4996 r5385  
    4848CONTAINS 
    4949 
    50    SUBROUTINE p4z_fechem( kt, jnt ) 
     50   SUBROUTINE p4z_fechem( kt, knt ) 
    5151      !!--------------------------------------------------------------------- 
    5252      !!                     ***  ROUTINE p4z_fechem  *** 
     
    6262      !!--------------------------------------------------------------------- 
    6363      ! 
    64       INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
     64      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    6565      ! 
    6666      INTEGER  ::   ji, jj, jk, jic 
     
    101101      ! ------------------------------------------------- 
    102102      IF( ln_ligvar ) THEN 
    103          ztotlig(:,:,:) =  0.09 * trn(:,:,:,jpdoc) * 1E6 + ligand * 1E9 
     103         ztotlig(:,:,:) =  0.09 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9 
    104104         ztotlig(:,:,:) =  MIN( ztotlig(:,:,:), 10. ) 
    105105      ELSE 
     
    127127                  zionic = 19.9201 * tsn(ji,jj,jk,jp_sal) / ( 1000. - 1.00488 * tsn(ji,jj,jk,jp_sal) + rtrn ) 
    128128                  zph    = -LOG10( MAX( hi(ji,jj,jk), rtrn) ) 
    129                   zoxy   = trn(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 ) 
     129                  zoxy   = trb(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 ) 
    130130                  ! Fe2+ oxydation rate from Santana-Casiano et al. (2005) 
    131131                  zkox   = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tsn(ji,jj,jk,jp_tem) + 273.15 )  & 
     
    137137                  zkph1 = zkph2 / 5. 
    138138                  ! pass the dfe concentration from PISCES 
    139                   ztfe = trn(ji,jj,jk,jpfer) * 1e9 
     139                  ztfe = trb(ji,jj,jk,jpfer) * 1e9 
    140140                  ! ---------------------------------------------------------- 
    141141                  ! ANALYTICAL SOLUTION OF ROOTS OF THE FE3+ EQUATION 
     
    204204                  zkeq           = fekeq(ji,jj,jk) 
    205205                  zfesatur       = zTL1(ji,jj,jk) * 1E-9 
    206                   ztfe           = trn(ji,jj,jk,jpfer)  
     206                  ztfe           = trb(ji,jj,jk,jpfer)  
    207207                  ! Fe' is the root of a 2nd order polynom 
    208208                  zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe )               & 
     
    210210                     &               + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 
    211211                  zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 
    212                   zFeL1(ji,jj,jk) = MAX( 0., trn(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) 
     212                  zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) 
    213213              END DO 
    214214            END DO 
     
    240240               ENDIF 
    241241#if defined key_kriest 
    242                ztrc   = ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpgsi) ) * 1.e6  
     242               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6  
    243243#else 
    244                ztrc   = ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpgsi) ) * 1.e6  
     244               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6  
    245245#endif 
    246246               IF( ln_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s 
     
    251251               ! to later allocate scavenged iron to the different organic pools 
    252252               ! --------------------------------------------------------- 
    253                zdenom1 = xlam1 * trn(ji,jj,jk,jppoc) / zlam1b 
     253               zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b 
    254254#if ! defined key_kriest 
    255                zdenom2 = xlam1 * trn(ji,jj,jk,jpgoc) / zlam1b 
     255               zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b 
    256256#endif 
    257257 
     
    262262               zlamfac = MIN( 1.  , zlamfac ) 
    263263               zdep    = MIN( 1., 1000. / fsdept(ji,jj,jk) ) 
    264                zlam1b  = xlam1 * MAX( 0.e0, ( trn(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 
    265                zcoag   = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trn(ji,jj,jk,jpfer) 
     264               zlam1b  = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 
     265               zcoag   = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trb(ji,jj,jk,jpfer) 
    266266 
    267267               !  Compute the coagulation of colloidal iron. This parameterization  
     
    269269               !  It requires certainly some more work as it is very poorly constrained. 
    270270               !  ---------------------------------------------------------------- 
    271                zlam1a  = ( 0.369  * 0.3 * trn(ji,jj,jk,jpdoc) + 102.4  * trn(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
    272                    &   + ( 114.   * 0.3 * trn(ji,jj,jk,jpdoc) + 5.09E3 * trn(ji,jj,jk,jppoc) ) 
     271               zlam1a  = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
     272                   &   + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) + 5.09E3 * trb(ji,jj,jk,jppoc) ) 
    273273               zaggdfea = zlam1a * zstep * zfecoll 
    274274#if defined key_kriest 
     
    278278               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb 
    279279#else 
    280                zlam1b = 3.53E3 *   trn(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
     280               zlam1b = 3.53E3 *   trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
    281281               zaggdfeb = zlam1b * zstep * zfecoll 
    282282               ! 
     
    292292      !  ---------------------------------------- 
    293293      IF( ln_fechem ) THEN 
    294           biron(:,:,:) = MAX( 0., trn(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 
     294          biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 
    295295      ELSE 
    296           biron(:,:,:) = trn(:,:,:,jpfer)  
     296          biron(:,:,:) = trb(:,:,:,jpfer)  
    297297      ENDIF 
    298298 
    299299      !  Output of some diagnostics variables 
    300300      !     --------------------------------- 
    301       IF( lk_iomput .AND. jnt == nrdttrc ) THEN 
     301      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
    302302         IF( iom_use("Fe3")    )  CALL iom_put("Fe3"    , zFe3   (:,:,:)       * tmask(:,:,:) )   ! Fe3+ 
    303303         IF( iom_use("FeL1")   )  CALL iom_put("FeL1"   , zFeL1  (:,:,:)       * tmask(:,:,:) )   ! FeL1 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90

    r5215 r5385  
    6868CONTAINS 
    6969 
    70    SUBROUTINE p4z_flx ( kt ) 
     70   SUBROUTINE p4z_flx ( kt, knt ) 
    7171      !!--------------------------------------------------------------------- 
    7272      !!                     ***  ROUTINE p4z_flx  *** 
     
    8181      !!--------------------------------------------------------------------- 
    8282      ! 
    83       INTEGER, INTENT(in) ::   kt   ! 
     83      INTEGER, INTENT(in) ::   kt, knt   ! 
    8484      ! 
    8585      INTEGER  ::   ji, jj, jm, iind, iindm1 
     
    101101      !     IS USED TO COMPUTE AIR-SEA FLUX OF CO2 
    102102 
    103       IF( kt /= nit000 ) CALL p4z_patm( kt )    ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 
     103      IF( kt /= nit000 .AND. knt == 1 ) CALL p4z_patm( kt )    ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 
    104104 
    105105      IF( ln_co2int ) THEN  
     
    130130               zbot  = borat(ji,jj,1) 
    131131               zfact = rhop(ji,jj,1) / 1000. + rtrn 
    132                zdic  = trn(ji,jj,1,jpdic) / zfact 
     132               zdic  = trb(ji,jj,1,jpdic) / zfact 
    133133               zph   = MAX( hi(ji,jj,1), 1.e-10 ) / zfact 
    134                zalka = trn(ji,jj,1,jptal) / zfact 
     134               zalka = trb(ji,jj,1,jptal) / zfact 
    135135 
    136136               ! CALCULATE [ALK]([CO3--], [HCO3-]) 
     
    184184            zfld = satmco2(ji,jj) * patm(ji,jj) * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj)   ! (mol/L) * (m/s) 
    185185            zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj)                                   ! (mol/L) (m/s) ? 
    186             oce_co2(ji,jj) = ( zfld - zflu ) * rfact * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000. 
     186            oce_co2(ji,jj) = ( zfld - zflu ) * rfact2 * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000. 
    187187            ! compute the trend 
    188             tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) / fse3t(ji,jj,1) 
     188            tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) * rfact2 / fse3t(ji,jj,1) 
    189189 
    190190            ! Compute O2 flux  
    191191            zfld16 = atcox * patm(ji,jj) * chemc(ji,jj,2) * tmask(ji,jj,1) * zkgo2(ji,jj)          ! (mol/L) * (m/s) 
    192             zflu16 = trn(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj) 
     192            zflu16 = trb(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj) 
    193193            zoflx(ji,jj) = zfld16 - zflu16 
    194             tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zoflx(ji,jj) / fse3t(ji,jj,1) 
     194            tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zoflx(ji,jj) * rfact2 / fse3t(ji,jj,1) 
    195195         END DO 
    196196      END DO 
     
    207207      ENDIF 
    208208 
    209       IF( lk_iomput ) THEN 
     209      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
    210210         CALL wrk_alloc( jpi, jpj, zw2d )   
    211211         IF( iom_use( "Cflx"  ) )  THEN 
    212             zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) / rfact 
     212            zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) * rfact2r 
    213213            CALL iom_put( "Cflx"     , zw2d )  
    214214         ENDIF 
     
    226226         ENDIF 
    227227         IF( iom_use( "Dpo2" ) )  THEN 
    228            zw2d(:,:) = ( atcox * patm(:,:) - trn(:,:,1,jpoxy) / ( chemc(:,:,2) + rtrn ) ) * tmask(:,:,1) 
     228           zw2d(:,:) = ( atcox * patm(:,:) - trb(:,:,1,jpoxy) / ( chemc(:,:,2) + rtrn ) ) * tmask(:,:,1) 
    229229           CALL iom_put( "Dpo2"  , zw2d ) 
    230230         ENDIF 
     
    235235      ELSE 
    236236         IF( ln_diatrc ) THEN 
    237             trc2d(:,:,jp_pcs0_2d    ) = oce_co2(:,:) / e1e2t(:,:) / rfact  
     237            trc2d(:,:,jp_pcs0_2d    ) = oce_co2(:,:) / e1e2t(:,:) * rfact2r  
    238238            trc2d(:,:,jp_pcs0_2d + 1) = zoflx(:,:) * 1000 * tmask(:,:,1)  
    239239            trc2d(:,:,jp_pcs0_2d + 2) = zkgco2(:,:) * tmask(:,:,1)  
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zint.F90

    r5215 r5385  
    5656      DO ji = 1, jpi 
    5757         DO jj = 1, jpj 
    58             zvar = trn(ji,jj,1,jpsil) * trn(ji,jj,1,jpsil) 
     58            zvar = trb(ji,jj,1,jpsil) * trb(ji,jj,1,jpsil) 
    5959            xksimax(ji,jj) = MAX( xksimax(ji,jj), ( 1.+ 7.* zvar / ( xksilim * xksilim + zvar ) ) * 1e-6 ) 
    6060         END DO 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90

    r4996 r5385  
    6262CONTAINS 
    6363 
    64    SUBROUTINE p4z_lim( kt, jnt ) 
     64   SUBROUTINE p4z_lim( kt, knt ) 
    6565      !!--------------------------------------------------------------------- 
    6666      !!                     ***  ROUTINE p4z_lim  *** 
     
    7272      !!--------------------------------------------------------------------- 
    7373      ! 
    74       INTEGER, INTENT(in)  :: kt, jnt 
     74      INTEGER, INTENT(in)  :: kt, knt 
    7575      ! 
    7676      INTEGER  ::   ji, jj, jk 
    7777      REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zno3, zferlim 
    7878      REAL(wp) ::   zconcd, zconcd2, zconcn, zconcn2 
    79       REAL(wp) ::   z1_trndia, z1_trnphy, ztem1, ztem2, zetot1, zetot2 
     79      REAL(wp) ::   z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 
    8080      REAL(wp) ::   zdenom, zratio, zironmin 
    8181      REAL(wp) ::   zconc1d, zconc1dnh4, zconc0n, zconc0nnh4    
     
    9090               ! Tuning of the iron concentration to a minimum level that is set to the detection limit 
    9191               !------------------------------------- 
    92                zno3    = trn(ji,jj,jk,jpno3) / 40.e-6 
     92               zno3    = trb(ji,jj,jk,jpno3) / 40.e-6 
    9393               zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 
    9494               zferlim = MIN( zferlim, 7e-11 ) 
    95                trn(ji,jj,jk,jpfer) = MAX( trn(ji,jj,jk,jpfer), zferlim ) 
     95               trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 
    9696 
    9797               ! Computation of a variable Ks for iron on diatoms taking into account 
    9898               ! that increasing biomass is made of generally bigger cells 
    9999               !------------------------------------------------ 
    100                zconcd   = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - xsizedia ) 
    101                zconcd2  = trn(ji,jj,jk,jpdia) - zconcd 
    102                zconcn   = MAX( 0.e0 , trn(ji,jj,jk,jpphy) - xsizephy ) 
    103                zconcn2  = trn(ji,jj,jk,jpphy) - zconcn 
    104                z1_trnphy   = 1. / ( trn(ji,jj,jk,jpphy) + rtrn ) 
    105                z1_trndia   = 1. / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    106  
    107                concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trndia ) 
    108                zconc1d           = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trndia ) 
    109                zconc1dnh4        = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trndia ) 
    110  
    111                concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trnphy ) 
    112                zconc0n           = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trnphy ) 
    113                zconc0nnh4        = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trnphy ) 
     100               zconcd   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
     101               zconcd2  = trb(ji,jj,jk,jpdia) - zconcd 
     102               zconcn   = MAX( 0.e0 , trb(ji,jj,jk,jpphy) - xsizephy ) 
     103               zconcn2  = trb(ji,jj,jk,jpphy) - zconcn 
     104               z1_trbphy   = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 
     105               z1_trbdia   = 1. / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     106 
     107               concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trbdia ) 
     108               zconc1d           = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trbdia ) 
     109               zconc1dnh4        = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trbdia ) 
     110 
     111               concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trbphy ) 
     112               zconc0n           = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trbphy ) 
     113               zconc0nnh4        = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 
    114114 
    115115               ! Michaelis-Menten Limitation term for nutrients Small bacteria 
    116116               ! ------------------------------------------------------------- 
    117                zdenom = 1. /  ( concbno3 * concbnh4 + concbnh4 * trn(ji,jj,jk,jpno3) + concbno3 * trn(ji,jj,jk,jpnh4) ) 
    118                xnanono3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * concbnh4 * zdenom 
    119                xnanonh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * concbno3 * zdenom 
     117               zdenom = 1. /  ( concbno3 * concbnh4 + concbnh4 * trb(ji,jj,jk,jpno3) + concbno3 * trb(ji,jj,jk,jpnh4) ) 
     118               xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * concbnh4 * zdenom 
     119               xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * concbno3 * zdenom 
    120120               ! 
    121121               zlim1    = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 
    122                zlim2    = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concbnh4 ) 
    123                zlim3    = trn(ji,jj,jk,jpfer) / ( concbfe + trn(ji,jj,jk,jpfer) ) 
    124                zlim4    = trn(ji,jj,jk,jpdoc) / ( xkdoc   + trn(ji,jj,jk,jpdoc) ) 
     122               zlim2    = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concbnh4 ) 
     123               zlim3    = trb(ji,jj,jk,jpfer) / ( concbfe + trb(ji,jj,jk,jpfer) ) 
     124               zlim4    = trb(ji,jj,jk,jpdoc) / ( xkdoc   + trb(ji,jj,jk,jpdoc) ) 
    125125               xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
    126126               xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 
     
    128128               ! Michaelis-Menten Limitation term for nutrients Small flagellates 
    129129               ! ----------------------------------------------- 
    130                zdenom = 1. /  ( zconc0n * zconc0nnh4 + zconc0nnh4 * trn(ji,jj,jk,jpno3) + zconc0n * trn(ji,jj,jk,jpnh4) ) 
    131                xnanono3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 
    132                xnanonh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * zconc0n    * zdenom 
     130               zdenom = 1. /  ( zconc0n * zconc0nnh4 + zconc0nnh4 * trb(ji,jj,jk,jpno3) + zconc0n * trb(ji,jj,jk,jpnh4) ) 
     131               xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 
     132               xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc0n    * zdenom 
    133133               ! 
    134134               zlim1    = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 
    135                zlim2    = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc0nnh4 ) 
    136                zratio   = trn(ji,jj,jk,jpnfe) * z1_trnphy  
    137                zironmin = xcoef1 * trn(ji,jj,jk,jpnch) * z1_trnphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 
     135               zlim2    = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc0nnh4 ) 
     136               zratio   = trb(ji,jj,jk,jpnfe) * z1_trbphy  
     137               zironmin = xcoef1 * trb(ji,jj,jk,jpnch) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 
    138138               zlim3    = MAX( 0.,( zratio - zironmin ) / qnfelim ) 
    139139               xnanopo4(ji,jj,jk) = zlim2 
     
    143143               !   Michaelis-Menten Limitation term for nutrients Diatoms 
    144144               !   ---------------------------------------------- 
    145                zdenom   = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trn(ji,jj,jk,jpno3) + zconc1d * trn(ji,jj,jk,jpnh4) ) 
    146                xdiatno3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 
    147                xdiatnh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * zconc1d    * zdenom 
     145               zdenom   = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trb(ji,jj,jk,jpno3) + zconc1d * trb(ji,jj,jk,jpnh4) ) 
     146               xdiatno3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 
     147               xdiatnh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc1d    * zdenom 
    148148               ! 
    149149               zlim1    = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 
    150                zlim2    = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc1dnh4  ) 
    151                zlim3    = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi(ji,jj) ) 
    152                zratio   = trn(ji,jj,jk,jpdfe) * z1_trndia 
    153                zironmin = xcoef1 * trn(ji,jj,jk,jpdch) * z1_trndia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 
     150               zlim2    = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc1dnh4  ) 
     151               zlim3    = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 
     152               zratio   = trb(ji,jj,jk,jpdfe) * z1_trbdia 
     153               zironmin = xcoef1 * trb(ji,jj,jk,jpdch) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 
    154154               zlim4    = MAX( 0., ( zratio - zironmin ) / qdfelim ) 
    155155               xdiatpo4(ji,jj,jk) = zlim2 
     
    166166         DO jj = 1, jpj 
    167167            DO ji = 1, jpi 
    168                zlim1 =  ( trn(ji,jj,jk,jpno3) * concnnh4 + trn(ji,jj,jk,jpnh4) * concnno3 )    & 
    169                   &   / ( concnno3 * concnnh4 + concnnh4 * trn(ji,jj,jk,jpno3) + concnno3 * trn(ji,jj,jk,jpnh4) )  
    170                zlim2  = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concnnh4 ) 
    171                zlim3  = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) +  5.E-11   ) 
     168               zlim1 =  ( trb(ji,jj,jk,jpno3) * concnnh4 + trb(ji,jj,jk,jpnh4) * concnno3 )    & 
     169                  &   / ( concnno3 * concnnh4 + concnnh4 * trb(ji,jj,jk,jpno3) + concnno3 * trb(ji,jj,jk,jpnh4) )  
     170               zlim2  = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnnh4 ) 
     171               zlim3  = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) +  5.E-11   ) 
    172172               ztem1  = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 
    173173               ztem2  = tsn(ji,jj,jk,jp_tem) - 10. 
    174                zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) )  
    175                zetot2 = 30. / ( 30. + etot(ji,jj,jk) )  
     174               zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) )  
     175               zetot2 = 30. / ( 30. + etot_ndcy(ji,jj,jk) )  
    176176 
    177177               xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 )                  & 
    178178                  &                       * ztem1 / ( 0.1 + ztem1 )                     & 
    179                   &                       * MAX( 1., trn(ji,jj,jk,jpphy) * 1.e6 / 2. )  & 
     179                  &                       * MAX( 1., trb(ji,jj,jk,jpphy) * 1.e6 / 2. )  & 
    180180                  &                       * zetot1 * zetot2               & 
    181181                  &                       * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )         & 
     
    188188      ! 
    189189      ! 
    190       IF( lk_iomput .AND. jnt == nrdttrc ) THEN        ! save output diagnostics 
     190      IF( lk_iomput .AND. knt == nrdttrc ) THEN        ! save output diagnostics 
    191191        IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) )  ! euphotic layer deptht 
    192192        IF( iom_use( "LNnut"   ) ) CALL iom_put( "LNnut"  , xlimphy(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90

    r4996 r5385  
    4848CONTAINS 
    4949 
    50    SUBROUTINE p4z_lys( kt ) 
     50   SUBROUTINE p4z_lys( kt, knt ) 
    5151      !!--------------------------------------------------------------------- 
    5252      !!                     ***  ROUTINE p4z_lys  *** 
     
    5959      !!--------------------------------------------------------------------- 
    6060      ! 
    61       INTEGER, INTENT(in) ::   kt ! ocean time step 
     61      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    6262      INTEGER  ::   ji, jj, jk, jn 
    6363      REAL(wp) ::   zalk, zdic, zph, zah2 
    6464      REAL(wp) ::   zdispot, zfact, zcalcon, zalka, zaldi 
    6565      REAL(wp) ::   zomegaca, zexcess, zexcess0 
    66       REAL(wp) ::   zrfact2 
    6766      CHARACTER (len=25) :: charout 
    6867      REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zcaldiss    
     
    8988                  zfact = rhop(ji,jj,jk) / 1000. + rtrn 
    9089                  zph  = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 ! [H+] 
    91                   zdic  = trn(ji,jj,jk,jpdic) / zfact 
    92                   zalka = trn(ji,jj,jk,jptal) / zfact 
     90                  zdic  = trb(ji,jj,jk,jpdic) / zfact 
     91                  zalka = trb(ji,jj,jk,jptal) / zfact 
    9392                  ! CALCULATE [ALK]([CO3--], [HCO3-]) 
    9493                  zalk  = zalka - ( akw3(ji,jj,jk) / zph - zph + borat(ji,jj,jk) / ( 1. + zph / akb3(ji,jj,jk) ) ) 
     
    130129               !       (ACCORDING TO THIS FORMULATION ALSO SOME PARTICULATE 
    131130               !       CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 
    132                zdispot = kdca * zexcess * trn(ji,jj,jk,jpcal) 
     131               zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 
    133132# if defined key_degrad 
    134133               zdispot = zdispot * facvol(ji,jj,jk) 
     
    136135              !  CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 
    137136              !       AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 
    138               zcaldiss(ji,jj,jk)  = zdispot / rmtss ! calcite dissolution 
    139               zco3(ji,jj,jk)      = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) * rfact 
     137              zcaldiss(ji,jj,jk)  = zdispot * rfact2 / rmtss ! calcite dissolution 
     138              zco3(ji,jj,jk)      = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) 
    140139              ! 
    141140              tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) 
     
    147146      ! 
    148147 
    149       IF( lk_iomput ) THEN 
     148      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
    150149         IF( iom_use( "PH"     ) ) CALL iom_put( "PH"    , -1. * LOG10( hi(:,:,:) )          * tmask(:,:,:) ) 
    151150         IF( iom_use( "CO3"    ) ) CALL iom_put( "CO3"   , zco3(:,:,:) * 1.e+3               * tmask(:,:,:) ) 
    152151         IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", aksp(:,:,:) * 1.e+3 / calcon      * tmask(:,:,:) ) 
    153          IF( iom_use( "DCAL"   ) ) CALL iom_put( "DCAL"  , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 
     152         IF( iom_use( "DCAL"   ) ) CALL iom_put( "DCAL"  , zcaldiss(:,:,:) * 1.e+3 * rfact2r   * tmask(:,:,:) ) 
    154153      ELSE 
    155154         trc3d(:,:,:,jp_pcs0_3d    ) = -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90

    r4996 r5385  
    6060CONTAINS 
    6161 
    62    SUBROUTINE p4z_meso( kt, jnt ) 
     62   SUBROUTINE p4z_meso( kt, knt ) 
    6363      !!--------------------------------------------------------------------- 
    6464      !!                     ***  ROUTINE p4z_meso  *** 
     
    6868      !! ** Method  : - ??? 
    6969      !!--------------------------------------------------------------------- 
    70       INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
     70      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    7171      INTEGER  :: ji, jj, jk 
    7272      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 
     
    9797         DO jj = 1, jpj 
    9898            DO ji = 1, jpi 
    99                zcompam   = MAX( ( trn(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 
     99               zcompam   = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 
    100100# if defined key_degrad 
    101101               zstep     = xstep * facvol(ji,jj,jk) 
     
    107107               !  Respiration rates of both zooplankton 
    108108               !  ------------------------------------- 
    109                zrespz2   = resrat2 * zfact * trn(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes) )  & 
     109               zrespz2   = resrat2 * zfact * trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) )  & 
    110110                  &      + resrat2 * zfact * 3. * nitrfac(ji,jj,jk) 
    111111 
     
    113113               !  no real reason except that it seems to be more stable and may mimic predation 
    114114               !  --------------------------------------------------------------- 
    115                ztortz2   = mzrat2 * 1.e6 * zfact * trn(ji,jj,jk,jpmes) 
     115               ztortz2   = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 
    116116               ! 
    117                zcompadi  = MAX( ( trn(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 
    118                zcompaz   = MAX( ( trn(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 
     117               zcompadi  = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 
     118               zcompaz   = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 
    119119               ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 
    120120               ! it is to predation by mesozooplankton 
    121121               ! ------------------------------------------------------------------------------- 
    122                zcompaph  = MAX( ( trn(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 
     122               zcompaph  = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 
    123123                  &      * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 
    124                zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 
     124               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 
    125125 
    126126               zfood     = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc  
     
    128128               zdenom    = zfoodlim / ( xkgraz2 + zfoodlim ) 
    129129               zdenom2   = zdenom / ( zfood + rtrn ) 
    130                zgraze2   = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpmes)  
     130               zgraze2   = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes)  
    131131 
    132132               zgrazd    = zgraze2  * xprefc   * zcompadi  * zdenom2  
     
    135135               zgrazpoc  = zgraze2  * xprefpoc * zcompapoc * zdenom2  
    136136 
    137                zgraznf   = zgrazn   * trn(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn) 
    138                zgrazf    = zgrazd   * trn(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn) 
    139                zgrazpof  = zgrazpoc * trn(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn) 
     137               zgraznf   = zgrazn   * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) 
     138               zgrazf    = zgrazd   * trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn) 
     139               zgrazpof  = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 
    140140 
    141141               !  Mesozooplankton flux feeding on GOC 
     
    144144# if ! defined key_kriest 
    145145               zgrazffeg = grazflux  * zstep * wsbio4(ji,jj,jk)      & 
    146                &           * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) 
    147                zgrazfffg = zgrazffeg * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 
     146               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 
     147               zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    148148# endif 
    149149               zgrazffep = grazflux  * zstep *  wsbio3(ji,jj,jk)     & 
    150                &           * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) 
    151                zgrazfffp = zgrazffep * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 
     150               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 
     151               zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 
    152152              ! 
    153153# if ! defined key_kriest 
     
    158158              ! diatoms based aggregates are more prone to fractionation 
    159159              ! since they are more porous (marine snow instead of fecal pellets) 
    160               zratio    = trn(ji,jj,jk,jpgsi) / ( trn(ji,jj,jk,jpgoc) + rtrn ) 
     160              zratio    = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 
    161161              zratio2   = zratio * zratio 
    162162              zfrac     = zproport * grazflux  * zstep * wsbio4(ji,jj,jk)      & 
    163                &          * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes)          & 
     163               &          * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes)          & 
    164164               &          * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 
    165               zfracfe   = zfrac * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 
     165              zfracfe   = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    166166 
    167167              zgrazffep = zproport * zgrazffep 
     
    215215               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz 
    216216               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazn 
    217                tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * trn(ji,jj,jk,jpnch) / ( trn(ji,jj,jk,jpphy) + rtrn ) 
    218                tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * trn(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    219                tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * trn(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    220                tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * trn(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
     217               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpphy) + rtrn ) 
     218               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     219               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     220               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    221221               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 
    222222               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf 
     
    231231               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 
    232232#if defined key_kriest 
    233               znumpoc = trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 
     233              znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    234234              tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 
    235235              tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso      & 
     
    248248      END DO 
    249249      ! 
    250       IF( lk_iomput .AND. jnt == nrdttrc ) THEN 
     250      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
    251251         CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
    252252         IF( iom_use( "GRAZ2" ) ) THEN 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90

    r4996 r5385  
    5959CONTAINS 
    6060 
    61    SUBROUTINE p4z_micro( kt, jnt ) 
     61   SUBROUTINE p4z_micro( kt, knt ) 
    6262      !!--------------------------------------------------------------------- 
    6363      !!                     ***  ROUTINE p4z_micro  *** 
     
    6868      !!--------------------------------------------------------------------- 
    6969      INTEGER, INTENT(in) ::  kt  ! ocean time step 
    70       INTEGER, INTENT(in) ::  jnt  
     70      INTEGER, INTENT(in) ::  knt  
    7171      ! 
    7272      INTEGER  :: ji, jj, jk 
     
    9090         DO jj = 1, jpj 
    9191            DO ji = 1, jpi 
    92                zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 
     92               zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 
    9393               zstep   = xstep 
    9494# if defined key_degrad 
     
    9999               !  Respiration rates of both zooplankton 
    100100               !  ------------------------------------- 
    101                zrespz = resrat * zfact * trn(ji,jj,jk,jpzoo) / ( xkmort + trn(ji,jj,jk,jpzoo) )  & 
     101               zrespz = resrat * zfact * trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) )  & 
    102102                  &   + resrat * zfact * 3. * nitrfac(ji,jj,jk) 
    103103 
     
    105105               !  no real reason except that it seems to be more stable and may mimic predation. 
    106106               !  --------------------------------------------------------------- 
    107                ztortz = mzrat * 1.e6 * zfact * trn(ji,jj,jk,jpzoo) 
    108  
    109                zcompadi  = MIN( MAX( ( trn(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 
    110                zcompaph  = MAX( ( trn(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 
    111                zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 
     107               ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) 
     108 
     109               zcompadi  = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 
     110               zcompaph  = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 
     111               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 
    112112                
    113113               !     Microzooplankton grazing 
     
    117117               zdenom    = zfoodlim / ( xkgraz + zfoodlim ) 
    118118               zdenom2   = zdenom / ( zfood + rtrn ) 
    119                zgraze    = grazrat * zstep * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpzoo)  
     119               zgraze    = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo)  
    120120 
    121121               zgrazp    = zgraze  * xpref2p * zcompaph  * zdenom2  
     
    123123               zgrazsd   = zgraze  * xpref2d * zcompadi  * zdenom2  
    124124 
    125                zgrazpf   = zgrazp  * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 
    126                zgrazmf   = zgrazm  * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 
    127                zgrazsf   = zgrazsd * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 
     125               zgrazpf   = zgrazp  * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 
     126               zgrazmf   = zgrazm  * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 
     127               zgrazsf   = zgrazsd * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 
    128128               ! 
    129129               zgraztot  = zgrazp  + zgrazm  + zgrazsd  
     
    165165               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 
    166166               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd 
    167                tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp  * trn(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn) 
    168                tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * trn(ji,jj,jk,jpdch)/(trn(ji,jj,jk,jpdia)+rtrn) 
    169                tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * trn(ji,jj,jk,jpdsi)/(trn(ji,jj,jk,jpdia)+rtrn) 
    170                tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * trn(ji,jj,jk,jpdsi)/(trn(ji,jj,jk,jpdia)+rtrn) 
     167               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp  * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 
     168               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn) 
     169               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 
     170               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 
    171171               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgrazpf 
    172172               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf 
     
    184184#if defined key_kriest 
    185185               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zmortz * xkr_dmicro & 
    186                                                          - zgrazm * trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 
     186                                                         - zgrazm * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    187187#endif 
    188188            END DO 
     
    190190      END DO 
    191191      ! 
    192       IF( lk_iomput .AND. jnt == nrdttrc ) THEN 
     192      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
    193193         CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
    194194         IF( iom_use( "GRAZ1" ) ) THEN 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90

    r5215 r5385  
    8585         DO jj = 1, jpj 
    8686            DO ji = 1, jpi 
    87                zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 
     87               zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 
    8888               zstep    = xstep 
    8989# if defined key_degrad 
     
    9494               !     due to turbulence is negligible. Mortality is also set 
    9595               !     to 0 
    96                zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * trn(ji,jj,jk,jpphy) 
     96               zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * trb(ji,jj,jk,jpphy) 
    9797               !     Squared mortality of Phyto similar to a sedimentation term during 
    9898               !     blooms (Doney et al. 1996) 
     
    102102               !     increased when nutrients are limiting phytoplankton growth 
    103103               !     as observed for instance in case of iron limitation. 
    104                ztortp = mprat * xstep * zcompaph / ( xkmort + trn(ji,jj,jk,jpphy) ) * zsizerat 
     104               ztortp = mprat * xstep * zcompaph / ( xkmort + trb(ji,jj,jk,jpphy) ) * zsizerat 
    105105 
    106106               zmortp = zrespp + ztortp 
     
    108108               !   Update the arrays TRA which contains the biological sources and sinks 
    109109 
    110                zfactfe = trn(ji,jj,jk,jpnfe)/(trn(ji,jj,jk,jpphy)+rtrn) 
    111                zfactch = trn(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn) 
     110               zfactfe = trb(ji,jj,jk,jpnfe)/(trb(ji,jj,jk,jpphy)+rtrn) 
     111               zfactch = trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 
    112112               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zmortp 
    113113               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch 
     
    172172            DO ji = 1, jpi 
    173173 
    174                zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1e-9), 0. ) 
     174               zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - 1e-9), 0. ) 
    175175 
    176176               !    Aggregation term for diatoms is increased in case of nutrient 
     
    186186               zlim2   = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 
    187187               zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 )  
    188                zrespp2 = 1.e6 * zstep * (  wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trn(ji,jj,jk,jpdia) 
     188               zrespp2 = 1.e6 * zstep * (  wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 
    189189 
    190190               !     Phytoplankton mortality.  
    191191               !     ------------------------ 
    192                ztortp2 = mprat2 * zstep * trn(ji,jj,jk,jpdia)  / ( xkmort + trn(ji,jj,jk,jpdia) ) * zcompadi  
     192               ztortp2 = mprat2 * zstep * trb(ji,jj,jk,jpdia)  / ( xkmort + trb(ji,jj,jk,jpdia) ) * zcompadi  
    193193 
    194194               zmortp2 = zrespp2 + ztortp2 
     
    196196               !   Update the arrays tra which contains the biological sources and sinks 
    197197               !   --------------------------------------------------------------------- 
    198                zfactch = trn(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    199                zfactfe = trn(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    200                zfactsi = trn(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
     198               zfactch = trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     199               zfactfe = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     200               zfactsi = trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    201201               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zmortp2  
    202202               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zmortp2 * zfactch 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90

    r4996 r5385  
    3535   REAL(wp) :: parlux      !: Fraction of shortwave as PAR 
    3636   REAL(wp) :: xparsw                 !: parlux/3 
     37   REAL(wp) :: xsi0r                 !:  1. /rn_si0 
    3738 
    3839   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_par      ! structure of input par 
     
    4243 
    4344   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enano, ediat   !: PAR for phyto, nano and diat  
     45   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot_ndcy      !: PAR over 24h in case of diurnal cycle 
    4446   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy           !: averaged PAR in the mixed layer 
     47   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr  !: wavelength (Red-Green-Blue) 
    4548 
    4649   INTEGER  ::   nksrp   ! levels below which the light cannot penetrate ( depth larger than 391 m) 
     
    5760CONTAINS 
    5861 
    59    SUBROUTINE p4z_opt( kt, jnt ) 
     62   SUBROUTINE p4z_opt( kt, knt ) 
    6063      !!--------------------------------------------------------------------- 
    6164      !!                     ***  ROUTINE p4z_opt  *** 
     
    6770      !!--------------------------------------------------------------------- 
    6871      ! 
    69       INTEGER, INTENT(in) ::   kt, jnt   ! ocean time step 
     72      INTEGER, INTENT(in) ::   kt, knt   ! ocean time step 
    7073      ! 
    7174      INTEGER  ::   ji, jj, jk 
    7275      INTEGER  ::   irgb 
    73       REAL(wp) ::   zchl, zxsi0r 
     76      REAL(wp) ::   zchl 
    7477      REAL(wp) ::   zc0 , zc1 , zc2, zc3, z1_dep 
    75       REAL(wp), POINTER, DIMENSION(:,:  ) :: zdepmoy, zetmp, zetmp1, zetmp2 
    76       REAL(wp), POINTER, DIMENSION(:,:,:) :: zekg, zekr, zekb, ze0, ze1, ze2, ze3 
     78      REAL(wp), POINTER, DIMENSION(:,:  ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4, zqsr100 
     79      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpar, ze0, ze1, ze2, ze3 
    7780      !!--------------------------------------------------------------------- 
    7881      ! 
     
    8083      ! 
    8184      ! Allocate temporary workspace 
    82       CALL wrk_alloc( jpi, jpj,      zdepmoy, zetmp, zetmp1, zetmp2 )  
    83       CALL wrk_alloc( jpi, jpj, jpk, zekg, zekr, zekb, ze0, ze1, ze2, ze3 ) 
    84  
    85       IF( jnt == 1 .AND. ln_varpar ) CALL p4z_optsbc( kt ) 
     85      CALL wrk_alloc( jpi, jpj,      zqsr100, zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
     86      CALL wrk_alloc( jpi, jpj, jpk, zpar, ze0, ze1, ze2, ze3 ) 
     87 
     88      IF( knt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt ) 
    8689 
    8790      !     Initialisation of variables used to compute PAR 
    8891      !     ----------------------------------------------- 
    89       ze1(:,:,jpk) = 0._wp 
    90       ze2(:,:,jpk) = 0._wp 
    91       ze3(:,:,jpk) = 0._wp 
    92  
     92      ze1(:,:,:) = 0._wp 
     93      ze2(:,:,:) = 0._wp 
     94      ze3(:,:,:) = 0._wp 
    9395      !                                        !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
    9496      DO jk = 1, jpkm1                         !  -------------------------------------------------------- 
     
    9799!CDIR NOVERRCHK 
    98100            DO ji = 1, jpi 
    99                zchl = ( trn(ji,jj,jk,jpnch) + trn(ji,jj,jk,jpdch) + rtrn ) * 1.e6 
     101               zchl = ( trb(ji,jj,jk,jpnch) + trb(ji,jj,jk,jpdch) + rtrn ) * 1.e6 
    100102               zchl = MIN(  10. , MAX( 0.05, zchl )  ) 
    101103               irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn ) 
    102104               !                                                          
    103                zekb(ji,jj,jk) = xkrgb(1,irgb) * fse3t(ji,jj,jk) 
    104                zekg(ji,jj,jk) = xkrgb(2,irgb) * fse3t(ji,jj,jk) 
    105                zekr(ji,jj,jk) = xkrgb(3,irgb) * fse3t(ji,jj,jk) 
     105               ekb(ji,jj,jk) = xkrgb(1,irgb) * fse3t(ji,jj,jk) 
     106               ekg(ji,jj,jk) = xkrgb(2,irgb) * fse3t(ji,jj,jk) 
     107               ekr(ji,jj,jk) = xkrgb(3,irgb) * fse3t(ji,jj,jk) 
    106108            END DO 
    107109         END DO 
    108110      END DO 
    109  
    110  
    111111      !                                        !* Photosynthetically Available Radiation (PAR) 
    112112      !                                        !  -------------------------------------- 
    113  
    114       IF( ln_varpar ) THEN 
    115          ze1(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekb(:,:,1) ) 
    116          ze2(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekg(:,:,1) ) 
    117          ze3(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekr(:,:,1) ) 
     113      IF( l_trcdm2dc ) THEN                     !  diurnal cycle 
     114         ! 1% of qsr to compute euphotic layer 
     115         zqsr100(:,:) = 0.01 * qsr_mean(:,:)     !  daily mean qsr 
     116         ! 
     117         CALL p4z_opt_par( kt, qsr_mean, ze1, ze2, ze3 )  
     118         ! 
     119         DO jk = 1, nksrp       
     120            etot_ndcy(:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
     121            enano    (:,:,jk) =  2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     122            ediat    (:,:,jk) =  1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 
     123         END DO 
     124         ! 
     125         CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 )  
     126         ! 
     127         DO jk = 1, nksrp       
     128            etot(:,:,jk) =  ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 
     129         END DO 
     130         ! 
    118131      ELSE 
    119          ze1(:,:,1) = xparsw         * qsr(:,:) * EXP( -0.5 * zekb(:,:,1) ) 
    120          ze2(:,:,1) = xparsw         * qsr(:,:) * EXP( -0.5 * zekg(:,:,1) ) 
    121          ze3(:,:,1) = xparsw         * qsr(:,:) * EXP( -0.5 * zekr(:,:,1) ) 
    122       ENDIF 
    123  
    124 !CDIR NOVERRCHK 
    125       DO jj = 1, jpj 
    126 !CDIR NOVERRCHK 
    127          DO ji = 1, jpi 
    128             zc1 = ze1(ji,jj,1) 
    129             zc2 = ze2(ji,jj,1)  
    130             zc3 = ze3(ji,jj,1) 
    131             etot (ji,jj,1) = (       zc1 +        zc2 +       zc3 ) 
    132             enano(ji,jj,1) = ( 2.1 * zc1 + 0.42 * zc2 + 0.4 * zc3 ) 
    133             ediat(ji,jj,1) = ( 1.6 * zc1 + 0.69 * zc2 + 0.7 * zc3 ) 
    134          END DO 
    135       END DO 
    136  
    137      
    138       DO jk = 2, nksrp       
    139 !CDIR NOVERRCHK 
    140          DO jj = 1, jpj 
    141 !CDIR NOVERRCHK 
    142             DO ji = 1, jpi 
    143                zc1 = ze1(ji,jj,jk-1) * EXP( -0.5 * ( zekb(ji,jj,jk-1) + zekb(ji,jj,jk) ) ) 
    144                zc2 = ze2(ji,jj,jk-1) * EXP( -0.5 * ( zekg(ji,jj,jk-1) + zekg(ji,jj,jk) ) ) 
    145                zc3 = ze3(ji,jj,jk-1) * EXP( -0.5 * ( zekr(ji,jj,jk-1) + zekr(ji,jj,jk) ) ) 
    146                ze1  (ji,jj,jk) = zc1 
    147                ze2  (ji,jj,jk) = zc2 
    148                ze3  (ji,jj,jk) = zc3 
    149                etot (ji,jj,jk) = (       zc1 +        zc2 +       zc3 ) 
    150                enano(ji,jj,jk) = ( 2.1 * zc1 + 0.42 * zc2 + 0.4 * zc3 ) 
    151                ediat(ji,jj,jk) = ( 1.6 * zc1 + 0.69 * zc2 + 0.7 * zc3 ) 
    152             END DO 
    153          END DO 
    154       END DO 
     132         ! 1% of qsr to compute euphotic layer 
     133         zqsr100(:,:) = 0.01 * qsr(:,:) 
     134         ! 
     135         CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 )  
     136         ! 
     137         DO jk = 1, nksrp       
     138            etot (:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
     139            enano(:,:,jk) =  2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     140            ediat(:,:,jk) =  1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 
     141         END DO 
     142         etot_ndcy(:,:,:) =  etot(:,:,:)  
     143      ENDIF 
     144 
    155145 
    156146      IF( ln_qsr_bio ) THEN                    !* heat flux accros w-level (used in the dynamics) 
    157147         !                                     !  ------------------------ 
    158          zxsi0r = 1.e0 / rn_si0 
    159          ! 
    160          ze0(:,:,1) = rn_abs * qsr(:,:) 
    161          !                                                    ! surface value : separation in R-G-B + near surface 
    162          IF( ln_varpar ) THEN 
    163             ze0(:,:,1) = ( 1. - 3. * par_varsw(:,:) ) * qsr(:,:) 
    164             ze1(:,:,1) = par_varsw(:,:)               * qsr(:,:)          
    165             ze2(:,:,1) = par_varsw(:,:)               * qsr(:,:) 
    166             ze3(:,:,1) = par_varsw(:,:)               * qsr(:,:) 
    167          ELSE 
    168             ze0(:,:,1) = ( 1. - 3. * xparsw )  * qsr(:,:) 
    169             ze1(:,:,1) = xparsw                * qsr(:,:)          
    170             ze2(:,:,1) = xparsw                * qsr(:,:) 
    171             ze3(:,:,1) = xparsw                * qsr(:,:) 
    172          ENDIF 
     148         CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3, pe0=ze0 ) 
     149         ! 
    173150         etot3(:,:,1) =  qsr(:,:) * tmask(:,:,1) 
    174          ! 
    175          ! 
    176151         DO jk = 2, nksrp + 1 
    177 !CDIR NOVERRCHK 
    178             DO jj = 1, jpj 
    179 !CDIR NOVERRCHK 
    180                DO ji = 1, jpi 
    181                   zc0 = ze0(ji,jj,jk-1) * EXP( -fse3t(ji,jj,jk-1) * zxsi0r ) 
    182                   zc1 = ze1(ji,jj,jk-1) * EXP( -zekb(ji,jj,jk-1 ) ) 
    183                   zc2 = ze2(ji,jj,jk-1) * EXP( -zekg(ji,jj,jk-1 ) ) 
    184                   zc3 = ze3(ji,jj,jk-1) * EXP( -zekr(ji,jj,jk-1 ) ) 
    185                   ze0(ji,jj,jk) = zc0 
    186                   ze1(ji,jj,jk) = zc1 
    187                   ze2(ji,jj,jk) = zc2 
    188                   ze3(ji,jj,jk) = zc3 
    189                   etot3(ji,jj,jk) = ( zc0 + zc1 + zc2 + zc3 ) * tmask(ji,jj,jk) 
    190               END DO 
    191               ! 
    192             END DO 
    193             ! 
    194         END DO 
    195         ! 
    196       ENDIF 
    197  
     152            etot3(:,:,jk) =  ( ze0(:,:,jk) + ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ) * tmask(:,:,jk) 
     153         END DO 
     154         !                                     !  ------------------------ 
     155      ENDIF 
    198156      !                                        !* Euphotic depth and level 
    199157      neln(:,:) = 1                            !  ------------------------ 
     
    203161         DO jj = 1, jpj 
    204162           DO ji = 1, jpi 
    205               IF( etot(ji,jj,jk) * tmask(ji,jj,jk) >= 0.0043 * qsr(ji,jj) )  THEN 
     163              IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.43 * zqsr100(ji,jj) )  THEN 
    206164                 neln(ji,jj) = jk+1                    ! Euphotic level : 1rst T-level strictly below Euphotic layer 
    207                  !                                     ! nb: ensure the compatibility with nmld_trc definition in trd_mxl_trc_zint 
     165                 !                                     ! nb: ensure the compatibility with nmld_trc definition in trd_mld_trc_zint 
    208166                 heup(ji,jj) = fsdepw(ji,jj,jk+1)      ! Euphotic layer depth 
    209167              ENDIF 
     
    211169        END DO 
    212170      END DO 
    213   
     171      ! 
    214172      heup(:,:) = MIN( 300., heup(:,:) ) 
    215  
    216173      !                                        !* mean light over the mixed layer 
    217174      zdepmoy(:,:)   = 0.e0                    !  ------------------------------- 
    218       zetmp  (:,:)   = 0.e0 
    219175      zetmp1 (:,:)   = 0.e0 
    220176      zetmp2 (:,:)   = 0.e0 
     177      zetmp3 (:,:)   = 0.e0 
     178      zetmp4 (:,:)   = 0.e0 
    221179 
    222180      DO jk = 1, nksrp 
     
    226184            DO ji = 1, jpi 
    227185               IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    228                   zetmp  (ji,jj) = zetmp  (ji,jj) + etot (ji,jj,jk) * fse3t(ji,jj,jk) 
    229                   zetmp1 (ji,jj) = zetmp1 (ji,jj) + enano(ji,jj,jk) * fse3t(ji,jj,jk) 
    230                   zetmp2 (ji,jj) = zetmp2 (ji,jj) + ediat(ji,jj,jk) * fse3t(ji,jj,jk) 
     186                  zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot     (ji,jj,jk) * fse3t(ji,jj,jk) ! remineralisation 
     187                  zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * fse3t(ji,jj,jk) ! production 
     188                  zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano    (ji,jj,jk) * fse3t(ji,jj,jk) ! production 
     189                  zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat    (ji,jj,jk) * fse3t(ji,jj,jk) ! production 
    231190                  zdepmoy(ji,jj) = zdepmoy(ji,jj) + fse3t(ji,jj,jk) 
    232191               ENDIF 
     
    235194      END DO 
    236195      ! 
    237       emoy(:,:,:) = etot(:,:,:) 
     196      emoy(:,:,:) = etot(:,:,:)       ! remineralisation 
     197      zpar(:,:,:) = etot_ndcy(:,:,:)  ! diagnostic : PAR with no diurnal cycle  
    238198      ! 
    239199      DO jk = 1, nksrp 
     
    244204               IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    245205                  z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 
    246                   emoy (ji,jj,jk) = zetmp (ji,jj) * z1_dep 
    247                   enano(ji,jj,jk) = zetmp1(ji,jj) * z1_dep 
    248                   ediat(ji,jj,jk) = zetmp2(ji,jj) * z1_dep 
     206                  emoy (ji,jj,jk) = zetmp1(ji,jj) * z1_dep 
     207                  zpar (ji,jj,jk) = zetmp2(ji,jj) * z1_dep 
     208                  enano(ji,jj,jk) = zetmp3(ji,jj) * z1_dep 
     209                  ediat(ji,jj,jk) = zetmp4(ji,jj) * z1_dep 
    249210               ENDIF 
    250211            END DO 
    251212         END DO 
    252213      END DO 
    253  
     214      ! 
    254215      IF( lk_iomput ) THEN 
    255         IF( jnt == nrdttrc  ) THEN 
    256            IF( iom_use( "Heup" ) ) CALL iom_put( "Heup", heup(:,:  ) * tmask(:,:,1) )  ! euphotic layer deptht 
    257            IF( iom_use( "PAR"  ) ) CALL iom_put( "PAR" , emoy(:,:,:) * tmask(:,:,:) )  ! Photosynthetically Available Radiation 
     216        IF( knt == nrdttrc ) THEN 
     217           IF( iom_use( "Heup"  ) ) CALL iom_put( "Heup" , heup(:,:  ) * tmask(:,:,1) )  ! euphotic layer deptht 
     218           IF( iom_use( "PARDM" ) ) CALL iom_put( "PARDM", zpar(:,:,:) * tmask(:,:,:) )  ! Photosynthetically Available Radiation 
     219           IF( iom_use( "PAR"   ) ) CALL iom_put( "PAR"  , emoy(:,:,:) * tmask(:,:,:) )  ! Photosynthetically Available Radiation 
    258220        ENDIF 
    259221      ELSE 
    260222         IF( ln_diatrc ) THEN        ! save output diagnostics 
    261             trc2d(:,:,  jp_pcs0_2d + 10) = heup(:,:  ) * tmask(:,:,1)   
     223            trc2d(:,:,  jp_pcs0_2d + 10) = heup(:,:  ) * tmask(:,:,1) 
    262224            trc3d(:,:,:,jp_pcs0_3d + 3)  = etot(:,:,:) * tmask(:,:,:) 
    263225         ENDIF 
    264226      ENDIF 
    265227      ! 
    266       CALL wrk_dealloc( jpi, jpj,      zdepmoy, zetmp, zetmp1, zetmp2 ) 
    267       CALL wrk_dealloc( jpi, jpj, jpk, zekg, zekr, zekb, ze0, ze1, ze2, ze3 ) 
     228      CALL wrk_dealloc( jpi, jpj,      zqsr100, zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
     229      CALL wrk_dealloc( jpi, jpj, jpk, zpar, ze0, ze1, ze2, ze3 ) 
    268230      ! 
    269231      IF( nn_timing == 1 )  CALL timing_stop('p4z_opt') 
     
    271233   END SUBROUTINE p4z_opt 
    272234 
    273    SUBROUTINE p4z_optsbc( kt ) 
    274       !!---------------------------------------------------------------------- 
    275       !!                  ***  routine p4z_optsbc  *** 
     235   SUBROUTINE p4z_opt_par( kt, pqsr, pe1, pe2, pe3, pe0 )  
     236      !!---------------------------------------------------------------------- 
     237      !!                  ***  routine p4z_opt_par  *** 
     238      !! 
     239      !! ** purpose :   compute PAR of each wavelength (Red-Green-Blue) 
     240      !!                for a given shortwave radiation 
     241      !! 
     242      !!---------------------------------------------------------------------- 
     243      !! * arguments 
     244      INTEGER, INTENT(in)                                       ::  kt            !   ocean time-step 
     245      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in)              ::  pqsr          !   shortwave 
     246      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout)           ::  pe1 , pe2 , pe3   !  PAR ( R-G-B) 
     247      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout), OPTIONAL ::  pe0   
     248      !! * local variables 
     249      INTEGER    ::   ji, jj, jk     ! dummy loop indices 
     250      REAL(wp), DIMENSION(jpi,jpj)     ::  zqsr          !   shortwave 
     251      !!---------------------------------------------------------------------- 
     252 
     253      !  Real shortwave 
     254      IF( ln_varpar ) THEN  ;  zqsr(:,:) = par_varsw(:,:) * pqsr(:,:) 
     255      ELSE                  ;  zqsr(:,:) = xparsw         * pqsr(:,:) 
     256      ENDIF 
     257      ! 
     258      IF( PRESENT( pe0 ) ) THEN     !  W-level 
     259         ! 
     260         pe0(:,:,1) = pqsr(:,:) - 3. * zqsr(:,:)    !   ( 1 - 3 * alpha ) * q 
     261         pe1(:,:,1) = zqsr(:,:)          
     262         pe2(:,:,1) = zqsr(:,:) 
     263         pe3(:,:,1) = zqsr(:,:) 
     264         ! 
     265         DO jk = 2, nksrp + 1 
     266!CDIR NOVERRCHK 
     267            DO jj = 1, jpj 
     268!CDIR NOVERRCHK 
     269               DO ji = 1, jpi 
     270                  pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -fse3t(ji,jj,jk-1) * xsi0r ) 
     271                  pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb(ji,jj,jk-1 ) ) 
     272                  pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg(ji,jj,jk-1 ) ) 
     273                  pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr(ji,jj,jk-1 ) ) 
     274               END DO 
     275              ! 
     276            END DO 
     277            ! 
     278         END DO 
     279        ! 
     280      ELSE   ! T- level 
     281        ! 
     282        pe1(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekb(:,:,1) ) 
     283        pe2(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekg(:,:,1) ) 
     284        pe3(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekr(:,:,1) ) 
     285        ! 
     286        DO jk = 2, nksrp       
     287!CDIR NOVERRCHK 
     288           DO jj = 1, jpj 
     289!CDIR NOVERRCHK 
     290              DO ji = 1, jpi 
     291                 pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -0.5 * ( ekb(ji,jj,jk-1) + ekb(ji,jj,jk) ) ) 
     292                 pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -0.5 * ( ekg(ji,jj,jk-1) + ekg(ji,jj,jk) ) ) 
     293                 pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -0.5 * ( ekr(ji,jj,jk-1) + ekr(ji,jj,jk) ) ) 
     294              END DO 
     295           END DO 
     296        END DO     
     297        ! 
     298      ENDIF 
     299      !  
     300   END SUBROUTINE p4z_opt_par 
     301 
     302 
     303   SUBROUTINE p4z_opt_sbc( kt ) 
     304      !!---------------------------------------------------------------------- 
     305      !!                  ***  routine p4z_opt_sbc  *** 
    276306      !! 
    277307      !! ** purpose :   read and interpolate the variable PAR fraction 
     
    284314      !!---------------------------------------------------------------------- 
    285315      !! * arguments 
    286       INTEGER, INTENT( in  ) ::   kt   ! ocean time step 
     316      INTEGER ,                INTENT(in) ::   kt     ! ocean time step 
    287317 
    288318      !! * local declarations 
     
    297327         IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_par > 1 ) ) THEN 
    298328            CALL fld_read( kt, 1, sf_par ) 
    299             par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) )/3.0 
     329            par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) ) / 3.0 
    300330         ENDIF 
    301331      ENDIF 
     
    303333      IF( nn_timing == 1 )  CALL timing_stop('p4z_optsbc') 
    304334      ! 
    305    END SUBROUTINE p4z_optsbc 
     335   END SUBROUTINE p4z_opt_sbc 
    306336 
    307337   SUBROUTINE p4z_opt_init 
     
    347377      ! 
    348378      xparsw = parlux / 3.0 
     379      xsi0r  = 1.e0 / rn_si0 
    349380      ! 
    350381      ! Variable PAR at the surface of the ocean 
     
    372403      IF(lwp) WRITE(numout,*) '        level of light extinction = ', nksrp, ' ref depth = ', gdepw_1d(nksrp+1), ' m' 
    373404      ! 
    374                          etot (:,:,:) = 0._wp 
    375                          enano(:,:,:) = 0._wp 
    376                          ediat(:,:,:) = 0._wp 
    377       IF( ln_qsr_bio )   etot3(:,:,:) = 0._wp 
     405                         ekr      (:,:,:) = 0._wp 
     406                         ekb      (:,:,:) = 0._wp 
     407                         ekg      (:,:,:) = 0._wp 
     408                         etot     (:,:,:) = 0._wp 
     409                         etot_ndcy(:,:,:) = 0._wp 
     410                         enano    (:,:,:) = 0._wp 
     411                         ediat    (:,:,:) = 0._wp 
     412      IF( ln_qsr_bio )   etot3    (:,:,:) = 0._wp 
    378413      !  
    379414      IF( nn_timing == 1 )  CALL timing_stop('p4z_opt_init') 
     
    386421      !!                     ***  ROUTINE p4z_opt_alloc  *** 
    387422      !!---------------------------------------------------------------------- 
    388       ALLOCATE( enano(jpi,jpj,jpk), ediat(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc )  
     423      ALLOCATE( ekb(jpi,jpj,jpk)      , ekr(jpi,jpj,jpk), ekg(jpi,jpj,jpk),   & 
     424        &       enano(jpi,jpj,jpk)    , ediat(jpi,jpj,jpk), & 
     425        &       etot_ndcy(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc )  
    389426         ! 
    390427      IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90

    r4996 r5385  
    6464CONTAINS 
    6565 
    66    SUBROUTINE p4z_prod( kt , jnt ) 
     66   SUBROUTINE p4z_prod( kt , knt ) 
    6767      !!--------------------------------------------------------------------- 
    6868      !!                     ***  ROUTINE p4z_prod  *** 
     
    7474      !!--------------------------------------------------------------------- 
    7575      ! 
    76       INTEGER, INTENT(in) :: kt, jnt 
     76      INTEGER, INTENT(in) :: kt, knt 
    7777      ! 
    7878      INTEGER  ::   ji, jj, jk 
     
    129129      END DO 
    130130 
    131       IF( ln_newprod ) THEN 
    132          ! Impact of the day duration on phytoplankton growth 
    133          DO jk = 1, jpkm1 
    134             DO jj = 1 ,jpj 
    135                DO ji = 1, jpi 
    136                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
    137                      zval = MAX( 1., zstrn(ji,jj) ) 
    138                      zval = 1.5 * zval / ( 12. + zval ) 
    139                      zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval 
    140                      zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 
    141                   ENDIF 
    142                END DO 
    143             END DO 
    144          END DO 
    145       ENDIF 
     131      ! Impact of the day duration on phytoplankton growth 
     132      DO jk = 1, jpkm1 
     133         DO jj = 1 ,jpj 
     134            DO ji = 1, jpi 
     135               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     136                  zval = MAX( 1., zstrn(ji,jj) ) 
     137                  zval = 1.5 * zval / ( 12. + zval ) 
     138                  zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval 
     139                  zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 
     140               ENDIF 
     141            END DO 
     142         END DO 
     143      END DO 
    146144 
    147145      ! Maximum light intensity 
     
    157155               DO ji = 1, jpi 
    158156                  ! Computation of the P-I slope for nanos and diatoms 
    159                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     157                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    160158                      ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
    161159                      zadap       = xadap * ztn / ( 2.+ ztn ) 
    162                       zconctemp   = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - xsizedia ) 
    163                       zconctemp2  = trn(ji,jj,jk,jpdia) - zconctemp 
     160                      zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
     161                      zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
    164162                      znanotot    = enano(ji,jj,jk) * zstrn(ji,jj) 
    165163                      zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj) 
    166164                      ! 
    167165                      zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap  * EXP( -znanotot ) )  & 
    168                          &                   * trn(ji,jj,jk,jpnch) /( trn(ji,jj,jk,jpphy) * 12. + rtrn) 
     166                         &                   * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 
    169167                      ! 
    170                       zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trn(ji,jj,jk,jpdia) + rtrn )   & 
    171                          &                   * trn(ji,jj,jk,jpdch) /( trn(ji,jj,jk,jpdia) * 12. + rtrn) 
     168                      zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn )   & 
     169                         &                   * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 
    172170 
    173171                      ! Computation of production function for Carbon 
     
    196194 
    197195                  ! Computation of the P-I slope for nanos and diatoms 
    198                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     196                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    199197                      ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
    200198                      zadap       = ztn / ( 2.+ ztn ) 
    201                       zconctemp   = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - xsizedia ) 
    202                       zconctemp2  = trn(ji,jj,jk,jpdia) - zconctemp 
     199                      zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
     200                      zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
     201                      znanotot    = enano(ji,jj,jk) * zstrn(ji,jj) 
     202                      zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj) 
    203203                      ! 
    204                       zpislopead (ji,jj,jk) = pislope  * ( 1.+ zadap  * EXP( -0.21 * enano(ji,jj,jk) ) ) 
    205                       zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp)  / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    206  
    207                       zpislopen =  zpislopead(ji,jj,jk) * trn(ji,jj,jk,jpnch)                & 
    208                         &          / ( trn(ji,jj,jk,jpphy) * 12.                  + rtrn )   & 
     204                      zpislopead (ji,jj,jk) = pislope  * ( 1.+ zadap  * EXP( -znanotot ) ) 
     205                      zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp)  / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     206 
     207                      zpislopen =  zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch)                & 
     208                        &          / ( trb(ji,jj,jk,jpphy) * 12.                  + rtrn )   & 
    209209                        &          / ( prmax(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 
    210210 
    211                       zpislope2n = zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch)                & 
    212                         &          / ( trn(ji,jj,jk,jpdia) * 12.                  + rtrn )   & 
     211                      zpislope2n = zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch)                & 
     212                        &          / ( trb(ji,jj,jk,jpdia) * 12.                  + rtrn )   & 
    213213                        &          / ( prmax(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 
    214214 
    215215                      ! Computation of production function for Carbon 
    216216                      !  --------------------------------------------- 
    217                       zprbio(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen  * enano(ji,jj,jk) ) ) 
    218                       zprdia(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) ) ) 
     217                      zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen  * znanotot ) ) 
     218                      zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot ) ) 
    219219 
    220220                      !  Computation of production function for Chlorophyll 
    221221                      !-------------------------------------------------- 
    222                       zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen  * enano(ji,jj,jk) * zstrn(ji,jj) ) ) 
    223                       zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) * zstrn(ji,jj) ) ) 
     222                      zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen  * enano(ji,jj,jk) ) ) 
     223                      zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) ) ) 
    224224                  ENDIF 
    225225               END DO 
     
    252252            DO ji = 1, jpi 
    253253 
    254                 IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     254                IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    255255                   !    Si/C of diatoms 
    256256                   !    ------------------------ 
     
    258258                   !    Si/C is arbitrariliy increased for very high Si concentrations 
    259259                   !    to mimic the very high ratios observed in the Southern Ocean (silpot2) 
    260                   zlim  = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 ) 
     260                  zlim  = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 
    261261                  zsilim = MIN( zprdia(ji,jj,jk) / ( prmax(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 
    262262                  zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) )  ) + 1.e0 
    263                   zsiborn = trn(ji,jj,jk,jpsil) * trn(ji,jj,jk,jpsil) * trn(ji,jj,jk,jpsil) 
     263                  zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 
    264264                  IF (gphit(ji,jj) < -30 ) THEN 
    265265                    zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
     
    302302!CDIR NOVERRCHK 
    303303            DO ji = 1, jpi 
    304                IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     304               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    305305                  !  production terms for nanophyto. 
    306                   zprorca(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trn(ji,jj,jk,jpphy) * rfact2 
     306                  zprorca(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 
    307307                  zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 
    308308                  ! 
    309                   zratio = trn(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn ) 
     309                  zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn ) 
    310310                  zratio = zratio / fecnm  
    311311                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
     
    313313                  &             * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) )    & 
    314314                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) )  & 
    315                   &             * zmax * trn(ji,jj,jk,jpphy) * rfact2 
     315                  &             * zmax * trb(ji,jj,jk,jpphy) * rfact2 
    316316                  !  production terms for diatomees 
    317                   zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trn(ji,jj,jk,jpdia) * rfact2 
     317                  zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 
    318318                  zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 
    319319                  ! 
    320                   zratio = trn(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
     320                  zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    321321                  zratio = zratio / fecdm  
    322322                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
     
    324324                  &             * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) )    & 
    325325                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) )  & 
    326                   &             * zmax * trn(ji,jj,jk,jpdia) * rfact2 
     326                  &             * zmax * trb(ji,jj,jk,jpdia) * rfact2 
    327327               ENDIF 
    328328            END DO 
     
    341341                     zprdch(ji,jj,jk) = zprdch(ji,jj,jk) * zmixdiat(ji,jj) 
    342342                  ENDIF 
    343                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     343                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    344344                     !  production terms for nanophyto. ( chlorophyll ) 
    345345                     znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 
     
    365365!CDIR NOVERRCHK 
    366366               DO ji = 1, jpi 
    367                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     367                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    368368                     !  production terms for nanophyto. ( chlorophyll ) 
    369                      znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 
    370                      zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * trn(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk) 
     369                     znanotot = enano(ji,jj,jk) 
     370                     zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * trb(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk) 
    371371                     zprochln(ji,jj,jk) = chlcmin * 12. * zprorca (ji,jj,jk) 
    372372                     zprochln(ji,jj,jk) = zprochln(ji,jj,jk) + (chlcnm-chlcmin) * 144. * zprod            & 
    373                      &                    / ( zpislopead(ji,jj,jk) * trn(ji,jj,jk,jpnch) * znanotot +rtrn ) 
     373                     &                    / ( zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch) * znanotot +rtrn ) 
    374374                     !  production terms for diatomees ( chlorophyll ) 
    375                      zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj) 
    376                      zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * trn(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk) 
     375                     zdiattot = ediat(ji,jj,jk) 
     376                     zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * trb(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk) 
    377377                     zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk) 
    378378                     zprochld(ji,jj,jk) = zprochld(ji,jj,jk) + (chlcdm-chlcmin) * 144. * zprod             & 
    379                      &                    / ( zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch) * zdiattot +rtrn ) 
     379                     &                    / ( zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch) * zdiattot +rtrn ) 
    380380                  ENDIF 
    381381               END DO 
     
    414414 
    415415    ! Total primary production per year 
    416     IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. jnt == nrdttrc )  )  & 
     416    IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
    417417         & tpp = glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 
    418418 
    419419    IF( lk_iomput ) THEN 
    420        IF( jnt == nrdttrc ) THEN 
     420       IF( knt == nrdttrc ) THEN 
    421421          CALL wrk_alloc( jpi, jpj,      zw2d ) 
    422422          CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90

    r4996 r5385  
    5959CONTAINS 
    6060 
    61    SUBROUTINE p4z_rem( kt, jnt ) 
     61   SUBROUTINE p4z_rem( kt, knt ) 
    6262      !!--------------------------------------------------------------------- 
    6363      !!                     ***  ROUTINE p4z_rem  *** 
     
    6868      !!--------------------------------------------------------------------- 
    6969      ! 
    70       INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
     70      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    7171      ! 
    7272      INTEGER  ::   ji, jj, jk 
     
    104104               zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 
    105105               IF( fsdept(ji,jj,jk) < zdep ) THEN 
    106                   zdepbac(ji,jj,jk) = MIN( 0.7 * ( trn(ji,jj,jk,jpzoo) + 2.* trn(ji,jj,jk,jpmes) ), 4.e-6 ) 
     106                  zdepbac(ji,jj,jk) = MIN( 0.7 * ( trb(ji,jj,jk,jpzoo) + 2.* trb(ji,jj,jk,jpmes) ), 4.e-6 ) 
    107107                  ztempbac(ji,jj)   = zdepbac(ji,jj,jk) 
    108108               ELSE 
     
    119119            DO ji = 1, jpi 
    120120               ! denitrification factor computed from O2 levels 
    121                nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - trn(ji,jj,jk,jpoxy) )    & 
    122                   &                                / ( oxymin + trn(ji,jj,jk,jpoxy) )  ) 
     121               nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - trb(ji,jj,jk,jpoxy) )    & 
     122                  &                                / ( oxymin + trb(ji,jj,jk,jpoxy) )  ) 
    123123               nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 
    124124            END DO 
     
    140140               ! Ammonification in oxic waters with oxygen consumption 
    141141               ! ----------------------------------------------------- 
    142                zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trn(ji,jj,jk,jpdoc)  
    143                zolimi(ji,jj,jk) = MIN( ( trn(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )  
     142               zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
     143               zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )  
    144144               ! Ammonification in suboxic waters with denitrification 
    145145               ! ------------------------------------------------------- 
    146                denitr(ji,jj,jk)  = MIN(  ( trn(ji,jj,jk,jpno3) - rtrn ) / rdenit,   & 
    147                   &                     zremik * nitrfac(ji,jj,jk) * trn(ji,jj,jk,jpdoc)  ) 
     146               denitr(ji,jj,jk)  = MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit,   & 
     147                  &                     zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc)  ) 
    148148               ! 
    149149               zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 
     
    165165               ! below 2 umol/L. Inhibited at strong light  
    166166               ! ---------------------------------------------------------- 
    167                zonitr  =nitrif * zstep * trn(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) )  
    168                denitnh4(ji,jj,jk) = nitrif * zstep * trn(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk)  
     167               zonitr  =nitrif * zstep * trb(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) )  
     168               denitnh4(ji,jj,jk) = nitrif * zstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk)  
    169169               ! Update of the tracers trends 
    170170               ! ---------------------------- 
     
    192192               ! ---------------------------------------------------------- 
    193193               zbactfer = 10.e-6 *  rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk)             & 
    194                   &              * trn(ji,jj,jk,jpfer) / ( 2.5E-10 + trn(ji,jj,jk,jpfer) )    & 
     194                  &              * trb(ji,jj,jk,jpfer) / ( 2.5E-10 + trb(ji,jj,jk,jpfer) )    & 
    195195                  &              * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 
    196196#if defined key_kriest 
     
    228228               ! means a disaggregation constant about 0.5 the value in oxic zones 
    229229               ! ----------------------------------------------------------------- 
    230                zorem  = zremip * trn(ji,jj,jk,jppoc) 
    231                zofer  = zremip * trn(ji,jj,jk,jpsfe) 
     230               zorem  = zremip * trb(ji,jj,jk,jppoc) 
     231               zofer  = zremip * trb(ji,jj,jk,jpsfe) 
    232232#if ! defined key_kriest 
    233                zorem2 = zremip * trn(ji,jj,jk,jpgoc) 
    234                zofer2 = zremip * trn(ji,jj,jk,jpbfe) 
     233               zorem2 = zremip * trb(ji,jj,jk,jpgoc) 
     234               zofer2 = zremip * trb(ji,jj,jk,jpbfe) 
    235235#else 
    236                zorem2 = zremip * trn(ji,jj,jk,jpnum) 
     236               zorem2 = zremip * trb(ji,jj,jk,jpnum) 
    237237#endif 
    238238 
     
    272272               ! Remineralization rate of BSi depedant on T and saturation 
    273273               ! --------------------------------------------------------- 
    274                zsatur   = ( sio3eq(ji,jj,jk) - trn(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 
     274               zsatur   = ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 
    275275               zsatur   = MAX( rtrn, zsatur ) 
    276276               zsatur2  = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 
     
    287287               zfactdep = xsilab * EXP(-( xsiremlab - xsirem ) * znusil2 * zdep / wsbio2 ) * ztem / ( ztem + 10. ) 
    288288               zsiremin = ( xsiremlab * zfactdep + xsirem * ( 1. - zfactdep ) ) * zstep * znusil 
    289                zosil    = zsiremin * trn(ji,jj,jk,jpgsi) 
     289               zosil    = zsiremin * trb(ji,jj,jk,jpgsi) 
    290290               ! 
    291291               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) - zosil 
     
    315315      END DO 
    316316 
    317       IF( jnt == nrdttrc ) THEN 
     317      IF( knt == nrdttrc ) THEN 
    318318          CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
    319319          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90

    r5215 r5385  
    136136            DO jj = 1, jpj 
    137137               DO ji = 1, jpi 
    138                   zcoef = ryyss * cvol(ji,jj,1)  
     138                  zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj)  
    139139                  rivalk(ji,jj) =   sf_river(jr_dic)%fnow(ji,jj,1)                                    & 
    140140                     &              * 1.E3        / ( 12. * zcoef + rtrn ) 
     
    187187      INTEGER  :: ierr, ierr1, ierr2, ierr3 
    188188      INTEGER  :: ios                 ! Local integer output status for namelist read 
     189      INTEGER  :: ik50                !  last level where depth less than 50 m 
     190      INTEGER  :: isrow             ! index for ORCA1 starting row 
    189191      REAL(wp) :: zexpide, zdenitide, zmaskt 
    190192      REAL(wp) :: ztimes_dust, ztimes_riv, ztimes_ndep  
     
    216218902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampissbc in configuration namelist', lwp ) 
    217219      IF(lwm) WRITE ( numonp, nampissbc ) 
     220 
     221      IF ( ( nn_ice_tr >= 0 ) .AND. ln_ironice ) THEN 
     222         WRITE(numout,*) ' ln_ironice incompatible with nn_ice_tr = ', nn_ice_tr 
     223         WRITE(numout,*) ' Specify your sea ice iron concentration in nampisice instead ' 
     224         WRITE(numout,*) ' ln_ironice is forced to .FALSE. ' 
     225         ln_ironice = .FALSE. 
     226      ENDIF 
    218227 
    219228      IF(lwp) THEN 
     
    247256      ENDIF 
    248257 
     258      ! set the number of level over which river runoffs are applied  
     259      ! online configuration : computed in sbcrnf 
     260      IF( lk_offline ) THEN 
     261        nk_rnf(:,:) = 1 
     262        h_rnf (:,:) = fsdept(:,:,1) 
     263      ENDIF 
     264 
    249265      ! dust input from the atmosphere 
    250266      ! ------------------------------ 
     
    358374         rivalkinput = 0._wp 
    359375      END IF  
    360  
    361376      ! nutrient input from dust 
    362377      ! ------------------------ 
     
    410425         CALL iom_close( numiron ) 
    411426         ! 
    412          DO jk = 1, 5 
     427         ik50 = 5        !  last level where depth less than 50 m 
     428         DO jk = jpkm1, 1, -1 
     429            IF( gdept_1d(jk) > 50. )  ik50 = jk - 1 
     430         END DO 
     431         IF (lwp) WRITE(numout,*) 
     432         IF (lwp) WRITE(numout,*) ' Level corresponding to 50m depth ',  ik50,' ', gdept_1d(ik50+1) 
     433         IF (lwp) WRITE(numout,*) 
     434         DO jk = 1, ik50 
    413435            DO jj = 2, jpjm1 
    414436               DO ji = fs_2, fs_jpim1 
     
    421443            END DO 
    422444         END DO 
    423          IF( cp_cfg == 'orca' .AND. jp_cfg == 2 ) THEN 
    424             ii0 = 176   ;   ii1 =  176        ! Southern Island : Kerguelen 
    425             ij0 =  37   ;   ij1 =   37  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    426             ! 
    427             ii0 = 119   ;   ii1 =  119        ! South Georgia 
    428             ij0 =  29   ;   ij1 =   29  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    429             ! 
    430             ii0 = 111   ;   ii1 =  111        ! Falklands 
    431             ij0 =  35   ;   ij1 =   35  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    432             ! 
    433             ii0 = 168   ;   ii1 =  168        ! Crozet 
    434             ij0 =  40   ;   ij1 =   40  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    435             ! 
    436             ii0 = 119   ;   ii1 =  119        ! South Orkney 
    437             ij0 =  28   ;   ij1 =   28  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    438             ! 
    439             ii0 = 140   ;   ii1 =  140        ! Bouvet Island 
    440             ij0 =  33   ;   ij1 =   33  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    441             ! 
    442             ii0 = 178   ;   ii1 =  178        ! Prince edwards 
    443             ij0 =  34   ;   ij1 =   34  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    444             ! 
    445             ii0 =  43   ;   ii1 =   43        ! Balleny islands 
    446             ij0 =  21   ;   ij1 =   21  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    447          ENDIF 
     445         ! 
    448446         CALL lbc_lnk( zcmask , 'T', 1. )      ! lateral boundary conditions on cmask   (sign unchanged) 
     447         ! 
    449448         DO jk = 1, jpk 
    450449            DO jj = 1, jpj 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90

    r5215 r5385  
    2121   USE p4zopt          !  optical model 
    2222   USE p4zlim          !  Co-limitations of differents nutrients 
    23    USE p4zrem          !  Remineralisation of organic matter 
    2423   USE p4zsbc          !  External source of nutrients  
    2524   USE p4zint          !  interpolation and computation of various fields 
     
    3029   PRIVATE 
    3130 
    32    PUBLIC   p4z_sed    
     31   PUBLIC   p4z_sed   
     32   PUBLIC   p4z_sed_alloc 
     33  
    3334 
    3435   !! * Module variables 
     36   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrpot    !: Nitrogen fixation  
     37   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:  ) :: sdenit     !: Nitrate reduction in the sediments 
    3538   REAL(wp) :: r1_rday                  !: inverse of rday 
    36  
    37    INTEGER ::  numnit   
    38  
    3939 
    4040   !!* Substitution 
     
    4747CONTAINS 
    4848 
    49    SUBROUTINE p4z_sed( kt, jnt ) 
     49   SUBROUTINE p4z_sed( kt, knt ) 
    5050      !!--------------------------------------------------------------------- 
    5151      !!                     ***  ROUTINE p4z_sed  *** 
     
    5858      !!--------------------------------------------------------------------- 
    5959      ! 
    60       INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
     60      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    6161      INTEGER  ::   ji, jj, jk, ikt 
    6262#if ! defined key_sed 
     
    6969      REAL(wp) ::  zsiloss, zcaloss, zws3, zws4, zwsc, zdep, zwstpoc 
    7070      REAL(wp) ::  ztrfer, ztrpo4, zwdust, zlight 
    71       REAL(wp) ::  zrdenittot, zsdenittot, znitrpottot 
    7271      ! 
    7372      CHARACTER (len=25) :: charout 
    74       REAL(wp), POINTER, DIMENSION(:,:  ) :: zpdep, zsidep, zwork1, zwork2, zwork3, zwork4 
     73      REAL(wp), POINTER, DIMENSION(:,:  ) :: zpdep, zsidep, zwork1, zwork2, zwork3 
    7574      REAL(wp), POINTER, DIMENSION(:,:  ) :: zdenit2d, zironice, zbureff 
    7675      REAL(wp), POINTER, DIMENSION(:,:  ) :: zwsbio3, zwsbio4, zwscal 
    77       REAL(wp), POINTER, DIMENSION(:,:,:) :: znitrpot, zirondep, zsoufer 
     76      REAL(wp), POINTER, DIMENSION(:,:,:) :: zirondep, zsoufer 
    7877      !!--------------------------------------------------------------------- 
    7978      ! 
    8079      IF( nn_timing == 1 )  CALL timing_start('p4z_sed') 
    8180      ! 
    82       IF( kt == nittrc000 .AND. jnt == 1 )  THEN 
    83          r1_rday  = 1. / rday 
    84          IF( ln_check_mass .AND. lwp)  & 
    85            &  CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
    86       ENDIF 
     81      IF( kt == nittrc000 .AND. knt == 1 )   r1_rday  = 1. / rday 
    8782      ! 
    8883      ! Allocate temporary workspace 
    89       CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zwork4, zbureff ) 
     84      CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 
    9085      CALL wrk_alloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
    91       CALL wrk_alloc( jpi, jpj, jpk, znitrpot, zsoufer ) 
     86      CALL wrk_alloc( jpi, jpj, jpk, zsoufer ) 
    9287 
    9388      zdenit2d(:,:) = 0.e0 
     
    9691      zwork2  (:,:) = 0.e0 
    9792      zwork3  (:,:) = 0.e0 
    98       zwork4  (:,:) = 0.e0 
    9993 
    10094      ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. 
     
    108102               zdep    = rfact2 / fse3t(ji,jj,1) 
    109103               zwflux  = fmmflx(ji,jj) / 1000._wp 
    110                zfminus = MIN( 0._wp, -zwflux ) * trn(ji,jj,1,jpfer) * zdep 
     104               zfminus = MIN( 0._wp, -zwflux ) * trb(ji,jj,1,jpfer) * zdep 
    111105               zfplus  = MAX( 0._wp, -zwflux ) * icefeinput * zdep 
    112106               zironice(ji,jj) =  zfplus + zfminus 
     
    114108         END DO 
    115109         ! 
    116          trn(:,:,1,jpfer) = trn(:,:,1,jpfer) + zironice(:,:)  
     110         tra(:,:,1,jpfer) = tra(:,:,1,jpfer) + zironice(:,:)  
    117111         !  
    118          IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "Ironice" ) )   & 
     112         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironice" ) )   & 
    119113            &   CALL iom_put( "Ironice", zironice(:,:) * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) ) ! iron flux from ice 
    120114         ! 
     
    144138         END DO 
    145139         !                                              ! Iron solubilization of particles in the water column 
    146          trn(:,:,1,jppo4) = trn(:,:,1,jppo4) + zpdep   (:,:) 
    147          trn(:,:,1,jpsil) = trn(:,:,1,jpsil) + zsidep  (:,:) 
    148          trn(:,:,:,jpfer) = trn(:,:,:,jpfer) + zirondep(:,:,:)  
     140         tra(:,:,1,jppo4) = tra(:,:,1,jppo4) + zpdep   (:,:) 
     141         tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep  (:,:) 
     142         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + zirondep(:,:,:)  
    149143         !  
    150144         IF( lk_iomput ) THEN 
    151             IF( jnt == nrdttrc ) THEN 
     145            IF( knt == nrdttrc ) THEN 
    152146                IF( iom_use( "Irondep" ) )   & 
    153147                &  CALL iom_put( "Irondep", zirondep(:,:,1) * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) ) ! surface downward dust depo of iron 
     
    167161      ! ---------------------------------------------------------- 
    168162      IF( ln_river ) THEN 
    169          trn(:,:,1,jppo4) = trn(:,:,1,jppo4) + rivdip(:,:) * rfact2 
    170          trn(:,:,1,jpno3) = trn(:,:,1,jpno3) + rivdin(:,:) * rfact2 
    171          trn(:,:,1,jpfer) = trn(:,:,1,jpfer) + rivdic(:,:) * 5.e-5 * rfact2 
    172          trn(:,:,1,jpsil) = trn(:,:,1,jpsil) + rivdsi(:,:) * rfact2 
    173          trn(:,:,1,jpdic) = trn(:,:,1,jpdic) + rivdic(:,:) * rfact2 
    174          trn(:,:,1,jptal) = trn(:,:,1,jptal) + ( rivalk(:,:) - rno3 * rivdin(:,:) ) * rfact2 
     163         DO jj = 1, jpj 
     164            DO ji = 1, jpi 
     165               DO jk = 1, nk_rnf(ji,jj) 
     166                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) +  rivdip(ji,jj) * rfact2 
     167                  tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) +  rivdin(ji,jj) * rfact2 
     168                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) +  rivdic(ji,jj) * 5.e-5 * rfact2 
     169                  tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) +  rivdsi(ji,jj) * rfact2 
     170                  tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) +  rivdic(ji,jj) * rfact2 
     171                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) +  ( rivalk(ji,jj) - rno3 * rivdin(ji,jj) ) * rfact2 
     172               ENDDO 
     173            ENDDO 
     174         ENDDO 
    175175      ENDIF 
    176176       
     
    178178      ! ---------------------------------------------------------- 
    179179      IF( ln_ndepo ) THEN 
    180          trn(:,:,1,jpno3) = trn(:,:,1,jpno3) + nitdep(:,:) * rfact2 
    181          trn(:,:,1,jptal) = trn(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2 
     180         tra(:,:,1,jpno3) = tra(:,:,1,jpno3) + nitdep(:,:) * rfact2 
     181         tra(:,:,1,jptal) = tra(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2 
    182182      ENDIF 
    183183 
     
    185185      ! ------------------------------------------------------ 
    186186      IF( ln_ironsed ) THEN 
    187          trn(:,:,:,jpfer) = trn(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 
     187         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 
    188188         ! 
    189          IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "Ironsed" ) )   & 
     189         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) )   & 
    190190            &   CALL iom_put( "Ironsed", ironsed(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! iron inputs from sediments 
    191191      ENDIF 
     
    194194      ! ------------------------------------------------------ 
    195195      IF( ln_hydrofe ) THEN 
    196          trn(:,:,:,jpfer) = trn(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 
     196         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 
    197197         ! 
    198          IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "HYDR" ) )   & 
     198         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "HYDR" ) )   & 
    199199            &   CALL iom_put( "HYDR", hydrofe(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! hydrothermal iron input 
    200200      ENDIF 
     
    222222              ikt = mbkt(ji,jj) 
    223223# if defined key_kriest 
    224               zflx =    trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)    * 1E3 * 1E6 / 1E4 
     224              zflx =    trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)    * 1E3 * 1E6 / 1E4 
    225225# else 
    226               zflx = (  trn(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
    227                 &     + trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) )  * 1E3 * 1E6 / 1E4 
     226              zflx = (  trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
     227                &     + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) )  * 1E3 * 1E6 / 1E4 
    228228#endif 
    229229              zflx  = LOG10( MAX( 1E-3, zflx ) ) 
    230               zo2   = LOG10( MAX( 10. , trn(ji,jj,ikt,jpoxy) * 1E6 ) ) 
    231               zno3  = LOG10( MAX( 1.  , trn(ji,jj,ikt,jpno3) * 1E6 * rno3 ) ) 
     230              zo2   = LOG10( MAX( 10. , trb(ji,jj,ikt,jpoxy) * 1E6 ) ) 
     231              zno3  = LOG10( MAX( 1.  , trb(ji,jj,ikt,jpno3) * 1E6 * rno3 ) ) 
    232232              zdep  = LOG10( fsdepw(ji,jj,ikt+1) ) 
    233233              zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3    & 
     
    235235              zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 
    236236              ! 
    237               zflx = (  trn(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
    238                 &     + trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 
     237              zflx = (  trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
     238                &     + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 
    239239              zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 
    240240           ENDIF 
     
    251251               ikt = mbkt(ji,jj)  
    252252# if defined key_kriest 
    253                zwork1(ji,jj) = trn(ji,jj,ikt,jpgsi) * zwscal (ji,jj) 
    254                zwork2(ji,jj) = trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 
     253               zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwscal (ji,jj) 
     254               zwork2(ji,jj) = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 
    255255# else 
    256                zwork1(ji,jj) = trn(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 
    257                zwork2(ji,jj) = trn(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)  
     256               zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 
     257               zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)  
    258258# endif 
    259259               ! For calcite, burial efficiency is made a function of saturation 
    260260               zfactcal      = MIN( excess(ji,jj,ikt), 0.2 ) 
    261261               zfactcal      = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 
    262                zwork3(ji,jj) = trn(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 
     262               zwork3(ji,jj) = trb(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 
    263263            ENDIF 
    264264         END DO 
     
    279279         DO ji = 1, jpi 
    280280            ikt  = mbkt(ji,jj) 
    281             zdep = xstep / fse3t(ji,jj,ikt) 
     281            zdep = xstep / fse3t(ji,jj,ikt)  
    282282            zws4 = zwsbio4(ji,jj) * zdep 
    283283            zwsc = zwscal (ji,jj) * zdep 
    284284# if defined key_kriest 
    285             zsiloss = trn(ji,jj,ikt,jpgsi) * zws4 
     285            zsiloss = trb(ji,jj,ikt,jpgsi) * zws4 
    286286# else 
    287             zsiloss = trn(ji,jj,ikt,jpgsi) * zwsc 
     287            zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 
    288288# endif 
    289             zcaloss = trn(ji,jj,ikt,jpcal) * zwsc 
     289            zcaloss = trb(ji,jj,ikt,jpcal) * zwsc 
    290290            ! 
    291             trn(ji,jj,ikt,jpgsi) = trn(ji,jj,ikt,jpgsi) - zsiloss 
    292             trn(ji,jj,ikt,jpcal) = trn(ji,jj,ikt,jpcal) - zcaloss 
     291            tra(ji,jj,ikt,jpgsi) = tra(ji,jj,ikt,jpgsi) - zsiloss 
     292            tra(ji,jj,ikt,jpcal) = tra(ji,jj,ikt,jpcal) - zcaloss 
    293293#if ! defined key_sed 
    294             trn(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + zsiloss * zrivsil  
     294            tra(ji,jj,ikt,jpsil) = tra(ji,jj,ikt,jpsil) + zsiloss * zrivsil  
    295295            zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 
    296296            zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 
    297297            zrivalk  =  1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / ( zsumsedcal + rtrn ) 
    298             trn(ji,jj,ikt,jptal) =  trn(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 
    299             trn(ji,jj,ikt,jpdic) =  trn(ji,jj,ikt,jpdic) + zcaloss * zrivalk 
     298            tra(ji,jj,ikt,jptal) =  tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 
     299            tra(ji,jj,ikt,jpdic) =  tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk 
    300300#endif 
    301301         END DO 
     
    304304      DO jj = 1, jpj 
    305305         DO ji = 1, jpi 
    306             ikt     = mbkt(ji,jj) 
    307             zdep    = xstep / fse3t(ji,jj,ikt) 
     306            ikt  = mbkt(ji,jj) 
     307            zdep = xstep / fse3t(ji,jj,ikt)  
    308308            zws4 = zwsbio4(ji,jj) * zdep 
    309309            zws3 = zwsbio3(ji,jj) * zdep 
    310310            zrivno3 = 1. - zbureff(ji,jj) 
    311311# if ! defined key_kriest 
    312             trn(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) - trn(ji,jj,ikt,jpgoc) * zws4 
    313             trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zws3 
    314             trn(ji,jj,ikt,jpbfe) = trn(ji,jj,ikt,jpbfe) - trn(ji,jj,ikt,jpbfe) * zws4 
    315             trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zws3 
    316             zwstpoc              =  trn(ji,jj,ikt,jpgoc) * zws4 + trn(ji,jj,ikt,jppoc) * zws3  
     312            tra(ji,jj,ikt,jpgoc) = tra(ji,jj,ikt,jpgoc) - trb(ji,jj,ikt,jpgoc) * zws4  
     313            tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 
     314            tra(ji,jj,ikt,jpbfe) = tra(ji,jj,ikt,jpbfe) - trb(ji,jj,ikt,jpbfe) * zws4 
     315            tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 
     316            zwstpoc              = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 
    317317# else 
    318             trn(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) - trn(ji,jj,ikt,jpnum) * zws4 
    319             trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zws3 
    320             trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zws3 
    321             zwstpoc = trn(ji,jj,ikt,jppoc) * zws3  
     318            tra(ji,jj,ikt,jpnum) = tra(ji,jj,ikt,jpnum) - trb(ji,jj,ikt,jpnum) * zws4  
     319            tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 
     320            tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 
     321            zwstpoc = trb(ji,jj,ikt,jppoc) * zws3  
    322322# endif 
    323323 
     
    325325            ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 
    326326            ! in the sediments and just above the sediments. Not very clever, but simpliest option. 
    327             zpdenit  = MIN( 0.5 * ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
     327            zpdenit  = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
    328328            z1pdenit = zwstpoc * zrivno3 - zpdenit 
    329             zolimit = MIN( ( trn(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 
    330             zdenitt = MIN(  0.5 * ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 
    331             trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 
    332             trn(ji,jj,ikt,jppo4) = trn(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 
    333             trn(ji,jj,ikt,jpnh4) = trn(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 
    334             trn(ji,jj,ikt,jpno3) = trn(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 
    335             trn(ji,jj,ikt,jpoxy) = trn(ji,jj,ikt,jpoxy) - zolimit * o2ut 
    336             trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 
    337             trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 
    338             zwork4(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt) 
     329            zolimit = MIN( ( trb(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 
     330            zdenitt = MIN(  0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 
     331            tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 
     332            tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 
     333            tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 
     334            tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 
     335            tra(ji,jj,ikt,jpoxy) = tra(ji,jj,ikt,jpoxy) - zolimit * o2ut 
     336            tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 
     337            tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 
     338            sdenit(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt) 
    339339#endif 
    340340         END DO 
     
    356356#endif 
    357357               ztrfer = biron(ji,jj,jk)       / ( concfediaz + biron(ji,jj,jk)       ) 
    358                ztrpo4 = trn  (ji,jj,jk,jppo4) / ( concnnh4   + trn  (ji,jj,jk,jppo4) )  
    359                zlight =  ( 1.- EXP( -etot(ji,jj,jk) / diazolight ) )  
    360                znitrpot(ji,jj,jk) =  MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday )   & 
     358               ztrpo4 = trb  (ji,jj,jk,jppo4) / ( concnnh4   + trb  (ji,jj,jk,jppo4) )  
     359               zlight =  ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) )  
     360               nitrpot(ji,jj,jk) =  MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday )   & 
    361361                 &         *  zfact * MIN( ztrfer, ztrpo4 ) * zlight 
    362362               zsoufer(ji,jj,jk) = zlight * 2E-11 / (2E-11 + biron(ji,jj,jk)) 
     
    370370         DO jj = 1, jpj 
    371371            DO ji = 1, jpi 
    372                zfact = znitrpot(ji,jj,jk) * nitrfix 
    373                trn(ji,jj,jk,jpnh4) = trn(ji,jj,jk,jpnh4) +             zfact 
    374                trn(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) + rno3      * zfact 
    375                trn(ji,jj,jk,jpoxy) = trn(ji,jj,jk,jpoxy) + o2nit     * zfact  
    376                trn(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trn(ji,jj,jk,jppo4) ) & 
    377                &                     * 0.002 * trn(ji,jj,jk,jpdoc) * rfact2 / rday 
    378                trn(ji,jj,jk,jpfer) = trn(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 
     372               zfact = nitrpot(ji,jj,jk) * nitrfix 
     373               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) +             zfact 
     374               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3      * zfact 
     375               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2nit     * zfact  
     376               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) & 
     377               &                     * 0.002 * trb(ji,jj,jk,jpdoc) * xstep 
     378               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * xstep 
    379379           END DO 
    380380         END DO  
    381381      END DO 
    382382 
    383       ! Global budget of N SMS : denitrification in the water column and in the sediment 
    384       !                          nitrogen fixation by the diazotrophs 
    385       ! -------------------------------------------------------------------------------- 
    386       zrdenittot   = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 
    387       zsdenittot   = glob_sum ( zwork4(:,:)   * e1e2t(:,:) ) 
    388       znitrpottot  = glob_sum ( znitrpot(:,:,:) * nitrfix              * cvol(:,:,:) ) 
    389       zfact = 1.e+3 * rfact2r * rno3 * 14. / 1.e12 * ryyss   ! conversion molC/l/kt ----> TgN/m3/year 
    390       ! 
    391       IF( ln_check_mass .AND. ( kt == nitend .AND. jnt == nrdttrc ) .AND. ( lwp )  )  & 
    392          &  WRITE(numnit,9100) ndastp, znitrpottot * zfact  , & 
    393          &                             zrdenittot  * zfact  , & 
    394          &                             zsdenittot  * zfact 
    395       ! 
    396383      IF( lk_iomput ) THEN 
    397          IF( jnt == nrdttrc ) THEN 
     384         IF( knt == nrdttrc ) THEN 
    398385            zfact = 1.e+3 * rfact2r * rno3  !  conversion from molC/l/kt  to molN/m3/s 
    399             IF( iom_use("Nfix"   ) ) CALL iom_put( "Nfix"  , znitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) )  ! nitrogen fixation  
    400             IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", zwork4(:,:) * zfact * tmask(:,:,1) )  ! Nitrate reduction in the sediments 
    401             IF( iom_use("tnfix"  ) ) CALL iom_put( "tnfix"  , znitrpottot * zfact  )               ! Global  nitrogen fixation 
    402             IF( iom_use("tdenit" ) ) CALL iom_put( "tdenit" , zrdenittot  * zfact  )               ! Total denitrification 
     386            IF( iom_use("Nfix"   ) ) CALL iom_put( "Nfix", nitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) )  ! nitrogen fixation  
    403387            IF( iom_use("INTNFIX") ) THEN   ! nitrogen fixation rate in ocean ( vertically integrated ) 
    404388               zwork1(:,:) = 0. 
    405389               DO jk = 1, jpkm1 
    406                  zwork1(:,:) = zwork1(:,:) + znitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk) 
     390                 zwork1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk) 
    407391               ENDDO 
    408392               CALL iom_put( "INTNFIX" , zwork1 )  
     
    411395      ELSE 
    412396         IF( ln_diatrc )  & 
    413             &  trc2d(:,:,jp_pcs0_2d + 12) = znitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) 
     397            &  trc2d(:,:,jp_pcs0_2d + 12) = nitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) 
    414398      ENDIF 
    415399      ! 
     
    417401         WRITE(charout, fmt="('sed ')") 
    418402         CALL prt_ctl_trc_info(charout) 
    419          CALL prt_ctl_trc(tab4d=trn, mask=tmask, clinfo=ctrcnm) 
    420       ENDIF 
    421       ! 
    422       CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zwork4, zbureff ) 
     403         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 
     404      ENDIF 
     405      ! 
     406      CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 
    423407      CALL wrk_dealloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
    424       CALL wrk_dealloc( jpi, jpj, jpk, znitrpot, zsoufer ) 
     408      CALL wrk_dealloc( jpi, jpj, jpk, zsoufer ) 
    425409      ! 
    426410      IF( nn_timing == 1 )  CALL timing_stop('p4z_sed') 
     
    429413      ! 
    430414   END SUBROUTINE p4z_sed 
     415 
     416 
     417   INTEGER FUNCTION p4z_sed_alloc() 
     418      !!---------------------------------------------------------------------- 
     419      !!                     ***  ROUTINE p4z_sed_alloc  *** 
     420      !!---------------------------------------------------------------------- 
     421      ALLOCATE( nitrpot(jpi,jpj,jpk), sdenit(jpi,jpj), STAT=p4z_sed_alloc ) 
     422      ! 
     423      IF( p4z_sed_alloc /= 0 )   CALL ctl_warn('p4z_sed_alloc: failed to allocate arrays') 
     424      ! 
     425   END FUNCTION p4z_sed_alloc 
     426 
    431427 
    432428#else 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90

    r4996 r5385  
    7979   !!---------------------------------------------------------------------- 
    8080 
    81    SUBROUTINE p4z_sink ( kt, jnt ) 
     81   SUBROUTINE p4z_sink ( kt, knt ) 
    8282      !!--------------------------------------------------------------------- 
    8383      !!                     ***  ROUTINE p4z_sink  *** 
     
    8888      !! ** Method  : - ??? 
    8989      !!--------------------------------------------------------------------- 
    90       INTEGER, INTENT(in) :: kt, jnt 
     90      INTEGER, INTENT(in) :: kt, knt 
    9191      INTEGER  ::   ji, jj, jk, jit 
    9292      INTEGER  ::   iiter1, iiter2 
     
    199199               zfact = zstep * xdiss(ji,jj,jk) 
    200200               !  Part I : Coagulation dependent on turbulence 
    201                zagg1 = 25.9  * zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) 
    202                zagg2 = 4452. * zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) 
     201               zagg1 = 25.9  * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
     202               zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
    203203 
    204204               ! Part II : Differential settling 
    205205 
    206206               !  Aggregation of small into large particles 
    207                zagg3 =  47.1 * zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) 
    208                zagg4 =  3.3  * zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) 
     207               zagg3 =  47.1 * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
     208               zagg4 =  3.3  * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
    209209 
    210210               zagg   = zagg1 + zagg2 + zagg3 + zagg4 
    211                zaggfe = zagg * trn(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn ) 
     211               zaggfe = zagg * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    212212 
    213213               ! Aggregation of DOC to POC :  
     
    215215               ! 2nd term is shear aggregation of DOC-POC 
    216216               ! 3rd term is differential settling of DOC-POC 
    217                zaggdoc  = ( ( 0.369 * 0.3 * trn(ji,jj,jk,jpdoc) + 102.4 * trn(ji,jj,jk,jppoc) ) * zfact       & 
    218                &            + 2.4 * zstep * trn(ji,jj,jk,jppoc) ) * 0.3 * trn(ji,jj,jk,jpdoc) 
     217               zaggdoc  = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       & 
     218               &            + 2.4 * zstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc) 
    219219               ! transfer of DOC to GOC :  
    220220               ! 1st term is shear aggregation 
    221221               ! 2nd term is differential settling  
    222                zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * trn(ji,jj,jk,jpgoc) * 0.3 * trn(ji,jj,jk,jpdoc) 
     222               zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 
    223223               ! tranfer of DOC to POC due to brownian motion 
    224                zaggdoc3 =  ( 5095. * trn(ji,jj,jk,jppoc) + 114. * 0.3 * trn(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trn(ji,jj,jk,jpdoc) 
     224               zaggdoc3 =  ( 5095. * trb(ji,jj,jk,jppoc) + 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trb(ji,jj,jk,jpdoc) 
    225225 
    226226               !  Update the trends 
     
    237237 
    238238     ! Total carbon export per year 
    239      IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. jnt == nrdttrc )  )  & 
     239     IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
    240240        &   t_oce_co2_exp = glob_sum( ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * e1e2t(:,:) * tmask(:,:,1) ) 
    241241     ! 
    242242     IF( lk_iomput ) THEN 
    243        IF( jnt == nrdttrc ) THEN 
     243       IF( knt == nrdttrc ) THEN 
    244244          CALL wrk_alloc( jpi, jpj,      zw2d ) 
    245245          CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     
    328328   !!---------------------------------------------------------------------- 
    329329 
    330    SUBROUTINE p4z_sink ( kt, jnt ) 
     330   SUBROUTINE p4z_sink ( kt, knt ) 
    331331      !!--------------------------------------------------------------------- 
    332332      !!                ***  ROUTINE p4z_sink  *** 
     
    338338      !!--------------------------------------------------------------------- 
    339339      ! 
    340       INTEGER, INTENT(in) :: kt, jnt 
     340      INTEGER, INTENT(in) :: kt, knt 
    341341      ! 
    342342      INTEGER  :: ji, jj, jk, jit, niter1, niter2 
     
    373373            DO ji = 1, jpi 
    374374               IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 
    375                   znum = trn(ji,jj,jk,jppoc) / ( trn(ji,jj,jk,jpnum) + rtrn ) / xkr_massp 
     375                  znum = trb(ji,jj,jk,jppoc) / ( trb(ji,jj,jk,jpnum) + rtrn ) / xkr_massp 
    376376                  ! -------------- To avoid sinking speed over 50 m/day ------- 
    377377                  znum  = MIN( xnumm(jk), znum ) 
     
    435435               IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 
    436436 
    437                   znum = trn(ji,jj,jk,jppoc)/(trn(ji,jj,jk,jpnum)+rtrn) / xkr_massp 
     437                  znum = trb(ji,jj,jk,jppoc)/(trb(ji,jj,jk,jpnum)+rtrn) / xkr_massp 
    438438                  !-------------- To avoid sinking speed over 50 m/day ------- 
    439439                  znum  = min(xnumm(jk),znum) 
     
    453453                  !    ---------------------------------------------- 
    454454 
    455                   zagg1 =  0.163 * trn(ji,jj,jk,jpnum)**2               & 
     455                  zagg1 =  0.163 * trb(ji,jj,jk,jpnum)**2               & 
    456456                     &            * 2.*( (zfm-1.)*(zfm*xkr_mass_max**3-xkr_mass_min**3)    & 
    457457                     &            * (zeps-1)/zdiv1 + 3.*(zfm*xkr_mass_max-xkr_mass_min)    & 
    458458                     &            * (zfm*xkr_mass_max**2-xkr_mass_min**2)                  & 
    459459                     &            * (zeps-1.)**2/(zdiv2*zdiv3))  
    460                   zagg2 =  2*0.163*trn(ji,jj,jk,jpnum)**2*zfm*                       & 
     460                  zagg2 =  2*0.163*trb(ji,jj,jk,jpnum)**2*zfm*                       & 
    461461                     &                   ((xkr_mass_max**3+3.*(xkr_mass_max**2          & 
    462462                     &                    *xkr_mass_min*(zeps-1.)/zdiv2                 & 
     
    466466                     &                    (zeps-2.)+(zeps-1.)/zdiv3)+(zeps-1.)/zdiv1))     
    467467 
    468                   zagg3 =  0.163*trn(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3   
     468                  zagg3 =  0.163*trb(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3   
    469469                   
    470470                 !    Aggregation of small into large particles 
     
    472472                 !    ---------------------------------------------- 
    473473 
    474                   zagg4 =  2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2*                       & 
     474                  zagg4 =  2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2*                       & 
    475475                     &                 xkr_wsbio_min*(zeps-1.)**2                         & 
    476476                     &                 *(xkr_mass_min**2*((1.-zsm*zfm)/(zdiv3*zdiv4)      & 
     
    479479                     &                 *xkr_eta)/(zdiv*zdiv3*zdiv5) )    
    480480 
    481                   zagg5 =   2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2                         & 
     481                  zagg5 =   2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2                         & 
    482482                     &                 *(zeps-1.)*zfm*xkr_wsbio_min                        & 
    483483                     &                 *(zsm*(xkr_mass_min**2-zfm*xkr_mass_max**2)         & 
     
    489489                  !     ------------------------------------ 
    490490 
    491                   zfract = 2.*3.141*0.125*trn(ji,jj,jk,jpmes)*12./0.12/0.06**3*trn(ji,jj,jk,jpnum)  & 
     491                  zfract = 2.*3.141*0.125*trb(ji,jj,jk,jpmes)*12./0.12/0.06**3*trb(ji,jj,jk,jpnum)  & 
    492492                    &      * (0.01/xkr_mass_min)**(1.-zeps)*0.1**2  & 
    493493                    &      * 10000.*xstep 
     
    496496                  !     -------------------------------------- 
    497497 
    498                   zaggdoc = 0.83 * trn(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc)   & 
    499                      &        + 0.005 * 231. * trn(ji,jj,jk,jpdoc) * xstep * trn(ji,jj,jk,jpdoc) 
    500                   zaggdoc1 = 271. * trn(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc)  & 
    501                      &  + 0.02 * 16706. * trn(ji,jj,jk,jppoc) * xstep * trn(ji,jj,jk,jpdoc) 
     498                  zaggdoc = 0.83 * trb(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc)   & 
     499                     &        + 0.005 * 231. * trb(ji,jj,jk,jpdoc) * xstep * trb(ji,jj,jk,jpdoc) 
     500                  zaggdoc1 = 271. * trb(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc)  & 
     501                     &  + 0.02 * 16706. * trb(ji,jj,jk,jppoc) * xstep * trb(ji,jj,jk,jpdoc) 
    502502 
    503503# if defined key_degrad 
     
    514514                  zagg = 0.5 * xkr_stick * ( zaggsh + zaggsi ) 
    515515                  ! 
    516                   znumdoc = trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 
     516                  znumdoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    517517                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zaggdoc + zaggdoc1 
    518518                  tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zfract + zaggdoc / xkr_massp - zagg 
     
    528528     ! 
    529529     IF( lk_iomput ) THEN 
    530         IF( jnt == nrdttrc ) THEN 
     530        IF( knt == nrdttrc ) THEN 
    531531          CALL wrk_alloc( jpi, jpj,      zw2d ) 
    532532          CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     
    800800      ztraz(:,:,:) = 0.e0 
    801801      zakz (:,:,:) = 0.e0 
    802       ztrb (:,:,:) = trn(:,:,:,jp_tra) 
     802      ztrb (:,:,:) = trb(:,:,:,jp_tra) 
    803803 
    804804      DO jk = 1, jpkm1 
     
    815815         !  first guess of the slopes interior values 
    816816         DO jk = 2, jpkm1 
    817             ztraz(:,:,jk) = ( trn(:,:,jk-1,jp_tra) - trn(:,:,jk,jp_tra) ) * tmask(:,:,jk) 
     817            ztraz(:,:,jk) = ( trb(:,:,jk-1,jp_tra) - trb(:,:,jk,jp_tra) ) * tmask(:,:,jk) 
    818818         END DO 
    819819         ztraz(:,:,1  ) = 0.0 
     
    846846                  zigma = zwsink2(ji,jj,jk+1) * zstep / fse3w(ji,jj,jk+1) 
    847847                  zew   = zwsink2(ji,jj,jk+1) 
    848                   psinkflx(ji,jj,jk+1) = -zew * ( trn(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep 
     848                  psinkflx(ji,jj,jk+1) = -zew * ( trb(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep 
    849849               END DO 
    850850            END DO 
     
    859859               DO ji = 1, jpi 
    860860                  zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / fse3t(ji,jj,jk) 
    861                   trn(ji,jj,jk,jp_tra) = trn(ji,jj,jk,jp_tra) + zflx 
     861                  trb(ji,jj,jk,jp_tra) = trb(ji,jj,jk,jp_tra) + zflx 
    862862               END DO 
    863863            END DO 
     
    875875      END DO 
    876876 
    877       trn(:,:,:,jp_tra) = ztrb(:,:,:) 
     877      trb(:,:,:,jp_tra) = ztrb(:,:,:) 
    878878      psinkflx(:,:,:)   = 2. * psinkflx(:,:,:) 
    879879      ! 
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90

    r4996 r5385  
    2424   USE p4zsed          !  Sedimentation 
    2525   USE p4zint          !  time interpolation 
     26   USE p4zrem          !  remineralisation 
    2627   USE iom             !  I/O manager 
    2728   USE trd_oce         !  Ocean trends variables 
     
    3637   PUBLIC   p4z_sms        ! called in p4zsms.F90 
    3738 
    38    REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget 
    39    INTEGER ::  numco2, numnut  !: logical unit for co2 budget 
    40  
     39   REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 
     40   REAL(wp) :: xfact1, xfact2 
     41   INTEGER ::  numco2, numnut, numnit  !: logical unit for co2 budget 
     42 
     43   !!* Array used to indicate negative tracer values 
     44   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xnegtr     !: ??? 
     45 
     46 
     47   !! * Substitutions 
     48#  include "top_substitute.h90" 
    4149   !!---------------------------------------------------------------------- 
    4250   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    6169      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
    6270      !! 
    63       INTEGER ::   jnt, jn, jl 
     71      INTEGER ::   ji, jj, jk, jnt, jn, jl 
     72      REAL(wp) ::  ztra 
     73#if defined key_kriest 
     74      REAL(wp) ::  zcoef1, zcoef2 
     75#endif 
    6476      CHARACTER (len=25) :: charout 
    65       REAL(wp), POINTER, DIMENSION(:,:,:,:)  :: ztrdpis 
    6677      !!--------------------------------------------------------------------- 
    6778      ! 
    6879      IF( nn_timing == 1 )  CALL timing_start('p4z_sms') 
    6980      ! 
    70       IF( l_trdtrc )  THEN 
    71          CALL wrk_alloc( jpi, jpj, jpk, jp_pisces, ztrdpis )  
    72          DO jn = 1, jp_pisces 
    73             jl = jn + jp_pcs0 - 1 
    74             ztrdpis(:,:,:,jn) = trn(:,:,:,jl) 
    75          ENDDO 
    76       ENDIF 
    77       ! 
    7881      IF( kt == nittrc000 ) THEN 
     82        ! 
     83        ALLOCATE( xnegtr(jpi,jpj,jpk) ) 
    7984        ! 
    8085        CALL p4z_che                              ! initialize the chemical constants 
     
    8893      IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 )   CALL p4z_dmp( kt )      ! Relaxation of some tracers 
    8994      ! 
     95      !                                                                    !   set time step size (Euler/Leapfrog) 
     96      IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN   ;    rfact = rdttrc(1)     !  at nittrc000 
     97      ELSEIF( kt <= nittrc000 + nn_dttrc )                          THEN   ;    rfact = 2. * rdttrc(1)   ! at nittrc000 or nittrc000+nn_dttrc (Leapfrog) 
     98      ENDIF 
     99      ! 
     100      IF( ( ln_top_euler .AND. kt == nittrc000 )  .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc ) ) THEN 
     101         rfactr  = 1. / rfact 
     102         rfact2  = rfact / FLOAT( nrdttrc ) 
     103         rfact2r = 1. / rfact2 
     104         xstep = rfact2 / rday         ! Time step duration for biology 
     105         IF(lwp) WRITE(numout,*)  
     106         IF(lwp) WRITE(numout,*) '    Passive Tracer  time step    rfact  = ', rfact, ' rdt = ', rdttra(1) 
     107         IF(lwp) write(numout,*) '    PISCES  Biology time step    rfact2 = ', rfact2 
     108         IF(lwp) WRITE(numout,*) 
     109      ENDIF 
     110 
     111      IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN 
     112         DO jn = jp_pcs0, jp_pcs1              !   SMS on tracer without Asselin time-filter 
     113            trb(:,:,:,jn) = trn(:,:,:,jn) 
     114         END DO 
     115      ENDIF 
     116      ! 
    90117      IF( ndayflxtr /= nday_year ) THEN      ! New days 
    91118         ! 
     
    105132      DO jnt = 1, nrdttrc          ! Potential time splitting if requested 
    106133         ! 
    107          CALL p4z_bio (kt, jnt)    ! Biology 
    108          CALL p4z_sed (kt, jnt)    ! Sedimentation 
    109          ! 
     134         CALL p4z_bio( kt, jnt )   ! Biology 
     135         CALL p4z_sed( kt, jnt )   ! Sedimentation 
     136         CALL p4z_lys( kt, jnt )   ! Compute CaCO3 saturation 
     137         CALL p4z_flx( kt, jnt )   ! Compute surface fluxes 
     138         ! 
     139         xnegtr(:,:,:) = 1.e0 
    110140         DO jn = jp_pcs0, jp_pcs1 
    111             trb(:,:,:,jn) = trn(:,:,:,jn) 
    112          ENDDO 
    113          ! 
     141            DO jk = 1, jpk 
     142               DO jj = 1, jpj 
     143                  DO ji = 1, jpi 
     144                     IF( ( trb(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 
     145                        ztra             = ABS( trb(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 
     146                        xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk),  ztra ) 
     147                     ENDIF 
     148                 END DO 
     149               END DO 
     150            END DO 
     151         END DO 
     152         !                                ! where at least 1 tracer concentration becomes negative 
     153         !                                !  
     154         DO jn = jp_pcs0, jp_pcs1 
     155           trb(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 
     156         END DO 
     157        ! 
     158         DO jn = jp_pcs0, jp_pcs1 
     159            tra(:,:,:,jn) = 0._wp 
     160         END DO 
     161         ! 
     162         IF( ln_top_euler ) THEN 
     163            DO jn = jp_pcs0, jp_pcs1 
     164               trn(:,:,:,jn) = trb(:,:,:,jn) 
     165            END DO 
     166         ENDIF 
    114167      END DO 
    115168 
    116       IF( l_trdtrc )  THEN 
    117          DO jn = 1, jp_pisces 
    118             jl = jn + jp_pcs0 - 1 
    119             ztrdpis(:,:,:,jn) = ( ztrdpis(:,:,:,jn) - trn(:,:,:,jl) ) * rfact2r 
    120          ENDDO 
    121       ENDIF 
    122       CALL p4z_lys( kt )             ! Compute CaCO3 saturation 
    123       CALL p4z_flx( kt )             ! Compute surface fluxes 
    124  
    125       DO jn = jp_pcs0, jp_pcs1 
    126         CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. ) 
    127         CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 
    128         CALL lbc_lnk( tra(:,:,:,jn), 'T', 1. ) 
     169#if defined key_kriest 
     170      !  
     171      zcoef1 = 1.e0 / xkr_massp  
     172      zcoef2 = 1.e0 / xkr_massp / 1.1 
     173      DO jk = 1,jpkm1 
     174         trb(:,:,jk,jpnum) = MAX(  trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef1 / xnumm(jk)  ) 
     175         trb(:,:,jk,jpnum) = MIN(  trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef2              ) 
    129176      END DO 
    130177      ! 
     178#endif 
     179      ! 
     180      ! 
     181      IF( l_trdtrc ) THEN 
     182         DO jn = jp_pcs0, jp_pcs1 
     183           CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt )   ! save trends 
     184         END DO 
     185      END IF 
     186      ! 
    131187      IF( lk_sed ) THEN  
    132188         ! 
     
    134190         ! 
    135191         DO jn = jp_pcs0, jp_pcs1 
    136            CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. ) 
     192           CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 
    137193         END DO 
    138194         ! 
     
    141197      IF( lrst_trc )  CALL p4z_rst( kt, 'WRITE' )  !* Write PISCES informations in restart file  
    142198      ! 
    143       IF( l_trdtrc ) THEN 
    144          DO jn = 1, jp_pisces 
    145             jl = jn + jp_pcs0 - 1 
    146              ztrdpis(:,:,:,jn) = ztrdpis(:,:,:,jn) + tra(:,:,:,jl) 
    147              CALL trd_trc( ztrdpis(:,:,:,jn), jn, jptra_sms, kt )   ! save trends 
    148           END DO 
    149           CALL wrk_dealloc( jpi, jpj, jpk, jp_pisces, ztrdpis )  
    150       END IF 
    151       ! 
     199 
    152200      IF( lk_iomput .OR. ln_check_mass )  CALL p4z_chk_mass( kt ) ! Mass conservation checking 
    153201 
     
    280328               ztmas   = tmask(ji,jj,jk) 
    281329               ztmas1  = 1. - tmask(ji,jj,jk) 
    282                zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / (  1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) )  ) 
    283                zco3    = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 
    284                zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk ) 
     330               zcaralk = trb(ji,jj,jk,jptal) - borat(ji,jj,jk) / (  1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) )  ) 
     331               zco3    = ( zcaralk - trb(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 
     332               zbicarb = ( 2. * trb(ji,jj,jk,jpdic) - zcaralk ) 
    285333               hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 
    286334            END DO 
     
    361409      REAL(wp) ::  silmean = 91.51     ! mean value of silicate 
    362410      ! 
    363       REAL(wp) :: zarea, zalksum, zpo4sum, zno3sum, zsilsum 
     411      REAL(wp) :: zarea, zalksumn, zpo4sumn, zno3sumn, zsilsumn 
     412      REAL(wp) :: zalksumb, zpo4sumb, zno3sumb, zsilsumb 
    364413      !!--------------------------------------------------------------------- 
    365414 
     
    374423         zarea          = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6               
    375424 
    376          zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
    377          zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
    378          zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
    379          zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
     425         zalksumn = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
     426         zpo4sumn = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
     427         zno3sumn = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
     428         zsilsumn = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
    380429  
    381          IF(lwp) WRITE(numout,*) '       TALK mean : ', zalksum 
    382          trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksum 
    383  
    384          IF(lwp) WRITE(numout,*) '       PO4  mean : ', zpo4sum 
    385          trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sum 
    386  
    387          IF(lwp) WRITE(numout,*) '       NO3  mean : ', zno3sum 
    388          trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sum 
    389  
    390          IF(lwp) WRITE(numout,*) '       SiO3 mean : ', zsilsum 
    391          trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsum ) 
    392          ! 
    393       ENDIF 
    394  
     430         IF(lwp) WRITE(numout,*) '       TALKN mean : ', zalksumn 
     431         trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn 
     432 
     433         IF(lwp) WRITE(numout,*) '       PO4N  mean : ', zpo4sumn 
     434         trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn 
     435 
     436         IF(lwp) WRITE(numout,*) '       NO3N  mean : ', zno3sumn 
     437         trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn 
     438 
     439         IF(lwp) WRITE(numout,*) '       SiO3N mean : ', zsilsumn 
     440         trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn ) 
     441         ! 
     442         ! 
     443         IF( .NOT. ln_top_euler ) THEN 
     444            zalksumb = glob_sum( trb(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
     445            zpo4sumb = glob_sum( trb(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
     446            zno3sumb = glob_sum( trb(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
     447            zsilsumb = glob_sum( trb(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
     448  
     449            IF(lwp) WRITE(numout,*) ' ' 
     450            IF(lwp) WRITE(numout,*) '       TALKB mean : ', zalksumb 
     451            trb(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb 
     452 
     453            IF(lwp) WRITE(numout,*) '       PO4B  mean : ', zpo4sumb 
     454            trb(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb 
     455 
     456            IF(lwp) WRITE(numout,*) '       NO3B  mean : ', zno3sumb 
     457            trb(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb 
     458 
     459            IF(lwp) WRITE(numout,*) '       SiO3B mean : ', zsilsumb 
     460            trb(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb ) 
     461        ENDIF 
     462        ! 
     463      ENDIF 
     464        ! 
    395465   END SUBROUTINE p4z_dmp 
    396466 
     
    406476      INTEGER , INTENT( in ) ::   kt      ! ocean time-step index       
    407477      REAL(wp)               ::  zfact        
    408       !! 
     478      REAL(wp) ::  zrdenittot, zsdenittot, znitrpottot 
     479      CHARACTER(LEN=100)   ::   cltxt 
     480      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvol 
     481      INTEGER :: jk 
     482      !!---------------------------------------------------------------------- 
     483 
     484      ! 
    409485      !!--------------------------------------------------------------------- 
    410486 
     
    413489            CALL ctl_opn( numco2, 'carbon.budget'  , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
    414490            CALL ctl_opn( numnut, 'nutrient.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
     491            CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
     492            xfact1 = rfact2r * 12. / 1.e15 * ryyss    ! conversion molC/kt --> PgC/yr 
     493            xfact2 = 1.e+3 * rno3 * 14. / 1.e12 * ryyss   ! conversion molC/l/s ----> TgN/m3/yr 
     494            cltxt='time-step   Alkalinity        Nitrate        Phosphorus         Silicate           Iron'</