Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/GYRE_BFM/EXP00/namelist_top
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/GYRE_BFM/EXP00/namelist_top	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/GYRE_BFM/EXP00/namelist_top	(revision 4064)
@@ -7,10 +7,10 @@
 !!              6 - tracer newtonian damping              (namtrc_dmp)
 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-!'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-&namtrc     !   tracers definition
-!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+!-----------------------------------------------------------------------
+&namtrc_run     !   run information
+!-----------------------------------------------------------------------
    nn_dttrc      =  1        !  time step frequency for passive sn_tracers      
    nn_writetrc   =  0        !  time step frequency for sn_tracer outputs
-   ln_top_euler  = .true.    !  use Euler timestepping for TOP
+   ln_top_euler  = .true.    !  use Euler time-stepping for TOP
    ln_rsttr      = .false.   !  start from a restart file (T) or not (F)
    nn_rsttr      =   0       !  restart control = 0 initial time step is not compared to the restart file value
@@ -19,4 +19,8 @@
    cn_trcrst_in  = "restart_trc"   !  suffix of pass. sn_tracer restart name (input)
    cn_trcrst_out = "restart_trc"   !  suffix of pass. sn_tracer restart name (output)
+/
+!-----------------------------------------------------------------------
+&namtrc     !   tracers definition
+!-----------------------------------------------------------------------
    ln_trcdta     =  .false.        !  Initialisation from data input file (T) or not (F)
 !
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/GYRE_PISCES/EXP00/namelist_top
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/GYRE_PISCES/EXP00/namelist_top	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/GYRE_PISCES/EXP00/namelist_top	(revision 4064)
@@ -8,17 +8,20 @@
 !!                       7 - tracer output                         (namtrc_wri)
 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-!'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-&namtrc     !   tracers definition
-!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
-!
-   nn_dttrc      =  1        !  time step frequency for passive sn_tracers
+!-----------------------------------------------------------------------
+&namtrc_run     !   run information
+!-----------------------------------------------------------------------
+   nn_dttrc      =  1        !  time step frequency for passive sn_tracers      
    nn_writetrc   =  60       !  time step frequency for sn_tracer outputs
    ln_top_euler  = .false.   !  use Euler time-stepping for TOP
    ln_rsttr      = .false.   !  start from a restart file (T) or not (F)
-   nn_rsttr      =   1       !  restart control = 0 initial time step is not compared to the restart file value
+   nn_rsttr      =   0       !  restart control = 0 initial time step is not compared to the restart file value
                            !                  = 1 do not use the value in the restart file
                            !                  = 2 calendar parameters read in the restart file
-   cn_trcrst_in  = "restart_trc.nc"   !  suffix of pass. sn_tracer restart name (input)
+   cn_trcrst_in  = "restart_trc"   !  suffix of pass. sn_tracer restart name (input)
    cn_trcrst_out = "restart_trc"   !  suffix of pass. sn_tracer restart name (output)
+/
+!-----------------------------------------------------------------------
+&namtrc     !   tracers definition
+!-----------------------------------------------------------------------
    ln_trcdta     =   .false.    !  Initialisation from data input file (T) or not (F)
 !
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/iodef.xml
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/iodef.xml	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/iodef.xml	(revision 4064)
@@ -21,6 +21,7 @@
     -->
     
-    <file_definition type="multiple_file" sync_freq="1d" min_digits="4">
-    
+   <file_definition type="multiple_file" name="@expname@_@freq@_@startdate@_@enddate@" sync_freq="10d" min_digits="4">
+
+      <file_group id="1ts" output_freq="1ts"  output_level="10" enabled=".TRUE."/> <!-- 1 time step files -->
       <file_group id="1h" output_freq="1h"  output_level="10" enabled=".TRUE."/> <!-- 1h files -->
       <file_group id="2h" output_freq="2h"  output_level="10" enabled=".TRUE."/> <!-- 2h files -->
@@ -33,4 +34,68 @@
       <file_group id="3d" output_freq="3d"  output_level="10" enabled=".TRUE."/> <!-- 3d files -->    
       <file_group id="5d" output_freq="5d"  output_level="10" enabled=".TRUE.">  <!-- 5d files -->   
+
+	<file id="file1" name_suffix="_grid_T" description="ocean T grid variables" >
+	  <field field_ref="toce"         name="thetao"   long_name="sea_water_potential_temperature"               />
+	  <field field_ref="soce"         name="so"       long_name="sea_water_salinity"                            />
+	  <field field_ref="sst"          name="tos"      long_name="sea_surface_temperature"                       />
+	  <field field_ref="sst2"         name="tossq"    long_name="square_of_sea_surface_temperature"             />
+	  <field field_ref="sss"          name="sos"      long_name="sea_surface_salinity"                          />
+	  <field field_ref="ssh"          name="zos"      long_name="sea_surface_height_above_geoid"                />
+	  <field field_ref="ssh2"         name="zossq"    long_name="square_of_sea_surface_height_above_geoid"      />
+	  <field field_ref="empmr"        name="wfo"      long_name="water_flux_into_sea_water"                     />
+	  <field field_ref="qsr"          name="rsntds"   long_name="surface_net_downward_shortwave_flux"           />
+	  <field field_ref="qt"           name="tohfls"   long_name="surface_net_downward_total_heat_flux"          />
+	  <field field_ref="taum"         />
+	  <field field_ref="mldkz5"       />
+	  <field field_ref="mldr10_1"     />
+	</file>
+	
+	<file id="file2" name_suffix="_grid_U" description="ocean U grid variables" >
+	  <field field_ref="uoce"         name="uo"      long_name="sea_water_x_velocity"      />
+	  <field field_ref="suoce"        name="uos"     long_name="sea_surface_x_velocity"    />
+	  <field field_ref="utau"         name="tauuo"   long_name="surface_downward_x_stress" />
+	</file>
+	
+	<file id="file3" name_suffix="_grid_V" description="ocean V grid variables" >
+	  <field field_ref="voce"         name="vo"      long_name="sea_water_y_velocity"      />
+	  <field field_ref="svoce"        name="vos"     long_name="sea_surface_y_velocity"    />
+	  <field field_ref="vtau"         name="tauvo"   long_name="surface_downward_y_stress" />
+	</file>
+	
+	<file id="file4" name_suffix="_grid_W" description="ocean W grid variables" >
+	  <field field_ref="woce"         name="wo"      long_name="ocean vertical velocity"         />
+	  <field field_ref="avt"          name="difvho"  long_name="ocean_vertical_heat_diffusivity" />
+	</file>
+	
+	<file id="file5" name_suffix="_icemod" description="ice variables" >
+	  <field field_ref="ice_pres"                     />
+	  <field field_ref="snowthic_cea" name="snd"     long_name="surface_snow_thickness"   />
+	  <field field_ref="icethic_cea"  name="sit"     long_name="sea_ice_thickness"        />
+	  <field field_ref="iceprod_cea"  name="sip"     long_name="sea_ice_thickness"        />
+	  <field field_ref="ist_ipa"      />
+	  <field field_ref="ioceflxb"     />
+	  <field field_ref="uice_ipa"     />
+	  <field field_ref="vice_ipa"     />
+	  <field field_ref="utau_ice"     />
+	  <field field_ref="vtau_ice"     />
+	  <field field_ref="qsr_io_cea"   />
+	  <field field_ref="qns_io_cea"   />
+	  <field field_ref="snowpre"      />
+	</file>
+
+
+	<file id="file6" name_suffix="_ptrc_T" description="sms variables" >
+          <field field_ref="CFC11"      />
+          <field field_ref="C14B" />
+	</file>
+	
+	<file id="file7" name_suffix="_diad_T" description="additional diagnostics" >
+          <field field_ref="qtrCFC11"     />
+          <field field_ref="qintCFC11"     />
+          <field field_ref="qtrC14b"     />
+          <field field_ref="qintC14b"     />
+          <field field_ref="fdecay"     />
+	</file>
+
       </file_group>
 
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/namelist_top
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/namelist_top	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/namelist_top	(revision 4064)
@@ -9,9 +9,10 @@
 !!              8 - tracer output diagonstics             (namtrc_dia)
 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-!'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-&namtrc     !   tracers definition
-!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!-----------------------------------------------------------------------
+&namtrc_run     !   run information
+!-----------------------------------------------------------------------
    nn_dttrc      =  1        !  time step frequency for passive sn_tracers      
-   nn_writetrc   =  5475      !  time step frequency for sn_tracer outputs
+   nn_writetrc   =  5475     !  time step frequency for sn_tracer outputs
    ln_top_euler  = .false.   !  use Euler time-stepping for TOP
    ln_rsttr      = .false.   !  start from a restart file (T) or not (F)
@@ -21,4 +22,8 @@
    cn_trcrst_in  = "restart_trc"   !  suffix of pass. sn_tracer restart name (input)
    cn_trcrst_out = "restart_trc"   !  suffix of pass. sn_tracer restart name (output)
+/
+!-----------------------------------------------------------------------
+&namtrc     !   tracers definition
+!-----------------------------------------------------------------------
    ln_trcdta     =  .false. !  Initialisation from data input file (T) or not (F)
    ln_trcdmp     =  .false.  !  add a damping termn (T) or not (F)
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/iodef.xml
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/iodef.xml	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/iodef.xml	(revision 4064)
@@ -20,7 +20,9 @@
 ============================================================================================================
     -->
-    
-    <file_definition type="multiple_file" sync_freq="1d" min_digits="4">
-    
+ 
+    
+    <file_definition type="multiple_file" name="@expname@_@freq@_@startdate@_@enddate@" sync_freq="10d" min_digits="4">
+    
+      <file_group id="1ts" output_freq="1ts"  output_level="10" enabled=".TRUE."/> <!-- 1 time step files -->
       <file_group id="1h" output_freq="1h"  output_level="10" enabled=".TRUE."/> <!-- 1h files -->
       <file_group id="2h" output_freq="2h"  output_level="10" enabled=".TRUE."/> <!-- 2h files -->
@@ -31,75 +33,71 @@
       <file_group id="1d" output_freq="1d"  output_level="10" enabled=".TRUE."> <!-- 1d files -->
 
-	<file id="1d_grid_T" name="auto" description="ocean T grid variables" >
-	  <field field_ref="sst"          name="sosstsst"  />
-	  <field field_ref="sss"          name="sosaline"  />
-	  <field field_ref="ssh"          name="sossheig"  />
-	</file>
-
-	<file id="1d_grid_U" name="auto" description="ocean U grid variables" >
-	  <field field_ref="suoce"         name="vozocrtx"  />
-	</file>
-	
-	<file id="1d_grid_V" name="auto" description="ocean V grid variables" >
-	  <field field_ref="svoce"         name="vomecrty"  />
-	</file>
-	
-      </file_group>
+	<file id="file1" name_suffix="_grid_T" description="ocean T grid variables" >
+	  <field field_ref="sst"          name="tos"      long_name="sea_surface_temperature"                       />
+	  <field field_ref="sss"          name="sos"      long_name="sea_surface_salinity"                          />
+	  <field field_ref="ssh"          name="zos"      long_name="sea_surface_height_above_geoid"                />
+	</file>
+
+	<file id="file2" name_suffix="_grid_U" description="ocean U grid variables" >
+	  <field field_ref="suoce"        name="uos"     long_name="sea_surface_x_velocity"    />
+	</file>
+	
+	<file id="file3" name_suffix="_grid_V" description="ocean V grid variables" >
+	  <field field_ref="svoce"        name="vos"     long_name="sea_surface_y_velocity"    />
+	</file>
+	
+      </file_group>
+
       <file_group id="3d" output_freq="3d"  output_level="10" enabled=".TRUE."/> <!-- 3d files -->    
+
       <file_group id="5d" output_freq="5d"  output_level="10" enabled=".TRUE.">  <!-- 5d files -->   
 
-	<file id="5d_grid_T" name="auto" description="ocean T grid variables" >
-	  <field field_ref="toce"         name="votemper"  />
-	  <field field_ref="soce"         name="vosaline"  />
-	  <field field_ref="sst"          name="sosstsst"  />
-	  <field field_ref="sss"          name="sosaline"  />
-	  <field field_ref="ssh"          name="sossheig"  />
-	  <field field_ref="empmr"        name="sowaflup"  />
-	  <field field_ref="qsr"          name="soshfldo"  />
-          <field field_ref="saltflx"      name="sosfldow"  />
-          <field field_ref="fmmflx"       name="sofmflup"  />
-	  <field field_ref="qt"           name="sohefldo"  />
-	  <field field_ref="mldr10_1"     name="somxl010"  />
-	  <field field_ref="mldkz5"       name="somixhgt"  />
-	  <field field_ref="ice_cover"    name="soicecov"  />
-	  <field field_ref="wspd"         name="sowindsp"  />
-	  <field field_ref="erp"          name="sowafldp"  />
-	  <field field_ref="ist_ipa"      name="soicetem"  />
-	  <field field_ref="icealb_cea"   name="soicealb"  />   
-	</file>
-	
-	<file id="5d_grid_U" name="auto" description="ocean U grid variables" >
-	  <field field_ref="uoce"         name="vozocrtx"  />
-	  <field field_ref="uoce_eiv"     name="vozoeivu"  />
-	  <field field_ref="utau"         name="sozotaux"  />
-	</file>
-	
-	<file id="5d_grid_V" name="auto" description="ocean V grid variables" >
-	  <field field_ref="voce"         name="vomecrty"  />
-	  <field field_ref="voce_eiv"     name="vomeeivv"  />
-	  <field field_ref="vtau"         name="sometauy"  />
-	</file>
-	
-	<file id="5d_grid_W" name="auto" description="ocean W grid variables" >
-	  <field field_ref="woce"         name="vovecrtz" />
-	  <field field_ref="avt"          name="votkeavt" />
-	  <field field_ref="avs"          name="voddmavs" />
-	  <field field_ref="aht2d_eiv"    name="soleaeiw" />
-	</file>
-	
-	<file id="5d_icemod" name="auto" description="ice variables" >
+	<file id="file4" name_suffix="_grid_T" description="ocean T grid variables" >
+	  <field field_ref="toce"         name="thetao"   long_name="sea_water_potential_temperature"               />
+	  <field field_ref="soce"         name="so"       long_name="sea_water_salinity"                            />
+	  <field field_ref="sst"          name="tos"      long_name="sea_surface_temperature"                       />
+	  <field field_ref="sst2"         name="tossq"    long_name="square_of_sea_surface_temperature"             />
+	  <field field_ref="sss"          name="sos"      long_name="sea_surface_salinity"                          />
+	  <field field_ref="ssh"          name="zos"      long_name="sea_surface_height_above_geoid"                />
+	  <field field_ref="ssh2"         name="zossq"    long_name="square_of_sea_surface_height_above_geoid"      />
+	  <field field_ref="empmr"        name="wfo"      long_name="water_flux_into_sea_water"                     />
+	  <field field_ref="qsr"          name="rsntds"   long_name="surface_net_downward_shortwave_flux"           />
+	  <field field_ref="qt"           name="tohfls"   long_name="surface_net_downward_total_heat_flux"          />
+	  <field field_ref="taum"         />
+	  <field field_ref="mldkz5"       />
+	  <field field_ref="mldr10_1"     />
+	</file>
+	
+	<file id="file5" name_suffix="_grid_U" description="ocean U grid variables" >
+	  <field field_ref="uoce"         name="uo"      long_name="sea_water_x_velocity"      />
+	  <field field_ref="suoce"        name="uos"     long_name="sea_surface_x_velocity"    />
+	  <field field_ref="utau"         name="tauuo"   long_name="surface_downward_x_stress" />
+	</file>
+	
+	<file id="file6" name_suffix="_grid_V" description="ocean V grid variables" >
+	  <field field_ref="voce"         name="vo"      long_name="sea_water_y_velocity"      />
+	  <field field_ref="svoce"        name="vos"     long_name="sea_surface_y_velocity"    />
+	  <field field_ref="vtau"         name="tauvo"   long_name="surface_downward_y_stress" />
+	</file>
+	
+	<file id="file7" name_suffix="_grid_W" description="ocean W grid variables" >
+	  <field field_ref="woce"         name="wo"      long_name="ocean vertical velocity"         />
+	  <field field_ref="avt"          name="difvho"  long_name="ocean_vertical_heat_diffusivity" />
+	</file>
+	
+	<file id="file8" name_suffix="_icemod" description="ice variables" >
 	  <field field_ref="ice_pres"                     />
-	  <field field_ref="snowthic_cea" name="isnowthi" />
-	  <field field_ref="icethic_cea"  name="iicethic" />
-	  <field field_ref="iceprod_cea"  name="iiceprod" />
-	  <field field_ref="ist_ipa"      name="iicetemp" />
-	  <field field_ref="ioceflxb"     name="ioceflxb" />
-	  <field field_ref="uice_ipa"     name="iicevelu" />
-	  <field field_ref="vice_ipa"     name="iicevelv" />
-	  <field field_ref="utau_ice"     name="iicestru" />
-	  <field field_ref="vtau_ice"     name="iicestrv" />
-	  <field field_ref="qsr_io_cea"   name="iicesflx" />
-	  <field field_ref="qns_io_cea"   name="iicenflx" />
-	  <field field_ref="snowpre"      name="isnowpre" />
+	  <field field_ref="snowthic_cea" name="snd"     long_name="surface_snow_thickness"   />
+	  <field field_ref="icethic_cea"  name="sit"     long_name="sea_ice_thickness"        />
+	  <field field_ref="iceprod_cea"  name="sip"     long_name="sea_ice_thickness"        />
+	  <field field_ref="ist_ipa"      />
+	  <field field_ref="ioceflxb"     />
+	  <field field_ref="uice_ipa"     />
+	  <field field_ref="vice_ipa"     />
+	  <field field_ref="utau_ice"     />
+	  <field field_ref="vtau_ice"     />
+	  <field field_ref="qsr_io_cea"   />
+	  <field field_ref="qns_io_cea"   />
+	  <field field_ref="snowpre"      />
 	</file>
 	
@@ -108,5 +106,5 @@
       <file_group id="1m" output_freq="1mo" output_level="10" enabled=".TRUE."> <!-- real monthly files -->
 
-	<file id="1m_ptrc_T" name="auto" description="pisces sms variables" >
+	<file id="file9" name_suffix="_ptrc_T" description="pisces sms variables" >
           <field field_ref="DIC"      />
           <field field_ref="Alkalini" />
@@ -120,5 +118,5 @@
 	</file>
 	
-	<file id="1m_diad_T" name="auto" description="additional pisces diagnostics" >
+	<file id="file10" name_suffix="_diad_T" description="additional pisces diagnostics" >
           <field field_ref="Cflx"     />
           <field field_ref="Dpco2"    />
@@ -126,4 +124,5 @@
 
       </file_group>
+
       <file_group id="2m" output_freq="2mo" output_level="10" enabled=".TRUE."/> <!-- real 2m files -->
       <file_group id="3m" output_freq="3mo" output_level="10" enabled=".TRUE."/> <!-- real 3m files -->
@@ -133,5 +132,5 @@
       <file_group id="1y"  output_freq="1y" output_level="10" enabled=".TRUE."> <!-- real yearly files -->
 
-	<file id="1y_ptrc_T" name="auto" description="pisces sms variables" >
+	<file id="file11" name_suffix="_ptrc_T" description="pisces sms variables" >
           <field field_ref="DIC"      />
           <field field_ref="Alkalini" />
@@ -160,5 +159,5 @@
 	</file>
 
-	<file id="1y_diad_T" name="auto" description="additional pisces diagnostics" >
+	<file id="file12" name_suffix="_diad_T" description="additional pisces diagnostics" >
           <field field_ref="PH"       />
           <field field_ref="CO3"      />
@@ -212,4 +211,5 @@
 
       </file_group>
+
       <file_group id="2y"  output_freq="2y" output_level="10" enabled=".TRUE."/> <!-- real 2y files -->
       <file_group id="5y"  output_freq="5y" output_level="10" enabled=".TRUE."/> <!-- real 5y files -->
@@ -217,5 +217,5 @@
 
    </file_definition>
-    
+
     <!-- 
 ============================================================================================================
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_pisces
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_pisces	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_pisces	(revision 4064)
@@ -201,5 +201,5 @@
    diazolight  =  50.      ! Diazotrophs sensitivity to light (W/m2)
    concfediaz  =  1.e-10   ! Diazotrophs half-saturation Cste for Iron
-   hratio      =  9.e+5    ! Fe to 3He ratio assumed for vent iron supply 
+   hratio      =  1.e+7    ! Fe to 3He ratio assumed for vent iron supply 
 /
 !'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_top
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_top	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_top	(revision 4064)
@@ -9,7 +9,7 @@
 !!              8 - tracer output diagonstics             (namtrc_dia)
 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-!'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-&namtrc     !   tracers definition
-!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+!-----------------------------------------------------------------------
+&namtrc_run     !   run information
+!-----------------------------------------------------------------------
    nn_dttrc      =  1        !  time step frequency for passive sn_tracers      
    nn_writetrc   =  5475     !  time step frequency for sn_tracer outputs
@@ -17,8 +17,12 @@
    ln_rsttr      = .false.   !  start from a restart file (T) or not (F)
    nn_rsttr      =   0       !  restart control = 0 initial time step is not compared to the restart file value
-                             !                  = 1 do not use the value in the restart file
-                             !                  = 2 calendar parameters read in the restart file
+                           !                  = 1 do not use the value in the restart file
+                           !                  = 2 calendar parameters read in the restart file
    cn_trcrst_in  = "restart_trc"   !  suffix of pass. sn_tracer restart name (input)
    cn_trcrst_out = "restart_trc"   !  suffix of pass. sn_tracer restart name (output)
+/
+!-----------------------------------------------------------------------
+&namtrc     !   tracers definition
+!-----------------------------------------------------------------------
    ln_trcdta     =   .true.  !  Initialisation from data input file (T) or not (F)
    ln_trcdmp     =  .false.  !  add a damping termn (T) or not (F)
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/iodef.xml
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/iodef.xml	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/iodef.xml	(revision 4064)
@@ -20,7 +20,8 @@
 ============================================================================================================
     -->
+
+   <file_definition type="multiple_file" name="@expname@_@freq@_@startdate@_@enddate@" sync_freq="10d" min_digits="4">
     
-    <file_definition type="multiple_file" sync_freq="1d" min_digits="4">
-    
+      <file_group id="1ts" output_freq="1ts"  output_level="10" enabled=".TRUE."/> <!-- 1 time step files -->
       <file_group id="1h" output_freq="1h"  output_level="10" enabled=".TRUE."/> <!-- 1h files -->
       <file_group id="2h" output_freq="2h"  output_level="10" enabled=".TRUE."/> <!-- 2h files -->
@@ -35,5 +36,5 @@
       <file_group id="1m" output_freq="1mo" output_level="10" enabled=".TRUE."> <!-- real monthly files -->
 
-	<file id="1m_ptrc_T" name="auto" description="pisces sms variables" >
+	<file id="file1" name_suffix="_ptrc_T" description="pisces sms variables" >
           <field field_ref="DIC"      />
           <field field_ref="Alkalini" />
@@ -47,5 +48,5 @@
 	</file>
 	
-	<file id="1m_diad_T" name="auto" description="additional pisces diagnostics" >
+	<file id="file2" name_suffix="_diad_T" description="additional pisces diagnostics" >
           <field field_ref="Cflx"     />
           <field field_ref="Dpco2"    />
@@ -60,5 +61,5 @@
       <file_group id="1y"  output_freq="1y" output_level="10" enabled=".TRUE."> <!-- real yearly files -->
 
-	<file id="1y_ptrc_T" name="auto" description="pisces sms variables" >
+	<file id="file3" name_suffix="_ptrc_T" description="pisces sms variables" >
           <field field_ref="DIC"      />
           <field field_ref="Alkalini" />
@@ -87,5 +88,5 @@
 	</file>
 
-	<file id="1y_diad_T" name="auto" description="additional pisces diagnostics" >
+	<file id="file4" name_suffix="_ptrc_T" description="additional pisces diagnostics" >
           <field field_ref="PH"       />
           <field field_ref="CO3"      />
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_pisces
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_pisces	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_pisces	(revision 4064)
@@ -201,5 +201,5 @@
    diazolight  =  50.      ! Diazotrophs sensitivity to light (W/m2)
    concfediaz  =  1.e-10   ! Diazotrophs half-saturation Cste for Iron
-   hratio      =  9.e+5    ! Fe to 3He ratio assumed for vent iron supply 
+   hratio      =  1.e+7    ! Fe to 3He ratio assumed for vent iron supply 
 /
 !'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_top
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_top	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_top	(revision 4064)
@@ -9,7 +9,7 @@
 !!              8 - tracer output diagonstics             (namtrc_dia)
 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-!'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-&namtrc     !   tracers definition
-!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+!-----------------------------------------------------------------------
+&namtrc_run     !   run information
+!-----------------------------------------------------------------------
    nn_dttrc      =  1        !  time step frequency for passive sn_tracers      
    nn_writetrc   =  1460     !  time step frequency for sn_tracer outputs
@@ -21,4 +21,8 @@
    cn_trcrst_in  = "restart_trc"   !  suffix of pass. sn_tracer restart name (input)
    cn_trcrst_out = "restart_trc"   !  suffix of pass. sn_tracer restart name (output)
+/
+!-----------------------------------------------------------------------
+&namtrc     !   tracers definition
+!-----------------------------------------------------------------------
    ln_trcdta     =   .true. !  Initialisation from data input file (T) or not (F)
    ln_trcdmp     =  .false.  !  add a damping termn (T) or not (F)
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/SHARED/field_def.xml
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/SHARED/field_def.xml	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/CONFIG/SHARED/field_def.xml	(revision 4064)
@@ -29,4 +29,6 @@
          <field id="mldr10_1"     long_name="Mixed Layer Depth 0.01 ref.10m"            unit="m"                        />
          <field id="rhop"         long_name="potential density (sigma0)"                unit="kg/m3" grid_ref="grid_T_3D"/>
+	 <field id="eken"         long_name="kinetic energy"                            unit="m2/s2" grid_ref="grid_T_3D"/>
+	 <field id="hdiv"         long_name="horizontal divergence"                     unit="s-1"   grid_ref="grid_T_3D"/>
          <!-- next variables available with key_diahth -->
          <field id="mlddzt"       long_name="Thermocline Depth (max dT/dz)"             unit="m"                        />
@@ -140,4 +142,6 @@
          <field id="uoce"         long_name="ocean current along i-axis"                  unit="m/s"  grid_ref="grid_U_3D" />
          <field id="uocetr_eff"   long_name="Effective ocean transport along i-axis"      unit="m3/s" grid_ref="grid_U_3D" />
+         <field id="uocet"        long_name="ocean transport along i-axis times temperature" unit="degC.m/s" grid_ref="grid_U_3D" />
+         <field id="uoces"        long_name="ocean transport along i-axis times salinity"    unit="psu.m/s"  grid_ref="grid_U_3D" />
          <!-- uoce_eiv: available with key_traldf_eiv and key_diaeiv -->
          <field id="uoce_eiv"     long_name="EIV ocean current along i-axis"              unit="m/s"  grid_ref="grid_U_3D" />
@@ -159,4 +163,6 @@
          <field id="voce"         long_name="ocean current along j-axis"                  unit="m/s"  grid_ref="grid_V_3D" />
          <field id="vocetr_eff"   long_name="Effective ocean transport along j-axis"      unit="m3/s" grid_ref="grid_V_3D" />
+         <field id="vocet"        long_name="ocean transport along j-axis times temperature" unit="degC.m/s" grid_ref="grid_V_3D" />
+         <field id="voces"        long_name="ocean transport along j-axis times salinity"    unit="psu.m/s"  grid_ref="grid_V_3D" />
          <!-- voce_eiv: available with key_traldf_eiv and key_diaeiv -->
          <field id="voce_eiv"     long_name="EIV ocean current along j-axis"              unit="m/s"  grid_ref="grid_V_3D" />
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crs.F90
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crs.F90	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crs.F90	(revision 4064)
@@ -17,4 +17,5 @@
    
    PUBLIC crs_dom_alloc  ! Called from crsini.F90
+   PUBLIC crs_dom_alloc2  ! Called from crsini.F90
    PUBLIC dom_grid_glo   
    PUBLIC dom_grid_crs 
@@ -43,4 +44,5 @@
       INTEGER  ::  nldi_crs, nldj_crs           !: starting indices of internal sub-domain on coarse grid
       INTEGER  ::  nlei_crs, nlej_crs           !: ending indices of internal sub-domain on coarse grid
+
       INTEGER  ::  narea_full, narea_crs        !: node
       INTEGER  ::  jpnij_full, jpnij_crs        !: =jpni*jpnj, the pe decomposition
@@ -74,4 +76,5 @@
       INTEGER, DIMENSION(:), ALLOCATABLE :: mjs_crs, mje_crs, mjs2_crs, mje2_crs ! starting and ending  j-indices of parent subset
       INTEGER, DIMENSION(:), ALLOCATABLE :: mjg_crs, mig_crs
+      INTEGER, DIMENSION(:), ALLOCATABLE :: mi0_crs, mi1_crs, mj0_crs, mj1_crs
       INTEGER  :: mxbinctr, mybinctr            ! central point in grid box
       INTEGER, DIMENSION(:), ALLOCATABLE ::   nlcit_crs, nlcit_full  !: dimensions of every subdomain
@@ -97,7 +100,5 @@
       REAL(wp), DIMENSION(:,:),   ALLOCATABLE :: e1f_crs, e2f_crs ! horizontal scale factors grid type F
       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: e3t_crs, e3u_crs, e3v_crs, e3f_crs, e3w_crs
-      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: e3t_max_crs, e3u_max_crs, e3v_max_crs, e3w_max_crs
-      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: fse3t_crs, fse3u_crs, fse3v_crs, fse3f_crs, fse3w_crs
-      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: fse3t_n_crs, fse3t_b_crs, fse3t_a_crs
+      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: e3t_max_crs, e3u_max_crs, e3v_max_crs, e3f_max_crs, e3w_max_crs
       
       ! Surface
@@ -139,13 +140,4 @@
       REAL(wp)     ::  rfactxy 
 
-      !! Horizontal grid parameters for domhgr
-      !! =====================================
-      INTEGER  ::   nphgr_msh_crs = 0   !: type of horizontal mesh
-      !                                 !  = 0 curvilinear coordinate on the sphere read in coordinate.nc
-      !                                 !  = 1 geographical mesh on the sphere with regular grid-spacing
-      !                                 !  = 2 f-plane with regular grid-spacing
-      !                                 !  = 3 beta-plane with regular grid-spacing
-      !                                 !  = 4 Mercator grid with T/U point at the equator
-      
       ! Physical and dynamical ocean fields for output or passing to TOP, time-mean fields
       REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE      :: tsn_crs
@@ -153,8 +145,8 @@
       REAL(wp), DIMENSION(:,:,:)  , ALLOCATABLE      :: hdivn_crs    
       REAL(wp), DIMENSION(:,:)    , ALLOCATABLE      :: sshn_crs    
-
       ! 
       ! Surface fluxes to pass to TOP
-      REAL(wp), PUBLIC, DIMENSION(:,:)  , ALLOCATABLE :: qsr_crs, emp_b_crs, fr_i_crs, wndm_crs, emp_crs
+      REAL(wp), PUBLIC, DIMENSION(:,:)  , ALLOCATABLE :: qsr_crs, fr_i_crs, wndm_crs
+      REAL(wp), PUBLIC, DIMENSION(:,:)  , ALLOCATABLE :: emp_crs, emp_b_crs, sfx_crs
       REAL(wp), PUBLIC, DIMENSION(:,:)  , ALLOCATABLE :: utau_crs, vtau_crs
       REAL(wp), PUBLIC, DIMENSION(:,:)  , ALLOCATABLE :: rnf_crs
@@ -185,14 +177,17 @@
 
       ! Set up bins for coarse grid, horizontal only.
-      ALLOCATE( mis2_crs(jpiglo_crs) , mie2_crs(jpiglo_crs) , mjs2_crs(jpjglo_crs) , mje2_crs(jpjglo_crs),&
-      & mig_crs(jpi_crs), mjg_crs(jpj_crs),  STAT=ierr(1) )
+     ALLOCATE( mis2_crs(jpiglo_crs), mie2_crs(jpiglo_crs),  &
+       &       mjs2_crs(jpjglo_crs), mje2_crs(jpjglo_crs),  &
+       &       mi0_crs (jpiglo_crs), mi1_crs (jpiglo_crs),  &
+       &       mj0_crs (jpjglo_crs), mj1_crs (jpjglo_crs),  &
+       &       mig_crs (jpi_crs)   , mjg_crs (jpj_crs)   ,  STAT=ierr(1) ) 
+
 
       ! Set up Mask and Mesh
-
       ALLOCATE( tmask_crs(jpi_crs,jpj_crs,jpk) , fmask_crs(jpi_crs,jpj_crs,jpk) ,  &
          &      umask_crs(jpi_crs,jpj_crs,jpk) , vmask_crs(jpi_crs,jpj_crs,jpk) , STAT=ierr(2))
 
-      ALLOCATE( tmask_i_crs(jpi_crs,jpj_crs), rnfmsk_crs(jpi_crs,jpj_crs), &
-      &     tpol_crs(jpiglo_crs,jpjglo_crs), fpol_crs(jpiglo_crs,jpjglo_crs), STAT=ierr(3) )
+      ALLOCATE( tmask_i_crs(jpi_crs,jpj_crs)   , rnfmsk_crs(jpi_crs,jpj_crs), &
+      &         tpol_crs(jpiglo_crs,jpjglo_crs), fpol_crs(jpiglo_crs,jpjglo_crs), STAT=ierr(3) )
 
       ALLOCATE( gphit_crs(jpi_crs,jpj_crs) , glamt_crs(jpi_crs,jpj_crs) , & 
@@ -208,33 +203,29 @@
          &      e1e2t_crs(jpi_crs,jpj_crs), STAT=ierr(5))
 
-      ALLOCATE( fse3t_crs(jpi_crs,jpj_crs,jpk)  , fse3w_crs(jpi_crs,jpj_crs,jpk) , & 
-         &      fse3u_crs(jpi_crs,jpj_crs,jpk)  , fse3v_crs(jpi_crs,jpj_crs,jpk) , & 
-         &      e3t_crs(jpi_crs,jpj_crs,jpk)    , e3w_crs(jpi_crs,jpj_crs,jpk)   , & 
-         &      e3u_crs(jpi_crs,jpj_crs,jpk)    , e3v_crs(jpi_crs,jpj_crs,jpk)   , &
-         &      e3f_crs(jpi_crs,jpj_crs,jpk)    , fse3f_crs(jpi_crs,jpj_crs,jpk) , & 
-         &      e3t_max_crs(jpi_crs,jpj_crs,jpk), e3w_max_crs(jpi_crs,jpj_crs,jpk), & 
-         &      e3u_max_crs(jpi_crs,jpj_crs,jpk), e3v_max_crs(jpi_crs,jpj_crs,jpk)   , &
-         &      fse3t_b_crs(jpi_crs,jpj_crs,jpk), fse3t_n_crs(jpi_crs,jpj_crs,jpk),&
-         &      fse3t_a_crs(jpi_crs,jpj_crs,jpk), e1e2w_msk(jpi_crs,jpj_crs,jpk) , &
-         &      e2e3u_msk(jpi_crs,jpj_crs,jpk)  , e1e3v_msk(jpi_crs,jpj_crs,jpk) , &
-         &      e1e2w_crs(jpi_crs,jpj_crs,jpk)  , e2e3u_crs(jpi_crs,jpj_crs,jpk) , &
-         &      e1e3v_crs(jpi_crs,jpj_crs,jpk)  , STAT=ierr(6))
-
-
-      ALLOCATE( facsurfv(jpi_crs,jpj_crs,jpk) , facsurfu(jpi_crs,jpj_crs,jpk) , & 
-         &      facvol_t(jpi_crs,jpj_crs,jpk) , facvol_w(jpi_crs,jpj_crs,jpk) , &
-         &      ocean_volume_crs_t(jpi_crs,jpj_crs,jpk) , ocean_volume_crs_w(jpi_crs,jpj_crs,jpk), &
-         &      bt_crs(jpi_crs,jpj_crs,jpk)   , r1_bt_crs(jpi_crs,jpj_crs,jpk) , STAT=ierr(7))
-
-
-      ALLOCATE( crs_surfu_wgt(jpi_crs,jpj_crs,jpk) , crs_surfv_wgt(jpi_crs,jpj_crs,jpk) , & 
-         &      crs_surfw_wgt(jpi_crs,jpj_crs,jpk) , crs_volt_wgt(jpi_crs,jpj_crs,jpk) , STAT=ierr(8))
-
-
-      ALLOCATE( mbathy_crs(jpi_crs,jpj_crs) , mbkt_crs(jpi_crs,jpj_crs) , &
-         &      mbku_crs(jpi_crs,jpj_crs)   , mbkv_crs(jpi_crs,jpj_crs) , STAT=ierr(9))
-
-      ALLOCATE( gdept_crs(jpi_crs,jpj_crs,jpk) , gdepu_crs(jpi_crs,jpj_crs,jpk) , &
-         &      gdepv_crs(jpi_crs,jpj_crs,jpk) , gdepw_crs(jpi_crs,jpj_crs,jpk) , STAT=ierr(10) )
+      ALLOCATE( e3t_crs(jpi_crs,jpj_crs,jpk)    , e3w_crs(jpi_crs,jpj_crs,jpk)    , & 
+         &      e3u_crs(jpi_crs,jpj_crs,jpk)    , e3v_crs(jpi_crs,jpj_crs,jpk)    , &
+         &      e3f_crs(jpi_crs,jpj_crs,jpk)    , e1e2w_msk(jpi_crs,jpj_crs,jpk)  , & 
+         &      e2e3u_msk(jpi_crs,jpj_crs,jpk)  , e1e3v_msk(jpi_crs,jpj_crs,jpk)  , &
+         &      e1e2w_crs(jpi_crs,jpj_crs,jpk)  , e2e3u_crs(jpi_crs,jpj_crs,jpk)  , &
+         &      e1e3v_crs(jpi_crs,jpj_crs,jpk)  , e3t_max_crs(jpi_crs,jpj_crs,jpk), &
+         &      e3w_max_crs(jpi_crs,jpj_crs,jpk), e3u_max_crs(jpi_crs,jpj_crs,jpk), &
+         &      e3v_max_crs(jpi_crs,jpj_crs,jpk), STAT=ierr(6))
+
+
+      ALLOCATE( facsurfv(jpi_crs,jpj_crs,jpk), facsurfu(jpi_crs,jpj_crs,jpk) , & 
+         &      facvol_t(jpi_crs,jpj_crs,jpk), facvol_w(jpi_crs,jpj_crs,jpk) , &
+         &      ocean_volume_crs_t(jpi_crs,jpj_crs,jpk), ocean_volume_crs_w(jpi_crs,jpj_crs,jpk), &
+         &      bt_crs(jpi_crs,jpj_crs,jpk)  , r1_bt_crs(jpi_crs,jpj_crs,jpk) , STAT=ierr(7))
+
+
+      ALLOCATE( crs_surfu_wgt(jpi_crs,jpj_crs,jpk), crs_surfv_wgt(jpi_crs,jpj_crs,jpk) , & 
+         &      crs_surfw_wgt(jpi_crs,jpj_crs,jpk), crs_volt_wgt(jpi_crs,jpj_crs,jpk) , STAT=ierr(8))
+
+
+      ALLOCATE( mbathy_crs(jpi_crs,jpj_crs), mbkt_crs(jpi_crs,jpj_crs) , &
+         &      mbku_crs(jpi_crs,jpj_crs)  , mbkv_crs(jpi_crs,jpj_crs) , STAT=ierr(9))
+
+      ALLOCATE( gdept_crs(jpi_crs,jpj_crs,jpk), gdepu_crs(jpi_crs,jpj_crs,jpk) , &
+         &      gdepv_crs(jpi_crs,jpj_crs,jpk), gdepw_crs(jpi_crs,jpj_crs,jpk) , STAT=ierr(10) )
 
 
@@ -243,8 +234,8 @@
          &      rke_crs(jpi_crs,jpj_crs,jpk),                                STAT=ierr(11))
 
-     ALLOCATE( sshn_crs(jpi_crs,jpj_crs),  emp_crs(jpi_crs,jpj_crs) , emp_b_crs(jpi_crs,jpj_crs), &
-         &      qsr_crs(jpi_crs,jpj_crs) , wndm_crs(jpi_crs,jpj_crs), utau_crs(jpi_crs,jpj_crs) , &
-         &      vtau_crs(jpi_crs,jpj_crs), rnf_crs(jpi_crs, jpj_crs) , &
-         &      fr_i_crs(jpi_crs, jpj_crs),   STAT=ierr(12)  )
+     ALLOCATE( sshn_crs(jpi_crs,jpj_crs), emp_crs (jpi_crs,jpj_crs), emp_b_crs(jpi_crs,jpj_crs), &
+         &     qsr_crs(jpi_crs ,jpj_crs), wndm_crs(jpi_crs,jpj_crs), utau_crs(jpi_crs,jpj_crs) , &
+         &     vtau_crs(jpi_crs,jpj_crs), rnf_crs(jpi_crs ,jpj_crs), &
+         &     fr_i_crs(jpi_crs,jpj_crs), sfx_crs(jpi_crs ,jpj_crs),  STAT=ierr(12)  )
 
      ALLOCATE( tsn_crs(jpi_crs,jpj_crs,jpk,jpts), avt_crs(jpi_crs,jpj_crs,jpk),    &
@@ -327,5 +318,4 @@
       !!---------------------------------------------------------------------
 
- 
       !
       !                        Switch to coarse grid domain
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdom.F90
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdom.F90	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdom.F90	(revision 4064)
@@ -51,4 +51,6 @@
    END INTERFACE
 
+   REAL(wp) :: r_inf = 1e+36
+
    !! Substitutions
 #  include "domzgr_substitute.h90"
@@ -60,5 +62,5 @@
       
       INTEGER  ::  ji, jj, jk                   ! dummy loop indices
-      INTEGER  ::  ijie,ijis,ijje,ijjs
+      INTEGER  ::  ijie,ijis,ijje,ijjs,ij,je_2
       REAL(wp) ::  zmask
       
@@ -69,13 +71,39 @@
       umask_crs(:,:,:) = 0.0
       fmask_crs(:,:,:) = 0.0
-      
+  
+            
+      IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+         IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+            je_2 = mje_crs(2)   ;  ij = je_2
+         ENDIF
+      ELSE
+         je_2 = mje_crs(2)      ;  ij = mjs_crs(2) 
+      ENDIF
       DO jk = 1, jpkm1
          DO ji = 2, nlei_crs  
-            ijie = mie_crs(ji)
-            ijis = mis_crs(ji)
-            DO jj = nldj_crs, nlej_crs 
-               ijje = mje_crs(jj) 
-               ijjs = mjs_crs(jj) 
-                                 
+            ijis = mis_crs(ji)  ;  ijie = mie_crs(ji)    
+            !          
+            zmask = 0.0
+            zmask = SUM( tmask(ijis:ijie,ij:je_2,jk) ) 
+            IF ( zmask > 0.0 ) tmask_crs(ji,2,jk) = 1.0
+               
+            zmask = 0.0
+            zmask = SUM( vmask(ijis:ijie,je_2     ,jk) )  
+            IF ( zmask > 0.0 ) vmask_crs(ji,2,jk) = 1.0
+               
+            zmask = 0.0
+            zmask = SUM(umask(ijie,ij:je_2,jk))   
+            IF ( zmask > 0.0 ) umask_crs(ji,2,jk) = 1.0
+               
+            fmask_crs(ji,je_2,jk) = fmask(ijie,2,jk)
+         ENDDO
+      ENDDO
+      !
+      DO jk = 1, jpkm1
+         DO ji = 2, nlei_crs  
+            ijis = mis_crs(ji)     ;   ijie = mie_crs(ji)       
+            DO jj = 3, nlej_crs
+               ijjs = mjs_crs(jj)  ;   ijje = mje_crs(jj)
+                          
                zmask = 0.0
                zmask = SUM( tmask(ijis:ijie,ijjs:ijje,jk) ) 
@@ -91,8 +119,8 @@
                
                fmask_crs(ji,jj,jk) = fmask(ijie,ijje,jk)  
-
             ENDDO
          ENDDO
       ENDDO
+
       !
       CALL crs_lbc_lnk( tmask_crs, 'T', 1.0 )
@@ -195,12 +223,5 @@
             ENDDO
       END SELECT
-
-      !                                             ! Fill i=1, i=jpi at j=1
-      p_gphi_crs(1      ,1) = p_gphi(jpi_crsm1,1)
-      p_glam_crs(1      ,1) = p_glam(jpi_crsm1,1)
-      !                                             ! Fill upper-right corner i=1, j=jpj_crs
-      p_gphi_crs(jpi_crs,1) = p_gphi(2        ,1)
-      p_glam_crs(jpi_crs,1) = p_glam(2        ,1)
-      !                                            
+      !
    END SUBROUTINE crs_dom_coordinates
 
@@ -233,5 +254,5 @@
       !! Local variables
       INTEGER :: ji, jj, jk     ! dummy loop indices
-      INTEGER :: ijie,ijis,ijje,ijjs,ijrs
+      INTEGER :: ijie,ijje,ijrs
   
       !!----------------------------------------------------------------  
@@ -241,9 +262,6 @@
          DO ji = 2, nlei_crs
             ijie = mie_crs(ji)
-            ijis = mis_crs(ji)
             DO jj = nldj_crs, nlej_crs
-               ijje = mje_crs(jj) 
-               ijjs = mjs_crs(jj)                   
-               ijrs =  mje_crs(jj) - mjs_crs(jj)
+               ijje = mje_crs(jj)   ;   ijrs =  mje_crs(jj) - mjs_crs(jj)
                ! Only for a factro 3 coarsening
                SELECT CASE ( cd_type )
@@ -335,11 +353,13 @@
       !! Local variables
       REAL(wp)                                :: zdAm
-      INTEGER                                 :: ji, jj, jk       ! dummy loop indices
-      INTEGER                                 :: ii, ij, ijie,ijje
-
-      REAL(wp), DIMENSION(:,:,:), POINTER     :: zvol      
+      INTEGER                                 :: ji, jj, jk , ii, ij, je_2
+
+      REAL(wp), DIMENSION(:,:,:), POINTER     :: zvol, zmask      
       !!----------------------------------------------------------------  
    
-      CALL wrk_alloc( jpi, jpj, jpk, zvol )
+      CALL wrk_alloc( jpi, jpj, jpk, zvol, zmask )
+
+      p_fld1_crs(:,:,:) = 0.0
+      p_fld2_crs(:,:,:) = 0.0
 
       DO jk = 1, jpk
@@ -347,102 +367,91 @@
       ENDDO
 
+      zmask(:,:,:) = 0.0
+      IF( cd_type == 'W' ) THEN
+         zmask(:,:,1) = p_mask(:,:,1) 
+         DO jk = 2, jpk
+            zmask(:,:,jk) = p_mask(:,:,jk-1) 
+         ENDDO
+      ELSE
+         DO jk = 1, jpk
+             zmask(:,:,jk) = p_mask(:,:,jk) 
+         ENDDO
+      ENDIF
+
+      IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+         IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+            je_2 = mje_crs(2)
+            DO jk = 1, jpk           
+               DO ji = nistr, niend, nn_factx
+                  ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
+                  p_fld1_crs(ii,2,jk) =  zvol(ji,je_2  ,jk) + zvol(ji+1,je_2  ,jk) + zvol(ji+2,je_2  ,jk)  &
+                     &                 + zvol(ji,je_2-1,jk) + zvol(ji+1,je_2-1,jk) + zvol(ji+2,je_2-1,jk) 
+                  !
+                  zdAm =  zvol(ji  ,je_2,jk) * zmask(ji  ,je_2,jk)  &
+                    &   + zvol(ji+1,je_2,jk) * zmask(ji+1,je_2,jk)  &
+                    &   + zvol(ji+2,je_2,jk) * zmask(ji+2,je_2,jk) 
+                  ! 
+                  p_fld2_crs(ii,2,jk) = zdAm / p_fld1_crs(ii,2,jk) 
+               ENDDO
+            ENDDO
+         ENDIF
+      ELSE
+         je_2 = mjs_crs(2)
+         DO jk = 1, jpk           
+            DO ji = nistr, niend, nn_factx
+               ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+               p_fld1_crs(ii,2,jk) =  zvol(ji,je_2  ,jk) + zvol(ji+1,je_2  ,jk) + zvol(ji+2,je_2  ,jk)  &
+                   &                + zvol(ji,je_2+1,jk) + zvol(ji+1,je_2+1,jk) + zvol(ji+2,je_2+1,jk)  &
+                   &                + zvol(ji,je_2+2,jk) + zvol(ji+1,je_2+2,jk) + zvol(ji+2,je_2+2,jk)  
+              !
+               zdAm = zvol(ji  ,je_2  ,jk) * zmask(ji  ,je_2  ,jk)  &
+                 &  + zvol(ji+1,je_2  ,jk) * zmask(ji+1,je_2  ,jk)  &
+                 &  + zvol(ji+2,je_2  ,jk) * zmask(ji+2,je_2  ,jk)  &
+                 &  + zvol(ji  ,je_2+1,jk) * zmask(ji  ,je_2+1,jk)  &
+                 &  + zvol(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk)  &
+                 &  + zvol(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk)  &
+                 &  + zvol(ji  ,je_2+2,jk) * zmask(ji  ,je_2+2,jk)  &
+                 &  + zvol(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk)  &
+                 &  + zvol(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk)
+                 ! 
+                 p_fld2_crs(ii,2,jk) = zdAm / p_fld1_crs(ii,2,jk) 
+            ENDDO
+         ENDDO
+      ENDIF
+
       DO jk = 1, jpk           
-         DO ji = nistr, niend, nn_factx
-            DO jj   = njstr, njend, nn_facty
-               ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
-               ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-               ijje = mje_crs(ij)
-               ijie = mie_crs(ii)
+         DO jj  = njstr, njend, nn_facty
+            DO ji = nistr, niend, nn_factx
+               ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
+               ij  = ( jj - njstr ) * rfacty_r + 3
                !
                p_fld1_crs(ii,ij,jk) =  zvol(ji,jj  ,jk) + zvol(ji+1,jj  ,jk) + zvol(ji+2,jj  ,jk)  &
                    &                 + zvol(ji,jj+1,jk) + zvol(ji+1,jj+1,jk) + zvol(ji+2,jj+1,jk)  &
-                   &                 + zvol(ji,jj+2,jk) + zvol(ji+1,jj+2,jk) + zvol(ji+2,jj+2,jk)  
+                   &                 + zvol(ji,jj+2,jk) + zvol(ji+1,jj+2,jk) + zvol(ji+2,jj+2,jk) 
+               !
+               zdAm =  zvol(ji  ,jj  ,jk) * zmask(ji  ,jj  ,jk)  &
+                 &   + zvol(ji+1,jj  ,jk) * zmask(ji+1,jj  ,jk)  &
+                 &   + zvol(ji+2,jj  ,jk) * zmask(ji+2,jj  ,jk)  &
+                 &   + zvol(ji  ,jj+1,jk) * zmask(ji  ,jj+1,jk)  &
+                 &   + zvol(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk)  &
+                 &   + zvol(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk)  &
+                 &   + zvol(ji  ,jj+2,jk) * zmask(ji  ,jj+2,jk)  &
+                 &   + zvol(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk)  &
+                 &   + zvol(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk)
+                 ! 
+                p_fld2_crs(ii,ij,jk) = zdAm / p_fld1_crs(ii,ij,jk) 
             ENDDO
          ENDDO
       ENDDO
-
-      IF( cd_type == 'T' ) THEN
-         DO jk = 1, jpk           
-            DO ji = nistr, niend, nn_factx
-               DO jj   = njstr, njend, nn_facty
-                  ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
-                  ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                  ijje = mje_crs(ij)
-                  ijie = mie_crs(ii)
-                  !
-                  zdAm =  zvol(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk)  &
-                    &   + zvol(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk)  &
-                    &   + zvol(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk)  &
-                    &   + zvol(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk)  &
-                    &   + zvol(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk)  &
-                    &   + zvol(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk)  &
-                    &   + zvol(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk)  &
-                    &   + zvol(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk)  &
-                    &   + zvol(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk)
-                    ! 
-                   IF( p_fld1_crs(ii,ij,jk) /= 0._wp ) p_fld2_crs(ii,ij,jk) = zdAm / p_fld1_crs(ii,ij,jk) 
-                   ! 
-               ENDDO
-            ENDDO
-         ENDDO
-      ENDIF
-      !
-      IF( cd_type == 'W' ) THEN
-         DO jk = 2, jpk           
-            DO ji = nistr, niend, nn_factx
-               DO jj   = njstr, njend, nn_facty
-                  ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
-                  ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                  ijje = mje_crs(ij)
-                  ijie = mie_crs(ii)
-                  !
-                  zdAm =  zvol(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk-1)  &
-                    &   + zvol(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk-1)  &
-                    &   + zvol(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk-1)  &
-                    &   + zvol(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk-1)  &
-                    &   + zvol(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1)  &
-                    &   + zvol(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1)  &
-                    &   + zvol(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk-1)  &
-                    &   + zvol(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1)  &
-                    &   + zvol(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1)
-                  !
-                  IF( p_fld1_crs(ii,ij,jk) /= 0._wp ) p_fld2_crs(ii,ij,jk) = zdAm / p_fld1_crs(ii,ij,jk) 
-                  !
-               ENDDO
-            ENDDO
-         ENDDO
-         DO ji = nistr, niend, nn_factx
-            DO jj   = njstr, njend, nn_facty
-               ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
-               ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-               ijje = mje_crs(ij)
-               ijie = mie_crs(ii)
-               !
-               zdAm =  zvol(ji  ,jj  ,1) * p_mask(ji  ,jj  ,1)  &
-                 &   + zvol(ji+1,jj  ,1) * p_mask(ji+1,jj  ,1)  &
-                 &   + zvol(ji+2,jj  ,1) * p_mask(ji+2,jj  ,1)  &
-                 &   + zvol(ji  ,jj+1,1) * p_mask(ji  ,jj+1,1)  &
-                 &   + zvol(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1)  &
-                 &   + zvol(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1)  &
-                 &   + zvol(ji  ,jj+2,1) * p_mask(ji  ,jj+2,1)  &
-                 &   + zvol(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1)  &
-                 &   + zvol(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1)
-               ! 
-               IF( p_fld1_crs(ii,ij,1) /= 0._wp ) p_fld2_crs(ii,ij,1) = zdAm / p_fld2_crs(ii,ij,1) 
-               ! 
-            ENDDO
-         ENDDO
-      ENDIF
-      
       !                                             !  Retroactively add back the boundary halo cells.
       CALL crs_lbc_lnk( p_fld1_crs, cd_type, 1.0 ) 
       CALL crs_lbc_lnk( p_fld2_crs, cd_type, 1.0 ) 
       !
-      CALL wrk_dealloc( jpi, jpj, jpk, zvol )
+      CALL wrk_dealloc( jpi, jpj, jpk, zvol, zmask )
       !
    END SUBROUTINE crs_dom_facvol
 
 
-   SUBROUTINE crs_dom_ope_3d( p_fld, cd_op, cd_type, p_mask, p_fld_crs, p_e12, p_e3, p_surf_crs, p_mask_crs )
+   SUBROUTINE crs_dom_ope_3d( p_fld, cd_op, cd_type, p_mask, p_fld_crs, p_e12, p_e3, p_surf_crs, p_mask_crs, psgn )
       !!----------------------------------------------------------------
       !!               *** SUBROUTINE crsfun_UV ***
@@ -476,17 +485,18 @@
       REAL(wp), DIMENSION(jpi,jpj,jpk),         INTENT(in), OPTIONAL :: p_e3     ! Parent grid vertical level thickness (fse3u, fse3v)
       REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(in), OPTIONAL :: p_surf_crs ! Coarse grid area-weighting denominator    
-      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(in), OPTIONAL :: p_mask_crs    ! Coarse grid T,U,V mask
+      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(in), OPTIONAL :: p_mask_crs    ! Coarse grid T,U,V maska
+      REAL(wp),                                 INTENT(in)           :: psgn    ! sign 
+
 
       REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(out)          :: p_fld_crs ! Coarse grid box 3D quantity 
 
       !! Local variables
-      INTEGER  :: ji, jj, jk                 ! dummy loop indices
-      INTEGER  :: ijie, ijje, ii, ij
+      INTEGER  :: ji, jj, jk 
+      INTEGER  :: ii, ij, ijie, ijje, je_2
       REAL(wp) :: zflcrs, zsfcrs   
-      REAL(wp) :: zeps = 1.e20    
-      REAL(wp), DIMENSION(:,:,:), POINTER :: zsurf   
-
+      REAL(wp), DIMENSION(:,:,:), POINTER :: zsurf, zsurfmsk, zmask  
       !!----------------------------------------------------------------  
    
+      p_fld_crs(:,:,:) = 0.0
 
       SELECT CASE ( cd_op )
@@ -494,159 +504,344 @@
          CASE ( 'VOL' )
       
-            CALL wrk_alloc( jpi, jpj, jpk, zsurf )
-            DO jk = 1, jpk
-              zsurf(:,:,jk) =  p_e12(:,:) * p_e3(:,:,jk)
-            ENDDO
+            CALL wrk_alloc( jpi, jpj, jpk, zsurf, zsurfmsk )
          
             SELECT CASE ( cd_type )
             
-               CASE( 'T' )
+               CASE( 'T', 'W' )
+                  IF( cd_type == 'T' ) THEN
+                     DO jk = 1, jpk
+                        zsurf   (:,:,jk) =  p_e12(:,:) * p_e3(:,:,jk) *  p_mask(:,:,jk) 
+                        zsurfmsk(:,:,jk) =  zsurf(:,:,jk) 
+                    ENDDO
+                  ELSE
+                     zsurf   (:,:,1) =  p_e12(:,:) * p_e3(:,:,1)
+                     zsurfmsk(:,:,1) =  zsurf(:,:,1) *  p_mask(:,:,1) 
+                     DO jk = 2, jpk
+                        zsurf   (:,:,jk) =  p_e12(:,:) * p_e3(:,:,jk)
+                        zsurfmsk(:,:,jk) =  zsurf(:,:,jk) * p_mask(:,:,jk-1) 
+                     ENDDO
+                  ENDIF
          
-                  DO jk = 1, jpk
-                    
-                     DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)                  
+                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        je_2 = mje_crs(2)
+                        DO jk = 1, jpk           
+                           DO ji = nistr, niend, nn_factx
+                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2       
+                              zflcrs =  p_fld(ji  ,je_2,jk) * zsurfmsk(ji  ,je_2,jk)   &
+                                &     + p_fld(ji+1,je_2,jk) * zsurfmsk(ji+1,je_2,jk)   &
+                                &     + p_fld(ji+2,je_2,jk) * zsurfmsk(ji+2,je_2,jk) 
  
-                           zflcrs =  p_fld(ji  ,jj  ,jk) * zsurf(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk) &
-                             &     + p_fld(ji+1,jj  ,jk) * zsurf(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk) &
-                             &     + p_fld(ji+2,jj  ,jk) * zsurf(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk) &
-                             &     + p_fld(ji  ,jj+1,jk) * zsurf(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk) &
-                             &     + p_fld(ji+1,jj+1,jk) * zsurf(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk) &
-                             &     + p_fld(ji+2,jj+1,jk) * zsurf(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk) &
-                             &     + p_fld(ji  ,jj+2,jk) * zsurf(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk) &
-                             &     + p_fld(ji+1,jj+2,jk) * zsurf(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk) &
-                             &     + p_fld(ji+2,jj+2,jk) * zsurf(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk) 
- 
-                           zsfcrs =  zsurf(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk) &
-                             &     + zsurf(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk) &
-                             &     + zsurf(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk) &
-                             &     + zsurf(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk) &
-                             &     + zsurf(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk) &
-                             &     + zsurf(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk) &
-                             &     + zsurf(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk) &
-                             &     + zsurf(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk) &
-                             &     + zsurf(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk) 
-                           !
+                              zsfcrs =  zsurf(ji,je_2,jk) + zsurf(ji+1,je_2,jk) + zsurf(ji+2,je_2,jk) 
+                              !
+                              p_fld_crs(ii,2,jk) = zflcrs
+                              IF( zsfcrs /= 0.0 )  p_fld_crs(ii,2,jk) = zflcrs / zsfcrs
+                           ENDDO
+                        ENDDO
+                     ENDIF
+                  ELSE
+                     je_2 = mjs_crs(2)
+                     DO jk = 1, jpk           
+                        DO ji = nistr, niend, nn_factx
+                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2   
+                           zflcrs =  p_fld(ji  ,je_2  ,jk) * zsurfmsk(ji  ,je_2  ,jk) &
+                             &     + p_fld(ji+1,je_2  ,jk) * zsurfmsk(ji+1,je_2  ,jk) &
+                             &     + p_fld(ji+2,je_2  ,jk) * zsurfmsk(ji+2,je_2  ,jk) &
+                             &     + p_fld(ji  ,je_2+1,jk) * zsurfmsk(ji  ,je_2+1,jk) &
+                             &     + p_fld(ji+1,je_2+1,jk) * zsurfmsk(ji+1,je_2+1,jk) &
+                             &     + p_fld(ji+2,je_2+1,jk) * zsurfmsk(ji+2,je_2+1,jk) &
+                             &     + p_fld(ji  ,je_2+2,jk) * zsurfmsk(ji  ,je_2+2,jk) &
+                             &     + p_fld(ji+1,je_2+2,jk) * zsurfmsk(ji+1,je_2+2,jk) &
+                             &     + p_fld(ji+2,je_2+2,jk) * zsurfmsk(ji+2,je_2+2,jk) 
+
+                           zsfcrs =  zsurf(ji,je_2  ,jk) + zsurf(ji+1,je_2  ,jk) + zsurf(ji+2,je_2  ,jk) &
+                             &     + zsurf(ji,je_2+1,jk) + zsurf(ji+1,je_2+1,jk) + zsurf(ji+2,je_2+1,jk) &
+                             &     + zsurf(ji,je_2+2,jk) + zsurf(ji+1,je_2+2,jk) + zsurf(ji+2,je_2+2,jk) 
+                            !
+                            p_fld_crs(ii,2,jk) = zflcrs
+                            IF( zsfcrs /= 0.0 )  p_fld_crs(ii,2,jk) = zflcrs / zsfcrs
+                        ENDDO
+                     ENDDO
+                  ENDIF
+                  !
+                  DO jk = 1, jpk           
+                     DO jj  = njstr, njend, nn_facty
+                        DO ji = nistr, niend, nn_factx
+                           ii = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
+                           ij = ( jj - njstr ) * rfacty_r + 3
+                           zflcrs =  p_fld(ji  ,jj  ,jk) * zsurfmsk(ji  ,jj  ,jk) &
+                             &     + p_fld(ji+1,jj  ,jk) * zsurfmsk(ji+1,jj  ,jk) &
+                             &     + p_fld(ji+2,jj  ,jk) * zsurfmsk(ji+2,jj  ,jk) &
+                             &     + p_fld(ji  ,jj+1,jk) * zsurfmsk(ji  ,jj+1,jk) &
+                             &     + p_fld(ji+1,jj+1,jk) * zsurfmsk(ji+1,jj+1,jk) &
+                             &     + p_fld(ji+2,jj+1,jk) * zsurfmsk(ji+2,jj+1,jk) &
+                             &     + p_fld(ji  ,jj+2,jk) * zsurfmsk(ji  ,jj+2,jk) &
+                             &     + p_fld(ji+1,jj+2,jk) * zsurfmsk(ji+1,jj+2,jk) &
+                             &     + p_fld(ji+2,jj+2,jk) * zsurfmsk(ji+2,jj+2,jk) 
+
+                           zsfcrs =  zsurf(ji,jj  ,jk) + zsurf(ji+1,jj  ,jk) + zsurf(ji+2,jj  ,jk) &
+                             &     + zsurf(ji,jj+1,jk) + zsurf(ji+1,jj+1,jk) + zsurf(ji+2,jj+1,jk) &
+                             &     + zsurf(ji,jj+2,jk) + zsurf(ji+1,jj+2,jk) + zsurf(ji+2,jj+2,jk) 
+                            !
                            p_fld_crs(ii,ij,jk) = zflcrs
                            IF( zsfcrs /= 0.0 )  p_fld_crs(ii,ij,jk) = zflcrs / zsfcrs
-
+                        ENDDO      
+                     ENDDO
+                  ENDDO  
+               CASE DEFAULT
+                    STOP
+               END SELECT
+
+              CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zsurfmsk )
+
+         CASE ( 'SUM' )
+         
+            CALL wrk_alloc( jpi, jpj, jpk, zsurfmsk )
+
+            SELECT CASE ( cd_type )
+              CASE( 'W' )
+                  IF( PRESENT( p_e3 ) ) THEN
+                    zsurfmsk(:,:,1) =  p_e12(:,:) * p_e3(:,:,1) * p_mask(:,:,1) 
+                    DO jk = 2, jpk
+                      zsurfmsk(:,:,jk) =  p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk-1) 
+                    ENDDO
+                 ELSE
+                    zsurfmsk(:,:,1) =  p_e12(:,:) * p_mask(:,:,1) 
+                    DO jk = 2, jpk
+                      zsurfmsk(:,:,jk) =  p_e12(:,:) * p_mask(:,:,jk-1) 
+                    ENDDO
+                 ENDIF
+              CASE DEFAULT
+                 IF( PRESENT( p_e3 ) ) THEN
+                    DO jk = 1, jpk
+                      zsurfmsk(:,:,jk) =  p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk) 
+                    ENDDO
+                 ELSE
+                    DO jk = 1, jpk
+                      zsurfmsk(:,:,jk) =  p_e12(:,:) * p_mask(:,:,jk) 
+                    ENDDO
+                 ENDIF
+              END SELECT
+
+            SELECT CASE ( cd_type )
+            
+               CASE( 'T', 'W' )
+         
+                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        je_2 = mje_crs(2)
+                        DO jk = 1, jpk           
+                           DO ji = nistr, niend, nn_factx
+                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2          
+                              zflcrs  =  p_fld(ji  ,je_2,jk) * zsurfmsk(ji  ,je_2,jk) &
+                                &      + p_fld(ji+1,je_2,jk) * zsurfmsk(ji+1,je_2,jk) &
+                                &      + p_fld(ji+2,je_2,jk) * zsurfmsk(ji+2,je_2,jk) 
+                               !
+                              p_fld_crs(ii,2,jk) = zflcrs
+                           ENDDO
+                        ENDDO
+                      ENDIF
+                  ELSE
+                     je_2 = mjs_crs(2)
+                     DO jk = 1, jpk           
+                        DO ji = nistr, niend, nn_factx
+                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2   
+                           zflcrs  =  p_fld(ji  ,je_2  ,jk) * zsurfmsk(ji  ,je_2  ,jk)  &
+                             &      + p_fld(ji+1,je_2  ,jk) * zsurfmsk(ji+1,je_2  ,jk)  &
+                             &      + p_fld(ji+2,je_2  ,jk) * zsurfmsk(ji+2,je_2  ,jk)  &
+                             &      + p_fld(ji  ,je_2+1,jk) * zsurfmsk(ji  ,je_2+1,jk)  &
+                             &      + p_fld(ji+1,je_2+1,jk) * zsurfmsk(ji+1,je_2+1,jk)  &
+                             &      + p_fld(ji+2,je_2+1,jk) * zsurfmsk(ji+2,je_2+1,jk)  &
+                             &      + p_fld(ji  ,je_2+2,jk) * zsurfmsk(ji  ,je_2+2,jk)  &
+                             &      + p_fld(ji+1,je_2+2,jk) * zsurfmsk(ji+1,je_2+2,jk)  &
+                             &      + p_fld(ji+2,je_2+2,jk) * zsurfmsk(ji+2,je_2+2,jk)  
+                            !
+                            p_fld_crs(ii,2,jk) = zflcrs
+                        ENDDO
+                     ENDDO
+                  ENDIF
+                  !
+                  DO jk = 1, jpk           
+                     DO jj  = njstr, njend, nn_facty
+                        DO ji = nistr, niend, nn_factx
+                           ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
+                           ij  = ( jj - njstr ) * rfacty_r + 3
+                           zflcrs  =  p_fld(ji  ,jj  ,jk) * zsurfmsk(ji  ,jj  ,jk)  &
+                             &      + p_fld(ji+1,jj  ,jk) * zsurfmsk(ji+1,jj  ,jk)  &
+                             &      + p_fld(ji+2,jj  ,jk) * zsurfmsk(ji+2,jj  ,jk)  &
+                             &      + p_fld(ji  ,jj+1,jk) * zsurfmsk(ji  ,jj+1,jk)  &
+                             &      + p_fld(ji+1,jj+1,jk) * zsurfmsk(ji+1,jj+1,jk)  &
+                             &      + p_fld(ji+2,jj+1,jk) * zsurfmsk(ji+2,jj+1,jk)  &
+                             &      + p_fld(ji  ,jj+2,jk) * zsurfmsk(ji  ,jj+2,jk)  &
+                             &      + p_fld(ji+1,jj+2,jk) * zsurfmsk(ji+1,jj+2,jk)  &
+                             &      + p_fld(ji+2,jj+2,jk) * zsurfmsk(ji+2,jj+2,jk)  
+                            !
+                            p_fld_crs(ii,ij,jk) = zflcrs
+                            ! 
                         ENDDO      
                      ENDDO
                   ENDDO   
             
-               CASE( 'W' )
-         
-                  DO jk = 2, jpk
-                    
+               CASE( 'V' )
+
+                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        ijje = mje_crs(2)
+                     ENDIF
+                  ELSE
+                     ijje = mjs_crs(2)
+                  ENDIF
+                  !
+                  DO jk = 1, jpk           
                      DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
+                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+                        zflcrs  =  p_fld(ji  ,ijje,jk) * zsurfmsk(ji  ,ijje,jk) &
+                          &      + p_fld(ji+1,ijje,jk) * zsurfmsk(ji+1,ijje,jk) &
+                          &      + p_fld(ji+2,ijje,jk) * zsurfmsk(ji+2,ijje,jk) 
+                          !
+                        p_fld_crs(ii,2,jk) = zflcrs
+                     ENDDO
+                  ENDDO
+                  !
+                  DO jk = 1, jpk           
+                     DO jj  = njstr, njend, nn_facty
+                        DO ji = nistr, niend, nn_factx
+                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
+                           ij   = ( jj - njstr ) * rfacty_r + 3
                            ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)                  
- 
-                           zflcrs =  p_fld(ji  ,jj  ,jk) * zsurf(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk-1) &
-                             &     + p_fld(ji+1,jj  ,jk) * zsurf(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk-1) &
-                             &     + p_fld(ji+2,jj  ,jk) * zsurf(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk-1) &
-                             &     + p_fld(ji  ,jj+1,jk) * zsurf(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk-1) &
-                             &     + p_fld(ji+1,jj+1,jk) * zsurf(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1) &
-                             &     + p_fld(ji+2,jj+1,jk) * zsurf(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1) &
-                             &     + p_fld(ji  ,jj+2,jk) * zsurf(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk-1) &
-                             &     + p_fld(ji+1,jj+2,jk) * zsurf(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1) &
-                             &     + p_fld(ji+2,jj+2,jk) * zsurf(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1) 
- 
-                           zsfcrs =  zsurf(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk-1) &
-                             &     + zsurf(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk-1) &
-                             &     + zsurf(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk-1) &
-                             &     + zsurf(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk-1) &
-                             &     + zsurf(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1) &
-                             &     + zsurf(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1) &
-                             &     + zsurf(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk-1) &
-                             &     + zsurf(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1) &
-                             &     + zsurf(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1) 
-                           !
+                           zflcrs  =  p_fld(ji  ,ijje,jk) * zsurfmsk(ji  ,ijje,jk) &
+                             &      + p_fld(ji+1,ijje,jk) * zsurfmsk(ji+1,ijje,jk) &
+                             &      + p_fld(ji+2,ijje,jk) * zsurfmsk(ji+2,ijje,jk) 
+                             !
                            p_fld_crs(ii,ij,jk) = zflcrs
-                           IF( zsfcrs /= 0.0 )  p_fld_crs(ii,ij,jk) = zflcrs / zsfcrs
-
+                           ! 
                         ENDDO      
                      ENDDO
                   ENDDO   
-
-                  DO ji = nistr, niend, nn_factx
-                     DO jj = njstr, njend, nn_facty
-                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                        ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                        ijje = mje_crs(ij)
-                        ijie = mie_crs(ii)                  
-
-                          zflcrs =   p_fld(ji  ,jj  ,1) * zsurf(ji  ,jj  ,1) * p_mask(ji  ,jj  ,1) &
-                             &     + p_fld(ji+1,jj  ,1) * zsurf(ji+1,jj  ,1) * p_mask(ji+1,jj  ,1) &
-                             &     + p_fld(ji+2,jj  ,1) * zsurf(ji+2,jj  ,1) * p_mask(ji+2,jj  ,1) &
-                             &     + p_fld(ji  ,jj+1,1) * zsurf(ji  ,jj+1,1) * p_mask(ji  ,jj+1,1) &
-                             &     + p_fld(ji+1,jj+1,1) * zsurf(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1) &
-                             &     + p_fld(ji+2,jj+1,1) * zsurf(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1) &
-                             &     + p_fld(ji  ,jj+2,1) * zsurf(ji  ,jj+2,1) * p_mask(ji  ,jj+2,1) &
-                             &     + p_fld(ji+1,jj+2,1) * zsurf(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1) &
-                             &     + p_fld(ji+2,jj+2,1) * zsurf(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1) 
- 
-                           zsfcrs =  zsurf(ji  ,jj  ,1) * p_mask(ji  ,jj  ,1) &
-                             &     + zsurf(ji+1,jj  ,1) * p_mask(ji+1,jj  ,1) &
-                             &     + zsurf(ji+2,jj  ,1) * p_mask(ji+2,jj  ,1) &
-                             &     + zsurf(ji  ,jj+1,1) * p_mask(ji  ,jj+1,1) &
-                             &     + zsurf(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1) &
-                             &     + zsurf(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1) &
-                             &     + zsurf(ji  ,jj+2,1) * p_mask(ji  ,jj+2,1) &
-                             &     + zsurf(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1) &
-                             &     + zsurf(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1) 
-                         
-                        p_fld_crs(ii,ij,1) = zflcrs
-                        IF( zsfcrs /= 0.0 )  p_fld_crs(ii,ij,1) = zflcrs / zsfcrs
-
-                     ENDDO      
+            
+               CASE( 'U' )
+
+                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        je_2 = mje_crs(2)
+                        DO jk = 1, jpk           
+                           DO ji = nistr, niend, nn_factx
+                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2  
+                              ijie = mie_crs(ii)
+                              zflcrs  =  p_fld(ijie,je_2,jk) * zsurfmsk(ijie,je_2,jk)  
+                              p_fld_crs(ii,2,jk) = zflcrs
+                           ENDDO
+                        ENDDO
+                      ENDIF
+                  ELSE
+                     je_2 = mjs_crs(2)
+                     DO jk = 1, jpk           
+                        DO ji = nistr, niend, nn_factx
+                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2   
+                           ijie = mie_crs(ii)
+                           zflcrs =  p_fld(ijie,je_2  ,jk) * zsurfmsk(ijie,je_2  ,jk)  &
+                             &     + p_fld(ijie,je_2+1,jk) * zsurfmsk(ijie,je_2+1,jk)  &
+                             &     + p_fld(ijie,je_2+2,jk) * zsurfmsk(ijie,je_2+2,jk) 
+
+                           p_fld_crs(ii,2,jk) = zflcrs
+                        ENDDO
+                     ENDDO
+                  ENDIF
+                  !
+                  DO jk = 1, jpk           
+                     DO jj  = njstr, njend, nn_facty
+                        DO ji = nistr, niend, nn_factx
+                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                           ij   = ( jj - njstr ) * rfacty_r + 3
+                           ijie = mie_crs(ii)
+                           zflcrs =  p_fld(ijie,jj  ,jk) * zsurfmsk(ijie,jj  ,jk)  &
+                              &    + p_fld(ijie,jj+1,jk) * zsurfmsk(ijie,jj+1,jk)  &
+                              &    + p_fld(ijie,jj+2,jk) * zsurfmsk(ijie,jj+2,jk) 
+                             !
+                           p_fld_crs(ii,ij,jk) = zflcrs
+                           ! 
+                        ENDDO      
+                     ENDDO
+                  ENDDO   
+
+              END SELECT
+
+              IF( PRESENT( p_surf_crs ) ) THEN
+                 WHERE ( p_surf_crs /= 0.0 ) p_fld_crs(:,:,:) = p_fld_crs(:,:,:) / p_surf_crs(:,:,:)
+              ENDIF
+
+              CALL wrk_dealloc( jpi, jpj, jpk, zsurfmsk )
+
+         CASE ( 'MAX' )    !  search the max of unmasked grid cells
+
+            CALL wrk_alloc( jpi, jpj, jpk, zmask )
+
+            SELECT CASE ( cd_type )
+              CASE( 'W' )
+                  zmask(:,:,1) = p_mask(:,:,1) 
+                  DO jk = 2, jpk
+                     zmask(:,:,jk) = p_mask(:,:,jk-1) 
                   ENDDO
-
-              END SELECT
-
-              CALL wrk_dealloc( jpi, jpj, jpk, zsurf )
-
-         CASE ( 'SUM' )
-         
-            CALL wrk_alloc( jpi, jpj, jpk, zsurf )
-
-            IF( PRESENT( p_e3 ) ) THEN
-               DO jk = 1, jpk
-                 zsurf(:,:,jk) =  p_e12(:,:) * p_e3(:,:,jk)
-               ENDDO
-            ELSE
-               DO jk = 1, jpk
-                 zsurf(:,:,jk) =  p_e12(:,:) 
-               ENDDO
-            ENDIF
+              CASE ( 'T' )
+                  DO jk = 1, jpk
+                     zmask(:,:,jk) = p_mask(:,:,jk) 
+                  ENDDO
+            END SELECT
 
             SELECT CASE ( cd_type )
             
-               CASE( 'T' )
+               CASE( 'T', 'W' )
          
-                  DO jk = 1, jpk
-                     DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)                  
- 
-                           zflcrs  =  p_fld(ji  ,jj  ,jk) * zsurf(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk) &
-                             &      + p_fld(ji+1,jj  ,jk) * zsurf(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk) &
-                             &      + p_fld(ji+2,jj  ,jk) * zsurf(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk) &
-                             &      + p_fld(ji  ,jj+1,jk) * zsurf(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk) &
-                             &      + p_fld(ji+1,jj+1,jk) * zsurf(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk) &
-                             &      + p_fld(ji+2,jj+1,jk) * zsurf(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk) &
-                             &      + p_fld(ji  ,jj+2,jk) * zsurf(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk) &
-                             &      + p_fld(ji+1,jj+2,jk) * zsurf(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk) &
-                             &      + p_fld(ji+2,jj+2,jk) * zsurf(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk) 
+                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        je_2 = mje_crs(2)
+                        DO jk = 1, jpk           
+                           DO ji = nistr, niend, nn_factx
+                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2        
+                              zflcrs =  &
+                                & MAX( p_fld(ji  ,je_2,jk) * zmask(ji  ,je_2,jk) - ( 1.- zmask(ji  ,je_2,jk) ) * r_inf ,  &
+                                &      p_fld(ji+1,je_2,jk) * zmask(ji+1,je_2,jk) - ( 1.- zmask(ji+1,je_2,jk) ) * r_inf ,  &
+                                &      p_fld(ji+2,je_2,jk) * zmask(ji+2,je_2,jk) - ( 1.- zmask(ji+2,je_2,jk) ) * r_inf  )
+                              !
+                              p_fld_crs(ii,2,jk) = zflcrs
+                           ENDDO
+                        ENDDO
+                      ENDIF
+                  ELSE
+                     je_2 = mjs_crs(2)
+                     DO jk = 1, jpk           
+                        DO ji = nistr, niend, nn_factx
+                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2   
+                           zflcrs =  &
+                             & MAX( p_fld(ji  ,je_2  ,jk) * zmask(ji  ,je_2  ,jk) - ( 1.- zmask(ji  ,je_2  ,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,je_2  ,jk) * zmask(ji+1,je_2  ,jk) - ( 1.- zmask(ji+1,je_2  ,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,je_2  ,jk) * zmask(ji+2,je_2  ,jk) - ( 1.- zmask(ji+2,je_2  ,jk) ) * r_inf ,  &
+                             &      p_fld(ji  ,je_2+1,jk) * zmask(ji  ,je_2+1,jk) - ( 1.- zmask(ji  ,je_2+1,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk) - ( 1.- zmask(ji+1,je_2+1,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk) - ( 1.- zmask(ji+2,je_2+1,jk) ) * r_inf ,  &
+                             &      p_fld(ji  ,je_2+2,jk) * zmask(ji  ,je_2+2,jk) - ( 1.- zmask(ji  ,je_2+2,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk) - ( 1.- zmask(ji+1,je_2+2,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk) - ( 1.- zmask(ji+2,je_2+2,jk) ) * r_inf   )
+                           !
+                           p_fld_crs(ii,2,jk) = zflcrs
+                        ENDDO
+                     ENDDO
+                  ENDIF
+                  !
+                  DO jk = 1, jpk           
+                     DO jj  = njstr, njend, nn_facty
+                        DO ji = nistr, niend, nn_factx
+                           ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
+                           ij  = ( jj - njstr ) * rfacty_r + 3
+                           zflcrs =  &
+                             & MAX( p_fld(ji  ,jj  ,jk) * zmask(ji  ,jj  ,jk) - ( 1.- zmask(ji  ,jj  ,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,jj  ,jk) * zmask(ji+1,jj  ,jk) - ( 1.- zmask(ji+1,jj  ,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,jj  ,jk) * zmask(ji+2,jj  ,jk) - ( 1.- zmask(ji+2,jj  ,jk) ) * r_inf ,  &
+                             &      p_fld(ji  ,jj+1,jk) * zmask(ji  ,jj+1,jk) - ( 1.- zmask(ji  ,jj+1,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk) - ( 1.- zmask(ji+1,jj+1,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk) - ( 1.- zmask(ji+2,jj+1,jk) ) * r_inf ,  &
+                             &      p_fld(ji  ,jj+2,jk) * zmask(ji  ,jj+2,jk) - ( 1.- zmask(ji  ,jj+2,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk) - ( 1.- zmask(ji+1,jj+2,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk) - ( 1.- zmask(ji+2,jj+2,jk) ) * r_inf   )
                            !
                            p_fld_crs(ii,ij,jk) = zflcrs
@@ -656,23 +851,37 @@
                   ENDDO   
             
-               CASE( 'W' )
-         
-                  DO jk = 2, jpk
+               CASE( 'V' )
+
+                 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        ijje = mje_crs(2)
+                      ENDIF
+                  ELSE
+                     ijje = mjs_crs(2)
+                  ENDIF
+
+                  DO jk = 1, jpk
                      DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
+                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                        zflcrs = &
+                          & MAX( p_fld(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  &
+                          &      p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  &
+                          &      p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf )
+                          !
+                        p_fld_crs(ii,2,jk) = zflcrs
+                     ENDDO
+                  ENDDO
+                  !
+                  DO jk = 1, jpk           
+                     DO jj  = njstr, njend, nn_facty
+                        DO ji = nistr, niend, nn_factx
+                           ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
+                           ij  = ( jj - njstr ) * rfacty_r + 3
                            ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)
                            !                  
-                           zflcrs  =  p_fld(ji  ,jj  ,jk) * zsurf(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk-1) &
-                             &      + p_fld(ji+1,jj  ,jk) * zsurf(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk-1) &
-                             &      + p_fld(ji+2,jj  ,jk) * zsurf(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk-1) &
-                             &      + p_fld(ji  ,jj+1,jk) * zsurf(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk-1) &
-                             &      + p_fld(ji+1,jj+1,jk) * zsurf(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1) &
-                             &      + p_fld(ji+2,jj+1,jk) * zsurf(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1) &
-                             &      + p_fld(ji  ,jj+2,jk) * zsurf(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk-1) &
-                             &      + p_fld(ji+1,jj+2,jk) * zsurf(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1) &
-                             &      + p_fld(ji+2,jj+2,jk) * zsurf(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1) 
+                           zflcrs = &
+                             & MAX( p_fld(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf )
                            !
                            p_fld_crs(ii,ij,jk) = zflcrs
@@ -682,63 +891,49 @@
                   ENDDO   
 
-                  DO ji = nistr, niend, nn_factx
-                     DO jj = njstr, njend, nn_facty
-                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                        ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                        ijje = mje_crs(ij)
-                        ijie = mie_crs(ii)                  
-                        !
-                        zflcrs  =   p_fld(ji  ,jj  ,1) * zsurf(ji  ,jj  ,1) * p_mask(ji  ,jj  ,1) &
-                           &      + p_fld(ji+1,jj  ,1) * zsurf(ji+1,jj  ,1) * p_mask(ji+1,jj  ,1) &
-                           &      + p_fld(ji+2,jj  ,1) * zsurf(ji+2,jj  ,1) * p_mask(ji+2,jj  ,1) &
-                           &      + p_fld(ji  ,jj+1,1) * zsurf(ji  ,jj+1,1) * p_mask(ji  ,jj+1,1) &
-                           &      + p_fld(ji+1,jj+1,1) * zsurf(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1) &
-                           &      + p_fld(ji+2,jj+1,1) * zsurf(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1) &
-                           &      + p_fld(ji  ,jj+2,1) * zsurf(ji  ,jj+2,1) * p_mask(ji  ,jj+2,1) &
-                           &      + p_fld(ji+1,jj+2,1) * zsurf(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1) &
-                           &      + p_fld(ji+2,jj+2,1) * zsurf(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1) 
-                        !
-                        p_fld_crs(ii,ij,1) = zflcrs
-                        !
-                     ENDDO      
-                  ENDDO
-           
-               CASE( 'V' )
-         
-                  DO jk = 1, jpk
-                     DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)
-                           !                  
-                           zflcrs  =  p_fld(ji  ,ijje,jk) * zsurf(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk) &
-                             &      + p_fld(ji+1,ijje,jk) * zsurf(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) &
-                             &      + p_fld(ji+2,ijje,jk) * zsurf(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) 
-                           !
-                           p_fld_crs(ii,ij,jk) = zflcrs
-                           !
-                         ENDDO      
-                     ENDDO
-                  ENDDO   
-
             
                CASE( 'U' )
-         
-                  DO jk = 1, jpk
-                     DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
+
+                 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        je_2 = mje_crs(2)
+                        DO jk = 1, jpk           
+                           DO ji = nistr, niend, nn_factx
+                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2  
+                              ijie = mie_crs(ii)
+                              zflcrs = p_fld(ijie,je_2,jk) * p_mask(ijie,je_2,jk) - ( 1.- p_mask(ijie,je_2,jk) ) * r_inf 
+                              !
+                              p_fld_crs(ii,2,jk) = zflcrs
+                            ENDDO
+                        ENDDO
+                      ENDIF
+                  ELSE
+                     je_2 = mjs_crs(2)
+                     DO jk = 1, jpk           
+                        DO ji = nistr, niend, nn_factx
+                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2   
+                           ijie = mie_crs(ii)
+                           zflcrs = &
+                             & MAX( p_fld(ijie,je_2  ,jk) * p_mask(ijie,je_2  ,jk) - ( 1.- p_mask(ijie,je_2,jk) ) * r_inf ,  &
+                             &      p_fld(ijie,je_2+1,jk) * p_mask(ijie,je_2+1,jk) - ( 1.- p_mask(ijie,je_2,jk) ) * r_inf ,  &
+                             &      p_fld(ijie,je_2+2,jk) * p_mask(ijie,je_2+2,jk) - ( 1.- p_mask(ijie,je_2,jk) ) * r_inf  )
+                            !
+                           p_fld_crs(ii,2,jk) = zflcrs
+                        ENDDO
+                     ENDDO
+                  ENDIF
+                  !
+                  DO jk = 1, jpk           
+                     DO jj  = njstr, njend, nn_facty
+                        DO ji = nistr, niend, nn_factx
                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
+                           ij   = ( jj - njstr ) * rfacty_r + 3
                            ijie = mie_crs(ii)
-                           !                  
-                           zflcrs =  p_fld(ijie,jj  ,jk) * zsurf(ijie,jj  ,jk) * p_mask(ijie,jj  ,jk) &
-                             &     + p_fld(ijie,jj+1,jk) * zsurf(ijie,jj+1,jk) * p_mask(ijie,jj+1,jk) &
-                             &     + p_fld(ijie,jj+2,jk) * zsurf(ijie,jj+2,jk) * p_mask(ijie,jj+2,jk)
-                           !
+                           zflcrs =  &
+                             & MAX( p_fld(ijie,jj  ,jk) * p_mask(ijie,jj  ,jk) - ( 1.- p_mask(ijie,jj,jk) ) * r_inf ,  &
+                             &      p_fld(ijie,jj+1,jk) * p_mask(ijie,jj+1,jk) - ( 1.- p_mask(ijie,jj,jk) ) * r_inf ,  &
+                             &      p_fld(ijie,jj+2,jk) * p_mask(ijie,jj+2,jk) - ( 1.- p_mask(ijie,jj,jk) ) * r_inf  )
+                           ! 
                            p_fld_crs(ii,ij,jk) = zflcrs
-                           !
+                           ! 
                         ENDDO      
                      ENDDO
@@ -747,33 +942,77 @@
               END SELECT
 
-              IF( PRESENT( p_surf_crs ) ) THEN
-                 WHERE ( p_surf_crs /= 0.0 ) p_fld_crs(:,:,:) = p_fld_crs(:,:,:) / p_surf_crs(:,:,:)
-              ENDIF
-
-              CALL wrk_dealloc( jpi, jpj, jpk, zsurf )
-
-         CASE ( 'MAX' )
+              CALL wrk_dealloc( jpi, jpj, jpk, zmask )
+
+         CASE ( 'MIN' )      !   Search the min of unmasked grid cells
+
+            CALL wrk_alloc( jpi, jpj, jpk, zmask )
+
+            SELECT CASE ( cd_type )
+              CASE( 'W' )
+                  zmask(:,:,1) = p_mask(:,:,1) 
+                  DO jk = 2, jpk
+                     zmask(:,:,jk) = p_mask(:,:,jk-1) 
+                  ENDDO
+              CASE ( 'T' )
+                  DO jk = 1, jpk
+                     zmask(:,:,jk) = p_mask(:,:,jk) 
+                  ENDDO
+            END SELECT
+
+            SELECT CASE ( cd_type )
+
+               CASE( 'T', 'W' )
          
-            SELECT CASE ( cd_type )
-            
-               CASE( 'T' )
-         
-                  DO jk = 1, jpk
-                     DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)                  
- 
-                           zflcrs =  MAX( p_fld(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk),  &
-                             &            p_fld(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk),  &
-                             &            p_fld(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk),  &
-                             &            p_fld(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk),  &
-                             &            p_fld(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk),  &
-                             &            p_fld(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk),  &
-                             &            p_fld(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk),  &
-                             &            p_fld(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk),  &
-                             &            p_fld(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk)   )
+                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        je_2 = mje_crs(2)
+                        DO jk = 1, jpk           
+                           DO ji = nistr, niend, nn_factx
+                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2        
+                              zflcrs =  &
+                                & MIN( p_fld(ji  ,je_2,jk) * zmask(ji  ,je_2,jk) + ( 1.- zmask(ji  ,je_2,jk) ) * r_inf ,  &
+                                &      p_fld(ji+1,je_2,jk) * zmask(ji+1,je_2,jk) + ( 1.- zmask(ji+1,je_2,jk) ) * r_inf ,  &
+                                &      p_fld(ji+2,je_2,jk) * zmask(ji+2,je_2,jk) + ( 1.- zmask(ji+2,je_2,jk) ) * r_inf  )
+                              !
+                              p_fld_crs(ii,2,jk) = zflcrs
+                           ENDDO
+                        ENDDO
+                      ENDIF
+                  ELSE
+                     je_2 = mjs_crs(2)
+                     DO jk = 1, jpk           
+                        DO ji = nistr, niend, nn_factx
+                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2   
+                           zflcrs =  &
+                             & MIN( p_fld(ji  ,je_2  ,jk) * zmask(ji  ,je_2  ,jk) + ( 1.- zmask(ji  ,je_2  ,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,je_2  ,jk) * zmask(ji+1,je_2  ,jk) + ( 1.- zmask(ji+1,je_2  ,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,je_2  ,jk) * zmask(ji+2,je_2  ,jk) + ( 1.- zmask(ji+2,je_2  ,jk) ) * r_inf ,  &
+                             &      p_fld(ji  ,je_2+1,jk) * zmask(ji  ,je_2+1,jk) + ( 1.- zmask(ji  ,je_2+1,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk) + ( 1.- zmask(ji+1,je_2+1,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk) + ( 1.- zmask(ji+2,je_2+1,jk) ) * r_inf ,  &
+                             &      p_fld(ji  ,je_2+2,jk) * zmask(ji  ,je_2+2,jk) + ( 1.- zmask(ji  ,je_2+2,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk) + ( 1.- zmask(ji+1,je_2+2,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk) + ( 1.- zmask(ji+2,je_2+2,jk) ) * r_inf   )
+                           !
+                           p_fld_crs(ii,2,jk) = zflcrs
+                        ENDDO
+                     ENDDO
+                  ENDIF
+                  !
+                  DO jk = 1, jpk           
+                     DO jj  = njstr, njend, nn_facty
+                        DO ji = nistr, niend, nn_factx
+                           ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
+                           ij  = ( jj - njstr ) * rfacty_r + 3
+                           zflcrs =  &
+                             & MIN( p_fld(ji  ,jj  ,jk) * zmask(ji  ,jj  ,jk) + ( 1.- zmask(ji  ,jj  ,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,jj  ,jk) * zmask(ji+1,jj  ,jk) + ( 1.- zmask(ji+1,jj  ,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,jj  ,jk) * zmask(ji+2,jj  ,jk) + ( 1.- zmask(ji+2,jj  ,jk) ) * r_inf ,  &
+                             &      p_fld(ji  ,jj+1,jk) * zmask(ji  ,jj+1,jk) + ( 1.- zmask(ji  ,jj+1,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk) + ( 1.- zmask(ji+1,jj+1,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk) + ( 1.- zmask(ji+2,jj+1,jk) ) * r_inf ,  &
+                             &      p_fld(ji  ,jj+2,jk) * zmask(ji  ,jj+2,jk) + ( 1.- zmask(ji  ,jj+2,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk) + ( 1.- zmask(ji+1,jj+2,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk) + ( 1.- zmask(ji+2,jj+2,jk) ) * r_inf   )
                            !
                            p_fld_crs(ii,ij,jk) = zflcrs
@@ -783,23 +1022,36 @@
                   ENDDO   
             
-               CASE( 'W' )
-         
-                  DO jk = 2, jpk
+               CASE( 'V' )
+
+                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        ijje = mje_crs(2)
+                      ENDIF
+                  ELSE
+                     ijje = mjs_crs(2)
+                  ENDIF
+
+                  DO jk = 1, jpk
                      DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
+                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                        zflcrs = &
+                          & MIN( p_fld(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  &
+                          &      p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  &
+                          &      p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf )
+                          !
+                        p_fld_crs(ii,2,jk) = zflcrs
+                     ENDDO
+                  ENDDO
+                  !
+                  DO jk = 1, jpk           
+                     DO jj  = njstr, njend, nn_facty
+                        DO ji = nistr, niend, nn_factx
+                           ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
+                           ij  = ( jj - njstr ) * rfacty_r + 3
                            ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)
-                           !                  
-                           zflcrs =  MAX( p_fld(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk-1),  &
-                             &            p_fld(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk-1),  &
-                             &            p_fld(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk-1),  &
-                             &            p_fld(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk-1),  &
-                             &            p_fld(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1),  &
-                             &            p_fld(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1),  &
-                             &            p_fld(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk-1),  &
-                             &            p_fld(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1),  &
-                             &            p_fld(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1) )
+                           zflcrs = &
+                             & MIN( p_fld(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  &
+                             &      p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  &
+                             &      p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf )
                            !
                            p_fld_crs(ii,ij,jk) = zflcrs
@@ -809,196 +1061,64 @@
                   ENDDO   
 
-                  DO ji = nistr, niend, nn_factx
-                     DO jj = njstr, njend, nn_facty
-                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                        ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                        ijje = mje_crs(ij)
-                        ijie = mie_crs(ii)                  
-                        !
-                        zflcrs = MAX( p_fld(ji  ,jj  ,1) * p_mask(ji  ,jj  ,1),  &
-                           &          p_fld(ji+1,jj  ,1) * p_mask(ji+1,jj  ,1),  &
-                           &          p_fld(ji+2,jj  ,1) * p_mask(ji+2,jj  ,1),  &
-                           &          p_fld(ji  ,jj+1,1) * p_mask(ji  ,jj+1,1),  &
-                           &          p_fld(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1),  &
-                           &          p_fld(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1),  &
-                           &          p_fld(ji  ,jj+2,1) * p_mask(ji  ,jj+2,1),  &
-                           &          p_fld(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1),  &
-                           &          p_fld(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1)  ) 
-                         !
-                         p_fld_crs(ii,ij,1) = zflcrs
-                         !
-                     ENDDO      
-                  ENDDO
-           
-               CASE( 'V' )
-         
-                  DO jk = 1, jpk
-                     DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
+            
+               CASE( 'U' )
+
+                 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        je_2 = mje_crs(2)
+                        DO jk = 1, jpk           
+                           DO ji = nistr, niend, nn_factx
+                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2  
+                              ijie = mie_crs(ii)
+                              zflcrs = p_fld(ijie,je_2,jk) * p_mask(ijie,je_2,jk) + ( 1.- p_mask(ijie,je_2,jk) ) * r_inf 
+                              !
+                              p_fld_crs(ii,2,jk) = zflcrs
+                            ENDDO
+                        ENDDO
+                      ENDIF
+                  ELSE
+                     je_2 = mjs_crs(2)
+                     DO jk = 1, jpk           
+                        DO ji = nistr, niend, nn_factx
+                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2   
+                           ijie = mie_crs(ii)
+                           zflcrs = &
+                             & MIN( p_fld(ijie,je_2  ,jk) * p_mask(ijie,je_2  ,jk) + ( 1.- p_mask(ijie,je_2,jk) ) * r_inf ,  &
+                             &      p_fld(ijie,je_2+1,jk) * p_mask(ijie,je_2+1,jk) + ( 1.- p_mask(ijie,je_2,jk) ) * r_inf ,  &
+                             &      p_fld(ijie,je_2+2,jk) * p_mask(ijie,je_2+2,jk) + ( 1.- p_mask(ijie,je_2,jk) ) * r_inf  )
+                            !
+                           p_fld_crs(ii,2,jk) = zflcrs
+                        ENDDO
+                     ENDDO
+                  ENDIF
+                  !
+                  DO jk = 1, jpk           
+                     DO jj  = njstr, njend, nn_facty
+                        DO ji = nistr, niend, nn_factx
                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
+                           ij   = ( jj - njstr ) * rfacty_r + 3
                            ijie = mie_crs(ii)
-                           !                  
-                           zflcrs = MAX( p_fld(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk),  &
-                             &           p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk),  &
-                             &           p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) )
-                           !
+                           zflcrs = &
+                             & MIN( p_fld(ijie,jj  ,jk) * p_mask(ijie,jj  ,jk) + ( 1.- p_mask(ijie,jj,jk) ) * r_inf ,  &
+                             &      p_fld(ijie,jj+1,jk) * p_mask(ijie,jj+1,jk) + ( 1.- p_mask(ijie,jj,jk) ) * r_inf ,  &
+                             &      p_fld(ijie,jj+2,jk) * p_mask(ijie,jj+2,jk) + ( 1.- p_mask(ijie,jj,jk) ) * r_inf  )
+                           ! 
                            p_fld_crs(ii,ij,jk) = zflcrs
-                           !
+                           ! 
                         ENDDO      
                      ENDDO
                   ENDDO   
-
-            
-               CASE( 'U' )
-         
-                  DO jk = 1, jpk
-                     DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)
-                           !                  
-                           Zflcrs = MAX( p_fld(ijie,jj  ,jk) * p_mask(ijie,jj  ,jk),  &
-                             &           p_fld(ijie,jj+1,jk) * p_mask(ijie,jj+1,jk),  &
-                             &           p_fld(ijie,jj+2,jk) * p_mask(ijie,jj+2,jk) )
-                           !
-                           p_fld_crs(ii,ij,jk) = zflcrs
-                           !
-                        ENDDO      
-                     ENDDO
-                  ENDDO   
-
-              END SELECT
-
-         CASE ( 'MIN' )
-            !   Search the min of masked grid cells
-            SELECT CASE ( cd_type )
-            
-               CASE( 'T' )
-         
-                  DO jk = 1, jpk
-                     DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)                  
-                           
-                           zflcrs =  MIN( p_fld(ji  ,jj  ,jk) * ( 1. + ( 1. - p_mask(ji  ,jj  ,jk) ) * zeps ),  &
-                             &            p_fld(ji+1,jj  ,jk) * ( 1. + ( 1. - p_mask(ji+1,jj  ,jk) ) * zeps ),  &
-                             &            p_fld(ji+2,jj  ,jk) * ( 1. + ( 1. - p_mask(ji+2,jj  ,jk) ) * zeps ),  &
-                             &            p_fld(ji  ,jj+1,jk) * ( 1. + ( 1. - p_mask(ji  ,jj  ,jk) ) * zeps ),  &
-                             &            p_fld(ji+1,jj+1,jk) * ( 1. + ( 1. - p_mask(ji+1,jj+1,jk) ) * zeps ),  &
-                             &            p_fld(ji+2,jj+1,jk) * ( 1. + ( 1. - p_mask(ji+2,jj+2,jk) ) * zeps ),  &
-                             &            p_fld(ji  ,jj+2,jk) * ( 1. + ( 1. - p_mask(ji  ,jj  ,jk) ) * zeps ),  &
-                             &            p_fld(ji+1,jj+2,jk) * ( 1. + ( 1. - p_mask(ji+1,jj+1,jk) ) * zeps ),  &
-                             &            p_fld(ji+2,jj+2,jk) * ( 1. + ( 1. - p_mask(ji+2,jj+2,jk) ) * zeps )   )
-                           !
-                           p_fld_crs(ii,ij,jk) = zflcrs * p_mask_crs(ii,ij,jk)
-                           !
-                        ENDDO      
-                     ENDDO
-                  ENDDO   
-           
-               CASE( 'W' )
-         
-                  DO jk = 2, jpk
-                     DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)                  
-                           
-                           zflcrs =  MIN( p_fld(ji  ,jj  ,jk) * ( 1. + ( 1. - p_mask(ji  ,jj  ,jk-1) ) * zeps ),  &
-                             &            p_fld(ji+1,jj  ,jk) * ( 1. + ( 1. - p_mask(ji+1,jj  ,jk-1) ) * zeps ),  &
-                             &            p_fld(ji+2,jj  ,jk) * ( 1. + ( 1. - p_mask(ji+2,jj  ,jk-1) ) * zeps ),  &
-                             &            p_fld(ji  ,jj+1,jk) * ( 1. + ( 1. - p_mask(ji  ,jj  ,jk-1) ) * zeps ),  &
-                             &            p_fld(ji+1,jj+1,jk) * ( 1. + ( 1. - p_mask(ji+1,jj+1,jk-1) ) * zeps ),  &
-                             &            p_fld(ji+2,jj+1,jk) * ( 1. + ( 1. - p_mask(ji+2,jj+2,jk-1) ) * zeps ),  &
-                             &            p_fld(ji  ,jj+2,jk) * ( 1. + ( 1. - p_mask(ji  ,jj  ,jk-1) ) * zeps ),  &
-                             &            p_fld(ji+1,jj+2,jk) * ( 1. + ( 1. - p_mask(ji+1,jj+1,jk-1) ) * zeps ),  &
-                             &            p_fld(ji+2,jj+2,jk) * ( 1. + ( 1. - p_mask(ji+2,jj+2,jk-1) ) * zeps )   )
-                           !
-                           p_fld_crs(ii,ij,jk) = zflcrs * p_mask_crs(ii,ij,jk)
-                           !
-                        ENDDO      
-                     ENDDO
-                  ENDDO  
- 
-                  DO ji = nistr, niend, nn_factx
-                     DO jj = njstr, njend, nn_facty
-                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                        ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                        ijje = mje_crs(ij)
-                        ijie = mie_crs(ii)                  
-                        
-                        zflcrs =  MIN( p_fld(ji  ,jj  ,1) * ( 1. + ( 1. - p_mask(ji  ,jj  ,1) ) * zeps ),  &
-                          &            p_fld(ji+1,jj  ,1) * ( 1. + ( 1. - p_mask(ji+1,jj  ,1) ) * zeps ),  &
-                          &            p_fld(ji+2,jj  ,1) * ( 1. + ( 1. - p_mask(ji+2,jj  ,1) ) * zeps ),  &
-                          &            p_fld(ji  ,jj+1,1) * ( 1. + ( 1. - p_mask(ji  ,jj  ,1) ) * zeps ),  &
-                          &            p_fld(ji+1,jj+1,1) * ( 1. + ( 1. - p_mask(ji+1,jj+1,1) ) * zeps ),  &
-                          &            p_fld(ji+2,jj+1,1) * ( 1. + ( 1. - p_mask(ji+2,jj+2,1) ) * zeps ),  &
-                          &            p_fld(ji  ,jj+2,1) * ( 1. + ( 1. - p_mask(ji  ,jj  ,1) ) * zeps ),  &
-                          &            p_fld(ji+1,jj+2,1) * ( 1. + ( 1. - p_mask(ji+1,jj+1,1) ) * zeps ),  &
-                          &            p_fld(ji+2,jj+2,1) * ( 1. + ( 1. - p_mask(ji+2,jj+2,1) ) * zeps )   )
-                        !
-                        p_fld_crs(ii,ij,1) = zflcrs * p_mask_crs(ii,ij,1)
-                        !
-                     ENDDO      
-                  ENDDO
-
-               CASE( 'V' )
-         
-                  DO jk = 1, jpk
-                     DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)                  
-                           
-                           zflcrs =  MIN( p_fld(ji  ,ijje,jk) * ( 1. + ( 1. - p_mask(ji  ,ijje,jk) ) * zeps ),  &
-                             &            p_fld(ji+1,ijje,jk) * ( 1. + ( 1. - p_mask(ji+1,ijje,jk) ) * zeps ),  &
-                             &            p_fld(ji+2,ijje,jk) * ( 1. + ( 1. - p_mask(ji+2,ijje,jk) ) * zeps )   )
-                           !
-                           p_fld_crs(ii,ij,jk) = zflcrs * p_mask_crs(ii,ij,jk)
-                           !
-                        ENDDO      
-                     ENDDO
-                  ENDDO  
-
-
-               CASE( 'U' )
-         
-                  DO jk = 1, jpk
-                     DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)                  
-                           
-                           zflcrs =  MIN( p_fld(ijie,jj  ,jk) * ( 1. + ( 1. - p_mask(ijie,jj  ,jk) ) * zeps ),  &
-                             &            p_fld(ijie,jj+1,jk) * ( 1. + ( 1. - p_mask(ijie,jj+1,jk) ) * zeps ),  &
-                             &            p_fld(ijie,jj+2,jk) * ( 1. + ( 1. - p_mask(ijie,jj+2,jk) ) * zeps )   )
-                           !
-                           p_fld_crs(ii,ij,jk) = zflcrs * p_mask_crs(ii,ij,jk)
-                           !
-                        ENDDO      
-                     ENDDO
-                  ENDDO  
+          
             END SELECT
+            !
+            CALL wrk_dealloc( jpi, jpj, jpk, zmask )
             !
          END SELECT
          !
-         CALL crs_lbc_lnk( p_fld_crs, cd_type, 1.0 )
+         CALL crs_lbc_lnk( p_fld_crs, cd_type, psgn )
          !
     END SUBROUTINE crs_dom_ope_3d
 
-    SUBROUTINE crs_dom_ope_2d( p_fld, cd_op, cd_type, p_mask, p_fld_crs, p_e12, p_e3, p_surf_crs, p_mask_crs )
+    SUBROUTINE crs_dom_ope_2d( p_fld, cd_op, cd_type, p_mask, p_fld_crs, p_e12, p_e3, p_surf_crs, p_mask_crs, psgn )
       !!----------------------------------------------------------------
       !!               *** SUBROUTINE crsfun_UV ***
@@ -1033,4 +1153,5 @@
       REAL(wp), DIMENSION(jpi_crs,jpj_crs)    , INTENT(in), OPTIONAL :: p_surf_crs ! Coarse grid area-weighting denominator    
       REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(in), OPTIONAL :: p_mask_crs    ! Coarse grid T,U,V mask
+      REAL(wp),                                 INTENT(in)           :: psgn   
 
       REAL(wp), DIMENSION(jpi_crs,jpj_crs)    , INTENT(out)          :: p_fld_crs ! Coarse grid box 3D quantity 
@@ -1038,172 +1159,306 @@
       !! Local variables
       INTEGER  :: ji, jj, jk                 ! dummy loop indices
-      INTEGER  :: ijie, ijje, ii, ij
+      INTEGER  :: ijie, ijje, ii, ij, je_2
       REAL(wp) :: zflcrs, zsfcrs   
-      REAL(wp) :: zeps = 1.e20    
-      REAL(wp), DIMENSION(:,:), POINTER :: zsurf   
+      REAL(wp), DIMENSION(:,:), POINTER :: zsurfmsk   
 
       !!----------------------------------------------------------------  
    
+      p_fld_crs(:,:) = 0.0
 
       SELECT CASE ( cd_op )
       
-         CASE ( 'VOL' )
+        CASE ( 'VOL' )
       
-           CALL wrk_alloc( jpi, jpj, zsurf )
-           zsurf(:,:) =  p_e12(:,:) * p_e3(:,:,1) * p_mask(:,:,1)
-                    
-           DO ji = nistr, niend, nn_factx
-              DO jj = njstr, njend, nn_facty
-                 ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                 ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                 ijje = mje_crs(ij)
-                 ijie = mie_crs(ii)                  
- 
-                 zflcrs =  p_fld(ji  ,jj  ) * zsurf(ji  ,jj  )  &
-                   &     + p_fld(ji+1,jj  ) * zsurf(ji+1,jj  )  &
-                   &     + p_fld(ji+2,jj  ) * zsurf(ji+2,jj  )  &
-                   &     + p_fld(ji  ,jj+1) * zsurf(ji  ,jj+1)  &
-                   &     + p_fld(ji+1,jj+1) * zsurf(ji+1,jj+1)  &
-                   &     + p_fld(ji+2,jj+1) * zsurf(ji+2,jj+1)  &
-                   &     + p_fld(ji  ,jj+2) * zsurf(ji  ,jj+2)  &
-                   &     + p_fld(ji+1,jj+2) * zsurf(ji+1,jj+2)  &
-                   &     + p_fld(ji+2,jj+2) * zsurf(ji+2,jj+2)  
-
-                 zsfcrs =  zsurf(ji,jj  ) + zsurf(ji+1,jj  ) + zsurf(ji+2,jj  )  &
-                   &     + zsurf(ji,jj+1) + zsurf(ji+1,jj+1) + zsurf(ji+2,jj+1)  &
-                   &     + zsurf(ji,jj+2) + zsurf(ji+1,jj+2) + zsurf(ji+2,jj+2)  
-                 !
-                 p_fld_crs(ii,ij) = zflcrs
-                 IF( zsfcrs /= 0.0 )  p_fld_crs(ii,ij) = zflcrs / zsfcrs
-
-              ENDDO      
-           ENDDO
-            
-           CALL wrk_dealloc( jpi, jpj, zsurf )
+            CALL wrk_alloc( jpi, jpj, zsurfmsk )
+            zsurfmsk(:,:) =  p_e12(:,:) * p_e3(:,:,1) * p_mask(:,:,1)
+
+            IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+               IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                  je_2 = mje_crs(2)
+                  DO ji = nistr, niend, nn_factx
+                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2       
+                     zflcrs =  p_fld(ji  ,je_2) * zsurfmsk(ji  ,je_2)   &
+                       &     + p_fld(ji+1,je_2) * zsurfmsk(ji+1,je_2)   &
+                       &     + p_fld(ji+2,je_2) * zsurfmsk(ji+2,je_2) 
+
+                     zsfcrs =  zsurfmsk(ji,je_2) + zsurfmsk(ji+1,je_2) + zsurfmsk(ji+2,je_2) 
+                     !
+                     p_fld_crs(ii,2) = zflcrs
+                     IF( zsfcrs /= 0.0 )  p_fld_crs(ii,2) = zflcrs / zsfcrs
+                  ENDDO
+               ENDIF
+            ELSE
+               je_2 = mjs_crs(2)
+               DO ji = nistr, niend, nn_factx
+                  ii   = ( ji - mis_crs(2) ) * rfactx_r + 2   
+                  zflcrs =  p_fld(ji  ,je_2  ) * zsurfmsk(ji  ,je_2  ) &
+                    &     + p_fld(ji+1,je_2  ) * zsurfmsk(ji+1,je_2  ) &
+                    &     + p_fld(ji+2,je_2  ) * zsurfmsk(ji+2,je_2  ) &
+                    &     + p_fld(ji  ,je_2+1) * zsurfmsk(ji  ,je_2+1) &
+                    &     + p_fld(ji+1,je_2+1) * zsurfmsk(ji+1,je_2+1) &
+                    &     + p_fld(ji+2,je_2+1) * zsurfmsk(ji+2,je_2+1) &
+                    &     + p_fld(ji  ,je_2+2) * zsurfmsk(ji  ,je_2+2) &
+                    &     + p_fld(ji+1,je_2+2) * zsurfmsk(ji+1,je_2+2) &
+                    &     + p_fld(ji+2,je_2+2) * zsurfmsk(ji+2,je_2+2) 
+
+                   zsfcrs =  zsurfmsk(ji,je_2  ) + zsurfmsk(ji+1,je_2  ) + zsurfmsk(ji+2,je_2  ) &
+                     &     + zsurfmsk(ji,je_2+1) + zsurfmsk(ji+1,je_2+1) + zsurfmsk(ji+2,je_2+1) &
+                     &     + zsurfmsk(ji,je_2+2) + zsurfmsk(ji+1,je_2+2) + zsurfmsk(ji+2,je_2+2) 
+                    !
+                    p_fld_crs(ii,2) = zflcrs
+                    IF( zsfcrs /= 0.0 )  p_fld_crs(ii,2) = zflcrs / zsfcrs
+                ENDDO
+            ENDIF
+                  !
+            DO jj  = njstr, njend, nn_facty
+               DO ji = nistr, niend, nn_factx
+                  ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
+                  ij  = ( jj - njstr ) * rfacty_r + 3
+                  zflcrs =  p_fld(ji  ,jj  ) * zsurfmsk(ji  ,jj  ) &
+                    &     + p_fld(ji+1,jj  ) * zsurfmsk(ji+1,jj  ) &
+                    &     + p_fld(ji+2,jj  ) * zsurfmsk(ji+2,jj  ) &
+                    &     + p_fld(ji  ,jj+1) * zsurfmsk(ji  ,jj+1) &
+                    &     + p_fld(ji+1,jj+1) * zsurfmsk(ji+1,jj+1) &
+                    &     + p_fld(ji+2,jj+1) * zsurfmsk(ji+2,jj+1) &
+                    &     + p_fld(ji  ,jj+2) * zsurfmsk(ji  ,jj+2) &
+                    &     + p_fld(ji+1,jj+2) * zsurfmsk(ji+1,jj+2) &
+                    &     + p_fld(ji+2,jj+2) * zsurfmsk(ji+2,jj+2) 
+  
+                  zsfcrs =  zsurfmsk(ji,jj  ) + zsurfmsk(ji+1,jj  ) + zsurfmsk(ji+2,jj  ) &
+                    &     + zsurfmsk(ji,jj+1) + zsurfmsk(ji+1,jj+1) + zsurfmsk(ji+2,jj+1) &
+                    &     + zsurfmsk(ji,jj+2) + zsurfmsk(ji+1,jj+2) + zsurfmsk(ji+2,jj+2) 
+                   !
+                  p_fld_crs(ii,ij) = zflcrs
+                  IF( zsfcrs /= 0.0 )  p_fld_crs(ii,ij) = zflcrs / zsfcrs
+               ENDDO      
+            ENDDO
+
+            CALL wrk_dealloc( jpi, jpj, zsurfmsk )
 
          CASE ( 'SUM' )
          
-            CALL wrk_alloc( jpi, jpj, zsurf )
+            CALL wrk_alloc( jpi, jpj, zsurfmsk )
             IF( PRESENT( p_e3 ) ) THEN
-               zsurf(:,:) =  p_e12(:,:) * p_e3(:,:,1) * p_mask(:,:,1)
+               zsurfmsk(:,:) =  p_e12(:,:) * p_e3(:,:,1) * p_mask(:,:,1)
             ELSE
-               zsurf(:,:) =  p_e12(:,:) * p_mask(:,:,1)
+               zsurfmsk(:,:) =  p_e12(:,:) * p_mask(:,:,1)
             ENDIF
+
+            SELECT CASE ( cd_type )
+
+               CASE( 'T', 'W' )
+
+                   IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                      IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                         je_2 = mje_crs(2)
+                         DO ji = nistr, niend, nn_factx
+                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                            zflcrs  =  p_fld(ji  ,je_2) * zsurfmsk(ji  ,je_2) &
+                              &      + p_fld(ji+1,je_2) * zsurfmsk(ji+1,je_2) &
+                              &      + p_fld(ji+2,je_2) * zsurfmsk(ji+2,je_2) 
+                              !
+                             p_fld_crs(ii,2) = zflcrs
+                         ENDDO
+                      ENDIF
+                   ELSE
+                      je_2 = mjs_crs(2)
+                      DO ji = nistr, niend, nn_factx
+                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                         zflcrs  =  p_fld(ji  ,je_2  ) * zsurfmsk(ji  ,je_2  )  &
+                           &      + p_fld(ji+1,je_2  ) * zsurfmsk(ji+1,je_2  )  &
+                           &      + p_fld(ji+2,je_2  ) * zsurfmsk(ji+2,je_2  )  &
+                           &      + p_fld(ji  ,je_2+1) * zsurfmsk(ji  ,je_2+1)  &
+                           &      + p_fld(ji+1,je_2+1) * zsurfmsk(ji+1,je_2+1)  &
+                           &      + p_fld(ji+2,je_2+1) * zsurfmsk(ji+2,je_2+1)  &
+                           &      + p_fld(ji  ,je_2+2) * zsurfmsk(ji  ,je_2+2)  &
+                           &      + p_fld(ji+1,je_2+2) * zsurfmsk(ji+1,je_2+2)  &
+                           &      + p_fld(ji+2,je_2+2) * zsurfmsk(ji+2,je_2+2)  
+                            !
+                            p_fld_crs(ii,2) = zflcrs
+                      ENDDO
+                   ENDIF
+                     !
+                   DO jj = njstr, njend, nn_facty
+                      DO ji = nistr, niend, nn_factx
+                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+                         ij   = ( jj - njstr ) * rfacty_r + 3
+                         zflcrs  =  p_fld(ji  ,jj  ) * zsurfmsk(ji  ,jj  )  &
+                           &      + p_fld(ji+1,jj  ) * zsurfmsk(ji+1,jj  )  &
+                           &      + p_fld(ji+2,jj  ) * zsurfmsk(ji+2,jj  )  &
+                           &      + p_fld(ji  ,jj+1) * zsurfmsk(ji  ,jj+1)  &
+                           &      + p_fld(ji+1,jj+1) * zsurfmsk(ji+1,jj+1)  &
+                           &      + p_fld(ji+2,jj+1) * zsurfmsk(ji+2,jj+1)  &
+                           &      + p_fld(ji  ,jj+2) * zsurfmsk(ji  ,jj+2)  &
+                           &      + p_fld(ji+1,jj+2) * zsurfmsk(ji+1,jj+2)  &
+                           &      + p_fld(ji+2,jj+2) * zsurfmsk(ji+2,jj+2)  
+                           !
+                          p_fld_crs(ii,ij) = zflcrs
+                          ! 
+                      ENDDO      
+                   ENDDO
+            
+               CASE( 'V' )
+
+                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        ijje = mje_crs(2)
+                      ENDIF
+                  ELSE
+                     ijje = mjs_crs(2)
+                  ENDIF
+
+                  DO ji = nistr, niend, nn_factx
+                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                     zflcrs  =  p_fld(ji  ,ijje) * zsurfmsk(ji  ,ijje) &
+                       &      + p_fld(ji+1,ijje) * zsurfmsk(ji+1,ijje) &
+                       &      + p_fld(ji+2,ijje) * zsurfmsk(ji+2,ijje) 
+                            !
+                     p_fld_crs(ii,2) = zflcrs
+                  ENDDO
+
+                  DO jj = njstr, njend, nn_facty
+                     DO ji = nistr, niend, nn_factx
+                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                        ij   = ( jj - njstr ) * rfacty_r + 3
+                        ijje = mje_crs(ij)
+                        zflcrs  =  p_fld(ji  ,ijje) * zsurfmsk(ji  ,ijje) &
+                          &      + p_fld(ji+1,ijje) * zsurfmsk(ji+1,ijje) &
+                          &      + p_fld(ji+2,ijje) * zsurfmsk(ji+2,ijje) 
+                          !
+                        p_fld_crs(ii,ij) = zflcrs
+                        ! 
+                     ENDDO      
+                  ENDDO
+            
+               CASE( 'U' )
+
+                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        je_2 = mje_crs(2)
+                        DO ji = nistr, niend, nn_factx
+                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+                           ijie = mie_crs(ii)
+                           zflcrs  =  p_fld(ijie,je_2) * zsurfmsk(ijie,je_2)  
+                           p_fld_crs(ii,2) = zflcrs
+                        ENDDO
+                     ENDIF
+                  ELSE
+                     je_2 = mjs_crs(2)
+                     DO ji = nistr, niend, nn_factx
+                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+                        ijie = mie_crs(ii)
+                        zflcrs =  p_fld(ijie,je_2  ) * zsurfmsk(ijie,je_2  )  &
+                          &     + p_fld(ijie,je_2+1) * zsurfmsk(ijie,je_2+1)  &
+                          &     + p_fld(ijie,je_2+2) * zsurfmsk(ijie,je_2+2) 
+   
+                        p_fld_crs(ii,2) = zflcrs
+                     ENDDO
+                 ENDIF
+
+                 DO jj = njstr, njend, nn_facty
+                    DO ji = nistr, niend, nn_factx
+                       ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                       ij   = ( jj - njstr ) * rfacty_r + 3
+                       ijie = mie_crs(ii)
+                       zflcrs =  p_fld(ijie,jj  ) * zsurfmsk(ijie,jj  )  &
+                          &    + p_fld(ijie,jj+1) * zsurfmsk(ijie,jj+1)  &
+                          &    + p_fld(ijie,jj+2) * zsurfmsk(ijie,jj+2) 
+                         !
+                       p_fld_crs(ii,ij) = zflcrs
+                       ! 
+                    ENDDO      
+                 ENDDO
+
+              END SELECT
+
+              IF( PRESENT( p_surf_crs ) ) THEN
+                 WHERE ( p_surf_crs /= 0.0 ) p_fld_crs(:,:) = p_fld_crs(:,:) / p_surf_crs(:,:)
+              ENDIF
+
+              CALL wrk_dealloc( jpi, jpj, zsurfmsk )
+
+         CASE ( 'MAX' )
 
             SELECT CASE ( cd_type )
             
                CASE( 'T', 'W' )
-         
-                  DO ji = nistr, niend, nn_factx
-                     DO jj = njstr, njend, nn_facty
-                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                        ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                        ijje = mje_crs(ij)
-                        ijie = mie_crs(ii)                  
-
-                        zflcrs  =  p_fld(ji  ,jj  ) * zsurf(ji  ,jj  )  &
-                          &      + p_fld(ji+1,jj  ) * zsurf(ji+1,jj  )  &
-                          &      + p_fld(ji+2,jj  ) * zsurf(ji+2,jj  )  &
-                          &      + p_fld(ji  ,jj+1) * zsurf(ji  ,jj+1)  &
-                          &      + p_fld(ji+1,jj+1) * zsurf(ji+1,jj+1)  &
-                          &      + p_fld(ji+2,jj+1) * zsurf(ji+2,jj+1)  &
-                          &      + p_fld(ji  ,jj+2) * zsurf(ji  ,jj+2)  &
-                          &      + p_fld(ji+1,jj+2) * zsurf(ji+1,jj+2)  &
-                          &      + p_fld(ji+2,jj+2) * zsurf(ji+2,jj+2)  
-                        !
-                        p_fld_crs(ii,ij) = zflcrs
-                        !
-                     ENDDO      
-                  ENDDO
+  
+                   IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                      IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                         je_2 = mje_crs(2)
+                         DO ji = nistr, niend, nn_factx
+                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                            zflcrs =  &
+                              & MAX( p_fld(ji  ,je_2) * p_mask(ji  ,je_2,1) - ( 1.- p_mask(ji  ,je_2,1) ) * r_inf ,  &
+                             &       p_fld(ji+1,je_2) * p_mask(ji+1,je_2,1) - ( 1.- p_mask(ji+1,je_2,1) ) * r_inf ,  &
+                             &       p_fld(ji+2,je_2) * p_mask(ji+2,je_2,1) - ( 1.- p_mask(ji+2,je_2,1) ) * r_inf  )
+                            !
+                            p_fld_crs(ii,2) = zflcrs
+                         ENDDO
+                      ENDIF
+                   ELSE
+                      je_2 = mjs_crs(2) 
+                      zflcrs =  &
+                        &  MAX( p_fld(ji  ,je_2  ) * p_mask(ji  ,je_2  ,1) - ( 1.- p_mask(ji  ,je_2  ,1) ) * r_inf ,  &
+                        &       p_fld(ji+1,je_2  ) * p_mask(ji+1,je_2  ,1) - ( 1.- p_mask(ji+1,je_2  ,1) ) * r_inf ,  &
+                        &       p_fld(ji+2,je_2  ) * p_mask(ji+2,je_2  ,1) - ( 1.- p_mask(ji+2,je_2  ,1) ) * r_inf ,  &
+                        &       p_fld(ji  ,je_2+1) * p_mask(ji  ,je_2+1,1) - ( 1.- p_mask(ji  ,je_2+1,1) ) * r_inf ,  &
+                        &       p_fld(ji+1,je_2+1) * p_mask(ji+1,je_2+1,1) - ( 1.- p_mask(ji+1,je_2+1,1) ) * r_inf ,  &
+                        &       p_fld(ji+2,je_2+1) * p_mask(ji+2,je_2+1,1) - ( 1.- p_mask(ji+2,je_2+1,1) ) * r_inf ,  &
+                        &       p_fld(ji  ,je_2+2) * p_mask(ji  ,je_2+2,1) - ( 1.- p_mask(ji  ,je_2+2,1) ) * r_inf ,  &
+                        &       p_fld(ji+1,je_2+2) * p_mask(ji+1,je_2+2,1) - ( 1.- p_mask(ji+1,je_2+2,1) ) * r_inf ,  &
+                        &       p_fld(ji+2,je_2+2) * p_mask(ji+2,je_2+2,1) - ( 1.- p_mask(ji+2,je_2+2,1) ) * r_inf   )
+                      !
+                      p_fld_crs(ii,2) = zflcrs
+                   ENDIF
+
+                   DO jj = njstr, njend, nn_facty
+                      DO ji = nistr, niend, nn_factx
+                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                         ij   = ( jj - njstr ) * rfacty_r + 3
+                         zflcrs = &
+                          &  MAX( p_fld(ji  ,jj  ) * p_mask(ji  ,jj  ,1) - ( 1.- p_mask(ji  ,jj  ,1) ) * r_inf ,  &
+                          &       p_fld(ji+1,jj  ) * p_mask(ji+1,jj  ,1) - ( 1.- p_mask(ji+1,jj  ,1) ) * r_inf ,  &
+                          &       p_fld(ji+2,jj  ) * p_mask(ji+2,jj  ,1) - ( 1.- p_mask(ji+2,jj  ,1) ) * r_inf ,  &
+                          &       p_fld(ji  ,jj+1) * p_mask(ji  ,jj+1,1) - ( 1.- p_mask(ji  ,jj+1,1) ) * r_inf ,  &
+                          &       p_fld(ji+1,jj+1) * p_mask(ji+1,jj+1,1) - ( 1.- p_mask(ji+1,jj+1,1) ) * r_inf ,  &
+                          &       p_fld(ji+2,jj+1) * p_mask(ji+2,jj+1,1) - ( 1.- p_mask(ji+2,jj+1,1) ) * r_inf ,  &
+                          &       p_fld(ji  ,jj+2) * p_mask(ji  ,jj+2,1) - ( 1.- p_mask(ji  ,jj+2,1) ) * r_inf ,  &
+                          &       p_fld(ji+1,jj+2) * p_mask(ji+1,jj+2,1) - ( 1.- p_mask(ji+1,jj+2,1) ) * r_inf ,  &
+                          &       p_fld(ji+2,jj+2) * p_mask(ji+2,jj+2,1) - ( 1.- p_mask(ji+2,jj+2,1) ) * r_inf   )
+                         !
+                         p_fld_crs(ii,ij) = zflcrs
+                         !
+                      ENDDO      
+                   ENDDO
             
                CASE( 'V' )
-         
-                  DO jk = 1, jpk
+
+                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        ijje = mje_crs(2)
+                      ENDIF
+                  ELSE
+                     ijje = mjs_crs(2)
+                  ENDIF
+
+                  DO ji = nistr, niend, nn_factx
+                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+                     zflcrs = MAX( p_fld(ji  ,ijje) * p_mask(ji  ,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  &
+                       &           p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  &
+                       &           p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf )
+                       !
+                     p_fld_crs(ii,2) = zflcrs
+                  ENDDO      
+                  DO jj = njstr, njend, nn_facty
                      DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)
-                           !                  
-                           zflcrs  =  p_fld(ji  ,ijje) * zsurf(ji  ,ijje)  &
-                             &      + p_fld(ji+1,ijje) * zsurf(ji+1,ijje)  &
-                             &      + p_fld(ji+2,ijje) * zsurf(ji+2,ijje)  
-                           !
-                           p_fld_crs(ii,ij) = zflcrs
-                           !
-                         ENDDO      
-                     ENDDO
-                  ENDDO   
-
-            
-               CASE( 'U' )
-         
-                  DO jk = 1, jpk
-                     DO ji = nistr, niend, nn_factx
-                        DO jj = njstr, njend, nn_facty
-                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                           ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                           ijje = mje_crs(ij)
-                           ijie = mie_crs(ii)
-                           !                  
-                           zflcrs =  p_fld(ijie,jj  ) * zsurf(ijie,jj  )  &
-                             &     + p_fld(ijie,jj+1) * zsurf(ijie,jj+1)  &
-                             &     + p_fld(ijie,jj+2) * zsurf(ijie,jj+2) 
-                           !
-                           p_fld_crs(ii,ij) = zflcrs
-                           !
-                        ENDDO      
-                     ENDDO
-                  ENDDO   
-
-              END SELECT
-
-              IF( PRESENT( p_surf_crs ) ) THEN
-                 WHERE ( p_surf_crs /= 0.0 ) p_fld_crs(:,:) = p_fld_crs(:,:) / p_surf_crs(:,:)
-              ENDIF
-
-              CALL wrk_dealloc( jpi, jpj, zsurf )
-
-         CASE ( 'MAX' )
-         
-            SELECT CASE ( cd_type )
-            
-               CASE( 'T', 'W' )
-         
-                  DO ji = nistr, niend, nn_factx
-                     DO jj = njstr, njend, nn_facty
-                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                        ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                        ijje = mje_crs(ij)
-                        ijie = mie_crs(ii)                  
-
-                        zflcrs =  MAX( p_fld(ji  ,jj  ) * p_mask(ji  ,jj  ,1),  &
-                          &            p_fld(ji+1,jj  ) * p_mask(ji+1,jj  ,1),  &
-                          &            p_fld(ji+2,jj  ) * p_mask(ji+2,jj  ,1),  &
-                          &            p_fld(ji  ,jj+1) * p_mask(ji  ,jj+1,1),  &
-                          &            p_fld(ji+1,jj+1) * p_mask(ji+1,jj+1,1),  &
-                          &            p_fld(ji+2,jj+1) * p_mask(ji+2,jj+1,1),  &
-                          &            p_fld(ji  ,jj+2) * p_mask(ji  ,jj+2,1),  &
-                          &            p_fld(ji+1,jj+2) * p_mask(ji+1,jj+2,1),  &
-                          &            p_fld(ji+2,jj+2) * p_mask(ji+2,jj+2,1)   )
-                        !
-                        p_fld_crs(ii,ij) = zflcrs
-                        !
-                     ENDDO      
-                  ENDDO
-            
-               CASE( 'V' )
-         
-                  DO ji = nistr, niend, nn_factx
-                     DO jj = njstr, njend, nn_facty
-                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                        ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                        ijje = mje_crs(ij)
-                        ijie = mie_crs(ii)
+                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+                        ij   = ( jj - njstr ) * rfacty_r + 3               
+                        ijje = mje_crs(ij) 
                         !                  
-                        zflcrs = MAX( p_fld(ji  ,ijje) * p_mask(ji  ,ijje,1),  &
-                          &           p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1),  &
-                          &           p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) )
+                        zflcrs = MAX( p_fld(ji  ,ijje) * p_mask(ji  ,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  &
+                          &           p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  &
+                          &           p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf )
                         !
                         p_fld_crs(ii,ij) = zflcrs
@@ -1213,15 +1468,125 @@
             
                CASE( 'U' )
-         
+
+                 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        je_2 = mje_crs(2)
+                        DO ji = nistr, niend, nn_factx
+                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+                           ijie = mie_crs(ii)
+                           zflcrs  =  p_fld(ijie,je_2) * p_mask(ijie,je_2,1) - ( 1.- p_mask(ijie,je_2,1) ) * r_inf 
+                           p_fld_crs(ii,2) = zflcrs
+                        ENDDO
+                     ENDIF
+                 ELSE
+                     je_2 = mjs_crs(2)
+                     DO ji = nistr, niend, nn_factx
+                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+                        ijie = mie_crs(ii)
+                        zflcrs =  &
+                          &  MAX( p_fld(ijie,je_2  ) * p_mask(ijie,je_2  ,1) - ( 1.- p_mask(ijie,je_2,1) ) * r_inf ,  &
+                          &       p_fld(ijie,je_2+1) * p_mask(ijie,je_2+1,1) - ( 1.- p_mask(ijie,je_2,1) ) * r_inf ,  &
+                          &       p_fld(ijie,je_2+2) * p_mask(ijie,je_2+2,1) - ( 1.- p_mask(ijie,je_2,1) ) * r_inf  )
+                        p_fld_crs(ii,2) = zflcrs
+                     ENDDO
+                 ENDIF
+                 DO jj = njstr, njend, nn_facty
+                    DO ji = nistr, niend, nn_factx
+                       ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                       ij   = ( jj - njstr ) * rfacty_r + 3
+                       ijie = mie_crs(ii)
+                       zflcrs =  &
+                         &  MAX( p_fld(ijie,jj  ) * p_mask(ijie,jj  ,1) - ( 1.- p_mask(ijie,jj,1) ) * r_inf ,  &
+                         &       p_fld(ijie,jj+1) * p_mask(ijie,jj+1,1) - ( 1.- p_mask(ijie,jj,1) ) * r_inf ,  &
+                          &      p_fld(ijie,jj+2) * p_mask(ijie,jj+2,1) - ( 1.- p_mask(ijie,jj,1) ) * r_inf  )
+                        p_fld_crs(ii,ij) = zflcrs
+                        ! 
+                     ENDDO      
+                  ENDDO
+
+              END SELECT
+
+         CASE ( 'MIN' )      !   Search the min of unmasked grid cells
+
+           SELECT CASE ( cd_type )
+
+              CASE( 'T', 'W' )
+  
+                   IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                      IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                         je_2 = mje_crs(2)
+                         DO ji = nistr, niend, nn_factx
+                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                            zflcrs =  &
+                              & MIN( p_fld(ji  ,je_2) * p_mask(ji  ,je_2,1) + ( 1.- p_mask(ji  ,je_2,1) ) * r_inf ,  &
+                             &       p_fld(ji+1,je_2) * p_mask(ji+1,je_2,1) + ( 1.- p_mask(ji+1,je_2,1) ) * r_inf ,  &
+                             &       p_fld(ji+2,je_2) * p_mask(ji+2,je_2,1) + ( 1.- p_mask(ji+2,je_2,1) ) * r_inf  )
+                            !
+                            p_fld_crs(ii,2) = zflcrs
+                         ENDDO
+                      ENDIF
+                   ELSE
+                      je_2 = mjs_crs(2) 
+                      zflcrs =  &
+                        &  MIN( p_fld(ji  ,je_2  ) * p_mask(ji  ,je_2  ,1) + ( 1.- p_mask(ji  ,je_2  ,1) ) * r_inf ,  &
+                        &       p_fld(ji+1,je_2  ) * p_mask(ji+1,je_2  ,1) + ( 1.- p_mask(ji+1,je_2  ,1) ) * r_inf ,  &
+                        &       p_fld(ji+2,je_2  ) * p_mask(ji+2,je_2  ,1) + ( 1.- p_mask(ji+2,je_2  ,1) ) * r_inf ,  &
+                        &       p_fld(ji  ,je_2+1) * p_mask(ji  ,je_2+1,1) + ( 1.- p_mask(ji  ,je_2+1,1) ) * r_inf ,  &
+                        &       p_fld(ji+1,je_2+1) * p_mask(ji+1,je_2+1,1) + ( 1.- p_mask(ji+1,je_2+1,1) ) * r_inf ,  &
+                        &       p_fld(ji+2,je_2+1) * p_mask(ji+2,je_2+1,1) + ( 1.- p_mask(ji+2,je_2+1,1) ) * r_inf ,  &
+                        &       p_fld(ji  ,je_2+2) * p_mask(ji  ,je_2+2,1) + ( 1.- p_mask(ji  ,je_2+2,1) ) * r_inf ,  &
+                        &       p_fld(ji+1,je_2+2) * p_mask(ji+1,je_2+2,1) + ( 1.- p_mask(ji+1,je_2+2,1) ) * r_inf ,  &
+                        &       p_fld(ji+2,je_2+2) * p_mask(ji+2,je_2+2,1) + ( 1.- p_mask(ji+2,je_2+2,1) ) * r_inf   )
+                      !
+                      p_fld_crs(ii,2) = zflcrs
+                   ENDIF
+
+                   DO jj = njstr, njend, nn_facty
+                      DO ji = nistr, niend, nn_factx
+                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                         ij   = ( jj - njstr ) * rfacty_r + 3
+                         zflcrs = &
+                          &  MIN( p_fld(ji  ,jj  ) * p_mask(ji  ,jj  ,1) + ( 1.- p_mask(ji  ,jj  ,1) ) * r_inf ,  &
+                          &       p_fld(ji+1,jj  ) * p_mask(ji+1,jj  ,1) + ( 1.- p_mask(ji+1,jj  ,1) ) * r_inf ,  &
+                          &       p_fld(ji+2,jj  ) * p_mask(ji+2,jj  ,1) + ( 1.- p_mask(ji+2,jj  ,1) ) * r_inf ,  &
+                          &       p_fld(ji  ,jj+1) * p_mask(ji  ,jj+1,1) + ( 1.- p_mask(ji  ,jj+1,1) ) * r_inf ,  &
+                          &       p_fld(ji+1,jj+1) * p_mask(ji+1,jj+1,1) + ( 1.- p_mask(ji+1,jj+1,1) ) * r_inf ,  &
+                          &       p_fld(ji+2,jj+1) * p_mask(ji+2,jj+1,1) + ( 1.- p_mask(ji+2,jj+1,1) ) * r_inf ,  &
+                          &       p_fld(ji  ,jj+2) * p_mask(ji  ,jj+2,1) + ( 1.- p_mask(ji  ,jj+2,1) ) * r_inf ,  &
+                          &       p_fld(ji+1,jj+2) * p_mask(ji+1,jj+2,1) + ( 1.- p_mask(ji+1,jj+2,1) ) * r_inf ,  &
+                          &       p_fld(ji+2,jj+2) * p_mask(ji+2,jj+2,1) + ( 1.- p_mask(ji+2,jj+2,1) ) * r_inf   )
+                         !
+                         p_fld_crs(ii,ij) = zflcrs
+                         !
+                      ENDDO      
+                   ENDDO
+            
+               CASE( 'V' )
+
+                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        ijje = mje_crs(2)
+                      ENDIF
+                  ELSE
+                     ijje = mjs_crs(2)
+                  ENDIF
+
                   DO ji = nistr, niend, nn_factx
-                     DO jj = njstr, njend, nn_facty
-                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                        ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                        ijje = mje_crs(ij)
-                        ijie = mie_crs(ii)
+                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+                     zflcrs = MIN( p_fld(ji  ,ijje) * p_mask(ji  ,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  &
+                       &           p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  &
+                       &           p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf )
+                       !
+                     p_fld_crs(ii,2) = zflcrs
+                  ENDDO      
+                  DO jj = njstr, njend, nn_facty
+                     DO ji = nistr, niend, nn_factx
+                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+                        ij   = ( jj - njstr ) * rfacty_r + 3               
+                        ijje = mje_crs(ij) 
                         !                  
-                        zflcrs = MAX( p_fld(ijie,jj  ) * p_mask(ijie,jj  ,1),  &
-                          &           p_fld(ijie,jj+1) * p_mask(ijie,jj+1,1),  &
-                          &           p_fld(ijie,jj+2) * p_mask(ijie,jj+2,1) )
+                        zflcrs = MIN( p_fld(ji  ,ijje) * p_mask(ji  ,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  &
+                          &           p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  &
+                          &           p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf )
                         !
                         p_fld_crs(ii,ij) = zflcrs
@@ -1229,75 +1594,49 @@
                      ENDDO      
                   ENDDO
-
-              END SELECT
-
-         CASE ( 'MIN' )
-            !   Search the min of masked grid cells
-            SELECT CASE ( cd_type )
             
-               CASE( 'T', 'W' )
-         
-                  DO ji = nistr, niend, nn_factx
-                     DO jj = njstr, njend, nn_facty
-                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                        ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                        ijje = mje_crs(ij)
-                        ijie = mie_crs(ii)                  
-                        
-                        zflcrs =  MIN( p_fld(ji  ,jj  ) * ( 1. + ( 1. - p_mask(ji  ,jj  ,1) ) * zeps ),  &
-                          &            p_fld(ji+1,jj  ) * ( 1. + ( 1. - p_mask(ji+1,jj  ,1) ) * zeps ),  &
-                          &            p_fld(ji+2,jj  ) * ( 1. + ( 1. - p_mask(ji+2,jj  ,1) ) * zeps ),  &
-                          &            p_fld(ji  ,jj+1) * ( 1. + ( 1. - p_mask(ji  ,jj  ,1) ) * zeps ),  &
-                          &            p_fld(ji+1,jj+1) * ( 1. + ( 1. - p_mask(ji+1,jj+1,1) ) * zeps ),  &
-                          &            p_fld(ji+2,jj+1) * ( 1. + ( 1. - p_mask(ji+2,jj+2,1) ) * zeps ),  &
-                          &            p_fld(ji  ,jj+2) * ( 1. + ( 1. - p_mask(ji  ,jj  ,1) ) * zeps ),  &
-                          &            p_fld(ji+1,jj+2) * ( 1. + ( 1. - p_mask(ji+1,jj+1,1) ) * zeps ),  &
-                          &            p_fld(ji+2,jj+2) * ( 1. + ( 1. - p_mask(ji+2,jj+2,1) ) * zeps )   )
-                        !
-                        p_fld_crs(ii,ij) = zflcrs * p_mask_crs(ii,ij,1)
-                        !
+               CASE( 'U' )
+
+                 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+                        je_2 = mje_crs(2)
+                        DO ji = nistr, niend, nn_factx
+                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+                           ijie = mie_crs(ii)
+                           zflcrs  =  p_fld(ijie,je_2) * p_mask(ijie,je_2,1) + ( 1.- p_mask(ijie,je_2,1) ) * r_inf 
+ 
+                           p_fld_crs(ii,2) = zflcrs
+                        ENDDO
+                     ENDIF
+                 ELSE
+                     je_2 = mjs_crs(2)
+                     DO ji = nistr, niend, nn_factx
+                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
+                        ijie = mie_crs(ii)
+                        zflcrs =  &
+                          &  MIN( p_fld(ijie,je_2  ) * p_mask(ijie,je_2  ,1) + ( 1.- p_mask(ijie,je_2,1) ) * r_inf ,  &
+                          &       p_fld(ijie,je_2+1) * p_mask(ijie,je_2+1,1) + ( 1.- p_mask(ijie,je_2,1) ) * r_inf ,  &
+                          &       p_fld(ijie,je_2+2) * p_mask(ijie,je_2+2,1) + ( 1.- p_mask(ijie,je_2,1) ) * r_inf  )
+                        p_fld_crs(ii,2) = zflcrs
+                     ENDDO
+                 ENDIF
+                 DO jj = njstr, njend, nn_facty
+                    DO ji = nistr, niend, nn_factx
+                       ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                       ij   = ( jj - njstr ) * rfacty_r + 3
+                       ijie = mie_crs(ii)
+                       zflcrs =  &
+                         &  MIN( p_fld(ijie,jj  ) * p_mask(ijie,jj  ,1) + ( 1.- p_mask(ijie,jj,1) ) * r_inf ,  &
+                         &       p_fld(ijie,jj+1) * p_mask(ijie,jj+1,1) + ( 1.- p_mask(ijie,jj,1) ) * r_inf ,  &
+                          &      p_fld(ijie,jj+2) * p_mask(ijie,jj+2,1) + ( 1.- p_mask(ijie,jj,1) ) * r_inf  )
+                        p_fld_crs(ii,ij) = zflcrs
+                        ! 
                      ENDDO      
                   ENDDO
- 
-               CASE( 'V' )
-         
-                  DO ji = nistr, niend, nn_factx
-                     DO jj = njstr, njend, nn_facty
-                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                        ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                        ijje = mje_crs(ij)
-                        ijie = mie_crs(ii)                  
-                        
-                        zflcrs =  MIN( p_fld(ji  ,ijje) * ( 1. + ( 1. - p_mask(ji  ,ijje,1) ) * zeps ),  &
-                          &            p_fld(ji+1,ijje) * ( 1. + ( 1. - p_mask(ji+1,ijje,1) ) * zeps ),  &
-                          &            p_fld(ji+2,ijje) * ( 1. + ( 1. - p_mask(ji+2,ijje,1) ) * zeps )   )
-                        !
-                        p_fld_crs(ii,ij) = zflcrs * p_mask_crs(ii,ij,1)
-                        !
-                     ENDDO      
-                  ENDDO
-
-               CASE( 'U' )
-         
-                  DO ji = nistr, niend, nn_factx
-                     DO jj = njstr, njend, nn_facty
-                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                        ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                        ijje = mje_crs(ij)
-                        ijie = mie_crs(ii)                  
-                        
-                        zflcrs =  MIN( p_fld(ijie,jj  ) * ( 1. + ( 1. - p_mask(ijie,jj  ,1) ) * zeps ),  &
-                          &            p_fld(ijie,jj+1) * ( 1. + ( 1. - p_mask(ijie,jj+1,1) ) * zeps ),  &
-                          &            p_fld(ijie,jj+2) * ( 1. + ( 1. - p_mask(ijie,jj+2,1) ) * zeps )   )
-                        !
-                        p_fld_crs(ii,ij) = zflcrs * p_mask_crs(ii,ij,1)
-                        !
-                     ENDDO      
-                  ENDDO
-            END SELECT
-            !
+
+              END SELECT
+             !
          END SELECT
          !
-         CALL crs_lbc_lnk( p_fld_crs, cd_type, 1.0 )
+         CALL crs_lbc_lnk( p_fld_crs, cd_type, psgn )
          !
    END SUBROUTINE crs_dom_ope_2d
@@ -1316,123 +1655,120 @@
       !! Local variables
       INTEGER ::  ji, jj, jk                   ! dummy loop indices
-      INTEGER ::  ijie, ijje, ii, ij
+      INTEGER ::  ijie, ijje, ii, ij, je_2
       REAL(wp) :: ze3crs  
+      REAL(wp), DIMENSION(:,:,:), POINTER :: zmask, zsurf   
 
       !!----------------------------------------------------------------  
+
+       p_e3_crs    (:,:,:) = 0.
+       p_e3_max_crs(:,:,:) = 1.
    
-      SELECT CASE ( cd_type )
-      
-         CASE ('T', 'U', 'V')
-         
-            DO jk = 1 , jpk
-               DO ji = nistr, niend, nn_factx
-                  DO jj = njstr, njend, nn_facty
-                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
-                     ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                     ijje = mje_crs(ij)
-                     ijie = mie_crs(ii)
-                     ! 
-                     ze3crs =  p_e3(ji  ,jj  ,jk) * p_e1(ji  ,jj  ) * p_e2(ji  ,jj  ) * p_mask(ji  ,jj  ,jk) +  &
-                        &      p_e3(ji+1,jj  ,jk) * p_e1(ji+1,jj  ) * p_e2(ji+1,jj  ) * p_mask(ji+1,jj  ,jk) +  &
-                        &      p_e3(ji+2,jj  ,jk) * p_e1(ji+2,jj  ) * p_e2(ji+2,jj  ) * p_mask(ji+2,jj  ,jk) +  &
-                        &      p_e3(ji  ,jj+1,jk) * p_e1(ji  ,jj+1) * p_e2(ji  ,jj+1) * p_mask(ji  ,jj+1,jk) +  &
-                        &      p_e3(ji+1,jj+1,jk) * p_e1(ji+1,jj+1) * p_e2(ji+1,jj+1) * p_mask(ji+1,jj+1,jk) +  &
-                        &      p_e3(ji+2,jj+1,jk) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,jk) +  &
-                        &      p_e3(ji  ,jj+2,jk) * p_e1(ji  ,jj+2) * p_e2(ji  ,jj+2) * p_mask(ji  ,jj+2,jk) +  &
-                        &      p_e3(ji+1,jj+2,jk) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,jk) +  &
-                        &      p_e3(ji+2,jj+2,jk) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,jk)
- 
-                     p_e3_crs(ii,ij,jk) = ze3crs / p_sfc_crs(ii,ij,jk)
-                     !
-                     ze3crs = MAX( p_e3(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk),  &
-                        &          p_e3(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk),  &
-                        &          p_e3(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk),  &
-                        &          p_e3(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk),  &
-                        &          p_e3(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk),  &
-                        &          p_e3(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk),  &
-                        &          p_e3(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk),  &
-                        &          p_e3(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk),  &
-                        &          p_e3(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk) )
-                    
-                     p_e3_max_crs(ii,ij,jk) = ze3crs
-                  ENDDO
-               ENDDO
-            ENDDO
- 
-         CASE ('W')
-         
-            DO jk = 2 , jpk
-               DO ji = nistr, niend, nn_factx
-                  DO jj = njstr, njend, nn_facty
-                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
-                     ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                     ijje = mje_crs(ij)
-                     ijie = mie_crs(ii)
-                     !  
-                     ze3crs =  p_e3(ji  ,jj  ,jk) * p_e1(ji  ,jj  ) * p_e2(ji  ,jj  ) * p_mask(ji  ,jj  ,jk-1) +  &
-                        &      p_e3(ji+1,jj  ,jk) * p_e1(ji+1,jj  ) * p_e2(ji+1,jj  ) * p_mask(ji+1,jj  ,jk-1) +  &
-                        &      p_e3(ji+2,jj  ,jk) * p_e1(ji+2,jj  ) * p_e2(ji+2,jj  ) * p_mask(ji+2,jj  ,jk-1) +  &
-                        &      p_e3(ji  ,jj+1,jk) * p_e1(ji  ,jj+1) * p_e2(ji  ,jj+1) * p_mask(ji  ,jj+1,jk-1) +  &
-                        &      p_e3(ji+1,jj+1,jk) * p_e1(ji+1,jj+1) * p_e2(ji+1,jj+1) * p_mask(ji+1,jj+1,jk-1) +  &
-                        &      p_e3(ji+2,jj+1,jk) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,jk-1) +  &
-                        &      p_e3(ji  ,jj+2,jk) * p_e1(ji  ,jj+2) * p_e2(ji  ,jj+2) * p_mask(ji  ,jj+2,jk-1) +  &
-                        &      p_e3(ji+1,jj+2,jk) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,jk-1) +  &
-                        &      p_e3(ji+2,jj+2,jk) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,jk-1)
-                        
-                     p_e3_crs(ii,ij,jk) = ze3crs / p_sfc_crs(ii,ij,jk)
-                     !
-                     ze3crs = MAX( p_e3(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk-1),  &
-                        &          p_e3(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk-1),  &
-                        &          p_e3(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk-1),  &
-                        &          p_e3(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk-1),  &
-                        &          p_e3(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1),  &
-                        &          p_e3(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1),  &
-                        &          p_e3(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk-1),  &
-                        &          p_e3(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1),  &
-                        &          p_e3(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1) )
-                    
-                     p_e3_max_crs(ii,ij,jk) = ze3crs
-                  ENDDO
-               ENDDO
-            ENDDO
-             
-            DO ji = nistr, niend, nn_factx
-               DO jj = njstr, njend, nn_facty
-                  ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
-                  ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                  ijje = mje_crs(ij)
-                  ijie = mie_crs(ii)
-                  !  
-                   ze3crs =  p_e3(ji  ,jj  ,1) * p_e1(ji  ,jj  ) * p_e2(ji  ,jj  ) * p_mask(ji  ,jj  ,1) +  &
-                        &    p_e3(ji+1,jj  ,1) * p_e1(ji+1,jj  ) * p_e2(ji+1,jj  ) * p_mask(ji+1,jj  ,1) +  &
-                        &    p_e3(ji+2,jj  ,1) * p_e1(ji+2,jj  ) * p_e2(ji+2,jj  ) * p_mask(ji+2,jj  ,1) +  &
-                        &    p_e3(ji  ,jj+1,1) * p_e1(ji  ,jj+1) * p_e2(ji  ,jj+1) * p_mask(ji  ,jj+1,1) +  &
-                        &    p_e3(ji+1,jj+1,1) * p_e1(ji+1,jj+1) * p_e2(ji+1,jj+1) * p_mask(ji+1,jj+1,1) +  &
-                        &    p_e3(ji+2,jj+1,1) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,1) +  &
-                        &    p_e3(ji  ,jj+2,1) * p_e1(ji  ,jj+2) * p_e2(ji  ,jj+2) * p_mask(ji  ,jj+2,1) +  &
-                        &    p_e3(ji+1,jj+2,1) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,1) +  &
-                        &    p_e3(ji+2,jj+2,1) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,1)
-                        
-                  p_e3_crs(ii,ij,1) = ze3crs / p_sfc_crs(ii,ij,1)
-                  !
-                  ze3crs = MAX( p_e3(ji  ,jj  ,1) * p_mask(ji  ,jj  ,1),  &
-                     &          p_e3(ji+1,jj  ,1) * p_mask(ji+1,jj  ,1),  &
-                     &          p_e3(ji+2,jj  ,1) * p_mask(ji+2,jj  ,1),  &
-                     &          p_e3(ji  ,jj+1,1) * p_mask(ji  ,jj+1,1),  &
-                     &          p_e3(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1),  &
-                     &          p_e3(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1),  &
-                     &          p_e3(ji  ,jj+2,1) * p_mask(ji  ,jj+2,1),  &
-                     &          p_e3(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1),  &
-                     &          p_e3(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1) )
-                 
-                  p_e3_max_crs(ii,ij,1) = ze3crs
-               ENDDO
-            ENDDO
-            
-         END SELECT 
-         !              
-         CALL crs_lbc_lnk( p_e3_crs    , cd_type, 1.0, pval=1.0 )  
-         CALL crs_lbc_lnk( p_e3_max_crs, cd_type, 1.0, pval=1.0 )  
-         !              
+
+       CALL wrk_alloc( jpi, jpj, jpk, zmask, zsurf )
+
+       SELECT CASE ( cd_type )
+          CASE( 'W' )
+              zmask(:,:,1) = p_mask(:,:,1) 
+              DO jk = 2, jpk
+                 zmask(:,:,jk) = p_mask(:,:,jk-1) 
+              ENDDO
+           CASE DEFAULT
+              DO jk = 1, jpk
+                 zmask(:,:,jk) = p_mask(:,:,jk) 
+              ENDDO
+       END SELECT
+
+       DO jk = 1, jpk
+          zsurf(:,:,jk) = p_e1(:,:) * p_e2(:,:) * p_e3(:,:,jk) 
+       ENDDO
+
+       IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+          IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+             je_2 = mje_crs(2)
+             DO jk = 1 , jpk
+                DO ji = nistr, niend, nn_factx
+                   ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                   ze3crs =   zsurf(ji  ,je_2,jk) * zmask(ji  ,je_2,jk)   &
+                        &   + zsurf(ji+1,je_2,jk) * zmask(ji+1,je_2,jk)   &
+                        &   + zsurf(ji+2,je_2,jk) * zmask(ji+2,je_2,jk) 
+
+                   p_e3_crs(ii,2,jk) = ze3crs / p_sfc_crs(ii,ij,jk)
+                   !
+                   ze3crs = MAX( p_e3(ji  ,je_2,jk) * zmask(ji  ,je_2,jk),  &
+                      &          p_e3(ji+1,je_2,jk) * zmask(ji+1,je_2,jk),  &
+                      &          p_e3(ji+2,je_2,jk) * zmask(ji+2,je_2,jk)  )
+                   !
+                   p_e3_max_crs(ii,2,jk) = ze3crs
+                ENDDO
+             ENDDO
+          ENDIF
+       ELSE
+          je_2 = mjs_crs(2)
+          DO jk = 1 , jpk
+             DO ji = nistr, niend, nn_factx
+                ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
+                ze3crs =  zsurf(ji  ,je_2  ,jk) * zmask(ji  ,je_2  ,jk)   &
+                   &    + zsurf(ji+1,je_2  ,jk) * zmask(ji+1,je_2  ,jk)   &
+                   &    + zsurf(ji+2,je_2  ,jk) * zmask(ji+2,je_2  ,jk)   &
+                   &    + zsurf(ji  ,je_2+1,jk) * zmask(ji  ,je_2+1,jk)   &
+                   &    + zsurf(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk)   &
+                   &    + zsurf(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk)   &
+                   &    + zsurf(ji  ,je_2+2,jk) * zmask(ji  ,je_2+2,jk)   &
+                   &    + zsurf(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk)   &
+                   &    + zsurf(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk)
+
+                p_e3_crs(ii,2,jk) = ze3crs / p_sfc_crs(ii,2,jk)
+                !
+                ze3crs = MAX( p_e3(ji  ,je_2  ,jk) * zmask(ji  ,je_2  ,jk),  &
+                   &          p_e3(ji+1,je_2  ,jk) * zmask(ji+1,je_2  ,jk),  &
+                   &          p_e3(ji+2,je_2  ,jk) * zmask(ji+2,je_2  ,jk),  &
+                   &          p_e3(ji  ,je_2+1,jk) * zmask(ji  ,je_2+1,jk),  &
+                   &          p_e3(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk),  &
+                   &          p_e3(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk),  &
+                   &          p_e3(ji  ,je_2+2,jk) * zmask(ji  ,je_2+2,jk),  &
+                   &          p_e3(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk),  &
+                   &          p_e3(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk) )
+               
+                p_e3_max_crs(ii,2,jk) = ze3crs
+                ENDDO
+             ENDDO
+          ENDIF
+          DO jk = 1 , jpk
+             DO jj = njstr, njend, nn_facty
+                DO ji = nistr, niend, nn_factx
+                   ii   = ( ji - mis_crs(2) ) * rfactx_r + 2          
+                   ij   = ( jj - njstr ) * rfacty_r + 3
+                   ze3crs =   zsurf(ji  ,jj  ,jk) * zmask(ji  ,jj  ,jk)   &
+                   &        + zsurf(ji+1,jj  ,jk) * zmask(ji+1,jj  ,jk)   &
+                   &        + zsurf(ji+2,jj  ,jk) * zmask(ji+2,jj  ,jk)   &
+                   &        + zsurf(ji  ,jj+1,jk) * zmask(ji  ,jj+1,jk)   &
+                   &        + zsurf(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk)   &
+                   &        + zsurf(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk)   &
+                   &        + zsurf(ji  ,jj+2,jk) * zmask(ji  ,jj+2,jk)   &
+                   &        + zsurf(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk)   &
+                   &        + zsurf(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk)
+
+                p_e3_crs(ii,ij,jk) = ze3crs / p_sfc_crs(ii,ij,jk)
+                !
+                ze3crs = MAX( p_e3(ji  ,jj  ,jk) * zmask(ji  ,jj  ,jk),  &
+                   &          p_e3(ji+1,jj  ,jk) * zmask(ji+1,jj  ,jk),  &
+                   &          p_e3(ji+2,jj  ,jk) * zmask(ji+2,jj  ,jk),  &
+                   &          p_e3(ji  ,jj+1,jk) * zmask(ji  ,jj+1,jk),  &
+                   &          p_e3(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk),  &
+                   &          p_e3(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk),  &
+                   &          p_e3(ji  ,jj+2,jk) * zmask(ji  ,jj+2,jk),  &
+                   &          p_e3(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk),  &
+                   &          p_e3(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk) )
+               
+                p_e3_max_crs(ii,ij,jk) = ze3crs
+             ENDDO
+          ENDDO
+       ENDDO
+                  
+       CALL crs_lbc_lnk( p_e3_crs    , cd_type, 1.0, pval=1.0 )  
+       CALL crs_lbc_lnk( p_e3_max_crs, cd_type, 1.0, pval=1.0 )  
+       !              
+       CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zmask )
+       !
    END SUBROUTINE crs_dom_e3
 
@@ -1440,149 +1776,110 @@
 
       !!  Arguments
-      CHARACTER(len=1),                 INTENT(in) :: cd_type      ! grid type T, W ( U, V, F)
-      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: p_mask       ! Parent grid T mask
-      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in), OPTIONAL :: p_e1, p_e2         ! 3D tracer T or W on parent grid
-      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL :: p_e3         ! 3D tracer T or W on parent grid
-      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(out):: p_surf_crs ! Coarse grid box east or north face quantity 
-      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(out):: p_surf_crs_msk ! Coarse grid box east or north face quantity 
+      CHARACTER(len=1),                         INTENT(in)           :: cd_type      ! grid type T, W ( U, V, F)
+      REAL(wp), DIMENSION(jpi,jpj,jpk)        , INTENT(in)           :: p_mask       ! Parent grid T mask
+      REAL(wp), DIMENSION(jpi,jpj)            , INTENT(in), OPTIONAL :: p_e1, p_e2         ! 3D tracer T or W on parent grid
+      REAL(wp), DIMENSION(jpi,jpj,jpk)        , INTENT(in), OPTIONAL :: p_e3         ! 3D tracer T or W on parent grid
+      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(out)          :: p_surf_crs ! Coarse grid box east or north face quantity 
+      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(out)          :: p_surf_crs_msk ! Coarse grid box east or north face quantity 
 
       !! Local variables
       INTEGER  :: ji, jj, jk                   ! dummy loop indices
-      INTEGER  :: ijie, ijje, ii, ij
-      REAL(wp), DIMENSION(:,:)  , POINTER :: zsurf   
-      REAL(wp), DIMENSION(:,:,:), POINTER :: zsurf3d   
-      REAL(wp) :: zsfcrs, zsfcrs_msk
+      INTEGER  :: ii, ij, je_2
+      REAL(wp), DIMENSION(:,:,:), POINTER :: zsurf, zsurfmsk   
       !!----------------------------------------------------------------  
       ! Initialize
 
 
+      CALL wrk_alloc( jpi, jpj, jpk, zsurf, zsurfmsk )
       !
       SELECT CASE ( cd_type )
       
-         CASE ('W')
-      
-           CALL wrk_alloc( jpi, jpj, zsurf )
-           zsurf(:,:) =  p_e1(:,:) * p_e2(:,:)
-        
-            DO ji = nistr, niend, nn_factx
-               DO jj   = njstr, njend, nn_facty
-                  ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
-                  ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                  ijje = mje_crs(ij)
-                  ijie = mie_crs(ii)
+         CASE ('W')    
+            DO jk = 1, jpk
+               zsurf(:,:,jk) = p_e1(:,:) * p_e2(:,:) 
+            ENDDO
+            zsurfmsk(:,:,1) = zsurf(:,:,1) * p_mask(:,:,1) 
+            DO jk = 2, jpk
+               zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk-1) 
+            ENDDO
+
+         CASE ('V')     
+            DO jk = 1, jpk
+               zsurf(:,:,jk) = p_e1(:,:) * p_e3(:,:,jk) 
+            ENDDO
+            DO jk = 1, jpk
+               zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk) 
+            ENDDO
+
+         CASE ('U')     
+            DO jk = 1, jpk
+               zsurf(:,:,jk) = p_e2(:,:) * p_e3(:,:,jk) 
+            ENDDO
+            DO jk = 1, jpk
+               zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk) 
+            ENDDO
+
+         CASE DEFAULT
+            DO jk = 1, jpk
+               zsurf(:,:,jk) = p_e1(:,:) * p_e2(:,:) 
+            ENDDO
+            DO jk = 1, jpk
+               zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk) 
+            ENDDO
+      END SELECT
+
+      IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2
+         IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN
+            je_2 = mje_crs(2)
+            DO jk = 1, jpk
+               DO ji = nistr, niend, nn_factx
+                  ii   = ( ji - mis_crs(2) ) * rfactx_r + 2 
+                  !    
+                  p_surf_crs    (ii,2,jk) =  zsurf(ji,je_2  ,jk) + zsurf(ji+1,je_2  ,jk) + zsurf(ji+2,je_2  ,jk) &
+                    &                      + zsurf(ji,je_2-1,jk) + zsurf(ji+1,je_2-1,jk) + zsurf(ji+2,je_2-1,jk)  ! Why ?????
                   !
-                  zsfcrs     =  zsurf(ji,jj  ) + zsurf(ji+1,jj  ) + zsurf(ji+2,jj  )  &
-                    &         + zsurf(ji,jj+1) + zsurf(ji+1,jj+1) + zsurf(ji+2,jj+1)  &
-                    &         + zsurf(ji,jj+2) + zsurf(ji+1,jj+2) + zsurf(ji+2,jj+2)  
-                  !
-                  zsfcrs_msk =  zsurf(ji  ,jj  ) * p_mask(ji  ,jj  ,1)  &
-                    &         + zsurf(ji+1,jj  ) * p_mask(ji+1,jj  ,1)  &
-                    &         + zsurf(ji+2,jj  ) * p_mask(ji+2,jj  ,1)  &
-                    &         + zsurf(ji  ,jj+1) * p_mask(ji  ,jj+1,1)  &
-                    &         + zsurf(ji+1,jj+1) * p_mask(ji+1,jj+1,1)  &
-                    &         + zsurf(ji+2,jj+1) * p_mask(ji+2,jj+1,1)  &
-                    &         + zsurf(ji  ,jj+2) * p_mask(ji  ,jj+2,1)  &
-                    &         + zsurf(ji+1,jj+2) * p_mask(ji+1,jj+2,1)  &
-                    &         + zsurf(ji+2,jj+2) * p_mask(ji+2,jj+2,1)
-                  !
-                  p_surf_crs    (ii,ij,1) = zsfcrs
-                  p_surf_crs_msk(ii,ij,1) = zsfcrs_msk
+                  p_surf_crs_msk(ii,2,jk) =  zsurfmsk(ji,je_2,jk) + zsurfmsk(ji+1,je_2,jk) + zsurfmsk(ji+2,je_2,jk) 
                   !
                ENDDO
             ENDDO
-            DO jk = 2, jpk
+         ENDIF
+      ELSE
+         je_2 = mjs_crs(2)
+         DO jk = 1, jpk
+            DO ji = nistr, niend, nn_factx
+               ii   = ( ji - mis_crs(2) ) * rfactx_r + 2 
+               !  
+               p_surf_crs    (ii,2,jk) =  zsurf(ji,je_2  ,jk) + zsurf(ji+1,je_2  ,jk) + zsurf(ji+2,je_2  ,jk)  &
+                    &                   + zsurf(ji,je_2+1,jk) + zsurf(ji+1,je_2+1,jk) + zsurf(ji+2,je_2+1,jk)  &
+                    &                   + zsurf(ji,je_2+2,jk) + zsurf(ji+1,je_2+2,jk) + zsurf(ji+2,je_2+2,jk)  
+
+               p_surf_crs_msk(ii,2,jk) =  zsurfmsk(ji,je_2  ,jk) + zsurfmsk(ji+1,je_2  ,jk) + zsurfmsk(ji+2,je_2  ,jk)  &
+                    &                   + zsurfmsk(ji,je_2+1,jk) + zsurfmsk(ji+1,je_2+1,jk) + zsurfmsk(ji+2,je_2+1,jk)  &
+                    &                   + zsurfmsk(ji,je_2+2,jk) + zsurfmsk(ji+1,je_2+2,jk) + zsurfmsk(ji+2,je_2+2,jk)  
+                ENDDO
+            ENDDO
+      ENDIF
+         
+      DO jk = 1, jpk
+         DO jj = njstr, njend, nn_facty
+            DO ji = nistr, niend, nn_factx
+               ii = ( ji - mis_crs(2) ) * rfactx_r + 2  
+               ij = ( jj - njstr ) * rfacty_r + 3
                !
-               p_surf_crs(:,:,jk) = p_surf_crs(:,:,1)
-               !
-               DO ji = nistr, niend, nn_factx
-                  DO jj   = njstr, njend, nn_facty
-                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid
-                     ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                     ijje = mje_crs(ij)
-                     ijie = mie_crs(ii)
-                     !
-                     zsfcrs_msk =  zsurf(ji  ,jj  ) * p_mask(ji  ,jj  ,jk-1)  &
-                       &         + zsurf(ji+1,jj  ) * p_mask(ji+1,jj  ,jk-1)  &
-                       &         + zsurf(ji+2,jj  ) * p_mask(ji+2,jj  ,jk-1)  &
-                       &         + zsurf(ji  ,jj+1) * p_mask(ji  ,jj+1,jk-1)  &
-                       &         + zsurf(ji+1,jj+1) * p_mask(ji+1,jj+1,jk-1)  &
-                       &         + zsurf(ji+2,jj+1) * p_mask(ji+2,jj+1,jk-1)  &
-                       &         + zsurf(ji  ,jj+2) * p_mask(ji  ,jj+2,jk-1)  &
-                       &         + zsurf(ji+1,jj+2) * p_mask(ji+1,jj+2,jk-1)  &
-                       &         + zsurf(ji+2,jj+2) * p_mask(ji+2,jj+2,jk-1)
-                       !
-                       p_surf_crs_msk(ii,ij,jk) = zsfcrs_msk
-                       !
-                   ENDDO
-                ENDDO
-            ENDDO
-                        
-            CALL wrk_dealloc( jpi, jpj, zsurf )
-          
-         CASE( 'V' )
-           
-           CALL wrk_alloc( jpi, jpj, jpk, zsurf3d )
-           DO jk = 1, jpk
-              zsurf3d(:,:,jk) =  p_e1(:,:) * p_e3(:,:,jk)
-           ENDDO
-         
-           DO jk = 1, jpk
-              DO ji = nistr, niend, nn_factx
-                 DO jj = njstr, njend, nn_facty
-                    ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                    ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                    ijje = mje_crs(ij)
-                    ijie = mie_crs(ii)
-                    !                  
-                    zsfcrs      =  zsurf3d(ji,ijje,jk) + zsurf3d(ji+1,ijje,jk) + zsurf3d(ji+2,ijje,jk)
-                    !
-                    zsfcrs_msk  =  zsurf3d(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk) &
-                      &          + zsurf3d(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) &
-                      &          + zsurf3d(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) 
-                    !
-                    p_surf_crs    (ii,ij,jk) = zsfcrs
-                    p_surf_crs_msk(ii,ij,jk) = zsfcrs_msk
-                    !
-                  ENDDO      
-              ENDDO
-           ENDDO   
-
-           CALL wrk_dealloc( jpi, jpj, jpk, zsurf3d )
-            
-         CASE( 'U' )
-         
-           CALL wrk_alloc( jpi, jpj, jpk, zsurf3d )
-           DO jk = 1, jpk
-              zsurf3d(:,:,jk) =  p_e2(:,:) * p_e3(:,:,jk)
-           ENDDO
-         
-           DO jk = 1, jpk
-              DO ji = nistr, niend, nn_factx
-                 DO jj = njstr, njend, nn_facty
-                    ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
-                    ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2
-                    ijje = mje_crs(ij)
-                    ijie = mie_crs(ii)
-                    !                  
-                    zsfcrs      =  zsurf3d(ijie,jj,jk) + zsurf3d(ijie,jj+1,jk) + zsurf3d(ijie,jj+2,jk)
-                    !
-                    zsfcrs_msk  =  zsurf3d(ijie  ,jj,jk) * p_mask(ijie,jj  ,jk) &
-                      &          + zsurf3d(ijie,jj+1,jk) * p_mask(ijie,jj+1,jk) &
-                      &          + zsurf3d(ijie,jj+2,jk) * p_mask(ijie,jj+2,jk) 
-                    !
-                    p_surf_crs    (ii,ij,jk) = zsfcrs
-                    p_surf_crs_msk(ii,ij,jk) = zsfcrs_msk
-                    !
-                  ENDDO      
-              ENDDO
-           ENDDO  
- 
-           CALL wrk_dealloc( jpi, jpj, jpk, zsurf3d )
-
-      END SELECT
-      
+               p_surf_crs    (ii,ij,jk) =  zsurf(ji,jj  ,jk) + zsurf(ji+1,jj  ,jk) + zsurf(ji+2,jj  ,jk)  &
+                    &                    + zsurf(ji,jj+1,jk) + zsurf(ji+1,jj+1,jk) + zsurf(ji+2,jj+1,jk)  &
+                    &                    + zsurf(ji,jj+2,jk) + zsurf(ji+1,jj+2,jk) + zsurf(ji+2,jj+2,jk)  
+
+               p_surf_crs_msk(ii,ij,jk) =  zsurfmsk(ji,jj  ,jk) + zsurfmsk(ji+1,jj  ,jk) + zsurfmsk(ji+2,jj  ,jk)  &
+                    &                    + zsurfmsk(ji,jj+1,jk) + zsurfmsk(ji+1,jj+1,jk) + zsurfmsk(ji+2,jj+1,jk)  &
+                    &                    + zsurfmsk(ji,jj+2,jk) + zsurfmsk(ji+1,jj+2,jk) + zsurfmsk(ji+2,jj+2,jk)  
+            ENDDO      
+         ENDDO
+      ENDDO   
+
       CALL crs_lbc_lnk( p_surf_crs    , cd_type, 1.0, pval=1.0 )
       CALL crs_lbc_lnk( p_surf_crs_msk, cd_type, 1.0, pval=1.0 )
 
+      CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zsurfmsk )
 
    END SUBROUTINE crs_dom_sfc
@@ -1601,14 +1898,18 @@
       INTEGER  :: ji,jj,jk,ijjgloT,ijis,ijie,ijjs,ijje,jn      ! dummy indices
       INTEGER  :: ierr                                ! allocation error status
-   
-     ! 1.a. Define global domain indices
+ 
+  
+     ! 1.a. Define global domain indices  : take into account the interior domain only ( removes i/j=1 , i/j=jpiglo/jpjglo ) then add 2/3 grid points 
       jpiglo_crs   = INT( (jpiglo - 2) / nn_factx ) + 2
-      jpjglo_crs   = INT( (jpjglo - 2) / nn_facty ) + 2  ! the -2 removes j=1, j=jpj
+  !    jpjglo_crs   = INT( (jpjglo - 2) / nn_facty ) + 2  ! the -2 removes j=1, j=jpj
+  !    jpjglo_crs   = INT( (jpjglo - 2) / nn_facty ) + 3
+      jpjglo_crs   = INT( (jpjglo - MOD(jpjglo, nn_facty)) / nn_facty ) + 3
       jpiglo_crsm1 = jpiglo_crs - 1
       jpjglo_crsm1 = jpjglo_crs - 1  
 
-     ! 1.b. Define local domain indices
-      jpi_crs = ( jpiglo_crs-2 * jpreci + (jpni-1) ) / jpni + 2*jpreci
-      jpj_crs = ( jpjglo_crs-2 * jprecj + (jpnj-1) ) / jpnj + 2*jprecj
+      jpi_crs = ( jpiglo_crs   - 2 * jpreci + (jpni-1) ) / jpni + 2 * jpreci
+      jpj_crs = ( jpjglo_crsm1 - 2 * jprecj + (jpnj-1) ) / jpnj + 2 * jprecj   
+              
+      IF( noso < 0 ) jpj_crs = jpj_crs + 1    ! add a local band on southern processors  
        
       jpi_crsm1   = jpi_crs - 1
@@ -1618,5 +1919,6 @@
       
       ierr = crs_dom_alloc()          ! allocate most coarse grid arrays
-     ! 2.a Define processor domain
+
+      ! 2.a Define processor domain
       IF( .NOT. lk_mpp ) THEN
          nimpp_crs  = 1
@@ -1628,5 +1930,4 @@
          nlei_crs   = jpi_crs
          nlej_crs   = jpj_crs
-
       ELSE
          ! Initialisation of most local variables -
@@ -1642,5 +1943,5 @@
         ! Calculs suivant une découpage en j
         DO jn = 1, jpnij, jpni
-           IF( jn < (jpnij-jpni + 1)) THEN
+           IF( jn < ( jpnij - jpni + 1 ) ) THEN
               nlejt_crs(jn) = AINT( REAL( ( jpjglo - (njmppt(jn     ) - 1) ) / nn_facty, wp ) ) &
                        &    - AINT( REAL( ( jpjglo - (njmppt(jn+jpni) - 1) ) / nn_facty, wp ) )
@@ -1648,8 +1949,8 @@
               nlejt_crs(jn) = AINT( REAL(  nlejt(jn) / nn_facty, wp ) ) + 1            
            ENDIF
-           
+           IF( noso < 0 ) nlejt_crs(jn) = nlejt_crs(jn) + 1             
            SELECT CASE( ibonjt(jn) )
               CASE ( -1 )
-                IF( MOD( jpjglo - njmppt(jn), nn_facty) > 0 )    nlejt_crs(jn) = nlejt_crs(jn) + 1
+                IF( MOD( jpjglo - njmppt(jn), nn_facty) > 0 )  nlejt_crs(jn) = nlejt_crs(jn) + 1
                 nlcjt_crs(jn) = nlejt_crs(jn) + jprecj
                 nldjt_crs(jn) = nldjt(jn)
@@ -1657,7 +1958,8 @@
               CASE ( 0 )
               
+                nldjt_crs(jn) = nldjt(jn)
+                IF( nldjt(jn) == 1 )  nlejt_crs(jn) = nlejt_crs(jn) + 1
                 nlejt_crs(jn) = nlejt_crs(jn) + jprecj
                 nlcjt_crs(jn) = nlejt_crs(jn) + jprecj
-                nldjt_crs(jn) = nldjt(jn)
                 
               CASE ( 1, 2 )
@@ -1670,6 +1972,11 @@
                  STOP
            END SELECT
-         
-           njmppt_crs(jn) = ANINT(REAL((njmppt(jn) + 1 + MOD( jpjglo - njmppt(jn) + 1, nn_facty )) / nn_facty, wp ) )
+           IF( nlcjt_crs(jn) > jpj_crs )     jpj_crs = jpj_crs + 1
+
+           IF(nldjt_crs(jn) == 1 ) THEN
+              njmppt_crs(jn) = 1
+           ELSE
+              njmppt_crs(jn) = 2 + ANINT(REAL((njmppt(jn) + 1 - MOD( jpjglo , nn_facty )) / nn_facty, wp ) )
+           ENDIF           
            
            DO jj = jn + 1, jn + jpni - 1
@@ -1685,43 +1992,42 @@
         njmpp_crs = njmppt_crs(nproc + 1)
 
-         !!!! Calcul suivant un decoupage en i
-           DO jn = 1, jpni
-              IF( jn < jpni ) THEN
-         
-                 nleit_crs(jn) = AINT( REAL( ( jpiglo - (nimppt(jn  ) - 1) ) / nn_factx, wp ) ) &
-                         &     - AINT( REAL( ( jpiglo - (nimppt(jn+1) - 1) ) / nn_factx, wp ) )
-              ELSE
-                 nleit_crs(jn) = AINT( REAL( ( jpiglo - (nimppt(jn  ) - 1) ) / nn_factx, wp ) )
-              ENDIF
-              SELECT CASE( ibonit(jn) )
-           
-                 CASE ( -1 )
-                   nleit_crs(jn) = nleit_crs(jn) + jpreci           
-                   nlcit_crs(jn) = nleit_crs(jn) + jpreci
-                   nldit_crs(jn) = nldit(jn) 
+        ! Calcul suivant un decoupage en i
+        DO jn = 1, jpni
+           IF( jn == 1 ) THEN          
+              nleit_crs(jn) = AINT( REAL( ( nimppt(jn  ) - 1 + nlcit(jn  ) )  / nn_factx, wp) )
+           ELSE
+              nleit_crs(jn) = AINT( REAL( ( nimppt(jn  ) - 1 + nlcit(jn  ) )  / nn_factx, wp) ) &
+                 &          - AINT( REAL( ( nimppt(jn-1) - 1 + nlcit(jn-1) )  / nn_factx, wp) )
+           ENDIF
+
+           SELECT CASE( ibonit(jn) )
+              CASE ( -1 )
+                 nleit_crs(jn) = nleit_crs(jn) + jpreci           
+                 nlcit_crs(jn) = nleit_crs(jn) + jpreci
+                 nldit_crs(jn) = nldit(jn) 
               
-                 CASE ( 0 )
-                   nleit_crs(jn) = nleit_crs(jn) + jpreci
-                   nlcit_crs(jn) = nleit_crs(jn) + jpreci
-                   nldit_crs(jn) = nldit(jn) 
+              CASE ( 0 )
+                 nleit_crs(jn) = nleit_crs(jn) + jpreci
+                 nlcit_crs(jn) = nleit_crs(jn) + jpreci
+                 nldit_crs(jn) = nldit(jn) 
                 
-                 CASE ( 1, 2 )
-                   IF( MOD( jpiglo - nimppt(jn), nn_factx) > 0 )    nleit_crs(jn) = nleit_crs(jn) + 1
-                   nleit_crs(jn) = nleit_crs(jn) + jpreci
-                   nlcit_crs(jn) = nleit_crs(jn)
-                   nldit_crs(jn) = nldit(jn) 
-                
-                 CASE DEFAULT
-                    STOP
-              END SELECT
-
-              nimppt_crs(jn) =ANINT( REAL( (nimppt(jn) + 1 ) / nn_factx, wp ) ) + 1
-              DO jj = jn+jpni , jpnij, jpni
-                 nleit_crs(jj) = nleit_crs(jn) 
-                 nlcit_crs(jj) = nlcit_crs(jn)
-                 nldit_crs(jj) = nldit_crs(jn)
-                 nimppt_crs(jj)= nimppt_crs(jn)
-              ENDDO
-           ENDDO 
+              CASE ( 1, 2 )
+                 IF( MOD( jpiglo - nimppt(jn), nn_factx) > 0 )  nleit_crs(jn) = nleit_crs(jn) + 1
+                 nleit_crs(jn) = nleit_crs(jn) + jpreci
+                 nlcit_crs(jn) = nleit_crs(jn)
+                 nldit_crs(jn) = nldit(jn) 
+
+              CASE DEFAULT
+                 STOP
+           END SELECT
+
+           nimppt_crs(jn) = ANINT( REAL( (nimppt(jn) + 1 ) / nn_factx, wp ) ) + 1
+           DO jj = jn + jpni , jpnij, jpni
+              nleit_crs(jj) = nleit_crs(jn) 
+              nlcit_crs(jj) = nlcit_crs(jn)
+              nldit_crs(jj) = nldit_crs(jn)
+              nimppt_crs(jj)= nimppt_crs(jn)
+           ENDDO
+         ENDDO 
         
          nlei_crs  = nleit_crs(nproc + 1) 
@@ -1730,6 +2036,7 @@
          nimpp_crs = nimppt_crs(nproc + 1)
 
-         ! rajouter la condition stop
+         ! No coarsening with zoom
          IF( jpizoom /= 1 .OR. jpjzoom /= 1)    STOP 
+
          DO ji = 1, jpi_crs
             mig_crs(ji) = ji + nimpp_crs - 1
@@ -1737,4 +2044,14 @@
          DO jj = 1, jpj_crs
             mjg_crs(jj) = jj + njmpp_crs - 1!
+         ENDDO
+       
+         DO ji = 1, jpiglo_crs
+            mi0_crs(ji) = MAX( 1, MIN( ji - nimpp_crs + 1 , jpi_crs + 1 ) )
+            mi1_crs(ji) = MAX( 0, MIN( ji - nimpp_crs + 1 , jpi_crs     ) )
+         ENDDO
+         
+         DO jj = 1, jpjglo_crs
+            mj0_crs(jj) = MAX( 1, MIN( jj - njmpp_crs + 1 , jpj_crs + 1 ) )
+            mj1_crs(jj) = MAX( 0, MIN( jj - njmpp_crs + 1 , jpj_crs     ) )
          ENDDO
 
@@ -1773,5 +2090,5 @@
      
 
-      IF (lwp) THEN
+      IF(lwp) THEN
          WRITE(numout,*)
          WRITE(numout,*) 'crs_init : coarse grid dimensions'
@@ -1793,18 +2110,7 @@
          WRITE(numout,*) ' njmpp  = '     , njmpp
          WRITE(numout,*) ' njmpp_full  = ', njmpp_full
-         WRITE(numout,*) ' nreci'         , nreci 
-   !      WRITE(numout,*) ' nlejt'         , nlejt
-   !      WRITE(numout,*) ' nldjt'         , nldjt
-   !      WRITE(numout,*) ' nlcjt'         , nlcjt
-   !      WRITE(numout,*) ' njmppt'        , njmppt
-   !      WRITE(numout,*) ' nleit'         , nleit
-   !      WRITE(numout,*) ' nldit'         , nldit
-   !      WRITE(numout,*) ' nlcit'         , nlcit         
-   !      WRITE(numout,*) ' nimppt'        , nimppt
-   !      WRITE(numout,*) ' nleit_full'    , nleit_full
          WRITE(numout,*)
       ENDIF
       
-
       CALL dom_grid_glo
       
@@ -1847,10 +2153,10 @@
         
             DO ji = 2, jpiglo_crsm1
-               ijie = (ji*nn_factx)-nn_factx   !cc
-               ijis = ijie-nn_factx+1
+               ijie = ( ji * nn_factx ) - nn_factx   !cc
+               ijis = ijie - nn_factx + 1
                mis2_crs(ji) = ijis
                mie2_crs(ji) = ijie
             ENDDO
-            IF ( jpiglo - 1 - mie2_crs(jpiglo_crsm1) <= nn_factx ) mie2_crs(jpiglo_crsm1)  = jpiglo-2  
+            IF ( jpiglo - 1 - mie2_crs(jpiglo_crsm1) <= nn_factx ) mie2_crs(jpiglo_crsm1) = jpiglo - 2  
 
             ! Handle first the northernmost bin
@@ -1859,9 +2165,9 @@
             ENDIF
 
-            DO jj = 2, jpjglo_crsm1
-                ijje = ijjgloT-nn_facty*(jj-2)
-                ijjs = ijje-nn_facty+1                   
-                mjs2_crs(jpjglo_crs-jj+1) = ijjs
-                mje2_crs(jpjglo_crs-jj+1) = ijje
+            DO jj = 2, jpjglo_crs
+                ijje = ijjgloT - nn_facty * ( jj - 3 )
+                ijjs = ijje - nn_facty + 1                   
+                mjs2_crs(jpjglo_crs-jj+2) = ijjs
+                mje2_crs(jpjglo_crs-jj+2) = ijje
             ENDDO
 
@@ -1872,14 +2178,14 @@
 
             DO ji = 2, jpiglo_crsm1
-               ijie = (ji*nn_factx)-nn_factx 
-               ijis = ijie-nn_factx+1
+               ijie = ( ji * nn_factx ) - nn_factx 
+               ijis = ijie - nn_factx + 1
                mis2_crs(ji) = ijis
                mie2_crs(ji) = ijie
             ENDDO
-            IF ( jpiglo - 1 - mie2_crs(jpiglo_crsm1) <= nn_factx ) mie_crs(jpiglo_crsm1)  = jpiglo-2 
+            IF ( jpiglo - 1 - mie2_crs(jpiglo_crsm1) <= nn_factx ) mie_crs(jpiglo_crsm1)  = jpiglo - 2 
 
             ! Treat the northernmost bin separately.
             jj = 2
-            ijje = jpj-nn_facty*(jj-2)
+            ijje = jpj - nn_facty * ( jj - 2 )
             IF ( nn_facty == 3 ) THEN   ;  ijjs = ijje - 1 
             ELSE                        ;  ijjs = ijje - nn_facty + 1
@@ -1890,9 +2196,9 @@
             ! Now bin the rest, any remainder at the south is lumped in the southern bin
             DO jj = 3, jpjglo_crsm1
-                ijje = jpjglo-nn_facty*(jj-2)
-                ijjs = ijje-nn_facty+1                  
-                IF ( ijjs <= nn_facty )   ijjs = 2
-                mjs2_crs(jpj_crs-jj+1) = ijjs
-                mje2_crs(jpj_crs-jj+1) = ijje
+                ijje = jpjglo - nn_facty * ( jj - 2 )
+                ijjs = ijje - nn_facty + 1                  
+                IF ( ijjs <= nn_facty )  ijjs = 2
+                mjs2_crs(jpj_crs-jj+1)   = ijjs
+                mje2_crs(jpj_crs-jj+1)   = ijje
             ENDDO
 
@@ -1908,8 +2214,12 @@
 
      ! Pad the boundaries, do not know if it is necessary
-      mis2_crs(1) = 1             ; mis2_crs(jpiglo_crs) = mie2_crs(jpiglo_crs - 1) + 1   
-      mie2_crs(1) = nn_factx      ; mie2_crs(jpiglo_crs) = jpiglo                         
-      mje2_crs(1) = mjs2_crs(2)-1 ; mje2_crs(jpjglo_crs) = jpjglo
-      mjs2_crs(1) = 1             ; mjs2_crs(jpjglo_crs) = mje2_crs(jpjglo_crs) - nn_facty + 1 
+      mis2_crs(2) = 1             ;  mis2_crs(jpiglo_crs) = mie2_crs(jpiglo_crs - 1) + 1   
+      mie2_crs(2) = nn_factx      ;  mie2_crs(jpiglo_crs) = jpiglo                         
+      !
+      mjs2_crs(1) = 1
+      mje2_crs(1) = 1
+      !
+      mje2_crs(2) = mjs2_crs(3)-1 ;  mje2_crs(jpjglo_crs) = jpjglo
+      mjs2_crs(2) = 1             ;  mjs2_crs(jpjglo_crs) = mje2_crs(jpjglo_crs) - nn_facty + 1 
  
       IF( .NOT. lk_mpp ) THEN     
@@ -1928,6 +2238,7 @@
         ENDDO
       ENDIF
-      njstr = mjs_crs(2)  ;   njend = mjs_crs(nlcj_crs - 1)
+      !
       nistr = mis_crs(2)  ;   niend = mis_crs(nlci_crs - 1)
+      njstr = mjs_crs(3)  ;   njend = mjs_crs(nlcj_crs - 1)
       !
    END SUBROUTINE crs_dom_def
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdomwri.F90
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdomwri.F90	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdomwri.F90	(revision 4064)
@@ -211,6 +211,6 @@
             DO jj = 1,jpj_crs   
                DO ji = 1,jpi_crs
-                  ze3tp(ji,jj) = fse3t_crs(ji,jj,mbkt_crs(ji,jj)) * tmask_crs(ji,jj,1)
-                  ze3wp(ji,jj) = fse3w_crs(ji,jj,mbkt_crs(ji,jj)) * tmask_crs(ji,jj,1)
+                  ze3tp(ji,jj) = e3t_crs(ji,jj,mbkt_crs(ji,jj)) * tmask_crs(ji,jj,1)
+                  ze3wp(ji,jj) = e3w_crs(ji,jj,mbkt_crs(ji,jj)) * tmask_crs(ji,jj,1)
                END DO
             END DO
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsfld.F90
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsfld.F90	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsfld.F90	(revision 4064)
@@ -90,5 +90,5 @@
          vn_crs   (:,:,:  ) = 0._wp    ! v-velocity
          wn_crs   (:,:,:  ) = 0._wp    ! w
-         avt_crs  (:,:,:  ) = 0._wp    ! avt
+         avs_crs  (:,:,:  ) = 0._wp    ! avt
          hdivn_crs(:,:,:  ) = 0._wp    ! hdiv
          rke_crs  (:,:,:  ) = 0._wp    ! rke
@@ -111,5 +111,5 @@
       !  Temperature
       zt(:,:,:) = tsn(:,:,:,jp_tem)  ;      zt_crs(:,:,:) = 0._wp
-      CALL crs_dom_ope( zt, 'VOL', 'T', tmask, zt_crs, p_e12=e1e2t, p_e3=zfse3t )
+      CALL crs_dom_ope( zt, 'VOL', 'T', tmask, zt_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 )
       tsn_crs(:,:,:,jp_tem) = zt_crs(:,:,:)
 
@@ -120,5 +120,5 @@
       !  Salinity
       zs(:,:,:) = tsn(:,:,:,jp_sal)  ;      zs_crs(:,:,:) = 0._wp
-      CALL crs_dom_ope( zs, 'VOL', 'T', tmask, zs_crs, p_e12=e1e2t, p_e3=zfse3t )
+      CALL crs_dom_ope( zs, 'VOL', 'T', tmask, zs_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 )
       tsn_crs(:,:,:,jp_sal) = zt_crs(:,:,:)
 
@@ -127,5 +127,5 @@
 
       !  U-velocity
-      CALL crs_dom_ope( un, 'SUM', 'U', umask, un_crs, p_e12=e2u, p_e3=zfse3u, p_surf_crs=e2e3u_msk )
+      CALL crs_dom_ope( un, 'SUM', 'U', umask, un_crs, p_e12=e2u, p_e3=zfse3u, p_surf_crs=e2e3u_msk, psgn=-1.0 )
       !
       zt(:,:,:) = 0._wp     ;    zs(:,:,:) = 0._wp  ;   zt_crs(:,:,:) = 0._wp   ;    zs_crs(:,:,:) = 0._wp
@@ -138,6 +138,6 @@
          END DO
       END DO
-      CALL crs_dom_ope( zt, 'SUM', 'U', umask, zt_crs, p_e12=e2u, p_e3=zfse3u, p_surf_crs=e2e3u_msk )
-      CALL crs_dom_ope( zs, 'SUM', 'U', umask, zs_crs, p_e12=e2u, p_e3=zfse3u, p_surf_crs=e2e3u_msk )
+      CALL crs_dom_ope( zt, 'SUM', 'U', umask, zt_crs, p_e12=e2u, p_e3=zfse3u, p_surf_crs=e2e3u_msk, psgn=-1.0 )
+      CALL crs_dom_ope( zs, 'SUM', 'U', umask, zs_crs, p_e12=e2u, p_e3=zfse3u, p_surf_crs=e2e3u_msk, psgn=-1.0 )
 
       CALL iom_put( "uoce"  , un_crs )   ! i-current 
@@ -146,5 +146,5 @@
 
       !  V-velocity
-      CALL crs_dom_ope( vn, 'SUM', 'V', vmask, vn_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk )
+      CALL crs_dom_ope( vn, 'SUM', 'V', vmask, vn_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk, psgn=-1.0 )
       !                                                                                 
       zt(:,:,:) = 0._wp     ;    zs(:,:,:) = 0._wp  ;   zt_crs(:,:,:) = 0._wp   ;    zs_crs(:,:,:) = 0._wp
@@ -157,6 +157,6 @@
          END DO
       END DO
-      CALL crs_dom_ope( zt, 'SUM', 'V', vmask, zt_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk )
-      CALL crs_dom_ope( zs, 'SUM', 'V', vmask, zs_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk )
+      CALL crs_dom_ope( zt, 'SUM', 'V', vmask, zt_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk, psgn=-1.0 )
+      CALL crs_dom_ope( zs, 'SUM', 'V', vmask, zs_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk, psgn=-1.0 )
  
       CALL iom_put( "voce"  , vn_crs )   ! i-current 
@@ -166,5 +166,5 @@
      
       !  Kinetic energy
-      CALL crs_dom_ope( rke, 'VOL', 'T', tmask, rke_crs, p_e12=e1e2t, p_e3=zfse3t )
+      CALL crs_dom_ope( rke, 'VOL', 'T', tmask, rke_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 )
       CALL iom_put( "eken", rke_crs )
 
@@ -184,5 +184,5 @@
          ENDDO
       ENDDO
-      CALL crs_lbc_lnk( hdivn_crs, 'T', 1.0  )
+      CALL crs_lbc_lnk( hdivn_crs, 'T', 1.0 )
       !
       CALL iom_put( "hdiv", hdivn_crs )  
@@ -191,5 +191,5 @@
       !  W-velocity
       IF( ln_crs_wn ) THEN
-         CALL crs_dom_ope( wn, 'SUM', 'W', tmask, wn_crs, p_e12=e1e2t, p_surf_crs=e1e2w_msk )
+         CALL crs_dom_ope( wn, 'SUM', 'W', tmask, wn_crs, p_e12=e1e2t, p_surf_crs=e1e2w_msk, psgn=1.0 )
        !  CALL crs_dom_ope( wn, 'VOL', 'W', tmask, wn_crs, p_e12=e1e2t, p_e3=zfse3w )
       ELSE
@@ -202,26 +202,27 @@
       !  free memory
 
-      !  avt
+      !  avt, avs
       SELECT CASE ( nn_crs_kz )
          CASE ( 0 )
-            CALL crs_dom_ope( avt, 'VOL', 'W', tmask, avt_crs, p_e12=e1e2t, p_e3=zfse3w )
+            CALL crs_dom_ope( fsavs(:,:,:), 'VOL', 'W', tmask, avs_crs, p_e12=e1e2t, p_e3=zfse3w, psgn=1.0 )
          CASE ( 1 )
-            CALL crs_dom_ope( avt, 'MAX', 'W', tmask, avt_crs, p_e12=e1e2t, p_e3=zfse3w )
+            CALL crs_dom_ope( fsavs(:,:,:), 'MAX', 'W', tmask, avs_crs, p_e12=e1e2t, p_e3=zfse3w, psgn=1.0 )
          CASE ( 2 )
-            CALL crs_dom_ope( avt, 'MIN', 'W', tmask, avt_crs, p_e12=e1e2t, p_e3=zfse3w )
+            CALL crs_dom_ope( fsavs(:,:,:), 'MIN', 'W', tmask, avs_crs, p_e12=e1e2t, p_e3=zfse3w, psgn=1.0 )
       END SELECT
       !
-      CALL iom_put( "avt", avt_crs )   !  Kz
+      CALL iom_put( "avs", avs_crs )   !  Kz
       
       !  sbc fields  
-      CALL crs_dom_ope( sshn , 'VOL', 'T', tmask, sshn_crs , p_e12=e1e2t, p_e3=zfse3t          )  
-      CALL crs_dom_ope( utau , 'SUM', 'U', umask, utau_crs , p_e12=e2u  , p_surf_crs=e2u_crs   )
-      CALL crs_dom_ope( vtau , 'SUM', 'V', vmask, vtau_crs , p_e12=e1v  , p_surf_crs=e1v_crs   )
-      CALL crs_dom_ope( wndm , 'SUM', 'T', tmask, wndm_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs )
-      CALL crs_dom_ope( rnf  , 'MAX', 'T', tmask, rnf_crs                                      )
-      CALL crs_dom_ope( qsr  , 'SUM', 'T', tmask, qsr_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs )
-      CALL crs_dom_ope( emp_b, 'SUM', 'T', tmask, emp_b_crs, p_e12=e1e2t, p_surf_crs=e1e2t_crs )
-      CALL crs_dom_ope( emp  , 'SUM', 'T', tmask, emp_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs )
-      CALL crs_dom_ope( fr_i , 'SUM', 'T', tmask, fr_i_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs )
+      CALL crs_dom_ope( sshn , 'VOL', 'T', tmask, sshn_crs , p_e12=e1e2t, p_e3=zfse3t         , psgn=1.0 )  
+      CALL crs_dom_ope( utau , 'SUM', 'U', umask, utau_crs , p_e12=e2u  , p_surf_crs=e2u_crs  , psgn=1.0 )
+      CALL crs_dom_ope( vtau , 'SUM', 'V', vmask, vtau_crs , p_e12=e1v  , p_surf_crs=e1v_crs  , psgn=1.0 )
+      CALL crs_dom_ope( wndm , 'SUM', 'T', tmask, wndm_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 )
+      CALL crs_dom_ope( rnf  , 'MAX', 'T', tmask, rnf_crs                                     , psgn=1.0 )
+      CALL crs_dom_ope( qsr  , 'SUM', 'T', tmask, qsr_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 )
+      CALL crs_dom_ope( emp_b, 'SUM', 'T', tmask, emp_b_crs, p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 )
+      CALL crs_dom_ope( emp  , 'SUM', 'T', tmask, emp_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 )
+      CALL crs_dom_ope( sfx  , 'SUM', 'T', tmask, sfx_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 )
+      CALL crs_dom_ope( fr_i , 'SUM', 'T', tmask, fr_i_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 )
 
       CALL iom_put( "ssh"      , sshn_crs )   ! ssh output 
@@ -232,4 +233,5 @@
       CALL iom_put( "qsr"      , qsr_crs  )   ! qsr output 
       CALL iom_put( "empmr"    , emp_crs  )   ! water flux output 
+      CALL iom_put( "saltflx"  , sfx_crs  )   ! salt flux output 
       CALL iom_put( "ice_cover", fr_i_crs )   ! ice cover output 
 
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsini.F90
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsini.F90	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsini.F90	(revision 4064)
@@ -212,6 +212,6 @@
 
      !    3.d.3   Vertical depth (meters)
-     CALL crs_dom_ope( gdept, 'MAX', 'T', tmask, gdept_crs, p_e3=zfse3t ) 
-     CALL crs_dom_ope( gdepw, 'MAX', 'W', tmask, gdepw_crs, p_e3=zfse3w )
+     CALL crs_dom_ope( gdept, 'MAX', 'T', tmask, gdept_crs, p_e3=zfse3t, psgn=1.0 ) 
+     CALL crs_dom_ope( gdepw, 'MAX', 'W', tmask, gdepw_crs, p_e3=zfse3w, psgn=1.0 )
 
 
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90	(revision 4064)
@@ -40,5 +40,5 @@
    REAL(wp), PUBLIC  :: diazolight  = 50._wp     !: Nitrogen fixation sensitivty to light 
    REAL(wp), PUBLIC  :: concfediaz  = 1.E-10_wp  !: Fe half-saturation Cste for diazotrophs 
-   REAL(wp)          :: hratio      = 9.E-5_wp   !: Fe:3He ratio assumed for vent iron supply
+   REAL(wp)          :: hratio      = 1.e+7_wp   !: Fe:3He ratio assumed for vent iron supply
 
    LOGICAL , PUBLIC  :: ll_sbc
@@ -488,6 +488,6 @@
          CALL iom_get  ( numhydro, jpdom_data, TRIM( sn_hydrofe%clvar ), hydrofe(:,:,:), 1 )
          CALL iom_close( numhydro )
-         !
-         hydrofe(:,:,:) = ( hydrofe(:,:,:) * hratio ) / ( cvol(:,:,:) * ryyss + rtrn ) / fse3t(:,:,:)
+         !                                                        ! factor 1000 to convert from mol/m3 to mol/L
+         hydrofe(:,:,:) = ( hydrofe(:,:,:) * hratio ) / ( cvol(:,:,:) * ryyss + rtrn ) / 1000._wp 
          !
       ENDIF
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/trcini.F90
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/trcini.F90	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/trcini.F90	(revision 4064)
@@ -75,19 +75,10 @@
          &  CALL ctl_stop( ' Cross Land Advection not yet implemented with passive tracer ; nn_cla must be 0' )
 
-      CALL trc_nam                  ! read passive tracers namelists
-      !
-      IF(lwp) WRITE(numout,*)
-      IF( ln_rsttr ) THEN
-        !
-        IF( lk_offline )  neuler = 1   ! Set time-step indicator at nit000 (leap-frog)
-        CALL trc_rst_cal( nittrc000, 'READ' )   ! calendar
-        !
-      ELSE
-        IF( lk_offline )  THEN
-           neuler = 0                  ! Set time-step indicator at nit000 (euler)
-           CALL day_init               ! set calendar
-        ENDIF
-        !
-      ENDIF
+      CALL trc_nam      ! read passive tracers namelists
+      !
+      IF(lwp) WRITE(numout,*)
+      !
+      IF( ln_rsttr .AND. .NOT. lk_offline ) CALL trc_rst_cal( nit000, 'READ' )   ! calendar
+      !
       IF(lwp) WRITE(numout,*)
                                                               ! masked grid volume
@@ -107,5 +98,5 @@
       IF( lwp ) THEN
          !
-         CALL ctl_opn( numstr, 'tracer.stat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea )
+         CALL ctl_opn( numstr, 'tracer.stat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp , narea )
          !
       ENDIF
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/trcnam.F90
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/trcnam.F90	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/trcnam.F90	(revision 4064)
@@ -32,4 +32,5 @@
    PRIVATE 
 
+   PUBLIC trc_nam_run  ! called in trcini
    PUBLIC trc_nam      ! called in trcini
 
@@ -44,4 +45,5 @@
 CONTAINS
 
+
    SUBROUTINE trc_nam
       !!---------------------------------------------------------------------
@@ -54,74 +56,34 @@
       !!                ( (PISCES, CFC, MY_TRC )
       !!---------------------------------------------------------------------
-      INTEGER ::  jn, ierr
-      ! Definition of a tracer as a structure
-      TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer  ! type of tracer for saving if not key_iomput
-      !!
-      NAMELIST/namtrc/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, &
-         &             cn_trcrst_in, cn_trcrst_out, sn_tracer, ln_trcdta, &
-         &             ln_trcdmp, ln_trcdmp_clo, ln_top_euler
-#if defined key_trdmld_trc  || defined key_trdtrc
-      NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, &
-         &                ln_trdmld_trc_restart, ln_trdmld_trc_instant, &
-         &                cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc
-#endif
-      NAMELIST/namtrc_dia/ ln_diatrc, ln_diabio, nn_writedia, nn_writebio
-
-      !!---------------------------------------------------------------------
-
-      IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists'
-      IF(lwp) WRITE(numout,*) '~~~~~~~'
-
-      CALL ctl_opn( numnat, 'namelist_top', 'OLD', 'FORMATTED', 'SEQUENTIAL', 1, numout, .FALSE. )
-
-      ! Namelist nattrc (files)
-      ! ----------------------------------------------
-      nn_dttrc      = 1                 ! default values
-      nn_writetrc   = 10 
-      ln_top_euler  = .FALSE.
-      ln_rsttr      = .FALSE.
-      nn_rsttr      =  0
-      cn_trcrst_in  = 'restart_trc'
-      cn_trcrst_out = 'restart_trc'
-      !
-      DO jn = 1, jptra
-         WRITE( sn_tracer(jn)%clsname,'("TR_",I1)'           ) jn
-         WRITE( sn_tracer(jn)%cllname,'("TRACER NUMBER ",I1)') jn
-         sn_tracer(jn)%clunit  = 'mmole/m3'
-         sn_tracer(jn)%llinit  = .FALSE.
-         sn_tracer(jn)%llsave  = .TRUE.
-      END DO
-      ln_trcdta     = .FALSE.
-      ln_trcdmp     = .FALSE.
-      ln_trcdmp_clo = .FALSE.
-
-
-      REWIND( numnat )               ! read nattrc
-      READ  ( numnat, namtrc )
-
-      DO jn = 1, jptra
-         ctrcnm    (jn) = TRIM( sn_tracer(jn)%clsname )
-         ctrcln    (jn) = TRIM( sn_tracer(jn)%cllname )
-         ctrcun    (jn) = TRIM( sn_tracer(jn)%clunit  )
-         ln_trc_ini(jn) =       sn_tracer(jn)%llinit
-         ln_trc_wri(jn) =       sn_tracer(jn)%llsave
-      END DO
-
-      !!KPE  computes the first time step of tracer model
-      nittrc000 = nit000 + nn_dttrc - 1
- 
+      INTEGER ::  jn
+
+      !                                        !   Parameters of the run 
+      IF( .NOT. lk_offline ) CALL trc_nam_run
+      
+      !                                        !  passive tracer informations
+      CALL trc_nam_trc
+      
+      !                                        !   Parameters of additional diagnostics
+      CALL trc_nam_dia
+
+      !                                        !   namelist of transport
+      CALL trc_nam_trp
+
+
+      IF( ln_rsttr )                      ln_trcdta = .FALSE.   ! restart : no need of clim data
+      !
+      IF( ln_trcdmp .OR. ln_trcdmp_clo )  ln_trcdta = .TRUE.   ! damping : need to have clim data
+      !
+      IF( .NOT.ln_trcdta ) THEN
+         ln_trc_ini(:) = .FALSE.
+      ENDIF
+
 
       IF(lwp) THEN                   ! control print
          WRITE(numout,*)
          WRITE(numout,*) ' Namelist : namtrc'
-         WRITE(numout,*) '   time step freq. for passive tracer           nn_dttrc      = ', nn_dttrc
-         WRITE(numout,*) '   restart  for passive tracer                  ln_rsttr      = ', ln_rsttr
-         WRITE(numout,*) '   control of time step for passive tracer      nn_rsttr      = ', nn_rsttr
-         WRITE(numout,*) '   first time step for pass. trac.              nittrc000     = ', nittrc000
-         WRITE(numout,*) '   frequency of outputs for passive tracers     nn_writetrc   = ', nn_writetrc  
          WRITE(numout,*) '   Read inputs data from file (y/n)             ln_trcdta     = ', ln_trcdta
          WRITE(numout,*) '   Damping of passive tracer (y/n)              ln_trcdmp     = ', ln_trcdmp
          WRITE(numout,*) '   Restoring of tracer on closed seas           ln_trcdmp_clo = ', ln_trcdmp_clo
-         WRITE(numout,*) '   Use euler integration for TRC (y/n)          ln_top_euler  = ', ln_top_euler
          WRITE(numout,*) ' '
          DO jn = 1, jptra
@@ -131,4 +93,23 @@
       ENDIF
 
+      IF(lwp) THEN                   ! control print
+         IF( ln_rsttr ) THEN
+            WRITE(numout,*)
+            WRITE(numout,*) '  Read a restart file for passive tracer : ', TRIM( cn_trcrst_in )
+            WRITE(numout,*)
+         ENDIF
+         IF( ln_trcdta .AND. .NOT.ln_rsttr ) THEN
+            WRITE(numout,*)
+            WRITE(numout,*) '  Some of the passive tracers are initialised from climatologies '
+            WRITE(numout,*)
+         ENDIF
+         IF( .NOT.ln_trcdta ) THEN
+            WRITE(numout,*)
+            WRITE(numout,*) '  All the passive tracers are initialised with constant values '
+            WRITE(numout,*)
+         ENDIF
+      ENDIF
+
+      
       rdttrc(:) = rdttra(:) * FLOAT( nn_dttrc )   ! vertical profile of passive tracer time-step
   
@@ -137,74 +118,4 @@
         WRITE(numout,*) '    Passive Tracer  time step    rdttrc  = ', rdttrc(1)
         WRITE(numout,*) 
-      ENDIF
-
-      ln_diatrc = .FALSE.
-      ln_diabio = .FALSE.
-      nn_writedia = 10
-      nn_writebio = 10
-
-      REWIND( numnat )               !  namelist namtoptrd : passive tracer trends diagnostic
-      READ  ( numnat, namtrc_dia )
-
-      IF(lwp) THEN
-         WRITE(numout,*)
-         WRITE(numout,*)
-         WRITE(numout,*) ' Namelist : namtrc_dia'
-         WRITE(numout,*) '    save additionnal diagnostics arrays         ln_diatrc   = ', ln_diatrc
-         WRITE(numout,*) '    save additionnal biology diagnostics arrays ln_diabio   = ', ln_diabio
-         WRITE(numout,*) '    frequency of outputs for additional arrays  nn_writedia = ', nn_writedia
-         WRITE(numout,*) '    frequency of outputs for biological trends  nn_writebio = ', nn_writebio
-         WRITE(numout,*) ' '
-      ENDIF
-
-      IF( ln_diatrc .AND. .NOT. lk_iomput ) THEN 
-         ALLOCATE( trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d),  &
-           &       ctrc2d(jpdia2d), ctrc2l(jpdia2d), ctrc2u(jpdia2d) ,  & 
-           &       ctrc3d(jpdia3d), ctrc3l(jpdia3d), ctrc3u(jpdia3d) ,  STAT = ierr ) 
-         IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate add. diag. array' )
-         !
-         trc2d(:,:,:  ) = 0._wp  ;   ctrc2d(:) = ' '   ;   ctrc2l(:) = ' '    ;    ctrc2u(:) = ' ' 
-         trc3d(:,:,:,:) = 0._wp  ;   ctrc3d(:) = ' '   ;   ctrc3l(:) = ' '    ;    ctrc3u(:) = ' ' 
-         !
-      ENDIF
-
-      IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN
-         ALLOCATE( trbio (jpi,jpj,jpk,jpdiabio) , &
-           &       ctrbio(jpdiabio), ctrbil(jpdiabio), ctrbiu(jpdiabio), STAT = ierr ) 
-         IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate bio. diag. array' )
-         !
-         trbio(:,:,:,:) = 0._wp  ;   ctrbio(:) = ' '   ;   ctrbil(:) = ' '    ;    ctrbiu(:) = ' ' 
-         !
-      ENDIF
-
-      ! namelist of transport
-      ! ---------------------
-      CALL trc_nam_trp
-
-
-      IF( ln_rsttr )                      ln_trcdta = .FALSE.   ! restart : no need of clim data
-      !
-      IF( ln_trcdmp .OR. ln_trcdmp_clo )  ln_trcdta = .TRUE.   ! damping : need to have clim data
-      !
-      IF( .NOT.ln_trcdta ) THEN
-         ln_trc_ini(:) = .FALSE.
-      ENDIF
-
-      IF(lwp) THEN                   ! control print
-         IF( ln_rsttr ) THEN
-            WRITE(numout,*)
-            WRITE(numout,*) '  Read a restart file for passive tracer : ', TRIM( cn_trcrst_in )
-            WRITE(numout,*)
-         ENDIF
-         IF( ln_trcdta .AND. .NOT.ln_rsttr ) THEN
-            WRITE(numout,*)
-            WRITE(numout,*) '  Some of the passive tracers are initialised from climatologies '
-            WRITE(numout,*)
-         ENDIF
-         IF( .NOT.ln_trcdta ) THEN
-            WRITE(numout,*)
-            WRITE(numout,*) '  All the passive tracers are initialised with constant values '
-            WRITE(numout,*)
-         ENDIF
       ENDIF
 
@@ -260,4 +171,162 @@
    END SUBROUTINE trc_nam
 
+   SUBROUTINE trc_nam_run
+      !!---------------------------------------------------------------------
+      !!                     ***  ROUTINE trc_nam  ***
+      !!
+      !! ** Purpose :   read options for the passive tracer run (namelist) 
+      !!
+      !!---------------------------------------------------------------------
+      NAMELIST/namtrc_run/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, ln_top_euler, &
+        &                  cn_trcrst_in, cn_trcrst_out
+
+      !!---------------------------------------------------------------------
+
+      IF(lwp) WRITE(numout,*) 
+      IF(lwp) WRITE(numout,*) 'trc_nam_run : read the passive tracer namelists'
+      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
+
+      CALL ctl_opn( numnat, 'namelist_top', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE. )
+
+      ! Namelist nattrc (files)
+      ! ----------------------------------------------
+      nn_dttrc      = 1                 ! default values
+      nn_writetrc   = 10 
+      ln_top_euler  = .FALSE.
+      ln_rsttr      = .FALSE.
+      nn_rsttr      =  0
+      cn_trcrst_in  = 'restart_trc'
+      cn_trcrst_out = 'restart_trc'
+      !
+      REWIND( numnat )               ! read nattrc
+      READ  ( numnat, namtrc_run )
+
+      !  computes the first time step of tracer model
+      nittrc000 = nit000 + nn_dttrc - 1
+
+      IF(lwp) THEN                   ! control print
+         WRITE(numout,*)
+         WRITE(numout,*) ' Namelist : namtrc'
+         WRITE(numout,*) '   time step freq. for passive tracer           nn_dttrc      = ', nn_dttrc
+         WRITE(numout,*) '   restart  for passive tracer                  ln_rsttr      = ', ln_rsttr
+         WRITE(numout,*) '   control of time step for passive tracer      nn_rsttr      = ', nn_rsttr
+         WRITE(numout,*) '   first time step for pass. trac.              nittrc000     = ', nittrc000
+         WRITE(numout,*) '   frequency of outputs for passive tracers     nn_writetrc   = ', nn_writetrc  
+         WRITE(numout,*) ' '
+      ENDIF
+      !
+    END SUBROUTINE trc_nam_run
+
+
+   SUBROUTINE trc_nam_trc
+      !!---------------------------------------------------------------------
+      !!                     ***  ROUTINE trc_nam  ***
+      !!
+      !! ** Purpose :   read options for the passive tracer run (namelist) 
+      !!
+      !!---------------------------------------------------------------------
+      INTEGER ::  jn
+      ! Definition of a tracer as a structure
+      TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer  ! type of tracer for saving if not key_iomput
+      !!
+      NAMELIST/namtrc/ sn_tracer, ln_trcdta,ln_trcdmp, ln_trcdmp_clo
+
+      !!---------------------------------------------------------------------
+
+      IF(lwp) WRITE(numout,*) 
+      IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists'
+      IF(lwp) WRITE(numout,*) '~~~~~~~'
+
+      !
+      DO jn = 1, jptra
+         WRITE( sn_tracer(jn)%clsname,'("TR_",I1)'           ) jn
+         WRITE( sn_tracer(jn)%cllname,'("TRACER NUMBER ",I1)') jn
+         sn_tracer(jn)%clunit  = 'mmole/m3'
+         sn_tracer(jn)%llinit  = .FALSE.
+         sn_tracer(jn)%llsave  = .TRUE.
+      END DO
+      ln_trcdta     = .FALSE.
+      ln_trcdmp     = .FALSE.
+      ln_trcdmp_clo = .FALSE.
+
+      REWIND( numnat )               ! read nattrc
+      READ  ( numnat, namtrc )
+
+      DO jn = 1, jptra
+         ctrcnm    (jn) = TRIM( sn_tracer(jn)%clsname )
+         ctrcln    (jn) = TRIM( sn_tracer(jn)%cllname )
+         ctrcun    (jn) = TRIM( sn_tracer(jn)%clunit  )
+         ln_trc_ini(jn) =       sn_tracer(jn)%llinit
+         ln_trc_wri(jn) =       sn_tracer(jn)%llsave
+      END DO
+      
+    END SUBROUTINE trc_nam_trc
+
+
+   SUBROUTINE trc_nam_dia
+      !!---------------------------------------------------------------------
+      !!                     ***  ROUTINE trc_nam_dia  ***
+      !!
+      !! ** Purpose :   read options for the passive tracer diagnostics
+      !!
+      !! ** Method  : - read passive tracer namelist 
+      !!              - read namelist of each defined SMS model
+      !!                ( (PISCES, CFC, MY_TRC )
+      !!---------------------------------------------------------------------
+      INTEGER ::  ierr
+#if defined key_trdmld_trc  || defined key_trdtrc
+      NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, &
+         &                ln_trdmld_trc_restart, ln_trdmld_trc_instant, &
+         &                cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc
+#endif
+      NAMELIST/namtrc_dia/ ln_diatrc, ln_diabio, nn_writedia, nn_writebio
+
+      !!---------------------------------------------------------------------
+
+      IF(lwp) WRITE(numout,*) 
+      IF(lwp) WRITE(numout,*) 'trc_nam_dia : read the passive tracer diagnostics options'
+      IF(lwp) WRITE(numout,*) '~~~~~~~'
+
+      ln_diatrc = .FALSE.
+      ln_diabio = .FALSE.
+      nn_writedia = 10
+      nn_writebio = 10
+
+      REWIND( numnat )               !  namelist namtoptrd : passive tracer trends diagnostic
+      READ  ( numnat, namtrc_dia )
+
+      IF(lwp) THEN
+         WRITE(numout,*)
+         WRITE(numout,*)
+         WRITE(numout,*) ' Namelist : namtrc_dia'
+         WRITE(numout,*) '    save additionnal diagnostics arrays         ln_diatrc   = ', ln_diatrc
+         WRITE(numout,*) '    save additionnal biology diagnostics arrays ln_diabio   = ', ln_diabio
+         WRITE(numout,*) '    frequency of outputs for additional arrays  nn_writedia = ', nn_writedia
+         WRITE(numout,*) '    frequency of outputs for biological trends  nn_writebio = ', nn_writebio
+         WRITE(numout,*) ' '
+      ENDIF
+
+      IF( ln_diatrc .AND. .NOT. lk_iomput ) THEN 
+         ALLOCATE( trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d),  &
+           &       ctrc2d(jpdia2d), ctrc2l(jpdia2d), ctrc2u(jpdia2d) ,  & 
+           &       ctrc3d(jpdia3d), ctrc3l(jpdia3d), ctrc3u(jpdia3d) ,  STAT = ierr ) 
+         IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate add. diag. array' )
+         !
+         trc2d(:,:,:  ) = 0._wp  ;   ctrc2d(:) = ' '   ;   ctrc2l(:) = ' '    ;    ctrc2u(:) = ' ' 
+         trc3d(:,:,:,:) = 0._wp  ;   ctrc3d(:) = ' '   ;   ctrc3l(:) = ' '    ;    ctrc3u(:) = ' ' 
+         !
+      ENDIF
+
+      IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN
+         ALLOCATE( trbio (jpi,jpj,jpk,jpdiabio) , &
+           &       ctrbio(jpdiabio), ctrbil(jpdiabio), ctrbiu(jpdiabio), STAT = ierr ) 
+         IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate bio. diag. array' )
+         !
+         trbio(:,:,:,:) = 0._wp  ;   ctrbio(:) = ' '   ;   ctrbil(:) = ' '    ;    ctrbiu(:) = ' ' 
+         !
+      ENDIF
+      !
+   END SUBROUTINE trc_nam_dia
+
 #else
    !!----------------------------------------------------------------------
@@ -267,4 +336,6 @@
    SUBROUTINE trc_nam                      ! Empty routine   
    END SUBROUTINE trc_nam
+   SUBROUTINE trc_nam_run                      ! Empty routine   
+   END SUBROUTINE trc_nam_run
 #endif
 
Index: /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/trcrst.F90
===================================================================
--- /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/trcrst.F90	(revision 4063)
+++ /branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/trcrst.F90	(revision 4064)
@@ -197,4 +197,5 @@
 
          CALL iom_get ( numrtr, 'kt', zkt )   ! last time-step of previous run
+
          IF(lwp) THEN
             WRITE(numout,*) ' *** Info read in restart : '
@@ -216,8 +217,8 @@
             IF( iom_varid( numrtr, 'rdttrc1', ldstop = .FALSE. ) > 0 )   THEN
                CALL iom_get( numrtr, 'rdttrc1', zrdttrc1 )
-               IF( zrdttrc1 /= rdttrc(1) )   neuler = 0
+               IF( zrdttrc1 /= rdt * nn_dttrc )   neuler = 0
             ENDIF
             !                          ! define ndastp and adatrj
-            IF ( nn_rsttr == 2 ) THEN
+            IF( nn_rsttr == 2 ) THEN
                CALL iom_get( numrtr, 'ndastp', zndastp ) 
                ndastp = NINT( zndastp )
