Index: trunk/libIGCM/libIGCM_config/libIGCM_config.ksh
===================================================================
--- trunk/libIGCM/libIGCM_config/libIGCM_config.ksh	(revision 1527)
+++ trunk/libIGCM/libIGCM_config/libIGCM_config.ksh	(revision 1528)
@@ -661,4 +661,10 @@
     eval ${comp}_PROC_OMP=0
 
+    # DEP is the factor to increase the number of cores per process
+    eval ${comp}_PROC_DEP=0
+
+    # DEDICATED is the flag to activate the use of dedicated node for XIOS server only
+    eval ${comp}_OK_DEDICATED=0
+
     # Only if we really have an executable for the component :
     if ( [ "X${ExeNameIn}" != X\"\" ] && [ "X${ExeNameIn}" != "Xinca.dat" ] ) ; then
@@ -677,7 +683,7 @@
       eval ${comp}_PROC_OMP=1
       eval ${comp}_PROC_NOD=1
+      eval ${comp}_PROC_DEP=1
 
       eval NbElts=\${#config_Executable_${comp}[@]}
-
       if [ ${NbElts} -gt 2 ] ; then
         #
@@ -710,4 +716,11 @@
             OK_PARA_MPI=true
             ;;
+            *[dD][eE][pP]*)
+            # Read DEP parameter for composante
+            eval ${comp}_PROC_DEP=$( echo ${tempvar} | tr '[a-z]' '[A-Z]' | sed -e "s/DEP//" )
+            ;;
+            *[dD][eE][dD][iI][cC][aA][tT][eE][dD]*)
+            # Read DEDICATED parameter for composante
+            eval ${comp}_OK_DEDICATED=1
           esac
           (( i = i + 1 ))
@@ -736,8 +749,15 @@
 	    fi
       fi
+      if ( [ ${comp}_OK_DEDICATED -eq 1 ] && [ "${comp}" != "IOS" ] ) ; then
+            IGCM_debug_Print 2 "Error using DEDICATED parameter !!!"
+            IGCM_debug_Exit "DEDICATED parameter is only available for IOS component "
+            IGCM_debug_Exit "Check your config.card. Exit now"
+            IGCM_debug_Verif_Exit
+      fi
 
       eval tempvarMPI=\${${comp}_PROC_MPI}
       eval tempvarNOD=\${${comp}_PROC_NOD}
       eval tempvarOMP=\${${comp}_PROC_OMP}
+      eval tempvarDEP=\${${comp}_PROC_DEP}
 
       # set OMP mode if more than 1 OMP thread.
@@ -751,5 +771,5 @@
 	  (( coreNumber = coreNumber + tempvarNOD * NB_CORE_PER_NODE ))
       else
-	  (( coreNumber = coreNumber + tempvarMPI * tempvarNOD * tempvarOMP ))
+	  (( coreNumber = coreNumber + tempvarMPI * tempvarNOD * tempvarOMP * tempvarDEP ))
       fi
       # SUM UP NUMBER OF MPI TASKS
Index: trunk/libIGCM/libIGCM_sys/libIGCM_sys_irene-amd.ksh
===================================================================
--- trunk/libIGCM/libIGCM_sys/libIGCM_sys_irene-amd.ksh	(revision 1527)
+++ trunk/libIGCM/libIGCM_sys/libIGCM_sys_irene-amd.ksh	(revision 1528)
@@ -1149,9 +1149,17 @@
   file=$1
 
+   # In case of use of DEDICATED option XIOS servers, do not share xios nodes with xios clients
+   # Compute the number of core to add to force the use of a new node for xios servers
+   if [ ${IOS_OK_DEDICATED} -eq 1 ] ; then
+      (( current_core_noxios = coreNumber - IOS_PROC_MPI * IOS_PROC_OMP * IOS_PROC_DEP ))
+      (( first_comp_proc_dep_loc = 1 + NB_CORE_PER_NODE - current_core_noxios % NB_CORE_PER_NODE ))
+      (( second_comp_proc_mpi_loc = IOS_PROC_MPI - 1 ))
+      (( coreNumber = current_core_noxios + first_comp_proc_dep_loc + second_comp_proc_mpi_loc * IOS_PROC_OMP * IOS_PROC_DEP ))
+   fi
+
   if [ ${executionType} -eq 1 ] ; then
     # MPMD + MPI
     sed -e "/::openMPthreads::/d"                  \
         -e "s/::JobNumProcTot::/${coreNumber}/"    \
-        -e "/#MSUB -x/d"                           \
       ${file} > ${file}.tmp
 
@@ -1270,7 +1278,34 @@
           eval comp_proc_mpi_loc=\${${comp}_PROC_MPI}
           eval comp_proc_omp_loc=\${${comp}_PROC_OMP}
-          echo "${comp_proc_mpi_loc} ./${ExeNameOut}" >> run_file
+          eval comp_proc_dep_loc=\${${comp}_PROC_DEP}
+
+          # In case of use of DEDICATED option XIOS servers, do not share xios nodes with xios clients
+          # Compute the number of core to add to force the use of a new node for xios servers
+         if ( [ "X${ExeNameOut}" != X\"\" ] &&  [ "X${comp}" = "XIOS" ] ) ; then
+            if [ ${IOS_OK_DEDICATED} -eq 1 ] ; then
+              (( current_core_noxios = coreNumber - comp_proc_mpi_loc * comp_proc_dep_loc ))
+              (( first_comp_proc_dep_loc = 1 + NB_CORE_PER_NODE - current_core_noxios % NB_CORE_PER_NODE ))
+              (( second_comp_proc_mpi_loc = comp_proc_mpi_loc - 1 ))
+              if [ ${comp_proc_dep_loc} -lt ${first_comp_proc_dep_loc} ] ; then
+                 echo "1-${first_comp_proc_dep_loc} ./${ExeNameOut}" >>run_file
+                 if [ ${comp_proc_mpi_loc} -gt 1 ] ; then
+                    echo "${second_comp_proc_mpi_loc}-${comp_proc_dep_loc} ./${ExeNameOut}" >>run_file
+                 fi
+              else
+                 echo "${comp_proc_mpi_loc}-${comp_proc_dep_loc} ./${ExeNameOut}" >>run_file
+              fi
+           else
+              echo "${comp_proc_mpi_loc}-${comp_proc_dep_loc} ./${ExeNameOut}" >>run_file
+           fi
+         else
+          echo "${comp_proc_mpi_loc}-${comp_proc_dep_loc} ./${ExeNameOut}" >>run_file
+         fi
+
+
         fi
       done
+
+      ## module advised by TGCC (instead of 2 variables)
+      module load feature/bridge/heterogenous_mpmd
 
       EXECUTION="${HOST_MPIRUN_COMMAND} -f ./run_file"
@@ -1432,4 +1467,8 @@
           eval comp_proc_mpi_loc=\${${comp}_PROC_MPI}
           eval comp_proc_omp_loc=\${${comp}_PROC_OMP}
+          eval comp_proc_dep_loc=\${${comp}_PROC_DEP}
+
+          # Compute number of cores per process
+          (( comp_proc_omp_dep_loc = comp_proc_omp_loc * comp_proc_dep_loc )) 
 
           # Build script files
@@ -1467,5 +1506,25 @@
           # Complete run_file
 
-          echo "${comp_proc_mpi_loc}-${comp_proc_omp_loc} env OMP_NUM_THREADS=${comp_proc_omp_loc} ./script_${ExeNameOut}.ksh " >>run_file
+          # In case of use of DEDICATED option XIOS servers, do not share xios nodes with xios clients
+          # Compute the number of core to add to force the use of a new node for xios servers
+         if ( [ "X${ExeNameOut}" != X\"\" ] &&  [ "X${comp}" = "XIOS" ] ) ; then
+            if [ ${IOS_OK_DEDICATED} -eq 1 ] ; then
+              (( current_core_noxios = coreNumber - comp_proc_mpi_loc * comp_proc_omp_dep_loc )) 
+              (( first_comp_proc_dep_loc = 1 + NB_CORE_PER_NODE - current_core_noxios % NB_CORE_PER_NODE ))
+              (( second_comp_proc_mpi_loc = comp_proc_mpi_loc - 1 ))
+              if [ ${comp_proc_omp_dep_loc} -lt ${first_comp_proc_dep_loc} ] ; then 
+                 echo "1-${first_comp_proc_dep_loc} env OMP_NUM_THREADS=1 ./script_${ExeNameOut}.ksh " >>run_file
+                  if [ ${comp_proc_mpi_loc} -gt 1 ] ; then
+                    echo "${second_comp_proc_mpi_loc}-${comp_proc_omp_dep_loc} ./${ExeNameOut}" >>run_file
+                  fi
+              else
+                 echo "${comp_proc_mpi_loc}-${comp_proc_omp_dep_loc} env OMP_NUM_THREADS=1 ./script_${ExeNameOut}.ksh " >>run_file
+              fi
+           else
+              echo "${comp_proc_mpi_loc}-${comp_proc_omp_dep_loc} env OMP_NUM_THREADS=1 ./script_${ExeNameOut}.ksh " >>run_file
+           fi
+         else
+          echo "${comp_proc_mpi_loc}-${comp_proc_omp_dep_loc} env OMP_NUM_THREADS=${comp_proc_omp_loc} ./script_${ExeNameOut}.ksh " >>run_file
+         fi
 
         fi
